Page 9106 Customer Ledger Entry FactBox

App
Base Application
Namespace
Microsoft.Sales.Receivables
Versions
17-28
Source table
21

Events, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Sales/Receivables/CustomerLedgerEntryFactBox.Page.al247 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.Receivables;

using Microsoft.Finance.GeneralLedger.Ledger;
using Microsoft.Sales.FinanceCharge;

/// <summary>
/// Displays key details for a customer ledger entry in a FactBox, including due date, applied entries count, and reminder information.
/// </summary>
page 9106 "Customer Ledger Entry FactBox"
{
    Caption = 'Customer Ledger Entry Details';
    PageType = CardPart;
    SourceTable = "Cust. Ledger Entry";

    layout
    {
        area(content)
        {
            field(DocumentHeading; DocumentHeading)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Document';
                DrillDown = true;
                ToolTip = 'Specifies the document that the entry represents.';

                trigger OnDrillDown()
                var
                    GLEntry: Record "G/L Entry";
                begin
                    if not Rec.ShowDoc() then begin
                        GLEntry.SetCurrentKey("Document No.", "Posting Date");
                        GLEntry.SetRange("Document No.", Rec."Document No.");
                        GLEntry.SetRange("Posting Date", Rec."Posting Date");

                        PAGE.Run(PAGE::"General Ledger Entries", GLEntry);
                    end;
                end;
            }
            field("Due Date"; Rec."Due Date")
            {
                ApplicationArea = Basic, Suite;
            }
            field("Pmt. Discount Date"; Rec."Pmt. Discount Date")
            {
                ApplicationArea = Basic, Suite;
            }
            field(NoOfReminderFinEntries; NoOfReminderFinEntries)
            {
                ApplicationArea = Suite;
                Caption = 'Reminder/Fin. Charge Entries';
                DrillDown = true;
                ToolTip = 'Specifies reminder entries or finance charge entries for the customer ledger entry.';

                trigger OnDrillDown()
                var
                    ReminderFinEntry: Record "Reminder/Fin. Charge Entry";
                begin
                    ReminderFinEntry.SetRange("Customer Entry No.", Rec."Entry No.");

                    PAGE.Run(PAGE::"Reminder/Fin. Charge Entries", ReminderFinEntry);
                end;
            }
            field(NoOfAppliedEntries; NoOfAppliedEntries)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Applied Entries';
                DrillDown = true;
                ToolTip = 'Specifies applied entries for the customer ledger entry.';

                trigger OnDrillDown()
                var
                    AppliedCustomerEntriesList: Page "Applied Customer Entries";
                begin
                    AppliedCustomerEntriesList.SetTempCustLedgEntry(Rec."Entry No.");
                    AppliedCustomerEntriesList.Run();
                end;
            }
            field(NoOfDetailedCustomerEntries; NoOfDetailedCustomerEntries)
            {
                ApplicationArea = Basic, Suite;
                Caption = 'Detailed Ledger Entries';
                DrillDown = true;
                ToolTip = 'Specifies detailed ledger entries for the customer ledger entry.';

                trigger OnDrillDown()
                var
                    DetailedCustLedgEntry: Record "Detailed Cust. Ledg. Entry";
                begin
                    DetailedCustLedgEntry.SetRange("Cust. Ledger Entry No.", Rec."Entry No.");
                    DetailedCustLedgEntry.SetRange("Customer No.", Rec."Customer No.");
                    PAGE.Run(PAGE::"Detailed Cust. Ledg. Entries", DetailedCustLedgEntry);
                end;
            }
        }
    }

    actions
    {
    }

    trigger OnAfterGetRecord()
    begin
        DocumentHeading := GetDocumentHeading(Rec);
        CalcNoOfRecords();
    end;

    trigger OnFindRecord(Which: Text): Boolean
    begin
        NoOfReminderFinEntries := 0;
        NoOfAppliedEntries := 0;
        DocumentHeading := '';

        exit(Rec.Find(Which));
    end;

    trigger OnOpenPage()
    begin
        DocumentHeading := GetDocumentHeading(Rec);
        CalcNoOfRecords();
    end;

    var
        NoOfReminderFinEntries: Integer;
        NoOfAppliedEntries: Integer;
        NoOfDetailedCustomerEntries: Integer;
        DocumentHeading: Text[250];
#pragma warning disable AA0074
        Text000: Label 'Document';
