///<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"); } }