Table 5127 Deferral Header Archive, source in 29

Source29

src/Layers/W1/BaseApp/Finance/Deferral/DeferralHeaderArchive.Table.al188 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.Finance.Deferral;

using Microsoft.Finance.Currency;

/// <summary>
/// Archive table for deferral header records, storing historical versions of deferral schedules.
/// Maintains deferral schedule history when documents are archived for audit and reference purposes.
/// </summary>
table 5127 "Deferral Header Archive"
{
    Caption = 'Deferral Header Archive';
    DataClassification = CustomerContent;

    fields
    {
        /// <summary>
        /// Type of source document (Purchase, Sales, or G/L) that initiated this archived deferral.
        /// </summary>
        field(1; "Deferral Doc. Type"; Enum "Deferral Document Type")
        {
            Caption = 'Deferral Doc. Type';
        }
        /// <summary>
        /// Document type ID from the archived source document.
        /// </summary>
        field(4; "Document Type"; Integer)
        {
            Caption = 'Document Type';
        }
        /// <summary>
        /// Document number from the archived source document.
        /// </summary>
        field(5; "Document No."; Code[20])
        {
            Caption = 'Document No.';
        }
        /// <summary>
        /// Line number within the archived source document.
        /// </summary>
        field(6; "Line No."; Integer)
        {
            Caption = 'Line No.';
        }
        /// <summary>
        /// Deferral template code used for this archived schedule.
        /// </summary>
        field(7; "Deferral Code"; Code[10])
        {
            Caption = 'Deferral Code';
            NotBlank = true;
            TableRelation = "Deferral Template"."Deferral Code";
            ValidateTableRelation = false;
        }
        /// <summary>
        /// Amount that was deferred in the archived document currency.
        /// </summary>
        field(8; "Amount to Defer"; Decimal)
        {
            AutoFormatExpression = Rec."Currency Code";
            AutoFormatType = 1;
            Caption = 'Amount to Defer';
        }
        /// <summary>
        /// Amount that was deferred converted to local currency (LCY) at the time of archiving.
        /// </summary>
        field(9; "Amount to Defer (LCY)"; Decimal)
        {
            AutoFormatExpression = '';
            AutoFormatType = 1;
            Caption = 'Amount to Defer (LCY)';
        }
        /// <summary>
        /// Calculation method used for the archived deferral schedule.
        /// </summary>
        field(10; "Calc. Method"; Enum "Deferral Calculation Method")
        {
            Caption = 'Calc. Method';
        }
        /// <summary>
        /// Start date used for the archived deferral schedule.
        /// </summary>
        field(11; "Start Date"; Date)
        {
            Caption = 'Start Date';
        }
        /// <summary>
        /// Number of periods defined for the archived deferral schedule.
        /// </summary>
        field(12; "No. of Periods"; Integer)
        {
            BlankZero = true;
            Caption = 'No. of Periods';
            NotBlank = true;
        }
        /// <summary>
        /// Description of the archived deferral schedule.
        /// </summary>
        field(13; "Schedule Description"; Text[100])
        {
            Caption = 'Schedule Description';
        }
        /// <summary>
        /// Original amount to defer before any modifications at the time of archiving.
        /// </summary>
        field(14; "Initial Amount to Defer"; Decimal)
        {
            AutoFormatType = 1;
            AutoFormatExpression = Rec."Currency Code";
            Caption = 'Initial Amount to Defer';
        }
        /// <summary>
        /// Currency code of the archived source document.
        /// </summary>
        field(15; "Currency Code"; Code[10])
        {
            Caption = 'Currency Code';
            TableRelation = Currency.Code;
        }
        /// <summary>
        /// Version number of the archived document.
        /// </summary>
        field(5047; "Version No."; Integer)
        {
            Caption = 'Version No.';
        }
        /// <summary>
        /// Document number occurrence for handling duplicate document numbers.
        /// </summary>
        field(5048; "Doc. No. Occurrence"; Integer)
        {
            Caption = 'Doc. No. Occurrence';
        }
    }

    keys
    {
        key(Key1; "Deferral Doc. Type", "Document Type", "Document No.", "Doc. No. Occurrence", "Version No.", "Line No.")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    begin
        DeleteLines("Deferral Doc. Type", "Document Type", "Document No.", "Doc. No. Occurrence", "Version No.", "Line No.");
    end;

    /// <summary>
    /// Deletes an archived deferral header and all associated lines.
    /// Used when cleaning up document archives.
    /// </summary>
    /// <param name="DeferralDocType">Type of document containing the deferral</param>
    /// <param name="DocumentType">Document type ID</param>
    /// <param name="DocumentNo">Document number</param>
    /// <param name="DocNoOcurrence">Document number occurrence for archive</param>
    /// <param name="VersionNo">Version number for archive</param>
    /// <param name="LineNo">Line number within the document</param>
    procedure DeleteHeader(DeferralDocType: Integer; DocumentType: Integer; DocumentNo: Code[20]; DocNoOcurrence: Integer; VersionNo: Integer; LineNo: Integer)
    begin
        if Get(DeferralDocType, DocumentType, DocumentNo, LineNo) then begin
            Delete();
            DeleteLines(Enum::"Deferral Document Type".FromInteger(DeferralDocType), DocumentType, DocumentNo, DocNoOcurrence, VersionNo, LineNo);
        end;
    end;

    local procedure DeleteLines(DeferralDocType: Enum "Deferral Document Type"; DocumentType: Integer; DocumentNo: Code[20]; DocNoOcurrence: Integer; VersionNo: Integer; LineNo: Integer)
    var
        DeferralLineArchive: Record "Deferral Line Archive";
    begin
        DeferralLineArchive.SetRange("Deferral Doc. Type", DeferralDocType);
        DeferralLineArchive.SetRange("Document Type", DocumentType);
        DeferralLineArchive.SetRange("Document No.", DocumentNo);
        DeferralLineArchive.SetRange("Doc. No. Occurrence", DocNoOcurrence);
        DeferralLineArchive.SetRange("Version No.", VersionNo);
        DeferralLineArchive.SetRange("Line No.", LineNo);
        if DeferralLineArchive.FindFirst() then
            DeferralLineArchive.DeleteAll();
    end;
}