#pragma warning restore AA0074

    local procedure CalcNoOfRecords()
    var
        ReminderFinChargeEntry: Record "Reminder/Fin. Charge Entry";
        DetailedCustLedgEntry: Record "Detailed Cust. Ledg. Entry";
    begin
        ReminderFinChargeEntry.Reset();
        ReminderFinChargeEntry.SetRange("Customer Entry No.", Rec."Entry No.");
        NoOfReminderFinEntries := ReminderFinChargeEntry.Count();

        NoOfAppliedEntries := 0;
        if Rec."Entry No." <> 0 then
            NoOfAppliedEntries := GetNoOfAppliedEntries(Rec);

        DetailedCustLedgEntry.Reset();
        DetailedCustLedgEntry.SetRange("Cust. Ledger Entry No.", Rec."Entry No.");
        DetailedCustLedgEntry.SetRange("Customer No.", Rec."Customer No.");
        NoOfDetailedCustomerEntries := DetailedCustLedgEntry.Count();
    end;

    local procedure GetNoOfAppliedEntries(CustLedgerEntry: Record "Cust. Ledger Entry"): Integer
    var
        IsHandled: Boolean;
        ReturnedValue: Integer;
    begin
        IsHandled := false;
        OnBeforeGetNoOfAppliedEntries(CustLedgerEntry, ReturnedValue, IsHandled);
        if IsHandled then
            exit(ReturnedValue);
        GetAppliedEntries(CustLedgerEntry);
        exit(CustLedgerEntry.Count);
    end;

    local procedure GetAppliedEntries(var CustLedgerEntry: Record "Cust. Ledger Entry")
    var
        DtldCustLedgEntry1: Record "Detailed Cust. Ledg. Entry";
        DtldCustLedgEntry2: Record "Detailed Cust. Ledg. Entry";
        CreateCustLedgEntry: Record "Cust. Ledger Entry";
    begin
        CreateCustLedgEntry := CustLedgerEntry;

        DtldCustLedgEntry1.SetCurrentKey("Cust. Ledger Entry No.");
        DtldCustLedgEntry1.SetRange("Cust. Ledger Entry No.", CreateCustLedgEntry."Entry No.");
        DtldCustLedgEntry1.SetRange(Unapplied, false);
        if DtldCustLedgEntry1.FindSet() then
            repeat
                if DtldCustLedgEntry1."Cust. Ledger Entry No." =
                   DtldCustLedgEntry1."Applied Cust. Ledger Entry No."
                then begin
                    DtldCustLedgEntry2.Init();
                    DtldCustLedgEntry2.SetCurrentKey("Applied Cust. Ledger Entry No.", "Entry Type");
                    DtldCustLedgEntry2.SetRange(
                      "Applied Cust. Ledger Entry No.", DtldCustLedgEntry1."Applied Cust. Ledger Entry No.");
                    DtldCustLedgEntry2.SetRange("Entry Type", DtldCustLedgEntry2."Entry Type"::Application);
                    DtldCustLedgEntry2.SetRange(Unapplied, false);
                    if DtldCustLedgEntry2.Find('-') then
                        repeat
                            if DtldCustLedgEntry2."Cust. Ledger Entry No." <>
                               DtldCustLedgEntry2."Applied Cust. Ledger Entry No."
                            then begin
                                CustLedgerEntry.SetCurrentKey("Entry No.");
                                CustLedgerEntry.SetRange("Entry No.", DtldCustLedgEntry2."Cust. Ledger Entry No.");
                                if CustLedgerEntry.FindFirst() then
                                    CustLedgerEntry.Mark(true);
                            end;
                        until DtldCustLedgEntry2.Next() = 0;
                end else begin
                    CustLedgerEntry.SetCurrentKey("Entry No.");
                    CustLedgerEntry.SetRange("Entry No.", DtldCustLedgEntry1."Applied Cust. Ledger Entry No.");
                    if CustLedgerEntry.FindFirst() then
                        CustLedgerEntry.Mark(true);
                end;
            until DtldCustLedgEntry1.Next() = 0;

        CustLedgerEntry.SetCurrentKey("Entry No.");
        CustLedgerEntry.SetRange("Entry No.");

        if CreateCustLedgEntry."Closed by Entry No." <> 0 then begin
            CustLedgerEntry."Entry No." := CreateCustLedgEntry."Closed by Entry No.";
            CustLedgerEntry.Mark(true);
        end;

        CustLedgerEntry.SetCurrentKey("Closed by Entry No.");
        CustLedgerEntry.SetRange("Closed by Entry No.", CreateCustLedgEntry."Entry No.");
        if CustLedgerEntry.FindSet() then
            repeat
                CustLedgerEntry.Mark(true);
            until CustLedgerEntry.Next() = 0;

        CustLedgerEntry.SetCurrentKey("Entry No.");
        CustLedgerEntry.SetRange("Closed by Entry No.");

        CustLedgerEntry.MarkedOnly(true);
    end;

    local procedure GetDocumentHeading(CustLedgerEntry: Record "Cust. Ledger Entry"): Text[50]
    var
        Heading: Text[50];
    begin
        if CustLedgerEntry."Document Type" = CustLedgerEntry."Document Type"::" " then
            Heading := Text000
        else
            Heading := Format(CustLedgerEntry."Document Type");
        Heading := Heading + ' ' + CustLedgerEntry."Document No.";
        exit(Heading);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeGetNoOfAppliedEntries(CustLedgerEntry: Record "Cust. Ledger Entry"; var ReturnedValue: Integer; var IsHandled: Boolean)
    begin
    end;
}