Esempio n. 1
0
        ///<inheritdoc />
        public void RecalculateGroupCells(Sheet sheet, RecalculateGroupCellsParameters parameters)
        {
            var groupEditColumns = GroupEditColumns(sheet);

            if (groupEditColumns.IsEmpty())
            {
                return;
            }
            var hierarchyItems = sheet.GetHierarchyItems();

            if (hierarchyItems.IsEmpty())
            {
                return;
            }
            EntityCollection periods = GetPeriods(sheet, groupEditColumns);

            if (periods.IsEmpty())
            {
                return;
            }
            var periodIds = periods.Select(p => p.GetTypedColumnValue <Guid>("PeriodId"));

            MetaData = new ForecastMetaData {
                Sheet   = sheet,
                Columns = groupEditColumns,
                HierarchySettingItems = hierarchyItems,
                PeriodIds             = periodIds,
                ReferenceEntityColumn = sheet.GetEntityReferenceColumn(UserConnection)
            };
            EntityCollection referenceEntities = GetItemsReferenceEntities(parameters.RecordIds);
            var groups = GroupEntitiesByHierarchy(referenceEntities);

            RecalculateByGroups(groups, parameters.ExcludedRecords);
        }
        private void Calculate(object sender, RoutedEventArgs e)
        {
            if (!UiServices.IsBusy)
            {
                int forecastTimeIndex = int.Parse(txtForecastColTimeIndex.Text);
                int forecastValueIndex = int.Parse(txtForecastColValueIndex.Text);
                int offsetHoursAhead = int.Parse(txtHoursAheadOffset.Text);
                char forecastSep = txtForecastColSeparator.Text[0];

                int observationTimeIndex = int.Parse(txtObservationColTimeIndex.Text);
                int observationValueIndex = int.Parse(txtObservationColValueIndex.Text);
                double normValue = double.Parse(txtNormalizationValue.Text, NumberStyles.Float, CultureInfo.InvariantCulture);
                char observationSep = txtObservationColSeparator.Text[0];

                string fcastUnitType = ((ComboBoxItem) forecastUnitType.SelectedItem).Content.ToString();
                string obsUnitType = ((ComboBoxItem) obsevationsUnitType.SelectedItem).Content.ToString();

                string filter = "*.csv";
                string forecastPath = txtForecastPath.Text;
                int index = forecastPath.IndexOf('*');
                if (index != -1)
                {
                    filter = forecastPath.Substring(index);
                    forecastPath = forecastPath.Substring(0, index);
                }
                string observationFilePath = txtObsevationsPath.Text;

                var scope = GetScope();
                bool hasData = Directory.Exists(forecastPath) && File.Exists(observationFilePath);
                if (hasData)
                {
                    try
                    {
                        var fmd = new ForecastMetaData(forecastTimeIndex, forecastValueIndex, offsetHoursAhead, forecastSep, fcastUnitType, filter);
                        var omd = new ObservationMetaData(observationTimeIndex, observationValueIndex, observationSep, obsUnitType, normValue);

                        SetBusy(true);

                        bw = new BackgroundWorker();
                        bw.DoWork += BwCalculatePerformance;
                        bw.RunWorkerCompleted += BwCalculatePerformanceCompleted;

                        dynamic args = new
                        {
                            Fmd = fmd,
                            ForecastPath = forecastPath,
                            Omd = omd,
                            ObservationFilePath = observationFilePath,
                            Scope = scope.ToArray(),
                            IncludeNegObs = includeNegObs,
                            UseFixedHours = useFixedHours,
                            SiteId = siteId
                        };
                        bw.RunWorkerAsync(args);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error");
                        Console.WriteLine(ex.StackTrace);
                    }
                }
                else if (File.Exists(forecastPath))
                {
                    try
                    {
                        var fmd = new ForecastMetaData(forecastTimeIndex, forecastValueIndex, offsetHoursAhead, forecastSep, fcastUnitType, filter);
                        var omd = new ObservationMetaData(observationTimeIndex, observationValueIndex, observationSep, obsUnitType, normValue);

                        bw = new BackgroundWorker();
                        bw.DoWork += BwCalculatePerformance;
                        bw.RunWorkerCompleted += BwCalculatePerformanceCompleted;

                        dynamic args = new
                        {
                            Fmd = fmd,
                            ForecastPath = forecastPath,
                            Omd = omd,
                            ObservationFilePath = observationFilePath,
                            Scope = scope.ToArray(),
                            IncludeNegObs = includeNegObs,
                            UseFixedHours = useFixedHours,
                            SiteId = siteId
                        };
                        bw.RunWorkerAsync(args);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error");
                        Console.WriteLine(ex.StackTrace);
                    }
                }
                else
                    MessageBox.Show(
                        "The forecasts path must point to a parent folder \rcontaining forecasts, while the observations file must \rpoint to an exact file containing a time series \rof observations.",
                        "Error");
            }
        }