private void checkConsistencyToolStripMenuItem_Click(object sender, EventArgs e) { // Check stocks in Database WeeklyStatistics stat = new WeeklyStatistics(); stat.Calc(History_); stat.PrintResult(LogMgr.Logger); }
/// <summary> /// Get weekly statistics object from database /// </summary> /// <param name="start">start date for statistic</param> /// <param name="end">end date for statistic</param> /// <param name="productID">Id of the product</param> /// <returns>A weekly statistics object</returns> private async Task <WeeklyStatistics> GetWeeklyStatistics(DateTime start, DateTime end, int productID) { WeeklyStatistics statistics; //return final object List <MetricsEntity> entities; //metrics entities which will be taken from db double[][] metrics; //future metrics for weekly statistics DateTime currentDate; //holds current date int stepMetrics; //metricses in each step int currentStep; //current step int steps; //days specified in the week period try { //getting all metrics entities from db based on start and end dates entities = await repository.GetMetricsForTimePeriod(start, end, productID); if (entities.Count > 0) { //initializing metrics as jagged array metrics = new double[7][]; for (int i = 0; i < metrics.Length; i++) { metrics[i] = new double[4]; } //date for comparison of current day and month of entities from db //based on the same day metrics entities will be loaded to temp currentDate = start; //initializing steps stepMetrics = 0; currentStep = 0; steps = (end - start).Days + 1; while (currentStep < steps) { for (int i = 0; i < entities.Count; i++) { if (entities[i].LastUpdated.Value.Day == currentDate.Day && entities[i].LastUpdated.Value.Month == currentDate.Month) { //adding metrics values metrics[currentStep][0] += entities[i].Humidity; metrics[currentStep][1] += entities[i].Temperature; metrics[currentStep][2] += entities[i].Noise; metrics[currentStep][3] += entities[i].CO2; stepMetrics++; } } //counting and rounding average metricsvalues metrics[currentStep][0] = Math.Round((metrics[currentStep][0] / stepMetrics), 2); metrics[currentStep][1] = Math.Round((metrics[currentStep][1] / stepMetrics), 2); metrics[currentStep][2] = Math.Round((metrics[currentStep][2] / stepMetrics), 2); metrics[currentStep][3] = Math.Round((metrics[currentStep][3] / stepMetrics), 2); //setting step metrics back to 0 //incrementing currentStep //incrementing currentDate stepMetrics = 0; currentStep++; currentDate = currentDate.AddDays(1); } //giving statistics necessary values statistics = new WeeklyStatistics { StartDate = start, EndDate = end, Year = start.Year }; statistics.ProductID = entities[0].ProductID; statistics.Metrics = metrics; statistics.WeekNo = new GregorianCalendar(). GetWeekOfYear(start, CalendarWeekRule.FirstDay, DayOfWeek.Monday); return(statistics); } else { return(null); } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(e.StackTrace); return(null); } }