Пример #1
0
    protected void ExportButton_Click(object sender, EventArgs e)
    {
        byte[] excelByteArray = null;
        try
        {
            decimal             target         = 0;
            string              strategy       = "";
            string              startingPeriod = "";
            string              endingPeriod   = "";
            int                 firstDayOfWeek = Artexacta.App.Configuration.Configuration.GetFirstDayOfWeek();
            List <KpiChartData> kpiSeries      = KpiMeasurementBLL.GetKPIMeasurementForChart(KpiId, CategoryId, CategoryItemId, firstDayOfWeek, ref strategy, ref target, ref startingPeriod, ref endingPeriod);
            bool                hasTarget      = target > -1;
            excelByteArray = GetChartAsExcelByteArray(kpiSeries, target, hasTarget);
        }
        catch (Exception ex)
        {
            log.Error("Error exporting chart data", ex);
        }

        if (excelByteArray == null)
        {
            return;
        }

        try
        {
            Response.Clear();
            Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
            Response.AddHeader("content-disposition", "attachment;  filename=\"KPIChart_" + KpiId + ".xlsx\"");
            Response.BinaryWrite(excelByteArray);
        }
        catch (Exception q)
        {
            log.Error("Error al exportar", q);
            SystemMessages.DisplaySystemErrorMessage("Error al exportar el libro de venta a Excel.");
        }
        finally
        {
            Response.Flush();
            Response.End();
        }
    }
