Table 416 Handled IC Outbox Trans., source in 29

Source29

src/Layers/W1/BaseApp/Finance/Intercompany/Outbox/HandledICOutboxTrans.Table.al274 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.Intercompany.Outbox;

using Microsoft.Intercompany;
using Microsoft.Intercompany.Comment;
using Microsoft.Intercompany.Journal;
using Microsoft.Intercompany.Partner;

/// <summary>
/// Stores processed intercompany outbox transactions after successful transmission to partners.
/// Maintains historical archive of completed intercompany transactions for audit and tracking purposes.
/// </summary>
/// <remarks>
/// Historical archive table for completed intercompany outbox transactions.
/// Supports transaction tracking, status monitoring, and comprehensive audit trails for intercompany operations.
/// Integration points: IC Partner, transaction source documents, G/L accounts, journal processing.
/// </remarks>
table 416 "Handled IC Outbox Trans."
{
    Caption = 'Handled IC Outbox Trans.';
    DataClassification = CustomerContent;

    fields
    {
        /// <summary>
        /// Unique transaction number for intercompany transaction identification.
        /// </summary>
        field(1; "Transaction No."; Integer)
        {
            Caption = 'Transaction No.';
            Editable = false;
        }
        /// <summary>
        /// Intercompany partner code identifying the receiving company.
        /// </summary>
        field(2; "IC Partner Code"; Code[20])
        {
            Caption = 'IC Partner Code';
            Editable = false;
            TableRelation = "IC Partner";
        }
#if not CLEANSCHEMA29
        /// <summary>
        /// Source type of the intercompany transaction for legacy transaction categorization.
        /// </summary>
        field(3; "Source Type"; Enum "IC Transaction Source Type")
        {
            Caption = 'Source Type';
            Editable = false;
            ObsoleteReason = 'Replaced by IC Source Type for Enum typing';
#if not CLEAN27
            ObsoleteState = Pending;
            ObsoleteTag = '27.0';
#else
            ObsoleteState = Removed;
            ObsoleteTag = '29.0';
#endif
        }
#endif
        /// <summary>
        /// Source type of the intercompany transaction for classification and routing.
        /// </summary>
        field(4; "IC Source Type"; Enum "IC Transaction Source Type")
        {
            Caption = 'IC Source Type';
            Editable = false;
        }
        /// <summary>
        /// Document type for the intercompany transaction processing.
        /// </summary>
        field(5; "Document Type"; Enum "IC Transaction Document Type")
        {
            Caption = 'Document Type';
            Editable = false;
        }
        /// <summary>
        /// Document number for transaction identification and reference.
        /// </summary>
        field(6; "Document No."; Code[20])
        {
            Caption = 'Document No.';
            Editable = false;
        }
        /// <summary>
        /// Date when the intercompany transaction was posted for accounting and audit purposes.
        /// </summary>
        field(7; "Posting Date"; Date)
        {
            Caption = 'Posting Date';
            Editable = false;
        }
        /// <summary>
        /// Source of the transaction indicating whether created by current company or rejected by partner.
        /// </summary>
        field(8; "Transaction Source"; Option)
        {
            Caption = 'Transaction Source';
            Editable = false;
            OptionCaption = 'Rejected by Current Company,Created by Current Company';
            OptionMembers = "Rejected by Current Company","Created by Current Company";
        }
        /// <summary>
        /// Document date from the source transaction for chronological tracking and reporting.
        /// </summary>
        field(9; "Document Date"; Date)
        {
            Caption = 'Document Date';
            Editable = false;
        }
        /// <summary>
        /// Current status of the handled intercompany transaction indicating transmission and processing state.
        /// </summary>
        field(11; Status; Option)
        {
            Caption = 'Status';
            Editable = false;
            OptionCaption = 'Sent to IC Partner,Rejection Sent to IC Partner,Cancelled';
            OptionMembers = "Sent to IC Partner","Rejection Sent to IC Partner",Cancelled;
        }
#if not CLEANSCHEMA25
        /// <summary>
        /// IC partner G/L account number for legacy transaction mapping and compatibility.
        /// </summary>
        field(12; "IC Partner G/L Acc. No."; Code[20])
        {
            Caption = 'IC Partner G/L Acc. No.';
            ObsoleteReason = 'Replaced by IC Account No.';
            ObsoleteState = Removed;
            ObsoleteTag = '25.0';
        }
#endif
        /// <summary>
        /// Source line number from the originating document for detailed transaction traceability.
        /// </summary>
        field(13; "Source Line No."; Integer)
        {
            Caption = 'Source Line No.';
        }
        /// <summary>
        /// Type of intercompany account used for transaction classification and posting.
        /// </summary>
        field(14; "IC Account Type"; Enum "IC Journal Account Type")
        {
            Caption = 'IC Account Type';
        }
        /// <summary>
        /// Intercompany account number for transaction posting and partner reconciliation.
        /// </summary>
        field(15; "IC Account No."; Code[20])
        {
            Caption = 'IC Account No.';
        }
    }

    keys
    {
        key(Key1; "Transaction No.", "IC Partner Code", "Transaction Source")
        {
            Clustered = true;
        }
    }

    fieldgroups
    {
    }

    trigger OnDelete()
    var
        ICOutboxJnlLine: Record "Handled IC Outbox Jnl. Line";
        ICOutboxSalesHdr: Record "Handled IC Outbox Sales Header";
        ICOutboxPurchHdr: Record "Handled IC Outbox Purch. Hdr";
    begin
        case "IC Source Type" of
            "IC Source Type"::Journal:
                begin
                    ICOutboxJnlLine.SetRange("Transaction No.", "Transaction No.");
                    ICOutboxJnlLine.SetRange("IC Partner Code", "IC Partner Code");
                    ICOutboxJnlLine.SetRange("Transaction Source", "Transaction Source");
                    ICOutboxJnlLine.DeleteAll(true);
                end;
            "IC Source Type"::"Sales Document":
                if ICOutboxSalesHdr.Get("Transaction No.", "IC Partner Code", "Transaction Source") then
                    ICOutboxSalesHdr.Delete(true);
            "IC Source Type"::"Purchase Document":
                if ICOutboxPurchHdr.Get("Transaction No.", "IC Partner Code", "Transaction Source") then
                    ICOutboxPurchHdr.Delete(true);
            else
                OnDeleteOnSourceTypeCase(Rec);
        end;

        DeleteComments("Transaction No.", "IC Partner Code");
    end;

    /// <summary>
    /// Opens the appropriate detail page for viewing handled intercompany transaction line details.
    /// Displays journal lines, sales documents, or purchase documents based on transaction source type.
    /// </summary>
    procedure ShowDetails()
    var
        HandledICOutboxJnlLine: Record "Handled IC Outbox Jnl. Line";
        HandledICOutboxSalesHeader: Record "Handled IC Outbox Sales Header";
        HandledICOutboxPurchHdr: Record "Handled IC Outbox Purch. Hdr";
        HandledICOutboxJnlLines: Page "Handled IC Outbox Jnl. Lines";
        HandledICOutboxSalesDoc: Page "Handled IC Outbox Sales Doc.";
        HandledICOutboxPurchDoc: Page "Handled IC Outbox Purch. Doc.";
    begin
        case "IC Source Type" of
            "IC Source Type"::Journal:
                begin
                    HandledICOutboxJnlLine.SetRange("Transaction No.", "Transaction No.");
                    HandledICOutboxJnlLine.SetRange("IC Partner Code", "IC Partner Code");
                    HandledICOutboxJnlLine.SetRange("Transaction Source", "Transaction Source");
                    Clear(HandledICOutboxJnlLines);
                    HandledICOutboxJnlLines.SetTableView(HandledICOutboxJnlLine);
                    HandledICOutboxJnlLines.RunModal();
                end;
            "IC Source Type"::"Sales Document":
                begin
                    HandledICOutboxSalesHeader.SetRange("IC Transaction No.", "Transaction No.");
                    HandledICOutboxSalesHeader.SetRange("IC Partner Code", "IC Partner Code");
                    HandledICOutboxSalesHeader.SetRange("Transaction Source", "Transaction Source");
                    Clear(HandledICOutboxSalesDoc);
                    HandledICOutboxSalesDoc.SetTableView(HandledICOutboxSalesHeader);
                    HandledICOutboxSalesDoc.RunModal();
                end;
            "IC Source Type"::"Purchase Document":
                begin
                    HandledICOutboxPurchHdr.SetRange("IC Partner Code", "IC Partner Code");
                    HandledICOutboxPurchHdr.SetRange("IC Transaction No.", "Transaction No.");
                    HandledICOutboxPurchHdr.SetRange("Transaction Source", "Transaction Source");
                    Clear(HandledICOutboxPurchDoc);
                    HandledICOutboxPurchDoc.SetTableView(HandledICOutboxPurchHdr);
                    HandledICOutboxPurchDoc.RunModal();
                end;
        end;

        OnAfterShowDetails(Rec);
    end;

    local procedure DeleteComments(TransactionNo: Integer; ICPartnerCode: Code[20])
    var
        ICCommentLine: Record "IC Comment Line";
    begin
        ICCommentLine.SetRange("Table Name", ICCommentLine."Table Name"::"Handled IC Outbox Transaction");
        ICCommentLine.SetRange("Transaction No.", TransactionNo);
        ICCommentLine.SetRange("IC Partner Code", ICPartnerCode);
        ICCommentLine.DeleteAll();
    end;

    /// <summary>
    /// Integration event raised after showing transaction details for custom processing or navigation.
    /// Enables additional detail display or post-processing when viewing handled IC outbox transactions.
    /// </summary>
    /// <param name="HandledICOutboxTrans">Handled IC outbox transaction record displayed</param>
    [IntegrationEvent(false, false)]
    local procedure OnAfterShowDetails(var HandledICOutboxTrans: Record "Handled IC Outbox Trans.")
    begin
    end;

    /// <summary>
    /// Integration event raised during deletion for custom source type processing.
    /// Enables custom cleanup logic for non-standard transaction source types.
    /// </summary>
    /// <param name="HandledICOutboxTrans">Handled IC outbox transaction being deleted</param>
    [IntegrationEvent(false, false)]
    local procedure OnDeleteOnSourceTypeCase(var HandledICOutboxTrans: Record "Handled IC Outbox Trans.")
    begin
    end;
}