Ejemplo n.º 1
0
        private void checkConsistencyToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // Check stocks in Database
            WeeklyStatistics stat = new WeeklyStatistics();

            stat.Calc(History_);

            stat.PrintResult(LogMgr.Logger);
        }
Ejemplo n.º 2
0
        /// <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);
            }
        }