Пример #2
0
    public void BuildChart()
    {
        int     kpiId          = KpiId;
        string  strategyId     = "";
        string  startingPeriod = "";
        string  endingPeriod   = "";
        decimal target         = 0;
        int     firstDayOfWeek = Artexacta.App.Configuration.Configuration.GetFirstDayOfWeek();

        List <KpiChartData> measurements = KpiMeasurementBLL.GetKPIMeasurementForChart(kpiId, CategoryId, CategoryItemId, firstDayOfWeek,
                                                                                       ref strategyId, ref target, ref startingPeriod, ref endingPeriod);
        Dictionary <string, object> standardSerie       = new Dictionary <string, object>();
        Dictionary <string, object> targetStandardSerie = new Dictionary <string, object>();

        Dictionary <string, object> sumSerie       = new Dictionary <string, object>();
        Dictionary <string, object> targetSumSerie = new Dictionary <string, object>();

        KPI objKpi = KPIBLL.GetKPIById(kpiId);

        bool hasTarget      = target != -1;
        bool isSum          = strategyId == "SUM";
        bool isTargetUsable = false;
        //bool isSerieUsable = false;

        decimal sumMeasurement = 0;
        decimal sumTarget      = 0;

        foreach (var item in measurements)
        {
            //if (!string.IsNullOrEmpty(startingPeriod) && item.Period == startingPeriod)
            //    isSerieUsable = true;
            //if (isSerieUsable)
            standardSerie.Add(item.Period, item.Measurement);
            //else
            //    standardSerie.Add(item.Period, null);

            if (isSum)
            {
                sumMeasurement = sumMeasurement + item.Measurement;

                //if (isSerieUsable)
                sumSerie.Add(item.Period, sumMeasurement);
                //else
                //    sumSerie.Add(item.Period, null);
                if (hasTarget)
                {
                    if (!string.IsNullOrEmpty(startingPeriod) && item.Period == startingPeriod)
                    {
                        isTargetUsable = true;
                    }

                    if (!string.IsNullOrEmpty(endingPeriod) && item.Period == endingPeriod)
                    {
                        isTargetUsable = false;
                    }

                    if (isTargetUsable)
                    {
                        sumTarget = sumTarget + target;
                        targetSumSerie.Add(item.Period, sumTarget);
                    }
                    else
                    {
                        targetSumSerie.Add(item.Period, null);
                    }
                }
            }
            if (hasTarget)
            {
                if (!string.IsNullOrEmpty(startingPeriod) && item.Period == startingPeriod)
                {
                    isTargetUsable = true;
                }

                if (!string.IsNullOrEmpty(endingPeriod) && item.Period == endingPeriod)
                {
                    isTargetUsable = false;
                }

                if (isTargetUsable)
                {
                    targetStandardSerie.Add(item.Period, target);
                }
                else
                {
                    targetStandardSerie.Add(item.Period, null);
                }
            }
        }
        List <Series> series = new List <Series>();

        series.Add(new Series
        {
            Name = Resources.KpiDetails.ValuesLabel,
            Data = new Data(standardSerie.Values.ToArray <object>())
        });
        if (hasTarget)
        {
            series.Add(new Series
            {
                Name  = Resources.KpiDetails.KpiTargetLabel,
                Color = System.Drawing.Color.Red,
                Data  = new Data(targetStandardSerie.Values.ToArray <object>())
            });
        }

        DotNet.Highcharts.Highcharts chart = new DotNet.Highcharts.Highcharts(ClientID)
                                             .InitChart(new Chart()
        {
            Type = ChartTypes.Line
        })
                                             .SetTitle(new Title()
        {
            Text = ""
        })
                                             .SetXAxis(new XAxis
        {
            Categories = standardSerie.Keys.ToArray <string>()
        })
                                             .SetSeries(series.ToArray())
                                             .SetLegend(new Legend()
        {
            Layout        = Layouts.Horizontal,
            Align         = HorizontalAligns.Center,
            VerticalAlign = VerticalAligns.Bottom,
            BorderWidth   = 0
        });
        if (objKpi.UnitID != "TIME")
        {
            //chart.SetTooltip(new Tooltip()
            //{
            //    ValueSuffix = " " + objKpi.uni.ToLower() + "s"

            //});
        }
        else
        {
            chart.SetTooltip(new Tooltip()
            {
                Formatter = "function (){" +
                            "return decimalToYYMMDDhhmm(this.y).toString('" + Resources.DataTime.YearsValueSingle + "','" + Resources.DataTime.YearsValue + "'," +
                            "'" + Resources.DataTime.MonthsValueSingle + "'," +
                            "'" + Resources.DataTime.MonthsValue + "'," +
                            "'" + Resources.DataTime.DaysValueSingle + "'," +
                            "'" + Resources.DataTime.DaysValue + "'," +
                            "'" + Resources.DataTime.HoursValueSingle + "'," +
                            "'" + Resources.DataTime.HoursValue + "'," +
                            "'" + Resources.DataTime.MinutesValueSingle + "'," +
                            "'" + Resources.DataTime.MinutesValue + "');" +
                            "}"
            });
        }

        ChartLiteral.Text = chart.ToHtmlString();

        if (isSum)
        {
            series = new List <Series>();
            series.Add(new Series
            {
                Name = Resources.KpiDetails.ValuesLabel,
                Data = new Data(sumSerie.Values.ToArray <object>())
            });
            if (hasTarget)
            {
                series.Add(new Series
                {
                    Name  = Resources.KpiDetails.KpiTargetLabel,
                    Color = System.Drawing.Color.Red,
                    Data  = new Data(targetSumSerie.Values.ToArray <object>())
                });
            }
            chart = new DotNet.Highcharts.Highcharts(ClientID + "_sum")
                    .InitChart(new Chart()
            {
                Type = ChartTypes.Line
            })
                    .SetTitle(new Title()
            {
                Text = ""
            })
                    .SetXAxis(new XAxis
            {
                Categories = standardSerie.Keys.ToArray <string>()
            })
                    .SetSeries(series.ToArray())
                    .SetLegend(new Legend()
            {
                Layout        = Layouts.Horizontal,
                Align         = HorizontalAligns.Center,
                VerticalAlign = VerticalAligns.Bottom,
                BorderWidth   = 0
            });
            if (objKpi.UnitID != "TIME")
            {
                //chart.SetTooltip(new Tooltip()
                //{
                //    ValueSuffix = " " + objKpi.uni.ToLower() + "s"

                //});
            }
            else
            {
                chart.SetTooltip(new Tooltip()
                {
                    Formatter = "function (){" +
                                "return decimalToYYMMDDhhmm(this.y).toString('" + Resources.DataTime.YearsValueSingle + "','" + Resources.DataTime.YearsValue + "'," +
                                "'" + Resources.DataTime.MonthsValueSingle + "'," +
                                "'" + Resources.DataTime.MonthsValue + "'," +
                                "'" + Resources.DataTime.DaysValueSingle + "'," +
                                "'" + Resources.DataTime.DaysValue + "'," +
                                "'" + Resources.DataTime.HoursValueSingle + "'," +
                                "'" + Resources.DataTime.HoursValue + "'," +
                                "'" + Resources.DataTime.MinutesValueSingle + "'," +
                                "'" + Resources.DataTime.MinutesValue + "');" +
                                "}"
                });
            }
            SumChartLiteral.Text  = chart.ToHtmlString();
            SumChartPanel.Visible = true;
        }
    }