Пример #1
0
        private void CreateRelativeCapitalUsageByStrategyChartModel()
        {
            var model = new PlotModel();

            var xAxis = new OxyPlot.Axes.DateTimeAxis
            {
                Position = OxyPlot.Axes.AxisPosition.Bottom,
                StringFormat = "yyyy-MM-dd"
            };
            model.Axes.Add(xAxis);

            var yAxis = new OxyPlot.Axes.LinearAxis
            {
                Position = OxyPlot.Axes.AxisPosition.Left,
                StringFormat = "p0",
                MajorGridlineStyle = LineStyle.Dash
            };
            model.Axes.Add(yAxis);

            var capUsageTmpSum = Enumerable.Range(0, Data.RelativeCapitalUsageByStrategy.Rows.Count).Select(x => 0.0).ToList();

            foreach (DataColumn column in Data.RelativeCapitalUsageByStrategy.Columns)
            {
                if (column.ColumnName == "date") continue;

                DataColumn column1 = column;
                List<double> sum = capUsageTmpSum;
                var series = new OxyPlot.Series.AreaSeries
                {
                    ItemsSource = Data
                    .RelativeCapitalUsageByStrategy
                    .Select((x, i) =>
                        new
                        {
                            X = x.date,
                            Y = sum[i],
                            Y2 = sum[i] + x.Field<double>(column1.ColumnName),
                        }),

                    Title = column.ColumnName,
                    CanTrackerInterpolatePoints = false,
                    TrackerFormatString = "Strategy: " + column.ColumnName + @" Date: {2:yyyy-MM-dd} Capital Usage: {4:p1}",
                    DataFieldX = "X",
                    DataFieldX2 = "X",
                    DataFieldY = "Y",
                    DataFieldY2 = "Y2",
                    MarkerType = MarkerType.None,
                    StrokeThickness = 1
                };

                capUsageTmpSum = Data.RelativeCapitalUsageByStrategy.Select((x, i) => x.Field<double>(column1.ColumnName) + capUsageTmpSum[i]).ToList();

                model.Series.Add(series);
            }

            model.LegendPosition = LegendPosition.BottomCenter;
            model.LegendOrientation = LegendOrientation.Horizontal;
            model.LegendPlacement = LegendPlacement.Outside;

            RelativeCapitalUsageByStrategyModel = model;
        }
Пример #2
0
        private void CreateRelativeCapitalUsageByStrategyChartModel()
        {
            var model = new PlotModel();

            var xAxis = new OxyPlot.Axes.DateTimeAxis
            {
                Position     = OxyPlot.Axes.AxisPosition.Bottom,
                StringFormat = "yyyy-MM-dd"
            };

            model.Axes.Add(xAxis);

            var yAxis = new OxyPlot.Axes.LinearAxis
            {
                Position           = OxyPlot.Axes.AxisPosition.Left,
                StringFormat       = "p0",
                MajorGridlineStyle = LineStyle.Dash
            };

            model.Axes.Add(yAxis);

            var capUsageTmpSum = Enumerable.Range(0, Data.RelativeCapitalUsageByStrategy.Rows.Count).Select(x => 0.0).ToList();

            foreach (DataColumn column in Data.RelativeCapitalUsageByStrategy.Columns)
            {
                if (column.ColumnName == "date")
                {
                    continue;
                }

                DataColumn    column1 = column;
                List <double> sum     = capUsageTmpSum;
                var           series  = new OxyPlot.Series.AreaSeries
                {
                    ItemsSource = Data
                                  .RelativeCapitalUsageByStrategy
                                  .Select((x, i) =>
                                          new
                    {
                        X  = x.date,
                        Y  = sum[i],
                        Y2 = sum[i] + x.Field <double>(column1.ColumnName),
                    }),

                    Title = column.ColumnName,
                    CanTrackerInterpolatePoints = false,
                    TrackerFormatString         = "Strategy: " + column.ColumnName + @" Date: {2:yyyy-MM-dd} Capital Usage: {4:p1}",
                    DataFieldX      = "X",
                    DataFieldX2     = "X",
                    DataFieldY      = "Y",
                    DataFieldY2     = "Y2",
                    MarkerType      = MarkerType.None,
                    StrokeThickness = 1
                };

                capUsageTmpSum = Data.RelativeCapitalUsageByStrategy.Select((x, i) => x.Field <double>(column1.ColumnName) + capUsageTmpSum[i]).ToList();

                model.Series.Add(series);
            }

            model.LegendPosition    = LegendPosition.BottomCenter;
            model.LegendOrientation = LegendOrientation.Horizontal;
            model.LegendPlacement   = LegendPlacement.Outside;

            RelativeCapitalUsageByStrategyModel = model;
        }
