Codeunit 366 Exchange Acc. G/L Journal Line, source in 29

Source29

src/Layers/W1/BaseApp/Finance/GeneralLedger/Journal/ExchangeAccGLJournalLine.Codeunit.al108 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.GeneralLedger.Journal;

using Microsoft.Finance.VAT.Calculation;

/// <summary>
/// Exchanges account and balancing account information in general journal lines for posting reversals and corrections.
/// Swaps all account-related fields including VAT settings, posting groups, and tax information between account and balancing account.
/// </summary>
/// <remarks>
/// Account field exchange functionality for journal line account/balancing account swapping.
/// Comprehensive field swapping including account numbers, VAT settings, posting groups, and tax configurations.
/// Key features: Complete account field exchange, VAT information preservation, posting group swapping, tax setting exchange.
/// Usage: Posting reversals, account corrections, balancing account adjustments with complete field consistency.
/// </remarks>
codeunit 366 "Exchange Acc. G/L Journal Line"
{
    TableNo = "Gen. Journal Line";

    trigger OnRun()
    begin
        OnBeforeOnRun(Rec);

        GenJnlLine2 := Rec;
        Rec."Account Type" := GenJnlLine2."Bal. Account Type";
        Rec."Account No." := GenJnlLine2."Bal. Account No.";
        Rec."VAT %" := GenJnlLine2."Bal. VAT %";
        Rec."VAT Amount" := GenJnlLine2."Bal. VAT Amount";
        Rec."VAT Amount (LCY)" := GenJnlLine2."Bal. VAT Amount (LCY)";
        Rec."VAT Difference" := GenJnlLine2."Bal. VAT Difference";
        Rec."Gen. Posting Type" := GenJnlLine2."Bal. Gen. Posting Type";
        Rec."Gen. Bus. Posting Group" := GenJnlLine2."Bal. Gen. Bus. Posting Group";
        Rec."Gen. Prod. Posting Group" := GenJnlLine2."Bal. Gen. Prod. Posting Group";
        Rec."VAT Bus. Posting Group" := GenJnlLine2."Bal. VAT Bus. Posting Group";
        Rec."VAT Prod. Posting Group" := GenJnlLine2."Bal. VAT Prod. Posting Group";
        Rec."VAT Calculation Type" := GenJnlLine2."Bal. VAT Calculation Type";
        Rec."VAT Base Amount" := GenJnlLine2."Bal. VAT Base Amount";
        Rec."VAT Base Amount (LCY)" := GenJnlLine2."Bal. VAT Base Amount (LCY)";
        Rec."Tax Area Code" := GenJnlLine2."Bal. Tax Area Code";
        Rec."Tax Liable" := GenJnlLine2."Bal. Tax Liable";
        Rec."Tax Group Code" := GenJnlLine2."Bal. Tax Group Code";
        Rec."Use Tax" := GenJnlLine2."Bal. Use Tax";

        Rec."Bal. Account Type" := GenJnlLine2."Account Type";
        Rec."Bal. Account No." := GenJnlLine2."Account No.";
        Rec."Bal. VAT %" := GenJnlLine2."VAT %";
        Rec."Bal. VAT Amount" := GenJnlLine2."VAT Amount";
        Rec."Bal. VAT Amount (LCY)" := GenJnlLine2."VAT Amount (LCY)";
        Rec."Bal. VAT Difference" := GenJnlLine2."VAT Difference";
        Rec."Bal. Gen. Posting Type" := GenJnlLine2."Gen. Posting Type";
        Rec."Bal. Gen. Bus. Posting Group" := GenJnlLine2."Gen. Bus. Posting Group";
        Rec."Bal. Gen. Prod. Posting Group" := GenJnlLine2."Gen. Prod. Posting Group";
        Rec."Bal. VAT Bus. Posting Group" := GenJnlLine2."VAT Bus. Posting Group";
        Rec."Bal. VAT Prod. Posting Group" := GenJnlLine2."VAT Prod. Posting Group";
        Rec."Bal. VAT Calculation Type" := GenJnlLine2."VAT Calculation Type";
        Rec."Bal. VAT Base Amount" := GenJnlLine2."VAT Base Amount";
        Rec."Bal. VAT Base Amount (LCY)" := GenJnlLine2."VAT Base Amount (LCY)";
        Rec."Bal. Tax Area Code" := GenJnlLine2."Tax Area Code";
        Rec."Bal. Tax Liable" := GenJnlLine2."Tax Liable";
        Rec."Bal. Tax Group Code" := GenJnlLine2."Tax Group Code";
        Rec."Bal. Use Tax" := GenJnlLine2."Use Tax";

        Rec.Amount := -GenJnlLine2.Amount;
        Rec."Debit Amount" := GenJnlLine2."Credit Amount";
        Rec."Credit Amount" := GenJnlLine2."Debit Amount";
        Rec."Amount (LCY)" := -GenJnlLine2."Amount (LCY)";
        Rec."Balance (LCY)" := -GenJnlLine2."Balance (LCY)";
        Rec."Source Currency Amount" := -GenJnlLine2."Source Currency Amount";
        if (Rec."Currency Code" <> '') and not Rec."System-Created Entry" then begin
            Rec."Source Currency Amount" := Rec.Amount;
            Rec."Source Curr. VAT Base Amount" := Rec."VAT Base Amount";
            Rec."Source Curr. VAT Amount" := Rec."VAT Amount";
        end;
        NonDeductibleVAT.ExchangeAccGLJournalLine(Rec, GenJnlLine2);

        OnAfterOnRun(Rec, GenJnlLine2);
    end;

    var
        GenJnlLine2: Record "Gen. Journal Line";
        NonDeductibleVAT: Codeunit "Non-Deductible VAT";

    /// <summary>
    /// Integration event raised after completing account and balancing account field exchange operations.
    /// Enables custom processing after all account-related fields have been swapped between account and balancing account.
    /// </summary>
    /// <param name="GenJournalLine">Journal line record with exchanged account information.</param>
    /// <param name="GenJournalLine2">Original journal line record before exchange operation.</param>
    [IntegrationEvent(false, false)]
    local procedure OnAfterOnRun(var GenJournalLine: Record "Gen. Journal Line"; GenJournalLine2: Record "Gen. Journal Line")
    begin
    end;

    /// <summary>
    /// Integration event raised before starting account and balancing account field exchange operations.
    /// Enables custom validation or preprocessing before account field swapping begins.
    /// </summary>
    /// <param name="GenJournalLine">Journal line record that will have account information exchanged.</param>
    [IntegrationEvent(false, false)]
    local procedure OnBeforeOnRun(var GenJournalLine: Record "Gen. Journal Line")
    begin
    end;
}