/// <summary>
    /// updateTableReportFacilities
    /// </summary>
    private void updateTable(TimeSeriesClasses.ComparisonPollutant data)
    {
        this.grdCompareDetailsAll.Visible       = true;
        this.grdCompareDetailsBothYears.Visible = true;

        //all facilites
        List <CompareDetailElement> elementsAll = new List <CompareDetailElement>();

        elementsAll.Add(new CompareDetailElement(Resources.GetGlobal("Common", "Quantity"),
                                                 data != null ? QuantityFormat.Format(data.QuantityFrom, CODE_KG) : String.Empty,
                                                 data != null ? QuantityFormat.Format(data.QuantityTo, CODE_KG) : String.Empty));

        elementsAll.Add(new CompareDetailElement(Resources.GetGlobal("Common", "Facilities"),
                                                 data != null ? NumberFormat.Format(data.FacilitiesFrom) : String.Empty,
                                                 data != null ? NumberFormat.Format(data.FacilitiesTo) : String.Empty));

        //facilites in both years
        List <CompareDetailElement> elementsBothYears = new List <CompareDetailElement>();


        elementsBothYears.Add(new CompareDetailElement(Resources.GetGlobal("Common", "Quantity"),
                                                       data != null ? QuantityFormat.Format(data.BothQuantityFrom, CODE_KG) : String.Empty,
                                                       data != null ? QuantityFormat.Format(data.BothQuantityTo, CODE_KG) : String.Empty));

        elementsBothYears.Add(new CompareDetailElement(Resources.GetGlobal("Common", "Facilities"),
                                                       data != null ? NumberFormat.Format(data.BothFacilities) : String.Empty,
                                                       data != null ? NumberFormat.Format(data.BothFacilities) : String.Empty));

        // data binding
        this.grdCompareDetailsAll.DataSource = elementsAll;
        grdCompareDetailsAll.DataBind();

        this.grdCompareDetailsBothYears.DataSource = elementsBothYears;
        grdCompareDetailsBothYears.DataBind();
    }
        // public static string CODE_TNE = EnumUtil.GetStringValue(QuantityUnit.Tonnes);

        // ---------------------------------------------------------------------------------------------------
        // Comparison
        // ---------------------------------------------------------------------------------------------------
        #region comparison

        /// <summary>
        /// Returns data for comparison of two years corresponding to the filter given.
        /// </summary>
        /// <param name="filter"></param>
        /// <param name="yearFrom"></param>
        /// <param name="yearTo"></param>
        /// <returns></returns>
        public static TimeSeriesClasses.ComparisonPollutant GetComparisonTimeSeries(PollutantTransferTimeSeriesFilter filter, int yearFrom, int yearTo)
        {
            TimeSeriesClasses.ComparisonPollutant result = new TimeSeriesClasses.ComparisonPollutant(yearFrom, yearTo);

            // Create lambda with pollutant release filter
            Expression <Func <POLLUTANTTRANSFER, bool> > lambda = getLambdaExpression(filter);

            DataClassesPollutantTransferDataContext db = new DataClassesPollutantTransferDataContext();

            // facilities
            var dataFrom = db.POLLUTANTTRANSFERs.Where(lambda).Where(p => p.ReportingYear == yearFrom).GroupBy(p => p.ReportingYear)
                           .Select(p => new { count = p.Count(), quantity = p.Sum(x => x.Quantity) });
            var dataTo = db.POLLUTANTTRANSFERs.Where(lambda).Where(p => p.ReportingYear == yearTo).GroupBy(p => p.ReportingYear)
                         .Select(p => new { count = p.Count(), quantity = p.Sum(x => x.Quantity) });

            // reporting in both years
            var vTo          = db.POLLUTANTTRANSFERs.Where(lambda).Where(p => p.ReportingYear == yearTo).Select(p => p.FacilityID).Distinct();
            var dataFromBoth = db.POLLUTANTTRANSFERs.Where(lambda)
                               .Where(p => p.ReportingYear == yearFrom && vTo.Contains(p.FacilityID)).GroupBy(p => p.ReportingYear)
                               .Select(p => new { count = p.Count(), quantity = p.Sum(x => x.Quantity) });
            var vFrom      = db.POLLUTANTTRANSFERs.Where(lambda).Where(p => p.ReportingYear == yearFrom).Select(p => p.FacilityID).Distinct();
            var dataToBoth = db.POLLUTANTTRANSFERs.Where(lambda)
                             .Where(p => p.ReportingYear == yearTo && vFrom.Contains(p.FacilityID)).GroupBy(p => p.ReportingYear)
                             .Select(p => new { count = p.Count(), quantity = p.Sum(x => x.Quantity) });

            var resFrom = dataFrom.SingleOrDefault();

            if (resFrom != null)
            {
                result.FacilitiesFrom = resFrom.count;
                result.QuantityFrom   = resFrom.quantity;
            }
            var resTo = dataTo.SingleOrDefault();

            if (resTo != null)
            {
                result.FacilitiesTo = resTo.count;
                result.QuantityTo   = resTo.quantity;
            }
            var resBothFrom = dataFromBoth.SingleOrDefault();

            if (resBothFrom != null)
            {
                result.BothFacilities   = resBothFrom.count;
                result.BothQuantityFrom = resBothFrom.quantity;
            }
            var resBothTo = dataToBoth.SingleOrDefault();

            if (resBothTo != null)
            {
                result.BothFacilities = resBothTo.count;
                result.BothQuantityTo = resBothTo.quantity;
            }
            return(result);
        }
    /// <summary>
    /// updateTimeSeries
    /// </summary>
    private void updateCompareChart(PollutantTransferTimeSeriesFilter filter)
    {
        dataFound(true);

        // init year combo boxes
        int year1 = this.ucYearCompare.Year1;
        int year2 = this.ucYearCompare.Year2;

        Color[]           colors      = new Color[] { Global.ColorWasteWater, Global.ColorWasteWater };
        string[]          legendTexts = new string[] { Resources.GetGlobal("Common", "FacilitiesBothYears"), Resources.GetGlobal("Common", "AllFacilities") };
        ChartHatchStyle[] hatchStyles = new ChartHatchStyle[] { Global.HatchStyleBothYears, Global.HatchStyleTotal };

        // same unit for all data

        this.ucStackColumnCompare.Initialize(colors.Length, StackColumnType.Comparison, PollutantTransferTrend.CODE_KG, colors, hatchStyles, legendTexts);

        // from and to bar
        // get compare result compare char
        TimeSeriesClasses.ComparisonPollutant result = PollutantTransferTrend.GetComparisonTimeSeries(filter, year1, year2);
        bool foundData = (result.QuantityFrom != null || result.QuantityTo != null);

        if (foundData)
        {
            TimeSeriesUtils.BarData dataFrom = new TimeSeriesUtils.BarData
            {
                Year   = result.YearFrom,
                Values = new double?[] { TimeSeriesUtils.RangeValue(result.BothQuantityFrom), TimeSeriesUtils.RangeValue(result.QuantityFrom) - TimeSeriesUtils.RangeValue(result.BothQuantityFrom) },
            };

            TimeSeriesUtils.BarData dataTo = new TimeSeriesUtils.BarData
            {
                Year   = result.YearTo,
                Values = new double?[] { TimeSeriesUtils.RangeValue(result.BothQuantityTo), TimeSeriesUtils.RangeValue(result.QuantityTo) - TimeSeriesUtils.RangeValue(result.BothQuantityTo) },
            };

            // from and to bar
            this.ucStackColumnCompare.Add(new List <TimeSeriesUtils.BarData>()
            {
                dataFrom, dataTo
            });


            // update sinle table
            updateTable(result);
        }
        else
        {
            dataFound(false);
        }
    }
    /// <summary>
    /// updateTimeSeries
    /// </summary>
    private void updateCompareChart(PollutantReleasesTimeSeriesFilter filter, MediumFilter.Medium medium)
    {
        CurrentMedium = medium;

        // view everything, user may select other years to compare
        dataFound(true);

        // init year combo boxes
        int year1 = this.ucYearCompare.Year1;
        int year2 = this.ucYearCompare.Year2;

        // get compare result compare char
        TimeSeriesClasses.ComparisonPollutant result = PollutantReleaseTrend.GetComparisonTimeSeries(filter, year1, year2, medium);
        bool foundData = (result.QuantityFrom != null || result.QuantityTo != null);

        if (foundData)
        {
            Color[] colors = new Color[] { };

            // create compare chart and table
            if (medium.Equals(MediumFilter.Medium.Air))
            {
                colors = new Color[] { Global.ColorAirTotal, Global.ColorAirTotal };
            }
            else if (medium.Equals(MediumFilter.Medium.Water))
            {
                // get report data
                colors = new Color[] { Global.ColorWaterTotal, Global.ColorWaterTotal };
            }
            else if (medium.Equals(MediumFilter.Medium.Soil))
            {
                colors = new Color[] { Global.ColorSoilTotal, Global.ColorSoilTotal };
            }

            ChartHatchStyle[] hatchStyles = new ChartHatchStyle[] { Global.HatchStyleBothYears, Global.HatchStyleTotal };
            string[]          legendTexts = new string[] { Resources.GetGlobal("Common", "FacilitiesBothYears"), Resources.GetGlobal("Common", "AllFacilities") };
            this.ucStackColumnCompare.Initialize(colors.Length, StackColumnType.Comparison, PollutantReleaseTrend.CODE_KG, colors, hatchStyles, legendTexts);

            TimeSeriesUtils.BarData dataFrom = new TimeSeriesUtils.BarData
            {
                Year   = result.YearFrom,
                Values = new double?[] { TimeSeriesUtils.RangeValue(result.BothQuantityFrom), TimeSeriesUtils.RangeValue(result.QuantityFrom) - TimeSeriesUtils.RangeValue(result.BothQuantityFrom) },
            };

            TimeSeriesUtils.BarData dataTo = new TimeSeriesUtils.BarData
            {
                Year   = result.YearTo,
                Values = new double?[] { TimeSeriesUtils.RangeValue(result.BothQuantityTo), TimeSeriesUtils.RangeValue(result.QuantityTo) - TimeSeriesUtils.RangeValue(result.BothQuantityTo) },
            };

            // from and to bar
            this.ucStackColumnCompare.Add(new List <TimeSeriesUtils.BarData>()
            {
                dataFrom, dataTo
            });

            // update sinle table
            updateTable(result);
        }
        else
        {
            dataFound(false);
        }
    }
