Page 9257 Opportunities Matrix

App
Base Application
Namespace
Microsoft.CRM.Analysis
Versions
17-28
Source table
5102

Procedures, 3Obsolete, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/CRM/Analysis/OpportunitiesMatrix.Page.al1225 lines, Copyright (c) Microsoft Corporation. MIT

// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.CRM.Analysis;

using Microsoft.CRM.Campaign;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Opportunity;
using Microsoft.CRM.Team;
using Microsoft.Finance.Analysis;
using Microsoft.Foundation.Enums;
using System.Utilities;

page 9257 "Opportunities Matrix"
{
    Caption = 'Opportunities Matrix';
    DataCaptionExpression = Format(OutPutOption);
    Editable = false;
    LinksAllowed = false;
    PageType = List;
    SourceTable = "RM Matrix Management";

    layout
    {
        area(content)
        {
            repeater(Control1)
            {
                IndentationColumn = NameIndent;
                IndentationControls = Name;
                ShowCaption = false;
                field("No."; Rec."No.")
                {
                    ApplicationArea = RelationshipMgmt;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;

                    trigger OnLookup(var Text: Text): Boolean
                    var
                        Campaign: Record Campaign;
                        SalesPurchPerson: Record "Salesperson/Purchaser";
                        Contact: Record Contact;
                    begin
                        case TableType of
                            TableType::"Sales Person":
                                begin
                                    SalesPurchPerson.Get(Rec."No.");
                                    PAGE.RunModal(0, SalesPurchPerson);
                                end;
                            TableType::Campaign:
                                begin
                                    Campaign.Get(Rec."No.");
                                    PAGE.RunModal(0, Campaign);
                                end;
                            TableType::Contact:
                                begin
                                    Contact.Get(Rec."No.");
                                    PAGE.RunModal(0, Contact);
                                end;
                        end;
                    end;
                }
                field(Name; Rec.Name)
                {
                    ApplicationArea = RelationshipMgmt;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                }
                field(Field1; MATRIX_CellData[1])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[1];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field1Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(1);
                    end;
                }
                field(Field2; MATRIX_CellData[2])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[2];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field2Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(2);
                    end;
                }
                field(Field3; MATRIX_CellData[3])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[3];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field3Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(3);
                    end;
                }
                field(Field4; MATRIX_CellData[4])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[4];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field4Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(4);
                    end;
                }
                field(Field5; MATRIX_CellData[5])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[5];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field5Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(5);
                    end;
                }
                field(Field6; MATRIX_CellData[6])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[6];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field6Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(6);
                    end;
                }
                field(Field7; MATRIX_CellData[7])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[7];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field7Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(7);
                    end;
                }
                field(Field8; MATRIX_CellData[8])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[8];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field8Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(8);
                    end;
                }
                field(Field9; MATRIX_CellData[9])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[9];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field9Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(9);
                    end;
                }
                field(Field10; MATRIX_CellData[10])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[10];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field10Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(10);
                    end;
                }
                field(Field11; MATRIX_CellData[11])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[11];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field11Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(11);
                    end;
                }
                field(Field12; MATRIX_CellData[12])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[12];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field12Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(12);
                    end;
                }
                field(Field13; MATRIX_CellData[13])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[13];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field13Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(13);
                    end;
                }
                field(Field14; MATRIX_CellData[14])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[14];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field14Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(14);
                    end;
                }
                field(Field15; MATRIX_CellData[15])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[15];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field15Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(15);
                    end;
                }
                field(Field16; MATRIX_CellData[16])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[16];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field16Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(16);
                    end;
                }
                field(Field17; MATRIX_CellData[17])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[17];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field17Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(17);
                    end;
                }
                field(Field18; MATRIX_CellData[18])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[18];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field18Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(18);
                    end;
                }
                field(Field19; MATRIX_CellData[19])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[19];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field19Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(19);
                    end;
                }
                field(Field20; MATRIX_CellData[20])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[20];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field20Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(20);
                    end;
                }
                field(Field21; MATRIX_CellData[21])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[21];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field21Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(21);
                    end;
                }
                field(Field22; MATRIX_CellData[22])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[22];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field22Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(22);
                    end;
                }
                field(Field23; MATRIX_CellData[23])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[23];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field23Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(23);
                    end;
                }
                field(Field24; MATRIX_CellData[24])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[24];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field24Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(24);
                    end;
                }
                field(Field25; MATRIX_CellData[25])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[25];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field25Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(25);
                    end;
                }
                field(Field26; MATRIX_CellData[26])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[26];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field26Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(26);
                    end;
                }
                field(Field27; MATRIX_CellData[27])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[27];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field27Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(27);
                    end;
                }
                field(Field28; MATRIX_CellData[28])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[28];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field28Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(28);
                    end;
                }
                field(Field29; MATRIX_CellData[29])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[29];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field29Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(29);
                    end;
                }
                field(Field30; MATRIX_CellData[30])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[30];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field30Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(30);
                    end;
                }
                field(Field31; MATRIX_CellData[31])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[31];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field31Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(31);
                    end;
                }
                field(Field32; MATRIX_CellData[32])
                {
                    ApplicationArea = RelationshipMgmt;
                    AutoFormatExpression = FormatStr();
                    AutoFormatType = 11;
                    CaptionClass = '3,' + MATRIX_CaptionSet[32];
                    DrillDown = true;
                    Style = Strong;
                    StyleExpr = StyleIsStrong;
                    Visible = Field32Visible;

                    trigger OnDrillDown()
                    begin
                        SetFilters();
                        MATRIX_OnDrillDown(32);
                    end;
                }
            }
        }
    }

    actions
    {
    }

    trigger OnAfterGetRecord()
    var
        MATRIX_CurrentColumnOrdinal: Integer;
    begin
        StyleIsStrong := Rec.Type = Rec.Type::Company;
        if (Rec.Type = Rec.Type::Person) and (TableType = TableType::Contact) then
            NameIndent := 1
        else
            NameIndent := 0;

        MATRIX_CurrentColumnOrdinal := 0;
        while MATRIX_CurrentColumnOrdinal < MATRIX_CurrentNoOfMatrixColumn do begin
            MATRIX_CurrentColumnOrdinal := MATRIX_CurrentColumnOrdinal + 1;
            MATRIX_OnAfterGetRecord(MATRIX_CurrentColumnOrdinal);
        end;
    end;

    trigger OnFindRecord(Which: Text): Boolean
    begin
        exit(FindRec(TableType, Rec, Which));
    end;

    trigger OnInit()
    begin
        Field32Visible := true;
        Field31Visible := true;
        Field30Visible := true;
        Field29Visible := true;
        Field28Visible := true;
        Field27Visible := true;
        Field26Visible := true;
        Field25Visible := true;
        Field24Visible := true;
        Field23Visible := true;
        Field22Visible := true;
        Field21Visible := true;
        Field20Visible := true;
        Field19Visible := true;
        Field18Visible := true;
        Field17Visible := true;
        Field16Visible := true;
        Field15Visible := true;
        Field14Visible := true;
        Field13Visible := true;
        Field12Visible := true;
        Field11Visible := true;
        Field10Visible := true;
        Field9Visible := true;
        Field8Visible := true;
        Field7Visible := true;
        Field6Visible := true;
        Field5Visible := true;
        Field4Visible := true;
        Field3Visible := true;
        Field2Visible := true;
        Field1Visible := true;
    end;

    trigger OnNextRecord(Steps: Integer): Integer
    begin
        exit(NextRec(TableType, Rec, Steps));
    end;

    trigger OnOpenPage()
    begin
        TestFilters();
        ValidateStatus();
        ValidateFilter();
        SetColumnVisibility();
    end;

    var
