From 0bc3244ae886155e442cca431bca0de1c6317280 Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Fri, 18 Sep 2026 05:38:47 +0000 Subject: [PATCH 1/6] Initial Commit --- .../Codeunits/PaymentManagementFR.Codeunit.al | 24 ++++++++- .../PaymentMgtSubscribersFR.Codeunit.al | 52 ++++++++++++------- .../src/Reports/SuggestCustPayments.Report.al | 17 +++++- 3 files changed, 71 insertions(+), 22 deletions(-) diff --git a/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentManagementFR.Codeunit.al b/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentManagementFR.Codeunit.al index b32b5f13ce4..9eeadf33ac0 100644 --- a/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentManagementFR.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentManagementFR.Codeunit.al @@ -358,7 +358,7 @@ codeunit 10837 "Payment Management FR" SetPostingGroup(); SetAccountNo(); InvPostingBuffer[1]."System-Created Entry" := true; - if StepLedger.Sign = StepLedger.Sign::Debit then begin + if (StepLedger.Sign = StepLedger.Sign::Debit) xor IsReversedPaymentLine() then begin InvPostingBuffer[1].Validate(Amount, Abs(PaymentLine.Amount)); InvPostingBuffer[1].Validate("Amount (LCY)", Abs(PaymentLine."Amount (LCY)")); end else begin @@ -374,7 +374,7 @@ codeunit 10837 "Payment Management FR" if StepLedger."Detail Level" = StepLedger."Detail Level"::"Due Date" then InvPostingBuffer[1]."Due Date" := PaymentLine."Due Date"; - InvPostingBuffer[1]."Document Type" := StepLedger."Document Type"; + InvPostingBuffer[1]."Document Type" := GetPostingDocumentType(); if StepLedger."Document No." = StepLedger."Document No."::"Header No." then InvPostingBuffer[1]."Document No." := PaymentHeader."No." else begin @@ -424,6 +424,26 @@ codeunit 10837 "Payment Management FR" end; end; + local procedure IsReversedPaymentLine(): Boolean + begin + exit( + ((PaymentLine."Account Type" = PaymentLine."Account Type"::Customer) and (PaymentLine.Amount > 0)) or + ((PaymentLine."Account Type" = PaymentLine."Account Type"::Vendor) and (PaymentLine.Amount < 0))); + end; + + local procedure GetPostingDocumentType(): Enum "Gen. Journal Document Type" + begin + if IsReversedPaymentLine() then + case StepLedger."Document Type" of + StepLedger."Document Type"::Payment: + exit(StepLedger."Document Type"::Refund); + StepLedger."Document Type"::Refund: + exit(StepLedger."Document Type"::Payment); + end; + + exit(StepLedger."Document Type"); + end; + local procedure GetDescriptionForInvPostingBuffer() Description: Text[98] begin Description := diff --git a/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentMgtSubscribersFR.Codeunit.al b/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentMgtSubscribersFR.Codeunit.al index 71e6ace39cb..17becbe8c64 100644 --- a/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentMgtSubscribersFR.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/app/src/Codeunits/PaymentMgtSubscribersFR.Codeunit.al @@ -109,20 +109,22 @@ codeunit 10838 "PaymentMgt Subscribers FR" PaymentLine.SetRange("No.", PaymentHeader."No."); if PaymentLine.FindSet() then repeat - ToDirectDebitCollectionEntry.Init(); - ToDirectDebitCollectionEntry."Entry No." := PaymentLine."Line No."; - ToDirectDebitCollectionEntry."Direct Debit Collection No." := DirectDebitCollection."No."; - ToDirectDebitCollectionEntry.DeletePaymentFileErrors(); - if CheckPaymentLine(ToDirectDebitCollectionEntry, PaymentLine, AppliesToEntryNo) then begin - ToDirectDebitCollectionEntry.Validate("Customer No.", PaymentLine."Account No."); - ToDirectDebitCollectionEntry.Validate("Applies-to Entry No.", AppliesToEntryNo); - ToDirectDebitCollectionEntry."Transfer Date" := PaymentHeader."Posting Date"; - ToDirectDebitCollectionEntry."Currency Code" := PaymentLine."Currency Code"; - ToDirectDebitCollectionEntry.Validate("Transfer Amount", PaymentLine."Credit Amount"); - ToDirectDebitCollectionEntry.Validate("Mandate ID", PaymentLine."Direct Debit Mandate ID"); - OnCreateTempCollectionEntriesOnBeforeInsert(ToDirectDebitCollectionEntry, PaymentHeader, PaymentLine); - ToDirectDebitCollectionEntry.Insert(); - SEPADDCheckLine.CheckCollectionEntry(ToDirectDebitCollectionEntry); + if PaymentLine."Credit Amount" > 0 then begin + ToDirectDebitCollectionEntry.Init(); + ToDirectDebitCollectionEntry."Entry No." := PaymentLine."Line No."; + ToDirectDebitCollectionEntry."Direct Debit Collection No." := DirectDebitCollection."No."; + ToDirectDebitCollectionEntry.DeletePaymentFileErrors(); + if CheckPaymentLine(ToDirectDebitCollectionEntry, PaymentLine, AppliesToEntryNo) then begin + ToDirectDebitCollectionEntry.Validate("Customer No.", PaymentLine."Account No."); + ToDirectDebitCollectionEntry.Validate("Applies-to Entry No.", AppliesToEntryNo); + ToDirectDebitCollectionEntry."Transfer Date" := PaymentHeader."Posting Date"; + ToDirectDebitCollectionEntry."Currency Code" := PaymentLine."Currency Code"; + ToDirectDebitCollectionEntry.Validate("Transfer Amount", PaymentLine."Credit Amount"); + ToDirectDebitCollectionEntry.Validate("Mandate ID", PaymentLine."Direct Debit Mandate ID"); + OnCreateTempCollectionEntriesOnBeforeInsert(ToDirectDebitCollectionEntry, PaymentHeader, PaymentLine); + ToDirectDebitCollectionEntry.Insert(); + SEPADDCheckLine.CheckCollectionEntry(ToDirectDebitCollectionEntry); + end; end; until PaymentLine.Next() = 0; @@ -319,6 +321,7 @@ codeunit 10838 "PaymentMgt Subscribers FR" var SEPADirectDebitMandate: Record "SEPA Direct Debit Mandate"; CustLedgerEntry: Record "Cust. Ledger Entry"; + AppliedEntryCount: Integer; SummarizeNotAllowedErr: Label 'You cannot export a SEPA customer payment that is applied to multiple documents. Make sure that the Summarize per field in the Suggest Customer Payments window is blank.'; UnappliedLinesNotAllowedErr: Label 'Payment slip line %1 must be applied to a customer invoice.', Comment = '%1 = No.'; AccTypeErr: Label 'Only customer transactions are allowed.'; @@ -341,12 +344,23 @@ codeunit 10838 "PaymentMgt Subscribers FR" DirectDebitCollectionEntry.InsertPaymentFileError(StrSubstNo(UnappliedLinesNotAllowedErr, PaymentLine."Line No.")) else begin PaymentLine.GetAppliesToDocCustLedgEntry(CustLedgerEntry); - if CustLedgerEntry.Count > 1 then - DirectDebitCollectionEntry.InsertPaymentFileError(SummarizeNotAllowedErr); - CustLedgerEntry.FindFirst(); - if CustLedgerEntry."Document Type" <> CustLedgerEntry."Document Type"::Invoice then + if CustLedgerEntry.Count > 1 then begin + AppliedEntryCount := CustLedgerEntry.Count; + CustLedgerEntry.SetRange("Document Type", CustLedgerEntry."Document Type"::Invoice); + if CustLedgerEntry.Count <> 1 then + DirectDebitCollectionEntry.InsertPaymentFileError(SummarizeNotAllowedErr); + CustLedgerEntry.SetRange("Document Type", CustLedgerEntry."Document Type"::"Credit Memo"); + if CustLedgerEntry.Count <> AppliedEntryCount - 1 then + DirectDebitCollectionEntry.InsertPaymentFileError(SummarizeNotAllowedErr); + CustLedgerEntry.SetRange("Document Type", CustLedgerEntry."Document Type"::Invoice); + end; + if CustLedgerEntry.FindFirst() then begin + if CustLedgerEntry."Document Type" = CustLedgerEntry."Document Type"::Invoice then + AppliesToEntryNo := CustLedgerEntry."Entry No." + else + DirectDebitCollectionEntry.InsertPaymentFileError(StrSubstNo(UnappliedLinesNotAllowedErr, PaymentLine."Line No.")); + end else DirectDebitCollectionEntry.InsertPaymentFileError(StrSubstNo(UnappliedLinesNotAllowedErr, PaymentLine."Line No.")); - AppliesToEntryNo := CustLedgerEntry."Entry No."; end; exit(not DirectDebitCollectionEntry.HasPaymentFileErrors()); diff --git a/src/Apps/FR/PaymentManagementFR/app/src/Reports/SuggestCustPayments.Report.al b/src/Apps/FR/PaymentManagementFR/app/src/Reports/SuggestCustPayments.Report.al index 065fde00dc8..623e928977c 100644 --- a/src/Apps/FR/PaymentManagementFR/app/src/Reports/SuggestCustPayments.Report.al +++ b/src/Apps/FR/PaymentManagementFR/app/src/Reports/SuggestCustPayments.Report.al @@ -422,7 +422,8 @@ report 10849 "Suggest Cust. Payments" if SEPADirectDebitMandate.Get(CustLedgEntry."Direct Debit Mandate ID") then GenPayLine.Validate("Bank Account Code", SEPADirectDebitMandate."Customer Bank Account Code"); GenPayLine."Direct Debit Mandate ID" := CustLedgEntry."Direct Debit Mandate ID"; - end; + end else + SetDirectDebitMandate(GenPayLine, SEPADirectDebitMandate); case SummarizePer of SummarizePer::" ": GenPayLine."Due Date" := CustLedgEntry."Due Date"; @@ -447,6 +448,20 @@ report 10849 "Suggest Cust. Payments" until TempPaymentPostBuffer.Next() = 0; end; + local procedure SetDirectDebitMandate(var PaymentLine: Record "Payment Line FR"; var SEPADirectDebitMandate: Record "SEPA Direct Debit Mandate") + var + AppliedCustLedgerEntry: Record "Cust. Ledger Entry"; + begin + PaymentLine.GetAppliesToDocCustLedgEntry(AppliedCustLedgerEntry); + AppliedCustLedgerEntry.SetRange("Document Type", AppliedCustLedgerEntry."Document Type"::Invoice); + if not AppliedCustLedgerEntry.FindFirst() then + exit; + + PaymentLine."Direct Debit Mandate ID" := AppliedCustLedgerEntry."Direct Debit Mandate ID"; + if SEPADirectDebitMandate.Get(PaymentLine."Direct Debit Mandate ID") then + PaymentLine.Validate("Bank Account Code", SEPADirectDebitMandate."Customer Bank Account Code"); + end; + local procedure ShowMessage(Text: Text) begin if (Text <> '') and GenPayLineInserted then From 4aec3942b87b627c038be2fb13576355b0daa470 Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Fri, 18 Sep 2026 10:30:00 +0000 Subject: [PATCH 2/6] Automation test --- .../ERMPaymentManagement.Codeunit.al | 64 +++++++++++ .../SEPA02DDFunctionalTest.Codeunit.al | 108 ++++++++++++++++++ 2 files changed, 172 insertions(+) diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al index 65a845b72fc..7d60d0bb068 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al @@ -175,6 +175,61 @@ codeunit 144013 "ERM Payment Management" PaymentDiscountOnPurchaseCrMemo('', false); // Using Blank for Currency Code, False for Calc. Pmt. Discount, end; + [Test] + [HandlerFunctions('PaymentClassListModalPageHandler,SuggestCustomerPaymentsRequestPageHandler,ConfirmHandlerTrue')] + procedure PostCustomerInvoiceAndCreditMemoWithOppositeEntries() + var + GenJournalLine: Record "Gen. Journal Line"; + PaymentClass: Record "Payment Class FR"; + PaymentHeader: Record "Payment Header FR"; + PaymentLine: Record "Payment Line FR"; + PaymentStepLedger: Record "Payment Step Ledger FR"; + InvoiceDebitGLEntry: Record "G/L Entry"; + InvoiceCreditGLEntry: Record "G/L Entry"; + CreditMemoDebitGLEntry: Record "G/L Entry"; + CreditMemoCreditGLEntry: Record "G/L Entry"; + CustomerNo: Code[20]; + PaymentClassCode: Text[30]; + Amount: Decimal; + begin + // [SCENARIO 644993] Invoice and credit memo payment lines post with opposite signs and document types. + Initialize(); + Amount := LibraryRandom.RandDecInRange(100, 1000, 2); + CustomerNo := CreateCustomer(''); + CreateAndPostGeneralJournal( + GenJournalLine, GenJournalLine."Account Type"::Customer, CustomerNo, + GenJournalLine."Document Type"::Invoice, Amount, WorkDate()); + CreateAndPostGeneralJournal( + GenJournalLine, GenJournalLine."Account Type"::Customer, CustomerNo, + GenJournalLine."Document Type"::"Credit Memo", -Amount / 2, WorkDate()); + PaymentClassCode := SetupForPaymentSlipPost(PaymentStepLedger."Detail Level"::Line, PaymentClass.Suggestions::Customer); + PaymentStepLedger.SetRange("Payment Class", PaymentClassCode); + PaymentStepLedger.ModifyAll("Document Type", PaymentStepLedger."Document Type"::Payment, true); + CreatePaymentHeader(PaymentHeader); + Commit(); + SuggestCustomerPaymentLines(CustomerNo, '', PaymentHeader); + + PostPaymentSlipHeaderNo(PaymentHeader."No."); + + FindPostedPaymentLine(PaymentLine, PaymentHeader."No.", PaymentLine."Applies-to Doc. Type"::Invoice); + InvoiceDebitGLEntry.Get(PaymentLine."Entry No. Debit"); + InvoiceCreditGLEntry.Get(PaymentLine."Entry No. Credit"); + InvoiceDebitGLEntry.TestField("Document Type", InvoiceDebitGLEntry."Document Type"::Payment); + InvoiceCreditGLEntry.TestField("Document Type", InvoiceCreditGLEntry."Document Type"::Payment); + + FindPostedPaymentLine(PaymentLine, PaymentHeader."No.", PaymentLine."Applies-to Doc. Type"::"Credit Memo"); + CreditMemoDebitGLEntry.Get(PaymentLine."Entry No. Debit"); + CreditMemoCreditGLEntry.Get(PaymentLine."Entry No. Credit"); + CreditMemoDebitGLEntry.TestField("Document Type", CreditMemoDebitGLEntry."Document Type"::Refund); + CreditMemoCreditGLEntry.TestField("Document Type", CreditMemoCreditGLEntry."Document Type"::Refund); + Assert.AreEqual( + InvoiceDebitGLEntry."G/L Account No.", CreditMemoCreditGLEntry."G/L Account No.", + CreditMemoCreditGLEntry.FieldCaption("G/L Account No.")); + Assert.AreEqual( + InvoiceCreditGLEntry."G/L Account No.", CreditMemoDebitGLEntry."G/L Account No.", + CreditMemoDebitGLEntry.FieldCaption("G/L Account No.")); + end; + local procedure PaymentDiscountOnPurchaseCrMemo(CurrencyCode: Code[10]; CalcPmtDiscOnCrMemos: Boolean) var GenJournalLine: Record "Gen. Journal Line"; @@ -2999,6 +3054,15 @@ codeunit 144013 "ERM Payment Management" PaymentLine.FindFirst(); end; + local procedure FindPostedPaymentLine(var PaymentLine: Record "Payment Line FR"; PaymentHeaderNo: Code[20]; AppliesToDocumentType: Enum "Gen. Journal Document Type") + begin + PaymentLine.Reset(); + PaymentLine.SetRange("No.", PaymentHeaderNo); + PaymentLine.SetRange("Applies-to Doc. Type", AppliesToDocumentType); + PaymentLine.FindFirst(); + PaymentLine.TestField(Posted, true); + end; + local procedure FindVATEntry(var VATEntry: Record "VAT Entry"; DocumentNo: Code[20]) begin VATEntry.SetRange("Document No.", DocumentNo); diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al index 9ce6a689402..fdc8357ff73 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al @@ -73,6 +73,86 @@ codeunit 144022 "SEPA.02 DD Functional Test" VerifyPaymentLines(PaymentHeader, Customer); end; + [Test] + [HandlerFunctions('PaymentClassHandler,ConfirmHandler,SuggestCustPaymentsReqPageHandler')] + procedure ExportSuggestedInvoiceAndCreditMemo() + var + PaymentHeader: Record "Payment Header FR"; + PaymentLine: Record "Payment Line FR"; + InvoiceCustLedgerEntry: Record "Cust. Ledger Entry"; + CreditMemoCustLedgerEntry: Record "Cust. Ledger Entry"; + Customer: Record Customer; + SuggestCustomerPayments: Report "Suggest Cust. Payments"; + SEPAFilePath: Text; + begin + // [SCENARIO 644993] A credit memo does not create a separate SEPA direct debit transaction. + CreateCustomerWithInvoice(Customer, InvoiceCustLedgerEntry, SEPA_PartnerType::Person); + InvoiceCustLedgerEntry.CalcFields("Remaining Amount"); + CreateCustomerLedgerEntry( + CreditMemoCustLedgerEntry, Customer."No.", InvoiceCustLedgerEntry."Direct Debit Mandate ID", + CreditMemoCustLedgerEntry."Document Type"::"Credit Memo", -InvoiceCustLedgerEntry."Remaining Amount" / 2); + CreatePaymentHeader(PaymentHeader, SEPA_PartnerType::Person); + + SuggestCustomerPayments.SetGenPayLine(PaymentHeader); + Customer.SetRange("No.", Customer."No."); + SuggestCustomerPayments.SetTableView(Customer); + Commit(); + SuggestCustomerPayments.RunModal(); + + PaymentLine.SetRange("No.", PaymentHeader."No."); + Assert.RecordCount(PaymentLine, 2); + PaymentLine.SetFilter("Credit Amount", '>0'); + PaymentLine.FindFirst(); + SEPAFilePath := ExportSEPAFile(PaymentHeader); + Commit(); + LibraryXMLRead.Initialize(SEPAFilePath); + + VerifyGroupHeader(PaymentLine); + VerifySEPAMandate(InvoiceCustLedgerEntry."Direct Debit Mandate ID", 1); + end; + + [Test] + [HandlerFunctions('PaymentClassHandler,ConfirmHandler,SuggestCustPaymentsSummarizedReqPageHandler')] + procedure ExportSuggestedInvoiceAndCreditMemoSummarized() + var + PaymentHeader: Record "Payment Header FR"; + PaymentLine: Record "Payment Line FR"; + InvoiceCustLedgerEntry: Record "Cust. Ledger Entry"; + CreditMemoCustLedgerEntry: Record "Cust. Ledger Entry"; + Customer: Record Customer; + SuggestCustomerPayments: Report "Suggest Cust. Payments"; + ExpectedAmount: Decimal; + SEPAFilePath: Text; + begin + // [SCENARIO 644993] A summarized invoice and credit memo are exported as their net direct debit amount. + CreateCustomerWithInvoice(Customer, InvoiceCustLedgerEntry, SEPA_PartnerType::Person); + InvoiceCustLedgerEntry.CalcFields("Remaining Amount"); + CreateCustomerLedgerEntry( + CreditMemoCustLedgerEntry, Customer."No.", InvoiceCustLedgerEntry."Direct Debit Mandate ID", + CreditMemoCustLedgerEntry."Document Type"::"Credit Memo", -InvoiceCustLedgerEntry."Remaining Amount" / 2); + CreditMemoCustLedgerEntry.CalcFields("Remaining Amount"); + ExpectedAmount := InvoiceCustLedgerEntry."Remaining Amount" + CreditMemoCustLedgerEntry."Remaining Amount"; + CreatePaymentHeader(PaymentHeader, SEPA_PartnerType::Person); + + SuggestCustomerPayments.SetGenPayLine(PaymentHeader); + Customer.SetRange("No.", Customer."No."); + SuggestCustomerPayments.SetTableView(Customer); + Commit(); + SuggestCustomerPayments.RunModal(); + + PaymentLine.SetRange("No.", PaymentHeader."No."); + PaymentLine.FindFirst(); + Assert.RecordCount(PaymentLine, 1); + PaymentLine.TestField("Credit Amount", ExpectedAmount); + PaymentLine.TestField("Direct Debit Mandate ID", InvoiceCustLedgerEntry."Direct Debit Mandate ID"); + SEPAFilePath := ExportSEPAFile(PaymentHeader); + Commit(); + LibraryXMLRead.Initialize(SEPAFilePath); + + VerifyGroupHeader(PaymentLine); + VerifySEPAMandate(InvoiceCustLedgerEntry."Direct Debit Mandate ID", 1); + end; + [Test] [HandlerFunctions('PaymentClassHandler,ConfirmHandler,SuggestCustPaymentsReqPageHandler')] procedure SuggestCustPaymentsDiffPartnerType() @@ -701,6 +781,24 @@ codeunit 144022 "SEPA.02 DD Functional Test" CustLedgerEntry.FindLast(); end; + local procedure CreateCustomerLedgerEntry(var CustLedgerEntry: Record "Cust. Ledger Entry"; CustomerNo: Code[20]; SEPADirectDebitMandateID: Code[35]; DocumentType: Enum "Gen. Journal Document Type"; Amount: Decimal) + var + GenJournalBatch: Record "Gen. Journal Batch"; + GenJournalLine: Record "Gen. Journal Line"; + begin + LibraryERM.SelectGenJnlBatch(GenJournalBatch); + LibraryERM.ClearGenJournalLines(GenJournalBatch); + LibraryERM.CreateGeneralJnlLine(GenJournalLine, GenJournalBatch."Journal Template Name", GenJournalBatch.Name, + DocumentType, GenJournalLine."Account Type"::Customer, CustomerNo, Amount); + GenJournalLine."Direct Debit Mandate ID" := SEPADirectDebitMandateID; + GenJournalLine."Payment Method Code" := ''; + GenJournalLine.Modify(); + LibraryERM.PostGeneralJnlLine(GenJournalLine); + CustLedgerEntry.SetRange("Customer No.", GenJournalLine."Account No."); + CustLedgerEntry.SetRange("Document No.", GenJournalLine."Document No."); + CustLedgerEntry.FindLast(); + end; + local procedure CreateCustomerAddress(var Customer: Record Customer) begin Customer.Validate(Address, LibraryUtility.GenerateRandomCode(Customer.FieldNo(Address), DATABASE::Customer)); @@ -940,6 +1038,16 @@ codeunit 144022 "SEPA.02 DD Functional Test" SuggestCustomerPayments.OK().Invoke(); end; + [RequestPageHandler] + procedure SuggestCustPaymentsSummarizedReqPageHandler(var SuggestCustomerPayments: TestRequestPage "Suggest Cust. Payments") + var + SummarizePer: Option " ",Customer,"Due date"; + begin + SuggestCustomerPayments.LastPaymentDate.SetValue(WorkDate()); + SuggestCustomerPayments.Summarize_Per.SetValue(SummarizePer::Customer); + SuggestCustomerPayments.OK().Invoke(); + end; + #if not CLEAN28 [EventSubscriber(ObjectType::Codeunit, Codeunit::"Payment Management Feature FR", OnAfterCheckFeatureEnabled, '', false, false)] local procedure OnAfterCheckFeatureEnabled(var IsEnabled: Boolean) From ad88fe33b3788fa81a9c0425b61282af1fdbd2dc Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Fri, 18 Sep 2026 11:15:12 +0000 Subject: [PATCH 3/6] Fix test key warning --- .../test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al index fdc8357ff73..9f721df5d8d 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al @@ -101,8 +101,10 @@ codeunit 144022 "SEPA.02 DD Functional Test" PaymentLine.SetRange("No.", PaymentHeader."No."); Assert.RecordCount(PaymentLine, 2); - PaymentLine.SetFilter("Credit Amount", '>0'); PaymentLine.FindFirst(); + if PaymentLine."Credit Amount" <= 0 then + PaymentLine.Next(); + Assert.IsTrue(PaymentLine."Credit Amount" > 0, 'A payment line with a positive credit amount should exist.'); SEPAFilePath := ExportSEPAFile(PaymentHeader); Commit(); LibraryXMLRead.Initialize(SEPAFilePath); From eb82b88ffbe78dbbcc547c0bf9c7bb6d1ec7bb2b Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Fri, 18 Sep 2026 13:01:05 +0000 Subject: [PATCH 4/6] Warning Fix --- .../src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al index 9f721df5d8d..bfecd93fa7d 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/SEPA02DDFunctionalTest.Codeunit.al @@ -101,10 +101,10 @@ codeunit 144022 "SEPA.02 DD Functional Test" PaymentLine.SetRange("No.", PaymentHeader."No."); Assert.RecordCount(PaymentLine, 2); +#pragma warning disable AA0210 + PaymentLine.SetFilter("Credit Amount", '>0'); +#pragma warning restore AA0210 PaymentLine.FindFirst(); - if PaymentLine."Credit Amount" <= 0 then - PaymentLine.Next(); - Assert.IsTrue(PaymentLine."Credit Amount" > 0, 'A payment line with a positive credit amount should exist.'); SEPAFilePath := ExportSEPAFile(PaymentHeader); Commit(); LibraryXMLRead.Initialize(SEPAFilePath); From e50e00bc6b2f7c4d11ce6d3ef6de7ae638f55a61 Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Mon, 21 Sep 2026 06:36:07 +0000 Subject: [PATCH 5/6] Removed if not clean28 --- .../test/src/RegularTests/ERMPaymentManagement.Codeunit.al | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al index 7d60d0bb068..8493857c4af 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al @@ -3446,12 +3446,10 @@ codeunit 144013 "ERM Payment Management" Reply := true; end; -#if not CLEAN28 [EventSubscriber(ObjectType::Codeunit, Codeunit::"Payment Management Feature FR", OnAfterCheckFeatureEnabled, '', false, false)] local procedure OnAfterCheckFeatureEnabled(var IsEnabled: Boolean) begin IsEnabled := true; end; -#endif } From 380aeb048b1fb30a3538d1eafa355dbc14b94e84 Mon Sep 17 00:00:00 2001 From: v-shikhverma Date: Mon, 21 Sep 2026 12:00:00 +0000 Subject: [PATCH 6/6] Event Update --- .../src/RegularTests/ERMPaymentManagement.Codeunit.al | 6 ------ .../src/TestLibraries/LibraryLocalizationFR.Codeunit.al | 8 ++++++++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al index 8493857c4af..b44d75d38a8 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/RegularTests/ERMPaymentManagement.Codeunit.al @@ -3445,11 +3445,5 @@ codeunit 144013 "ERM Payment Management" begin Reply := true; end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Payment Management Feature FR", OnAfterCheckFeatureEnabled, '', false, false)] - local procedure OnAfterCheckFeatureEnabled(var IsEnabled: Boolean) - begin - IsEnabled := true; - end; } diff --git a/src/Apps/FR/PaymentManagementFR/test/src/TestLibraries/LibraryLocalizationFR.Codeunit.al b/src/Apps/FR/PaymentManagementFR/test/src/TestLibraries/LibraryLocalizationFR.Codeunit.al index 59ce9ea520d..11253c80798 100644 --- a/src/Apps/FR/PaymentManagementFR/test/src/TestLibraries/LibraryLocalizationFR.Codeunit.al +++ b/src/Apps/FR/PaymentManagementFR/test/src/TestLibraries/LibraryLocalizationFR.Codeunit.al @@ -90,5 +90,13 @@ codeunit 144043 "Library - Localization FR" begin CODEUNIT.Run(CODEUNIT::"Payment Management FR"); end; + +#if not CLEAN28 + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Payment Management Feature FR", OnAfterCheckFeatureEnabled, '', false, false)] + local procedure OnAfterCheckFeatureEnabled(var IsEnabled: Boolean) + begin + IsEnabled := true; + end; +#endif }