Exemple #5
0
        // ---------------------------------------------------------------------------------------------------
        // Comparison
        // ---------------------------------------------------------------------------------------------------
        #region comparison
        /// <summary>
        /// GetComparisonTimeSeries
        /// </summary>
        public static TimeSeriesClasses.ComparisonPollutant GetComparisonTimeSeries(PollutantReleasesTimeSeriesFilter filter, int yearFrom, int yearTo, MediumFilter.Medium medium)
        {
            // Create lambda with pollutant release filter
            DataClassesPollutantReleaseDataContext db = getDataContext();
            ParameterExpression param = Expression.Parameter(typeof(POLLUTANTRELEASE), "s");
            Expression          exp   = LinqExpressionBuilder.GetLinqExpressionPollutantReleases(filter, param);
            // apply medium
            Expression expMedium = LinqExpressionBuilder.GetLinqExpressionMediumRelease(medium, param);

            if (exp != null && expMedium != null)
            {
                exp = Expression.And(exp, expMedium);
            }
            Expression <Func <POLLUTANTRELEASE, bool> > lambda = Expression.Lambda <Func <POLLUTANTRELEASE, bool> >(exp, param);

            // group by reporting year, get from and to data
            IQueryable <IGrouping <int, POLLUTANTRELEASE> > groupFrom = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearFrom).GroupBy(p => p.ReportingYear);
            IQueryable <IGrouping <int, POLLUTANTRELEASE> > groupTo   = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearTo).GroupBy(p => p.ReportingYear);

            // Facility IDs when year is 'yearTo'
            var vTo = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearTo).Select(p => p.FacilityID).Distinct();
            IQueryable <IGrouping <int, POLLUTANTRELEASE> > groupDataFromBoth = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearFrom && vTo.Contains(p.FacilityID)).GroupBy(p => p.ReportingYear);

            // Facility IDs when year is 'yearFrom'
            var vFrom = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearFrom).Select(p => p.FacilityID).Distinct();
            IQueryable <IGrouping <int, POLLUTANTRELEASE> > groupDataToBoth = db.POLLUTANTRELEASEs.Where(lambda).Where(p => p.ReportingYear == yearTo && vFrom.Contains(p.FacilityID)).GroupBy(p => p.ReportingYear);

            // result lists
            IEnumerable <TimeSeriesClasses.TsPollutantCompare> dataFrom = null, dataTo = null;
            IEnumerable <TimeSeriesClasses.TsPollutantCompare> dataFromBoth = null, dataToBoth = null;

            switch (medium)
            {
            case MediumFilter.Medium.Air:
                dataFrom     = groupFrom.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                dataTo       = groupTo.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                dataFromBoth = groupDataFromBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                dataToBoth   = groupDataToBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityAir), x.Sum(p => p.QuantityAccidentalAir)));
                break;

            case MediumFilter.Medium.Water:
                dataFrom     = groupFrom.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                dataTo       = groupTo.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                dataFromBoth = groupDataFromBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                dataToBoth   = groupDataToBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantityWater), x.Sum(p => p.QuantityAccidentalWater)));
                break;

            case MediumFilter.Medium.Soil:
                dataFrom     = groupFrom.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                dataTo       = groupTo.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                dataFromBoth = groupDataFromBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                dataToBoth   = groupDataToBoth.Select(x => new TimeSeriesClasses.TsPollutantCompare(x.Count(), x.Sum(p => p.QuantitySoil), x.Sum(p => p.QuantityAccidentalSoil)));
                break;

            default: return(null);
            }
            TimeSeriesClasses.ComparisonPollutant result = new TimeSeriesClasses.ComparisonPollutant(yearFrom, yearTo);

            var res = dataFrom.SingleOrDefault();

            if (res != null)
            {
                result.SetFrom(res.Count, res.Quantity, res.Accidental);
            }
            res = dataTo.SingleOrDefault();
            if (res != null)
            {
                result.SetTo(res.Count, res.Quantity, res.Accidental);
            }
            res = dataFromBoth.SingleOrDefault();
            if (res != null)
            {
                result.SetBothFrom(res.Count, res.Quantity, res.Accidental);
            }
            res = dataToBoth.SingleOrDefault();
            if (res != null)
            {
                result.SetBothTo(res.Count, res.Quantity, res.Accidental);
            }
            return(result);
        }