Exemple #1
0
        public static InstanceReportColumn LoadFromXml(string xml)
        {
            StringReader sr = new StringReader(xml);

            XmlSerializer xmlReport = new XmlSerializer(typeof(InstanceReportColumn));

            InstanceReportColumn ir = (InstanceReportColumn)xmlReport.Deserialize(sr);

            sr.Close();

            return(ir);
        }
Exemple #2
0
        /// <summary>
        /// Load the calendar columns from the base report.
        /// </summary>
        /// <param name="baseReport">The base report to load calendar items
        /// from.</param>
        public void LoadCalendarColumns(InstanceReport baseReport)
        {
            List <InstanceReportColumn> uniqueCalendars = new List <InstanceReportColumn>();

            foreach (InstanceReportColumn baseCol in baseReport.Columns)
            {
                if (!ReportUtils.Exists(uniqueCalendars, col => col.ReportingPeriodEquals(baseCol)))
                {
                    //create a clone so that we can slowly digest this data without affecting other references
                    InstanceReportColumn newCol = (InstanceReportColumn)baseCol.Clone();
                    uniqueCalendars.Add(newCol);
                }
            }

            uniqueCalendars.Sort(InstanceReport.CompareCalendars);
            this.DurationCalendars = new List <InstanceReportColumn>(uniqueCalendars);
            this.InstantCalendars  = SplitCalendars(uniqueCalendars);
        }
Exemple #3
0
        private static void VerifyReportColumns(ErrorWriter writer, InstanceReport baseReport, InstanceReport genReport)
        {
            if (baseReport.Columns.Count != genReport.Columns.Count)
            {
                int           differences = Math.Abs(baseReport.Columns.Count - genReport.Columns.Count);
                List <string> baseColumns = baseReport.Columns.ConvertAll(col => WHITE_SPACE.Replace(col.Label, " "));
                List <string> genColumns  = genReport.Columns.ConvertAll(col => WHITE_SPACE.Replace(col.Label, " "));

                if (baseColumns.Count < genColumns.Count)
                {
                    writer.StartError("The new rendering generated too MANY columns.");

                    foreach (string commonLabel in baseColumns)
                    {
                        if (genColumns.Contains(commonLabel))
                        {
                            genColumns.Remove(commonLabel);
                        }
                    }

                    if (genColumns.Count == differences)
                    {
                        foreach (string newLabel in genColumns)
                        {
                            writer.WriteError("\tAdded:   " + newLabel);
                        }
                    }
                    else
                    {
                        writer.WriteError("\tSEVERAL LABELS CHANGED");
                    }

                    writer.EndError();
                }
                else
                {
                    writer.StartError("The new rendering generated too FEW columns.");

                    foreach (string commonLabel in genColumns)
                    {
                        if (baseColumns.Contains(commonLabel))
                        {
                            baseColumns.Remove(commonLabel);
                        }
                    }

                    if (baseColumns.Count == differences)
                    {
                        foreach (string newLabel in baseColumns)
                        {
                            writer.WriteError("\tRemoved: " + newLabel);
                        }
                    }
                    else
                    {
                        writer.WriteError("\tSEVERAL LABELS CHANGED");
                    }

                    writer.EndError();
                }
            }

            for (int bIdx = 0; bIdx < baseReport.Columns.Count; bIdx++)
            {
                InstanceReportColumn baseColumn = baseReport.Columns[bIdx];
                string baseLabel = WHITE_SPACE.Replace(baseColumn.Label, " ");

                InstanceReportColumn genColumn = null;
                if (genReport.Columns.Count > bIdx)
                {
                    genColumn = genReport.Columns[bIdx];
                }

                if (genColumn == null)
                {
                    writer.WriteError("Base column not found in generated report.");
                    continue;
                }

                if (WHITE_SPACE.Replace(genColumn.Label, " ") == baseLabel)
                {
                    continue;
                }

                decimal baseSum = 0.0M;
                Array.ForEach(baseColumn.GetCellArray(baseReport), cell => baseSum += cell.IsNumeric ? cell.NumericAmount : 0.0M);

                decimal genSum = 0.0M;
                Array.ForEach(genColumn.GetCellArray(genReport), cell => genSum += cell.IsNumeric ? cell.NumericAmount : 0.0M);

                if (baseSum == genSum)
                {
                    writer.WriteError("Label doesn't match base column at index " + bIdx + ":",
                                      "\tExpected:  " + baseLabel,
                                      "\tGenerated: " + WHITE_SPACE.Replace(genColumn.Label, " "));
                    continue;
                }

                genColumn = genReport.Columns.Find(col => WHITE_SPACE.Replace(col.Label, " ") == baseLabel);
                if (genColumn == null)
                {
                    writer.WriteError("Base column not found in generated report:",
                                      "\t" + baseLabel,
                                      "\t***Column Skipped***");
                    continue;
                }

                int gIdx = genReport.Columns.IndexOf(genColumn);
                if (bIdx != gIdx)
                {
                    writer.WriteError("Column moved: " + baseLabel,
                                      "\tExpected at:  " + bIdx.ToString(),
                                      "\tGenerated at: " + gIdx.ToString());
                }
            }
        }
