private static void MonthlyCalculation(SpreadsheetRange ssRng, string cbtt, string pcode) { var db = Database.DB(); CalculationSeries series = db.GetCalculationSeries(cbtt, pcode, TimeInterval.Monthly); if (series == null) { return; } var rng = ssRng.SelectedDateRange; series.Calculate(rng.DateTime1.FirstOfMonth(), rng.DateTime2.EndOfMonth()); series.Name = "new"; var old = ssRng.SelectionToMonthlySeries(false); old.Name = "old"; var diff = series - old; diff.Name = "Difference"; var list = new SeriesList(); list.Add(series); list.Add(old); list.Add(diff); var dlg = new MonthlyCalculationPreview(); dlg.DataSource = list.ToDataTable(true); if (dlg.ShowDialog() == DialogResult.OK) { // insert into range.. ssRng.InsertSeriesValues(series, dlg.SelectedFlag); } }
private static void DailyCalculation(SpreadsheetRange ssRng, string cbtt, string pcode, int columnOffset) { var db = Database.DB(); var series = db.GetCalculationSeries(cbtt, pcode, TimeInterval.Daily); if (series == null) { return; } Reclamation.TimeSeries.Parser.SeriesExpressionParser.Debug = true; var rng = ssRng.SelectedDateRange; series.Calculate(rng.DateTime1, rng.DateTime2); if (ssRng.RowCount != series.Count) { MessageBox.Show(series.Messages.ToString(50), "Error with Calculation"); return; } ssRng.InsertSeriesValues(series, "", columnOffset); }
/// <summary> /// If Decodes software is installed locally /// DECODE raw data for a single parameter /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void AdvancedRawData_Click(object sender, EventArgs e) { // determine siteid (cbtt) and pcode SpreadsheetRange r = new SpreadsheetRange(wbView.RangeSelection); var col = r.SelectedRangeColumnNames[0]; var tokens = col.Trim().Split(' '); if (tokens.Length != 2) { return; } var cbtt = tokens[0].ToLower(); var pcode = tokens[1].ToLower(); // find date range that is selected. var t = r.SelectedDateRange; // account for timezone offset and transmission time delay // summer UTC-6h // winter UTC-7h var t1 = t.DateTime1.AddHours(-24); var t2 = t.DateTime2.AddHours(+24); var svr = Database.GetServer("hydromet_opendcs"); if (svr == null) { MessageBox.Show("Error connecting to the database. Please check your password"); return; } var fn = FileUtility.GetSimpleTempFileName(".txt"); var log = FileUtility.GetSimpleTempFileName(".txt"); // run DECODES to create output file DecodesUtility.RunDecodesRoutingSpec(svr, "hydromet-tools", t1, t2, cbtt, fn, log); //Don't Go Karl! foreach (var item in File.ReadAllLines(log)) { Logger.WriteLine(item); } foreach (var item in File.ReadAllLines(fn)) { Logger.WriteLine(item); } TextFile tf = new TextFile(fn); if (!HydrometInstantSeries.IsValidDMS3(tf)) { MessageBox.Show("Error reading Decodes output"); return; } // Read Decodes output var sl = HydrometInstantSeries.HydrometDMS3DataToSeriesList(tf); // filter by cbtt and pcode var s = sl.Find(x => x.Table.TableName == "instant_" + cbtt + "_" + pcode); if (s == null) { Logger.WriteLine("Error: could not find decoded data for " + cbtt + "/" + pcode); return; } // use dataview for sorted data // filter by date range Series decoded = s.Clone(); for (int i = 0; i < s.Count; i++) { var pt = s[i]; if (pt.DateTime >= t.DateTime1 && pt.DateTime <= t.DateTime2) { decoded.Add(pt); } } // put values into hydromet tools r.InsertSeriesValues(decoded); }