Пример #3
0
        private void LoadChartData(WhlSKU Sku)
        {
            if (Sku != null)
            {
                PlotModel PlotArea   = new PlotModel();
                var       endDate    = DateTime.Now.ToOADate();
                var       startDate  = DateTime.Now.AddMonths(-6).ToOADate();
                var       bottomAxis = new DateTimeAxis
                {
                    Position          = AxisPosition.Bottom,
                    Maximum           = Convert.ToDouble(endDate),
                    AbsoluteMaximum   = Convert.ToDouble(endDate),
                    Title             = "Date",
                    StringFormat      = "dd/M",
                    MinorIntervalType = DateTimeIntervalType.Days
                };

                var leftAxis = new LinearAxis
                {
                    Position        = AxisPosition.Left,
                    Minimum         = 0,
                    AbsoluteMinimum = 0,
                    Title           = "Sales"
                };
                var rightAxis = new OxyPlot.Axes.LinearAxis();
                rightAxis.Position        = AxisPosition.Right;
                rightAxis.Minimum         = 0;
                rightAxis.AbsoluteMinimum = 0;
                rightAxis.Maximum         = 5000;
                rightAxis.Title           = "Stock";

                var query               = @"SELECT a.shortSku, a.stockDate, a.Stocklevel, a.StockMinimum, b.maintotal 
                          FROM whldata.stock_history as a
                            LEFT JOIN(SELECT /*top (999999999999)*/ a.orderdate, a.shortsku, sum(a.total)as ""maintotal"" FROM
                            (SELECT /*top (999999999999)*/ orderdate, sku, SUBSTRING(sku, 0, 8) as ""shortsku"", sum(salequantity) as ""sales"", CAST(SUBSTRING(sku, 8, 4) as unsigned int) as ""packsize"", sum(salequantity * CAST(SUBSTRING(sku, 8, 4) as unsigned int)) as 'total'
                             FROM whldata.newsales_raw
                             WHERE sku LIKE '" + Sku.ShortSku + @"%'
                             group by sku, orderDate
                             order by orderdate) as a
                            GROUP BY orderdate, shortsku
                            ORDER BY orderDate) as b
                            on b.shortsku = SUBSTRING(a.shortSku, 0, 8) AND b.orderDate = a.stockDate
                            WHERE a.shortsku = '" + Sku.SKU + @"'
                            ORDER BY StockDate ASC";
                var queryDict           = MySQL.SelectData(query) as ArrayList;
                var stockHistoryPoints  = new List <DataPoint>();
                var salesHistoryPoints  = new List <DataPoint>();
                var stockHistoryPoints2 = new List <DataPoint>();
                var salesHistoryPoints2 = new List <DataPoint>();

                var salesSeries = new LineSeries();
                var stockSeries = new LineSeries();

                OxyPlot.Series.AreaSeries StockAreaSeries = new OxyPlot.Series.AreaSeries();
                OxyPlot.Series.AreaSeries SalesAreaSeries = new OxyPlot.Series.AreaSeries();
                var MaxStock = 0;
                var MaxSales = 0;
                try
                {
                    bottomAxis.AbsoluteMinimum =
                        Convert.ToDouble(DateTime.Parse((queryDict[0] as ArrayList)[1].ToString()).ToOADate());
                    var arrayList = queryDict[0] as ArrayList;
                    if (arrayList != null)
                    {
                        bottomAxis.Minimum = Convert.ToDouble(
                            DateTime.Parse(arrayList[1].ToString()).ToOADate());
                    }
                }
                catch (Exception)
                {
                    bottomAxis.AbsoluteMinimum = Convert.ToDouble(startDate);
                    bottomAxis.Minimum         = Convert.ToDouble(startDate);
                }

                foreach (ArrayList result in queryDict)
                {
                    double StockTotal;
                    if (ignoreStockMinimums)
                    {
                        StockTotal = Convert.ToDouble(Int32.Parse(result[2].ToString()));
                    }
                    else
                    {
                        StockTotal = Convert.ToDouble(
                            Int32.Parse(result[2].ToString()) + Int32.Parse(result[3].ToString()));
                    }
                    Double SalesTotal;
                    try
                    {
                        if (MaxStock < Int32.Parse(result[2].ToString()) + Int32.Parse(result[3].ToString()))
                        {
                            MaxStock = Int32.Parse(result[2].ToString()) + Int32.Parse(result[3].ToString());
                        }
                        if (DBNull.Value != result[4])
                        {
                            if (MaxSales < Int32.Parse(result[4].ToString()))
                            {
                                MaxSales = Int32.Parse(result[4].ToString());
                            }
                        }
                    }
                    catch (Exception)
                    {
                    }
                    try
                    {
                        SalesTotal = Convert.ToDouble(Int32.Parse(result[4].ToString()));
                    }
                    catch (Exception)
                    {
                        Console.WriteLine();
                        SalesTotal = Convert.ToDouble(0);
                    }
                    var Date = Convert.ToDouble(DateTime.Parse(result[1].ToString()).ToOADate());
                    var StockHistoryPoint  = new DataPoint(Date, StockTotal);
                    var SaleHistoryPoint   = new DataPoint(Date, SalesTotal);
                    var StockHistoryPoint2 = new DataPoint(Date, 0);
                    salesHistoryPoints.Add(SaleHistoryPoint);
                    stockHistoryPoints.Add(StockHistoryPoint);

                    salesHistoryPoints2.Add(StockHistoryPoint2);
                    stockHistoryPoints2.Add(StockHistoryPoint2);
                }

                salesSeries.Points.AddRange(salesHistoryPoints);
                stockSeries.Points.AddRange(stockHistoryPoints);

                rightAxis.Key        = "StockKey";
                salesSeries.YAxisKey = leftAxis.Key;
                salesSeries.CanTrackerInterpolatePoints = false;
                salesSeries.Color    = OxyColor.FromRgb(237, 125, 49);
                salesSeries.Title    = "Sales History";
                stockSeries.YAxisKey = rightAxis.Key;
                stockSeries.CanTrackerInterpolatePoints = false;
                if (this.useAreaForChart)
                {
                    StockAreaSeries.Points.AddRange(stockHistoryPoints);
                    StockAreaSeries.YAxisKey = rightAxis.Key;
                    StockAreaSeries.CanTrackerInterpolatePoints = false;
                    StockAreaSeries.Fill   = OxyColor.FromRgb(176, 195, 230);
                    StockAreaSeries.Color  = OxyColor.FromRgb(138, 167, 218);
                    StockAreaSeries.Color2 = OxyColor.FromRgb(138, 167, 218);
                    StockAreaSeries.Points2.AddRange(stockHistoryPoints2);
                    //StockAreaSeries.ConstantY2 = 0;
                    StockAreaSeries.Title = "Stock History Area";

                    SalesAreaSeries.Points.AddRange(salesHistoryPoints);
                    SalesAreaSeries.CanTrackerInterpolatePoints = false;
                    SalesAreaSeries.Fill   = OxyColor.FromArgb(140, 237, 125, 49);
                    SalesAreaSeries.Color  = OxyColor.FromArgb(255, 138, 167, 218);
                    SalesAreaSeries.Color2 = OxyColor.FromRgb(138, 167, 218);
                    SalesAreaSeries.Points2.AddRange(stockHistoryPoints2);
                    //StockAreaSeries.ConstantY2 = 0;
                    SalesAreaSeries.Title = "Sales History Area";

                    PlotArea.Series.Add(StockAreaSeries);
                    PlotArea.Series.Add(SalesAreaSeries);
                }
                else
                {
                    stockSeries.Color = OxyColors.DarkGreen;
                    stockSeries.Title = "Stock History";
                    PlotArea.Series.Add(stockSeries);

                    PlotArea.Series.Add(salesSeries);
                }
                if (MaxSales == 0)
                {
                    leftAxis.AbsoluteMaximum   = 1;
                    rightAxis.AbsoluteMaximum += 10;
                    leftAxis.Title             = "No sales";
                }
                if (MaxSales > 0)
                {
                    leftAxis.AbsoluteMaximum  = MaxSales * 1.15;
                    leftAxis.Maximum          = MaxSales * 1.1;
                    rightAxis.Maximum         = MaxStock * 1.1;
                    rightAxis.AbsoluteMaximum = MaxStock * 1.15;
                }
                leftAxis.IsZoomEnabled    = false;
                leftAxis.AbsoluteMaximum  = MaxSales;
                rightAxis.AbsoluteMaximum = MaxStock;
                PlotArea.Axes.Add(bottomAxis);
                PlotArea.Axes.Add(leftAxis);
                PlotArea.Axes.Add(rightAxis);

                PlotArea.Title = Sku.ShortSku + " Sales/Stock History";

                this.plotGlobal = PlotArea;
            }
        }