Page 781 Sales Pipeline Chart, source in 29

Source29

src/Layers/W1/BaseApp/Sales/Analysis/SalesPipelineChart.Page.al135 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.Sales.Analysis;

using Microsoft.CRM.Opportunity;
using System.Integration;
using System.Visualization;

/// <summary>
/// Displays a funnel chart visualization of the sales pipeline by sales cycle stage.
/// </summary>
page 781 "Sales Pipeline Chart"
{
    Caption = 'Sales Pipeline';
    PageType = CardPart;

    layout
    {
        area(content)
        {
            field(StatusText; StatusText)
            {
                ApplicationArea = RelationshipMgmt;
                Caption = 'Status Text';
                Enabled = false;
                ShowCaption = false;
                Style = StrongAccent;
                StyleExpr = true;
                ToolTip = 'Specifies the status of the chart.';
            }
            usercontrol(BusinessChart; BusinessChart)
            {
                ApplicationArea = RelationshipMgmt;

                trigger DataPointClicked(Point: JsonObject)
                begin
                    BusinessChartBuffer.SetDrillDownIndexes(Point);
                    SalesPipelineChartMgt.DrillDown(BusinessChartBuffer, TempSalesCycleStage);
                end;

                trigger DataPointDoubleClicked(Point: JsonObject)
                begin
                end;

                trigger AddInReady()
                begin
                    if not IsChartDataReady then
                        exit;

                    IsChartAddInReady := true;
                    UpdateChart(SalesCycle);
                end;

                trigger Refresh()
                begin
                    if IsChartAddInReady and IsChartDataReady then
                        UpdateChart(SalesCycle);
                end;
            }
        }
    }

    actions
    {
        area(processing)
        {
            action(PrevSalesCycle)
            {
                ApplicationArea = RelationshipMgmt;
                Caption = 'Previous Sales Cycle';
                Enabled = PrevSalesCycleAvailable;
                Image = PreviousRecord;
                ToolTip = 'View the previous chart.';

                trigger OnAction()
                begin
                    SalesPipelineChartMgt.SetPrevNextSalesCycle(SalesCycle, NextSalesCycleAvailable, PrevSalesCycleAvailable, -1);
                    UpdateChart(SalesCycle);
                end;
            }
            action(NextSalesCycle)
            {
                ApplicationArea = RelationshipMgmt;
                Caption = 'Next Sales Cycle';
                Enabled = NextSalesCycleAvailable;
                Image = NextRecord;
                ToolTip = 'View the next chart.';

                trigger OnAction()
                begin
                    SalesPipelineChartMgt.SetPrevNextSalesCycle(SalesCycle, NextSalesCycleAvailable, PrevSalesCycleAvailable, 1);
                    UpdateChart(SalesCycle);
                end;
            }
        }
    }

    trigger OnOpenPage()
    begin
        IsChartDataReady :=
          SalesPipelineChartMgt.SetDefaultSalesCycle(SalesCycle, NextSalesCycleAvailable, PrevSalesCycleAvailable);
    end;

    var
        BusinessChartBuffer: Record "Business Chart Buffer";
        SalesCycle: Record "Sales Cycle";
        TempSalesCycleStage: Record "Sales Cycle Stage" temporary;
        StatusText: Text;
        IsChartAddInReady: Boolean;
        NextSalesCycleAvailable: Boolean;
        PrevSalesCycleAvailable: Boolean;

    protected var
        SalesPipelineChartMgt: Codeunit "Sales Pipeline Chart Mgt.";
        IsChartDataReady: Boolean;

    protected procedure UpdateChart(SalesCycle: Record "Sales Cycle")
    begin
        if not IsChartAddInReady then
            exit;

        SalesPipelineChartMgt.UpdateData(BusinessChartBuffer, TempSalesCycleStage, SalesCycle);
        BusinessChartBuffer.UpdateChart(CurrPage.BusinessChart);
        UpdateStatusText(SalesCycle);
    end;

    local procedure UpdateStatusText(SalesCycle: Record "Sales Cycle")
    begin
        StatusText := SalesCycle.TableCaption + ': ' + SalesCycle.Code;
    end;
}