Beispiel #1
0
        public bool ProcessSegments()
        {
            bool processedSegments = false;
            bool isRuleEnabled     = this.FireRuleProcessing(RulesEngineUtils.SEGMENTS_RULE);

            if (isRuleEnabled)
            {
                BooleanWrapper processed = new BooleanWrapper(false);

                Dictionary <string, object> contextObjects = new Dictionary <string, object>();
                contextObjects.Add("InstanceReport", this);
                contextObjects.Add("Processed", processed);

                builderRules.ProcessRule(RulesEngineUtils.SEGMENTS_RULE, contextObjects);

                processedSegments = processed.Value;

                foreach (InstanceReportRow irr in this.Rows)
                {
                    if (irr.IsSegmentTitle)
                    {
                        irr.Label = Regex.Replace(irr.Label, @"\{.*?\} : ", String.Empty).Trim();
                    }
                }

                this.FireRuleProcessed(RulesEngineUtils.SEGMENTS_RULE);
            }
            return(processedSegments);
        }
 public Task PutComplexPrimitiveBool() => TestStatus(async(host, pipeline) =>
 {
     var value = new BooleanWrapper
     {
         FieldTrue  = true,
         FieldFalse = false
     };
     return(await new PrimitiveClient(ClientDiagnostics, pipeline, host).PutBoolAsync(value));
 });
 public virtual Response PutBool(BooleanWrapper complexBody, CancellationToken cancellationToken = default)
 {
     using var scope = _clientDiagnostics.CreateScope("PrimitiveClient.PutBool");
     scope.Start();
     try
     {
         return(RestClient.PutBool(complexBody, cancellationToken));
     }
     catch (Exception e)
     {
         scope.Failed(e);
         throw;
     }
 }
 public virtual async Task <Response> PutBoolAsync(BooleanWrapper complexBody, CancellationToken cancellationToken = default)
 {
     using var scope = _clientDiagnostics.CreateScope("PrimitiveClient.PutBool");
     scope.Start();
     try
     {
         return(await RestClient.PutBoolAsync(complexBody, cancellationToken).ConfigureAwait(false));
     }
     catch (Exception e)
     {
         scope.Failed(e);
         throw;
     }
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task PutBoolAsync(this IPrimitive operations, BooleanWrapper complexBody, CancellationToken cancellationToken = default(CancellationToken))
 {
     (await operations.PutBoolWithHttpMessagesAsync(complexBody, null, cancellationToken).ConfigureAwait(false)).Dispose();
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 public static void PutBool(this IPrimitive operations, BooleanWrapper complexBody)
 {
     operations.PutBoolAsync(complexBody).GetAwaiter().GetResult();
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async System.Threading.Tasks.Task PutBoolAsync(this IPrimitiveOperations operations, BooleanWrapper complexBody, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
 {
     await operations.PutBoolWithHttpMessagesAsync(complexBody, null, cancellationToken).ConfigureAwait(false);
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 public static void PutBool(this IPrimitiveOperations operations, BooleanWrapper complexBody)
 {
     System.Threading.Tasks.Task.Factory.StartNew(s => ((IPrimitiveOperations)s).PutBoolAsync(complexBody), operations, System.Threading.CancellationToken.None, System.Threading.Tasks.TaskCreationOptions.None, System.Threading.Tasks.TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async Task PutBoolAsync(this IPrimitiveOperations operations, BooleanWrapper complexBody, CancellationToken cancellationToken = default(CancellationToken))
 {
     await operations.PutBoolWithHttpMessagesAsync(complexBody, null, cancellationToken).ConfigureAwait(false);
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 public static void PutBool(this IPrimitiveOperations operations, BooleanWrapper complexBody)
 {
     Task.Factory.StartNew(s => ((IPrimitiveOperations)s).PutBoolAsync(complexBody), operations, CancellationToken.None, TaskCreationOptions.None, TaskScheduler.Default).Unwrap().GetAwaiter().GetResult();
 }
 /// <summary>
 /// Put complex types with bool properties
 /// </summary>
 /// <param name='operations'>
 /// The operations group for this extension method.
 /// </param>
 /// <param name='complexBody'>
 /// Please put true and false
 /// </param>
 /// <param name='cancellationToken'>
 /// The cancellation token.
 /// </param>
 public static async System.Threading.Tasks.Task PutBoolAsync(this IPrimitive operations, BooleanWrapper complexBody, System.Threading.CancellationToken cancellationToken = default(System.Threading.CancellationToken))
 {
     await operations.PutBoolWithHttpMessagesAsync(complexBody, null, cancellationToken).ConfigureAwait(false);
 }
Beispiel #12
0
        public bool ProcessSegments_Rule(BooleanWrapper processed)
        {
            //collect all of the segments to be permuted vertically
            List <InstanceReportColumn> uniqueSegmentColumns = this.GetSegmentScenarioColumnsForSegmentProcessing();
            //if( uniqueSegmentColumns.Count < 2 )
            //	return false;

            //collect all of the calendars to be retained horizontally
            Dictionary <int, List <InstanceReportColumn> > calendarsBySegment = this.GetSegmentScenarioCalendars(uniqueSegmentColumns);
            //if( uniqueSegmentColumns.Count < 2 )
            //	return false;

            //find the set of `allCalendars` which will hold all data without any adjustment
            List <InstanceReportColumn> allCalendars;
            bool doCalendarsOverlap = DoCalendarsOverlap(calendarsBySegment, out allCalendars);

            if (!doCalendarsOverlap)
            {
                return(false);
            }


            List <Segment> commonSegmentsToPromote = GetCommonSegments(uniqueSegmentColumns);

            PromoteConsolidatedSegment(uniqueSegmentColumns, commonSegmentsToPromote);

            //set up a temporary holder for the rows - this helps with debugging
            InstanceReport segmentCandidate = new InstanceReport();

            segmentCandidate.Columns.AddRange(allCalendars);

            //The first row in every report is usually `IsReportTitle` - copy it to the temporary report
            InstanceReportRow reportTitleRow = this.FindCloneAndTruncate(row => row.IsReportTitle, allCalendars.Count);

            if (reportTitleRow != null)
            {
                reportTitleRow.Id = 0;
                segmentCandidate.Rows.Add(reportTitleRow);
            }

            //Now, for every `segmentSet`, rebuild the data vertically
            foreach (InstanceReportColumn segmentSet in uniqueSegmentColumns)
            {
                //If this segment set has segments, create an `IsSegmentTitle` row
                if (segmentSet.Segments != null && segmentSet.Segments.Count > 0)
                {
                    string label = string.Empty;
                    foreach (Segment seg in segmentSet.Segments)
                    {
                        if (commonSegmentsToPromote != null && commonSegmentsToPromote.Count > 0)
                        {
                            bool isCommon = ReportUtils.Exists(commonSegmentsToPromote, cSeg => cSeg.Equals(seg));
                            if (isCommon)
                            {
                                continue;
                            }
                        }

                        if (!string.IsNullOrEmpty(label))
                        {
                            label += " | ";
                        }

                        label += seg.ValueName;
                    }

                    if (!string.IsNullOrEmpty(label))
                    {
                        InstanceReportRow segmentRow = new InstanceReportRow(label, allCalendars.Count);
                        segmentRow.IsSegmentTitle = true;
                        segmentRow.Id             = segmentCandidate.Rows.Count;
                        segmentRow.OriginalInstanceReportColumn = (InstanceReportColumn)segmentSet.Clone();

                        segmentCandidate.Rows.Add(segmentRow);
                    }
                }

                //`segmentSets` combined with `rows` provide our vertical (y) axis
                //for each row in the "base" report, we need to pull in the data
                InstanceReportRow lastAbstract = null;
                foreach (InstanceReportRow row in this.Rows)
                {
                    if (row.IsReportTitle)
                    {
                        continue;
                    }

                    //retain abstracts...
                    if (row.IsAbstractGroupTitle)
                    {
                        //...unless they're consecutive - retain the most recent one
                        if (lastAbstract != null)
                        {
                            int at = segmentCandidate.Rows.IndexOf(lastAbstract);
                            if (at == segmentCandidate.Rows.Count - 1)
                            {
                                segmentCandidate.Rows.RemoveAt(at);
                            }
                        }

                        InstanceReportRow abstractRow = CloneAndTruncate(row, allCalendars.Count);
                        abstractRow.Id = segmentCandidate.Rows.Count;
                        segmentCandidate.Rows.Add(abstractRow);

                        lastAbstract = abstractRow;
                        continue;
                    }

                    //`calendars` provide our horizontal (x) axis
                    //`calendars` (x) combined with `segmentSets` & `rows` (y) allow us to look up the correct cell
                    bool hasData = false;
                    InstanceReportRow currentRow = new InstanceReportRow();
                    foreach (InstanceReportColumn calendar in allCalendars)
                    {
                        List <InstanceReportColumn> matches = this.GetMatchingColumns(calendar, segmentSet, row);

                        //apply exact match
                        InstanceReportColumn exactColumn = matches.Find(m => m.ReportingPeriodEquals(calendar));
                        if (exactColumn != null)
                        {
                            Cell exactCell = row.Cells.Find(c => c.Id == exactColumn.Id);
                            if (exactCell != null && exactCell.HasData)
                            {
                                hasData = true;
                                Cell newCell = (Cell)exactCell.Clone();
                                newCell.EmbeddedReport = exactCell.EmbeddedReport;

                                if (!string.IsNullOrEmpty(segmentSet.CurrencyCode))
                                {
                                    if ((int)row.Unit == (int)UnitType.Monetary ||
                                        (int)row.Unit == (int)UnitType.EPS)
                                    {
                                        newCell.CurrencyCode   = segmentSet.CurrencyCode;
                                        newCell.CurrencySymbol = segmentSet.CurrencySymbol;
                                    }
                                }

                                currentRow.Cells.Add(newCell);
                                continue;
                            }
                        }

                        //apply similar matches
                        {
                            List <Cell> cells = matches.ConvertAll(col => row.Cells.Find(c => c.Id == col.Id));

                            //Now reduce our cells to those with values...
                            cells.RemoveAll(c => c == null || !c.HasData);

                            //...and non-duplicates
                            for (int c = 0; c < cells.Count; c++)
                            {
                                Cell curCell = cells[c];
                                cells.RemoveAll(cell => cell.Id != curCell.Id && cell.NumericAmount == curCell.NumericAmount);
                            }

                            switch (cells.Count)
                            {
                            case 0:
                                Cell emptyCell = new Cell();
                                currentRow.Cells.Add(emptyCell);
                                break;

                            case 1:
                                hasData = true;
                                Cell newCell = (Cell)cells[0].Clone();
                                newCell.EmbeddedReport = cells[0].EmbeddedReport;

                                if (!string.IsNullOrEmpty(segmentSet.CurrencyCode))
                                {
                                    if ((int)row.Unit == (int)UnitType.Monetary ||
                                        (int)row.Unit == (int)UnitType.EPS)
                                    {
                                        newCell.CurrencyCode   = segmentSet.CurrencyCode;
                                        newCell.CurrencySymbol = segmentSet.CurrencySymbol;
                                    }
                                }

                                currentRow.Cells.Add(newCell);
                                break;

                            default:
                                Debug.Assert(false, "Too many cells");
                                break;
                            }
                        }
                    }

                    //if we actually found data for this row, let's clone the original, and swap out the cells
                    if (hasData)
                    {
                        InstanceReportRow clonedRow = (InstanceReportRow)row.Clone(false, false);
                        clonedRow.Cells.AddRange(currentRow.Cells);
                        clonedRow.Id = segmentCandidate.Rows.Count;

                        segmentCandidate.Rows.Add(clonedRow);
                    }
                }

                //Same as above, don't preserve consecutive abstract rows
                if (lastAbstract != null)
                {
                    int at = segmentCandidate.Rows.IndexOf(lastAbstract);
                    if (at == segmentCandidate.Rows.Count - 1)
                    {
                        segmentCandidate.Rows.RemoveAt(at);
                    }
                }
            }

            //now that the permutation is complete, apply the new rows and columns to the "base" report
            this.Columns.Clear();
            this.Columns.AddRange(segmentCandidate.Columns);

            this.Rows.Clear();
            this.Rows.AddRange(segmentCandidate.Rows);

            this.SynchronizeGrid();

            //this.InstantValues();

            processed.Value = true;
            return(true);
        }
Beispiel #13
0
 public static void Save(IValueSink sink, BooleanWrapper value)
 {
     Value <bool> .Save(sink, value.Item);
 }
Beispiel #14
0
 public static void Save(IValueSink sink, BooleanWrapper value)
 {
     Value<bool>.Save(sink, value.Item);
 }