示例#1
0
        GetDataSetsConverter()
        {
            Func <DateTime?, DateTime?, DateRangeGranulation?, Task <IEnumerable <IDataset> > > fnc =
                async(fromDate, toDate, granulation) =>
            {
                var data = await LoadData(fromDate, toDate, granulation);

                var lineDataSets = new List <LineDataset <TimePoint> >
                {
                    new()
                    {
                        Label           = "Average water flow",
                        BackgroundColor = ColorUtil.FromDrawingColor(Color.Green),
                        BorderColor     = ColorUtil.FromDrawingColor(Color.Green),
                        Fill            = FillingMode.Disabled
                    },
                    new()
                    {
                        Label           = "Maximum water flow",
                        BackgroundColor = ColorUtil.FromDrawingColor(Color.Red),
                        BorderColor     = ColorUtil.FromDrawingColor(Color.Red),
                        Fill            = FillingMode.Disabled
                    },
                    new()
                    {
                        Label           = "Minimum water flow",
                        BackgroundColor = ColorUtil.FromDrawingColor(Color.Blue),
                        BorderColor     = ColorUtil.FromDrawingColor(Color.Blue),
                        Fill            = FillingMode.Disabled
                    }
                };

                var barDataSet = new BarDataset <TimePoint>
                {
                    Label           = "Total water volume",
                    BackgroundColor = ColorUtil.FromDrawingColor(Color.Orange),
                    BorderColor     = ColorUtil.FromDrawingColor(Color.Orange),
                    YAxisId         = TOTAL_WATER_VOLUME_Y_AXIS_ID
                };

                foreach (var irrigationDataVm in data)
                {
                    lineDataSets[0]
                    .Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.AverageWaterFlow));
                    lineDataSets[1].Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.MaxWaterFlow));
                    lineDataSets[2].Add(new TimePoint(irrigationDataVm.Timestamp, irrigationDataVm.MinWaterFlow));
                    barDataSet.Add(new TimePoint(irrigationDataVm.Timestamp,
                                                 irrigationDataVm.TotalWaterVolume));
                }

                return(lineDataSets.Select(x => x as IDataset).Append(barDataSet));
            };

            return(fnc);
        }
        private async Task GenerateBarChart()
        {
            Config.Data.Labels.Clear();
            Config.Data.Datasets.Clear();

            IDataset <int> expenseDataSet = new BarDataset <int>()
            {
                Label           = "Expenses",
                BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(128, Color.Red)),
                BorderColor     = ColorUtil.FromDrawingColor(Color.Red),
                BorderWidth     = 1
            };

            IDataset <int> incomeDataSet = new BarDataset <int>()
            {
                Label           = "Incomes",
                BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(128, Color.Green)),
                BorderColor     = ColorUtil.FromDrawingColor(Color.Green),
                BorderWidth     = 1
            };

            for (int i = 0; i < Constants.MonthsInYear; i++)
            {
                int expenseAmount = (int)Expenses.Where(e => e.DateTime.Month == i).Sum(e => e.Amount);
                expenseDataSet.Add(expenseAmount);

                int incomeAmount = (int)Incomes.Where(e => e.DateTime.Month == i).Sum(e => e.Amount);
                incomeDataSet.Add(incomeAmount);
            }

            ((List <string>)Config.Data.Labels).AddRange(Constants.Months);
            Config.Data.Datasets.Add(expenseDataSet);
            Config.Data.Datasets.Add(incomeDataSet);

            await Chart.Update();
        }
