Codeunit 1512 Workflow Create Payment Line, source in 29
Source29
src/Layers/W1/BaseApp/System/Workflow/WorkflowCreatePaymentLine.Codeunit.al122 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Automation;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Foundation.NoSeries;
using Microsoft.Purchases.History;
using Microsoft.Purchases.Payables;
using Microsoft.Purchases.Vendor;
using System.Threading;
codeunit 1512 "Workflow Create Payment Line"
{
TableNo = "Job Queue Entry";
trigger OnRun()
var
WorkflowStepArgument: Record "Workflow Step Argument";
WorkflowStepArgumentArchive: Record "Workflow Step Argument Archive";
begin
if not WorkflowStepArgument.Get(Rec."Record ID to Process") then begin
WorkflowStepArgumentArchive.SetRange("Original Record ID", Rec."Record ID to Process");
if not WorkflowStepArgumentArchive.FindFirst() then
exit;
WorkflowStepArgument.TransferFields(WorkflowStepArgumentArchive);
end;
CreatePmtLine(WorkflowStepArgument);
end;
var
PaymentTxt: Label 'Payment for %1 %2.', Comment = '%1 = Document Type (Eg. Invoice) %2 = Document No. (1201); Payment for Invoice 1201';
procedure CreatePmtLine(WorkflowStepArgument: Record "Workflow Step Argument")
var
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalLine: Record "Gen. Journal Line";
Vendor: Record Vendor;
VendorLedgerEntry: Record "Vendor Ledger Entry";
PurchInvHeader: Record "Purch. Inv. Header";
WorkflowStepInstance: Record "Workflow Step Instance";
WorkflowStepInstanceArchive: Record "Workflow Step Instance Archive";
RecRef: RecordRef;
EmptyDateFormula: DateFormula;
LastLineNo: Integer;
LastDocNo: Code[20];
begin
GenJournalTemplate.Get(WorkflowStepArgument."General Journal Template Name");
GenJournalBatch.Get(GenJournalTemplate.Name, WorkflowStepArgument."General Journal Batch Name");
WorkflowStepInstance.SetLoadFields("Record ID");
WorkflowStepInstance.SetRange(Argument, WorkflowStepArgument.ID);
if WorkflowStepInstance.FindFirst() then
RecRef.Get(WorkflowStepInstance."Record ID")
else begin
WorkflowStepInstanceArchive.SetLoadFields("Record ID");
WorkflowStepInstanceArchive.SetRange(Argument, WorkflowStepArgument.ID);
if not WorkflowStepInstanceArchive.FindFirst() then
exit;
RecRef.Get(WorkflowStepInstanceArchive."Record ID")
end;
RecRef.SetTable(PurchInvHeader);
PurchInvHeader.Find();
VendorLedgerEntry.Get(PurchInvHeader."Vendor Ledger Entry No.");
Vendor.Get(VendorLedgerEntry."Vendor No.");
GenJournalLine.SetRange("Journal Template Name", GenJournalBatch."Journal Template Name");
GenJournalLine.SetRange("Journal Batch Name", GenJournalBatch.Name);
if GenJournalLine.FindLast() then begin
LastLineNo := GenJournalLine."Line No.";
LastDocNo := GenJournalLine."Document No.";
end;
GenJournalLine.Init();
GenJournalLine."Journal Template Name" := GenJournalBatch."Journal Template Name";
GenJournalLine."Journal Batch Name" := GenJournalBatch.Name;
GenJournalLine."Line No." := LastLineNo + 10000;
GenJournalLine."Document Type" := GenJournalLine."Document Type"::Payment;
GenJournalLine."Posting No. Series" := GenJournalBatch."Posting No. Series";
VendorLedgerEntry.CalcFields(Amount);
GenJournalLine."Account Type" := GenJournalLine."Account Type"::Vendor;
GenJournalLine.Validate("Account No.", VendorLedgerEntry."Vendor No.");
GenJournalLine."Bal. Account Type" := GenJournalBatch."Bal. Account Type";
GenJournalLine.Validate("Bal. Account No.", GenJournalBatch."Bal. Account No.");
GenJournalLine.Validate("Currency Code", VendorLedgerEntry."Currency Code");
GenJournalLine.Description := StrSubstNo(PaymentTxt, VendorLedgerEntry."Document Type", VendorLedgerEntry."Document No.");
GenJournalLine."Source Line No." := VendorLedgerEntry."Entry No.";
GenJournalLine."Shortcut Dimension 1 Code" := VendorLedgerEntry."Global Dimension 1 Code";
GenJournalLine."Shortcut Dimension 2 Code" := VendorLedgerEntry."Global Dimension 2 Code";
GenJournalLine."Dimension Set ID" := VendorLedgerEntry."Dimension Set ID";
GenJournalLine."Source Code" := GenJournalTemplate."Source Code";
GenJournalLine."Reason Code" := GenJournalBatch."Reason Code";
GenJournalLine.Validate(Amount, -VendorLedgerEntry.Amount);
GenJournalLine."Applies-to Doc. Type" := VendorLedgerEntry."Document Type";
GenJournalLine."Applies-to Doc. No." := VendorLedgerEntry."Document No.";
GenJournalLine."Payment Method Code" := VendorLedgerEntry."Payment Method Code";
GenJournalLine."Creditor No." := VendorLedgerEntry."Creditor No.";
GenJournalLine."Payment Reference" := VendorLedgerEntry."Payment Reference";
GenJournalLine."Applies-to Ext. Doc. No." := VendorLedgerEntry."External Document No.";
Evaluate(EmptyDateFormula, '<0D>');
GenJournalLine.SetPostingDateAsDueDate(GenJournalLine.GetAppliesToDocDueDate(), EmptyDateFormula);
GenJournalLine."Document No." := GetDocumentNo(GenJournalLine, LastDocNo);
GenJournalLine.Insert();
end;
procedure GetDocumentNo(var GenJournalLine: Record "Gen. Journal Line"; LastDocNo: Code[20]): Code[20]
var
GenJournalBatch: Record "Gen. Journal Batch";
NoSeries: Codeunit "No. Series";
begin
GenJournalBatch.Get(GenJournalLine."Journal Template Name", GenJournalLine."Journal Batch Name");
if GenJournalBatch."No. Series" = '' then
exit(IncStr(LastDocNo));
exit(NoSeries.PeekNextNo(GenJournalBatch."No. Series", GenJournalLine."Posting Date"));
end;
}