#pragma warning disable AA0074
        Text000: Label '<Sign><Integer>', Locked = true;
        Text001: Label '<Sign><Integer Thousand><Decimals,2>', Locked = true;
#pragma warning restore AA0074
        MatrixRecords: array[32] of Record Date;
        TempOpp: Record Opportunity temporary;
        OppEntry: Record "Opportunity Entry";
        Opp: Record Opportunity;
        SalespersonPurchaser: Record "Salesperson/Purchaser";
        Cont: Record Contact;
        Campaign: Record Campaign;
        MatrixMgt: Codeunit "Matrix Management";
        OptionStatusFilter: Option "In Progress",Won,Lost;
        OutputOption: Enum "Opportunity Output";
        RoundingFactor: Enum "Analysis Rounding Factor";
        TableType: Enum "Opportunity Table Type";
        MATRIX_CurrentNoOfMatrixColumn: Integer;
        MATRIX_CellData: array[32] of Text[80];
        MATRIX_CaptionSet: array[32] of Text[80];
        EstimatedValueFilter: Text;
        SalesCycleStageFilter: Text;
        SuccessChanceFilter: Text;
        ProbabilityFilter: Text;
        CompletedFilter: Text;
        CalcdCurrentValueFilter: Text;
        SalesCycleFilter: Text;
        RoundingFactorFormatString: Text;
        StyleIsStrong: Boolean;
        NameIndent: Integer;
        Field1Visible: Boolean;
        Field2Visible: Boolean;
        Field3Visible: Boolean;
        Field4Visible: Boolean;
        Field5Visible: Boolean;
        Field6Visible: Boolean;
        Field7Visible: Boolean;
        Field8Visible: Boolean;
        Field9Visible: Boolean;
        Field10Visible: Boolean;
        Field11Visible: Boolean;
        Field12Visible: Boolean;
        Field13Visible: Boolean;
        Field14Visible: Boolean;
        Field15Visible: Boolean;
        Field16Visible: Boolean;
        Field17Visible: Boolean;
        Field18Visible: Boolean;
        Field19Visible: Boolean;
        Field20Visible: Boolean;
        Field21Visible: Boolean;
        Field22Visible: Boolean;
        Field23Visible: Boolean;
        Field24Visible: Boolean;
        Field25Visible: Boolean;
        Field26Visible: Boolean;
        Field27Visible: Boolean;
        Field28Visible: Boolean;
        Field29Visible: Boolean;
        Field30Visible: Boolean;
        Field31Visible: Boolean;
        Field32Visible: Boolean;

    local procedure SetFilters()
    begin
        case TableType of
            TableType::"Sales Person":
                Rec.SetRange("Salesperson Filter", Rec."No.");
            TableType::Campaign:
                Rec.SetRange("Campaign Filter", Rec."No.");
            TableType::Contact:
                if Rec.Type = Rec.Type::Company then begin
                    Rec.SetRange("Contact Filter");
                    Rec.SetRange("Contact Company Filter", Rec."Company No.");
                end else begin
                    Rec.SetRange("Contact Filter", Rec."No.");
                    Rec.SetRange("Contact Company Filter", Rec."Company No.");
                end;
        end;
    end;

    local procedure ReturnOutput(): Decimal
    begin
        case OutPutOption of
            OutPutOption::"No of Opportunities":
                exit(Rec."No. of Opportunities");
            OutPutOption::"Estimated Value (LCY)":
                exit(Rec."Estimated Value (LCY)");
            OutPutOption::"Calc. Current Value (LCY)":
                exit(Rec."Calcd. Current Value (LCY)");
            OutPutOption::"Avg. Estimated Value (LCY)":
                exit(Rec."Avg. Estimated Value (LCY)");
            OutPutOption::"Avg. Calc. Current Value (LCY)":
                exit(Rec."Avg.Calcd. Current Value (LCY)");
        end;
    end;

    local procedure FormatAmount(var Text: Text[250])
    var
        Amount: Decimal;
    begin
        if Text <> '' then begin
            Evaluate(Amount, Text);
            if OutPutOption = OutPutOption::"No of Opportunities" then
                Text := Format(Amount, 0, Text000);
            Amount := MatrixMgt.RoundAmount(Amount, RoundingFactor);
            if Amount = 0 then
                Text := ''
            else
                case RoundingFactor of
                    RoundingFactor::"1":
                        Text := Format(Amount);
                    RoundingFactor::"1000", RoundingFactor::"1000000":
                        Text := Format(Amount, 0, Text001);
                end;
        end;
    end;

    local procedure FindRec(TableType: Enum "Opportunity Table Type"; var RMMatrixMgt: Record "RM Matrix Management"; Which: Text[250]): Boolean
    var
        Found: Boolean;
    begin
        case TableType of
            TableType::"Sales Person":
                begin
                    RMMatrixMgt."No." := CopyStr(RMMatrixMgt."No.", 1, MaxStrLen(SalespersonPurchaser.Code));
                    SalespersonPurchaser.Code := CopyStr(RMMatrixMgt."No.", 1, MaxStrLen(SalespersonPurchaser.Code));
                    Found := SalespersonPurchaser.Find(Which);
                    if Found then
                        CopySalespersonToBuf(SalespersonPurchaser, RMMatrixMgt);
                end;
            TableType::Campaign:
                begin
                    Campaign."No." := RMMatrixMgt."No.";
                    Found := Campaign.Find(Which);
                    if Found then
                        CopyCampaignToBuf(Campaign, RMMatrixMgt);
                end;
            TableType::Contact:
                begin
                    Cont."Company Name" := RMMatrixMgt."Company Name";
                    Cont.Type := RMMatrixMgt.Type;
                    Cont.Name := RMMatrixMgt.Name;
                    Cont."No." := RMMatrixMgt."No.";
                    Cont."Company No." := RMMatrixMgt."Company No.";
                    Found := Cont.Find(Which);
                    if Found then
                        CopyContactToBuf(Cont, RMMatrixMgt);
                end;
        end;
        exit(Found);
    end;

    local procedure NextRec(TableType: Enum "Opportunity Table Type"; var RMMatrixMgt: Record "RM Matrix Management"; Steps: Integer): Integer
    var
        ResultSteps: Integer;
    begin
        case TableType of
            TableType::"Sales Person":
                begin
                    RMMatrixMgt."No." := CopyStr(RMMatrixMgt."No.", 1, MaxStrLen(SalespersonPurchaser.Code));
                    SalespersonPurchaser.Code := CopyStr(RMMatrixMgt."No.", 1, MaxStrLen(SalespersonPurchaser.Code));
                    ResultSteps := SalespersonPurchaser.Next(Steps);
                    if ResultSteps <> 0 then
                        CopySalespersonToBuf(SalespersonPurchaser, RMMatrixMgt);
                end;
            TableType::Campaign:
                begin
                    Campaign."No." := RMMatrixMgt."No.";
                    ResultSteps := Campaign.Next(Steps);
                    if ResultSteps <> 0 then
                        CopyCampaignToBuf(Campaign, RMMatrixMgt);
                end;
            TableType::Contact:
                begin
                    Cont."Company Name" := RMMatrixMgt."Company Name";
                    Cont.Type := RMMatrixMgt.Type;
                    Cont.Name := RMMatrixMgt.Name;
                    Cont."No." := RMMatrixMgt."No.";
                    Cont."Company No." := RMMatrixMgt."Company No.";
                    ResultSteps := Cont.Next(Steps);
                    if ResultSteps <> 0 then
                        CopyContactToBuf(Cont, RMMatrixMgt);
                end;
        end;
        exit(ResultSteps);
    end;

    local procedure CopySalespersonToBuf(var SalesPurchPerson: Record "Salesperson/Purchaser"; var RMMatrixMgt: Record "RM Matrix Management")
    begin
        RMMatrixMgt.Init();
        RMMatrixMgt."Company Name" := SalesPurchPerson.Code;
        RMMatrixMgt.Type := RMMatrixMgt.Type::Person;
        RMMatrixMgt.Name := SalesPurchPerson.Name;
        RMMatrixMgt."No." := SalesPurchPerson.Code;
        RMMatrixMgt."Company No." := '';
    end;

    local procedure CopyCampaignToBuf(var Campaign: Record Campaign; var RMMatrixMgt: Record "RM Matrix Management")
    begin
        RMMatrixMgt.Init();
        RMMatrixMgt."Company Name" := Campaign."No.";
        RMMatrixMgt.Type := RMMatrixMgt.Type::Person;
        RMMatrixMgt.Name := CopyStr(Campaign.Description, 1, MaxStrLen(RMMatrixMgt.Name));
        RMMatrixMgt."No." := Campaign."No.";
        RMMatrixMgt."Company No." := '';
    end;

    local procedure CopyContactToBuf(var Cont: Record Contact; var RMMatrixMgt: Record "RM Matrix Management")
    begin
        RMMatrixMgt.Init();
        RMMatrixMgt."Company Name" := CopyStr(Cont."Company Name", 1, MaxStrLen(RMMatrixMgt."Company Name"));
        RMMatrixMgt.Type := Cont.Type;
        RMMatrixMgt.Name := CopyStr(Cont.Name, 1, MaxStrLen(RMMatrixMgt.Name));
        RMMatrixMgt."No." := Cont."No.";
        RMMatrixMgt."Company No." := Cont."Company No.";
    end;

    local procedure ValidateStatus()
    begin
        case OptionStatusFilter of
            OptionStatusFilter::"In Progress":
                Rec.SetRange("Action Taken Filter", Rec."Action Taken Filter"::" ", Rec."Action Taken Filter"::Jumped);
            OptionStatusFilter::Won:
                Rec.SetRange("Action Taken Filter", Rec."Action Taken Filter"::Won);
            OptionStatusFilter::Lost:
                Rec.SetRange("Action Taken Filter", Rec."Action Taken Filter"::Lost);
        end;
    end;

    local procedure ValidateFilter()
    begin
        case TableType of
            TableType::"Sales Person":
                begin
                    Rec.SetRange("Campaign Filter");
                    Rec.SetRange("Contact Filter");
                    Rec.SetRange("Contact Company Filter");
                    UpdateSalespersonFilter();
                end;
            TableType::Campaign:
                begin
                    Rec.SetRange("Salesperson Filter");
                    Rec.SetRange("Contact Filter");
                    Rec.SetRange("Contact Company Filter");
                    UpdateCampaignFilter();
                end;
            TableType::Contact:
                begin
                    Rec.SetRange("Salesperson Filter");
                    Rec.SetRange("Campaign Filter");
                    UpdateContactFilter();
                end;
        end;
        CurrPage.Update(false);
    end;

    local procedure UpdateSalespersonFilter()
    begin
        SalespersonPurchaser.Reset();
        if Rec.GetFilter("Action Taken Filter") <> '' then
            SalespersonPurchaser.SetFilter("Action Taken Filter", Rec.GetFilter("Action Taken Filter"));
        if Rec.GetFilter("Sales Cycle Filter") <> '' then
            SalespersonPurchaser.SetFilter("Sales Cycle Filter", Rec.GetFilter("Sales Cycle Filter"));
        if Rec.GetFilter("Sales Cycle Stage Filter") <> '' then
            SalespersonPurchaser.SetFilter("Sales Cycle Stage Filter", Rec.GetFilter("Sales Cycle Stage Filter"));
        if Rec.GetFilter("Probability % Filter") <> '' then
            SalespersonPurchaser.SetFilter("Probability % Filter", Rec.GetFilter("Probability % Filter"));
        if Rec.GetFilter("Completed % Filter") <> '' then
            SalespersonPurchaser.SetFilter("Completed % Filter", Rec.GetFilter("Completed % Filter"));
        if Rec.GetFilter("Close Opportunity Filter") <> '' then
            SalespersonPurchaser.SetFilter("Close Opportunity Filter", Rec.GetFilter("Close Opportunity Filter"));
        if Rec.GetFilter("Contact Filter") <> '' then
            SalespersonPurchaser.SetFilter("Contact Filter", Rec.GetFilter("Contact Filter"));
        if Rec.GetFilter("Contact Company Filter") <> '' then
            SalespersonPurchaser.SetFilter("Contact Company Filter", Rec.GetFilter("Contact Company Filter"));
        if Rec.GetFilter("Campaign Filter") <> '' then
            SalespersonPurchaser.SetFilter("Campaign Filter", Rec.GetFilter("Campaign Filter"));
        if Rec.GetFilter("Estimated Value Filter") <> '' then
            SalespersonPurchaser.SetFilter("Estimated Value Filter", Rec.GetFilter("Estimated Value Filter"));
        if Rec.GetFilter("Calcd. Current Value Filter") <> '' then
            SalespersonPurchaser.SetFilter("Calcd. Current Value Filter", Rec.GetFilter("Calcd. Current Value Filter"));
        if Rec.GetFilter("Chances of Success % Filter") <> '' then
            SalespersonPurchaser.SetFilter("Chances of Success % Filter", Rec.GetFilter("Chances of Success % Filter"));
        SalespersonPurchaser.SetRange("Opportunity Entry Exists", true);
    end;

    local procedure UpdateCampaignFilter()
    begin
        Campaign.Reset();
        if Rec.GetFilter("Action Taken Filter") <> '' then
            Campaign.SetFilter("Action Taken Filter", Rec.GetFilter("Action Taken Filter"));
        if Rec.GetFilter("Sales Cycle Filter") <> '' then
            Campaign.SetFilter("Sales Cycle Filter", Rec.GetFilter("Sales Cycle Filter"));
        if Rec.GetFilter("Sales Cycle Stage Filter") <> '' then
            Campaign.SetFilter("Sales Cycle Stage Filter", Rec.GetFilter("Sales Cycle Stage Filter"));
        if Rec.GetFilter("Probability % Filter") <> '' then
            Campaign.SetFilter("Probability % Filter", Rec.GetFilter("Probability % Filter"));
        if Rec.GetFilter("Completed % Filter") <> '' then
            Campaign.SetFilter("Completed % Filter", Rec.GetFilter("Completed % Filter"));
        if Rec.GetFilter("Close Opportunity Filter") <> '' then
            Campaign.SetFilter("Close Opportunity Filter", Rec.GetFilter("Close Opportunity Filter"));
        if Rec.GetFilter("Contact Filter") <> '' then
            Campaign.SetFilter("Contact Filter", Rec.GetFilter("Contact Filter"));
        if Rec.GetFilter("Contact Company Filter") <> '' then
            Campaign.SetFilter("Contact Company Filter", Rec.GetFilter("Contact Company Filter"));
        if Rec.GetFilter("Estimated Value Filter") <> '' then
            Campaign.SetFilter("Estimated Value Filter", Rec.GetFilter("Estimated Value Filter"));
        if Rec.GetFilter("Salesperson Filter") <> '' then
            Campaign.SetFilter("Salesperson Filter", Rec.GetFilter("Salesperson Filter"));
        if Rec.GetFilter("Calcd. Current Value Filter") <> '' then
            Campaign.SetFilter("Calcd. Current Value Filter", Rec.GetFilter("Calcd. Current Value Filter"));
        if Rec.GetFilter("Chances of Success % Filter") <> '' then
            Campaign.SetFilter("Chances of Success % Filter", Rec.GetFilter("Chances of Success % Filter"));
        Campaign.SetRange("Opportunity Entry Exists", true);
    end;

    local procedure UpdateContactFilter()
    begin
        Cont.Reset();
        Cont.SetCurrentKey("Company Name", "Company No.", Type, Name);
        if Rec.GetFilter("Action Taken Filter") <> '' then
            Cont.SetFilter("Action Taken Filter", Rec.GetFilter("Action Taken Filter"));
        if Rec.GetFilter("Sales Cycle Filter") <> '' then
            Cont.SetFilter("Sales Cycle Filter", Rec.GetFilter("Sales Cycle Filter"));
        if Rec.GetFilter("Sales Cycle Stage Filter") <> '' then
            Cont.SetFilter("Sales Cycle Stage Filter", Rec.GetFilter("Sales Cycle Stage Filter"));
        if Rec.GetFilter("Probability % Filter") <> '' then
            Cont.SetFilter("Probability % Filter", Rec.GetFilter("Probability % Filter"));
        if Rec.GetFilter("Completed % Filter") <> '' then
            Cont.SetFilter("Completed % Filter", Rec.GetFilter("Completed % Filter"));
        if Rec.GetFilter("Close Opportunity Filter") <> '' then
            Cont.SetFilter("Close Opportunity Filter", Rec.GetFilter("Close Opportunity Filter"));
        if Rec.GetFilter("Estimated Value Filter") <> '' then
            Cont.SetFilter("Estimated Value Filter", Rec.GetFilter("Estimated Value Filter"));
        if Rec.GetFilter("Salesperson Filter") <> '' then
            Cont.SetFilter("Salesperson Filter", Rec.GetFilter("Salesperson Filter"));
        if Rec.GetFilter("Calcd. Current Value Filter") <> '' then
            Cont.SetFilter("Calcd. Current Value Filter", Rec.GetFilter("Calcd. Current Value Filter"));
        if Rec.GetFilter("Chances of Success % Filter") <> '' then
            Cont.SetFilter("Chances of Success % Filter", Rec.GetFilter("Chances of Success % Filter"));
        if Rec.GetFilter("Campaign Filter") <> '' then
            Cont.SetFilter("Campaign Filter", Rec.GetFilter("Campaign Filter"));
        Cont.SetRange("Opportunity Entry Exists", true);
    end;

    procedure LoadMatrix(NewMatrixColumns: array[32] of Text[1024]; var NewMatrixRecords: array[32] of Record Date; NewTableType: Enum "Opportunity Table Type"; NewOutput: Enum "Opportunity Output"; NewRoundingFactor: Enum "Analysis Rounding Factor"; NewOptionStatusFilter: Option "In Progress",Won,Lost; NewCloseOpportunityFilter: Text; NewSuccessChanceFilter: Text; NewProbabilityFilter: Text; NewCompletedFilter: Text; NewEstimatedValueFilter: Text; NewCalcdCurrentValueFilter: Text; NewSalesCycleFilter: Text; NewSalesCycleStageFilter: Text; NewNoOfColumns: Integer)
    begin
        CopyArray(MATRIX_CaptionSet, NewMatrixColumns, 1);
        CopyArray(MatrixRecords, NewMatrixRecords, 1);
        TableType := NewTableType;
        OutPutOption := NewOutput;
        RoundingFactor := NewRoundingFactor;
        OptionStatusFilter := NewOptionStatusFilter;
        Rec."Close Opportunity Filter" := NewCloseOpportunityFilter;
        SuccessChanceFilter := NewSuccessChanceFilter;
        ProbabilityFilter := NewProbabilityFilter;
        CompletedFilter := NewCompletedFilter;
        CalcdCurrentValueFilter := NewCalcdCurrentValueFilter;
        SalesCycleFilter := NewSalesCycleFilter;
        SalesCycleStageFilter := NewSalesCycleStageFilter;
        EstimatedValueFilter := NewEstimatedValueFilter;
        MATRIX_CurrentNoOfMatrixColumn := NewNoOfColumns;
        RoundingFactorFormatString := MatrixMgt.FormatRoundingFactor(RoundingFactor, false);
    end;

    local procedure MATRIX_OnDrillDown(MATRIX_ColumnOrdinal: Integer)
    begin
        TempOpp.DeleteAll();

        OppEntry.SetRange("Estimated Close Date", MatrixRecords[MATRIX_ColumnOrdinal]."Period Start",
          MatrixRecords[MATRIX_ColumnOrdinal]."Period End");

        OppEntry.SetRange(Active, true);

        case TableType of
            TableType::"Sales Person":
                OppEntry.SetFilter("Salesperson Code", Rec."No.");
            TableType::Campaign:
                OppEntry.SetFilter("Campaign No.", Rec."No.");
            TableType::Contact:
                OppEntry.SetFilter("Contact No.", Rec."No.");
        end;

        if Rec.GetFilter("Contact Company Filter") <> '' then
            OppEntry.SetFilter("Contact Company No.", Rec."Company No.");

        if Rec.GetFilter("Sales Cycle Filter") <> '' then
            OppEntry.SetFilter("Sales Cycle Code", Rec.GetFilter("Sales Cycle Filter"));

        if Rec.GetFilter("Sales Cycle Stage Filter") <> '' then
            OppEntry.SetFilter("Sales Cycle Stage", Rec.GetFilter("Sales Cycle Stage Filter"));

        if Rec.GetFilter("Action Taken Filter") <> '' then
            OppEntry.SetFilter("Action Taken", Rec.GetFilter("Action Taken Filter"));

        if Rec.GetFilter("Probability % Filter") <> '' then
            OppEntry.SetFilter("Probability %", Rec.GetFilter("Probability % Filter"));

        if Rec.GetFilter("Completed % Filter") <> '' then
            OppEntry.SetFilter("Completed %", Rec.GetFilter("Completed % Filter"));

        if Rec.GetFilter("Close Opportunity Filter") <> '' then
            OppEntry.SetFilter("Close Opportunity Code", Rec.GetFilter("Close Opportunity Filter"));

        if Rec.GetFilter("Chances of Success % Filter") <> '' then
            OppEntry.SetFilter("Chances of Success %", Rec.GetFilter("Chances of Success % Filter"));

        if Rec.GetFilter("Estimated Value Filter") <> '' then
            OppEntry.SetFilter("Estimated Value (LCY)", Rec.GetFilter("Estimated Value Filter"));

        if Rec.GetFilter("Calcd. Current Value Filter") <> '' then
            OppEntry.SetFilter("Calcd. Current Value (LCY)", Rec.GetFilter("Calcd. Current Value Filter"));

        if OppEntry.Find('-') then
            repeat
                Opp.Get(OppEntry."Opportunity No.");
                TempOpp := Opp;
                TempOpp.Insert();
            until OppEntry.Next() = 0;

        PAGE.Run(PAGE::"Active Opportunity List", TempOpp);
    end;

    local procedure MATRIX_OnAfterGetRecord(MATRIX_ColumnOrdinal: Integer)
    var
        TestAmount: Text[80];
    begin
        SetFilters();
        Rec.SetRange("Date Filter", MatrixRecords[MATRIX_ColumnOrdinal]."Period Start", MatrixRecords[MATRIX_ColumnOrdinal]."Period End");

        case OutPutOption of
            OutPutOption::"No of Opportunities":
                Rec.CalcFields("No. of Opportunities");
            OutPutOption::"Estimated Value (LCY)":
                Rec.CalcFields("Estimated Value (LCY)");
            OutPutOption::"Calc. Current Value (LCY)":
                Rec.CalcFields("Calcd. Current Value (LCY)");
            OutPutOption::"Avg. Estimated Value (LCY)":
                Rec.CalcFields("Avg. Estimated Value (LCY)");
            OutPutOption::"Avg. Calc. Current Value (LCY)":
                Rec.CalcFields("Avg.Calcd. Current Value (LCY)");
        end;
        if ReturnOutput() = 0 then
            MATRIX_CellData[MATRIX_ColumnOrdinal] := ''
        else begin
            TestAmount := Format(ReturnOutput(), 0, 0);
            FormatAmount(TestAmount);
            MATRIX_CellData[MATRIX_ColumnOrdinal] := TestAmount;
        end;
    end;

    local procedure TestFilters()
    begin
        if EstimatedValueFilter <> '' then
            Rec.SetFilter("Estimated Value Filter", EstimatedValueFilter)
        else
            Rec.SetRange("Estimated Value Filter");

        if SalesCycleStageFilter <> '' then
            Rec.SetFilter("Sales Cycle Stage Filter", SalesCycleStageFilter)
        else
            Rec.SetRange("Sales Cycle Stage Filter");

        if SuccessChanceFilter <> '' then
            Rec.SetFilter("Chances of Success % Filter", SuccessChanceFilter)
        else
            Rec.SetRange("Chances of Success % Filter");

        if ProbabilityFilter <> '' then
            Rec.SetFilter("Probability % Filter", ProbabilityFilter)
        else
            Rec.SetRange("Probability % Filter");

        if CompletedFilter <> '' then
            Rec.SetFilter("Completed % Filter", CompletedFilter)
        else
            Rec.SetRange("Completed % Filter");

        if CalcdCurrentValueFilter <> '' then
            Rec.SetFilter("Calcd. Current Value Filter", CalcdCurrentValueFilter)
        else
            Rec.SetRange("Calcd. Current Value Filter");

        if SalesCycleFilter <> '' then
            Rec.SetFilter("Sales Cycle Filter", SalesCycleFilter)
        else
            Rec.SetRange("Sales Cycle Filter");
    end;

    procedure SetColumnVisibility()
    begin
        Field1Visible := MATRIX_CurrentNoOfMatrixColumn >= 1;
        Field2Visible := MATRIX_CurrentNoOfMatrixColumn >= 2;
        Field3Visible := MATRIX_CurrentNoOfMatrixColumn >= 3;
        Field4Visible := MATRIX_CurrentNoOfMatrixColumn >= 4;
        Field5Visible := MATRIX_CurrentNoOfMatrixColumn >= 5;
        Field6Visible := MATRIX_CurrentNoOfMatrixColumn >= 6;
        Field7Visible := MATRIX_CurrentNoOfMatrixColumn >= 7;
        Field8Visible := MATRIX_CurrentNoOfMatrixColumn >= 8;
        Field9Visible := MATRIX_CurrentNoOfMatrixColumn >= 9;
        Field10Visible := MATRIX_CurrentNoOfMatrixColumn >= 10;
        Field11Visible := MATRIX_CurrentNoOfMatrixColumn >= 11;
        Field12Visible := MATRIX_CurrentNoOfMatrixColumn >= 12;
        Field13Visible := MATRIX_CurrentNoOfMatrixColumn >= 13;
        Field14Visible := MATRIX_CurrentNoOfMatrixColumn >= 14;
        Field15Visible := MATRIX_CurrentNoOfMatrixColumn >= 15;
        Field16Visible := MATRIX_CurrentNoOfMatrixColumn >= 16;
        Field17Visible := MATRIX_CurrentNoOfMatrixColumn >= 17;
        Field18Visible := MATRIX_CurrentNoOfMatrixColumn >= 18;
        Field19Visible := MATRIX_CurrentNoOfMatrixColumn >= 19;
        Field20Visible := MATRIX_CurrentNoOfMatrixColumn >= 20;
        Field21Visible := MATRIX_CurrentNoOfMatrixColumn >= 21;
        Field22Visible := MATRIX_CurrentNoOfMatrixColumn >= 22;
        Field23Visible := MATRIX_CurrentNoOfMatrixColumn >= 23;
        Field24Visible := MATRIX_CurrentNoOfMatrixColumn >= 24;
        Field25Visible := MATRIX_CurrentNoOfMatrixColumn >= 25;
        Field26Visible := MATRIX_CurrentNoOfMatrixColumn >= 26;
        Field27Visible := MATRIX_CurrentNoOfMatrixColumn >= 27;
        Field28Visible := MATRIX_CurrentNoOfMatrixColumn >= 28;
        Field29Visible := MATRIX_CurrentNoOfMatrixColumn >= 29;
        Field30Visible := MATRIX_CurrentNoOfMatrixColumn >= 30;
        Field31Visible := MATRIX_CurrentNoOfMatrixColumn >= 31;
        Field32Visible := MATRIX_CurrentNoOfMatrixColumn >= 32;
    end;

    local procedure FormatStr(): Text
    begin
        exit(RoundingFactorFormatString);
    end;
}