Exemple #4
0
        /// <summary>
        /// Creates and saves a list of unique columns based on their segments and scenarios.
        /// </summary>
        /// <param name="baseReport">The base report to load segment scenarios
        /// from.</param>
        public void LoadSegmentScenarioColumns(InstanceReport baseReport)
        {
            Dictionary <string, Segment> uniqueAdjustments = new Dictionary <string, Segment>();
            Dictionary <string, Segment> uniquePrevious    = new Dictionary <string, Segment>();


            List <InstanceReportColumn> consolidatedColumns  = new List <InstanceReportColumn>();
            List <InstanceReportColumn> uniqueSegmentColumns = new List <InstanceReportColumn>();

            foreach (InstanceReportColumn baseColumn in baseReport.Columns)
            {
                //create a clone so that we can digest this data without affecting other references
                InstanceReportColumn clone = (InstanceReportColumn)baseColumn.Clone();

                int index;
                if (clone.IsAdjusted(this.AdjustedAndPRMemberLookup, out index))
                {
                    Segment seg = (Segment)clone.Segments[index];
                    uniqueAdjustments[seg.DimensionInfo.dimensionId] = seg;

                    clone.RemoveAdjustedPreviouslyReported(this.AdjustedAndPRMemberLookup);
                    clone.RemoveMissingSegmentLabels();
                }
                else if (clone.IsAsPreviouslyReported(this.AdjustedAndPRMemberLookup, out index))
                {
                    Segment seg = (Segment)clone.Segments[index];
                    uniquePrevious[seg.DimensionInfo.dimensionId] = seg;

                    clone.RemoveAdjustedPreviouslyReported(this.AdjustedAndPRMemberLookup);
                    clone.RemoveMissingSegmentLabels();
                }


                bool exists = ReportUtils.Exists(uniqueSegmentColumns,
                                                 tmp =>
                {
                    if (!tmp.SegmentAndScenarioEquals(clone))
                    {
                        return(false);
                    }

                    if (!tmp.CurrencyEquals(clone))
                    {
                        return(false);
                    }

                    return(true);
                });

                if (!exists)
                {
                    if (clone.Segments == null || clone.Segments.Count == 0)
                    {
                        consolidatedColumns.Add(clone);
                    }

                    uniqueSegmentColumns.Add(clone);
                }
            }

            if (consolidatedColumns != null && consolidatedColumns.Count > 0)
            {
                foreach (InstanceReportColumn cCol in consolidatedColumns)
                {
                    uniqueSegmentColumns.Remove(cCol);
                    uniqueSegmentColumns.Add(cCol);
                    cCol.Labels[0].Label = InstanceReport.EQUITY_TOTAL_HEADER;
                }
            }


            this.EquityCandidate.Columns.AddRange(uniqueSegmentColumns);

            //now clean off the calendars
            this.SegmentColumns.ForEach(col => col.ClearReportingPeriod());

            //and sort according to presentation
            this.SegmentColumns.Sort(baseReport.CompareSegments);

            this.AdjustmentMembers = new List <Segment>(uniqueAdjustments.Values);
            this.PreviousMembers   = new List <Segment>(uniquePrevious.Values);
        }