示例#3
0
        public static Dictionary <DataPointType, BarConfig> GetDataSets(AppState appState)
        {
            Dictionary <DataPointType, BarConfig> dataSets = new Dictionary <DataPointType, BarConfig>();

            CreateConfigs(dataSets);

            SortedDictionary <int, Dictionary <string, Dictionary <DataPointType, double> > > DataPoints = new SortedDictionary <int, Dictionary <string, Dictionary <DataPointType, double> > >();

            foreach (var item in appState.SimulationHistories)
            {
                double totalDeliveryTime     = 0;
                double totalDeliveryDistance = 0;
                double totalDistance         = 0;
                double totalTime             = 0;
                double totalCost             = 0;

                double avgDeliveryTime     = 0;
                double avgDeliveryDistance = 0;
                double avgDeliveryCost     = 0;

                foreach (var order in item.Steps.Last().ClosedOrders)
                {
                    totalDeliveryTime     += order.DeliveryTime ?? 0;
                    totalDeliveryDistance += order.DeliveryDistance ?? 0;
                }
                foreach (var veh in item.Steps.Last().Vehicles)
                {
                    totalDistance += veh.TotalTravelDistance;
                    totalTime     += veh.TotalTravelTime;
                }

                totalCost = item.Parameters.VehicleTemplate.PurchasingCost * item.Parameters.NumberOfVehicles
                            + totalDistance * item.Parameters.VehicleTemplate.CostPerKm
                            + totalTime * item.Parameters.VehicleTemplate.CostPerHour / 60 / 60;

                avgDeliveryTime = totalDeliveryTime / item.Parameters.NumberOfOrders;
                avgDeliveryCost = totalCost / item.Parameters.NumberOfOrders;

                if (!DataPoints.ContainsKey(item.Parameters.NumberOfVehicles))
                {
                    DataPoints.Add(item.Parameters.NumberOfVehicles, new Dictionary <string, Dictionary <DataPointType, double> >());
                }
                if (!DataPoints[item.Parameters.NumberOfVehicles].ContainsKey(item.Parameters.VehicleTemplate.Name))
                {
                    DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name] = new Dictionary <DataPointType, double>();
                }
                DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name][DataPointType.avgDeliveryTime] = avgDeliveryTime;
                DataPoints[item.Parameters.NumberOfVehicles][item.Parameters.VehicleTemplate.Name][DataPointType.avgDeliveryCost] = avgDeliveryCost;
            }

            var vehicle_types = new List <string>();

            foreach (var veh_number in DataPoints)
            {
                foreach (var veh in veh_number.Value)
                {
                    if (!vehicle_types.Contains(veh.Key))
                    {
                        vehicle_types.Add(veh.Key);
                        dataSets[DataPointType.avgDeliveryTime].Data.Labels.Add(veh.Key);
                        dataSets[DataPointType.avgDeliveryCost].Data.Labels.Add(veh.Key);
                    }
                }
            }

            Random r = new Random();

            foreach (var item in DataPoints)
            {
                BarDataset <double> dataSetAvgDelTime = new BarDataset <double>()
                {
                    BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))),
                    Label           = $"{item.Key} vehicle(s)"
                };
                BarDataset <double> dataSetAvgDeliveryCost = new BarDataset <double>()
                {
                    BackgroundColor = ColorUtil.FromDrawingColor(Color.FromArgb(r.Next(0, 255), r.Next(0, 255), r.Next(0, 255))),
                    Label           = $"{item.Key} vehicle(s)"
                };
                foreach (var veh in vehicle_types)
                {
                    if (item.Value.ContainsKey(veh))
                    {
                        dataSetAvgDelTime.Add(item.Value[veh][DataPointType.avgDeliveryTime]);
                        dataSetAvgDeliveryCost.Add(item.Value[veh][DataPointType.avgDeliveryCost]);
                    }
                    else
                    {
                        dataSetAvgDelTime.Add(0);
                        dataSetAvgDeliveryCost.Add(0);
                    }
                }
                dataSets[DataPointType.avgDeliveryTime].Data.Datasets.Add(dataSetAvgDelTime);
                dataSets[DataPointType.avgDeliveryCost].Data.Datasets.Add(dataSetAvgDeliveryCost);
            }
            return(dataSets);
        }
        public async Task <BarConfig> GetDailyReports()
        {
            var BarConfig = new BarConfig();

            BarConfig.Options = new BarOptions
            {
                Legend = new Legend
                {
                    Display = false
                },

                Responsive = true,

                MaintainAspectRatio = false,

                Tooltips = new Tooltips
                {
                    Enabled = true,

                    Mode = InteractionMode.Index,

                    Intersect = false,

                    BorderWidth = 1,

                    BorderColor = "rgba(0, 0, 0, 0.12)",

                    BackgroundColor = "#ffffff",

                    TitleFontColor = "rgba(0, 0, 0, 0.87)",

                    BodyFontColor = "rgba(0, 0, 0, 0.54)",

                    FooterFontColor = "rgba(0, 0, 0, 0.54)"
                },

                Scales = new BarScales
                {
                    XAxes = new List <CartesianAxis>
                    {
                        new BarCategoryAxis
                        {
                            BarThickness = 12,

                            MaxBarThickness = 10,

                            BarPercentage = 0.5,

                            CategoryPercentage = 0.5,

                            // Ticks = new CategoryTicks
                            // {
                            //     FontColor = "rgba(0, 0, 0, 0.54)"
                            // },

                            GridLines = new GridLines
                            {
                                Display = false,

                                DrawBorder = false,

                                OffsetGridLines = true
                            },

                            Offset = true,

                            OffsetGridLines = true
                        }
                    },

                    YAxes = new List <CartesianAxis>
                    {
                        new BarLinearCartesianAxis
                        {
                            BarThickness = 12,

                            MaxBarThickness = 10,

                            BarPercentage = 0.5,

                            CategoryPercentage = 0.5,

                            Ticks = new LinearCartesianTicks {
                                BeginAtZero = true,

                                Min = 0

                                      // FontColor = "rgba(0, 0, 0, 0.54)"
                            },

                            GridLines = new GridLines
                            {
                                BorderDash = new double [] { 2 },

                                DrawBorder = false,

                                Color = "rgba(0, 0, 0, 0.12)",

                                ZeroLineBorderDash = new int [] { 2 },

                                ZeroLineBorderDashOffset = 2,

                                ZeroLineColor = "rgba(0, 0, 0, 0.12)"
                            }
                        }
                    }
                }
            };
            //Get grouped surveys by dates
            var bars    = new List <BarDataset <DoubleWrapper> >();
            var reports = await accountDbContext.AccountSurveys
                          .ToListAsync();

            //Grouped by dates
            var groupedDates = reports.OrderBy(p => p.SurveyDate)
                               .GroupBy(p => p.SurveyDate.ToString("MMMM dd"))
                               .Select(g => new
            {
                g.Key,
                UserSurveys = g.Select(survey => new AccountSurvey
                {
                    UserSurveyStatus = survey.UserSurveyStatus,
                    SurveyDate       = survey.SurveyDate
                })
            });
            var lowBarSet = new BarDataset <DoubleWrapper>
            {
                Label = "Low",

                BackgroundColor = "#0f812e"
            };
            var midBarSet = new BarDataset <DoubleWrapper>
            {
                Label = "Mid",

                BackgroundColor = "#f4be14"
            };
            var HighBarSet = new BarDataset <DoubleWrapper>
            {
                Label = "High",

                BackgroundColor = "#FF0000"
            };

            //Creates bottom labels by using dates
            foreach (var groupDate in groupedDates)
            {
                //Add data label
                BarConfig.Data.Labels.Add(groupDate.Key);

                var _survey = groupDate.UserSurveys
                              .OrderByDescending(x => x.UserSurveyStatus)
                              .GroupBy(x => x.UserSurveyStatus)
                              .Select(g => new
                {
                    Key   = g.Key,
                    Items = g.Select(item => new AccountSurvey
                    {
                        UserSurveyStatus = item.UserSurveyStatus,
                        AccountSurveyId  = item.AccountSurveyId
                    })
                });

                lowBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Low) == null ? 0 : _survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Low).Items.Count());
                midBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Midium) == null ? 0 :_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.Midium).Items.Count());
                HighBarSet.Add(_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.High) == null ? 0 :_survey.FirstOrDefault(p => p.Key == UserSurveyStatus.High).Items.Count());
            }
            BarConfig.Data.Datasets.AddRange(new[] { lowBarSet, midBarSet, HighBarSet });
            return(BarConfig);
        }