Skip to content

Commit a37faaa

Browse files
authored
DE xRechnung/ZUGFeRD – Making Buyer Reference mandatory again (#29445)
<!-- Thank you for submitting a Pull Request. If you're new to contributing to AlAppExtensions please read our pull request guideline below * https://github.com/microsoft/ALAppExtensions/blob/main/CONTRIBUTING.md --> #### Summary <!-- Provide a general summary of your changes --> Fixes a regression introduced by the following PRs: - #29287 - #29333 This PR restores the expected behavior and adds automated tests to prevent similar regressions in the future. #### Work Item(s) <!-- Add the issue number here after the #. The issue needs to be open and approved. Submitting PRs with no linked issues or unapproved issues is highly discouraged. --> Fixes #29423 Fixes [AB#613275](https://dynamicssmb2.visualstudio.com/1fcb79e7-ab07-432a-a3c6-6cf5a88ba4a5/_workitems/edit/613275)
1 parent e25f986 commit a37faaa

File tree

5 files changed

+126
-2
lines changed

5 files changed

+126
-2
lines changed

Apps/DE/EDocumentDE/app/src/PEPPOL/EDocPEPPOLBIS30DE.Codeunit.al

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ namespace Microsoft.eServices.EDocument.IO.Peppol;
33
using Microsoft.eServices.EDocument;
44
using Microsoft.Sales.Customer;
55
using Microsoft.Sales.History;
6+
using Microsoft.Service.Document;
7+
using Microsoft.Service.History;
68
using System.Utilities;
79
using Microsoft.Sales.Peppol;
810
using Microsoft.eServices.EDocument.Formats;
@@ -145,6 +147,16 @@ codeunit 11035 "EDoc PEPPOL BIS 3.0 DE" implements "E-Document"
145147
if not EDocumentService."Buyer Reference Mandatory" then
146148
exit;
147149

150+
if not (SourceDocumentHeader.Number in
151+
[Database::"Sales Header",
152+
Database::"Sales Invoice Header",
153+
Database::"Sales Cr.Memo Header",
154+
Database::"Service Header",
155+
Database::"Service Invoice Header",
156+
Database::"Service Cr.Memo Header"])
157+
then
158+
exit;
159+
148160
case EDocumentService."Buyer Reference" of
149161
Enum::"E-Document Buyer Reference"::"Customer Reference":
150162
begin

Apps/DE/EDocumentDE/app/src/XRechnung/XRechnungFormat.Codeunit.al

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,10 @@ using Microsoft.Sales.History;
99
using Microsoft.Purchases.Document;
1010
using System.IO;
1111
using Microsoft.Sales.Customer;
12+
using Microsoft.Sales.Document;
1213
using Microsoft.Foundation.Company;
1314
using Microsoft.eServices.EDocument;
15+
using Microsoft.Service.Document;
1416
using Microsoft.Service.History;
1517
using Microsoft.eServices.EDocument.IO.Peppol;
1618

@@ -95,8 +97,10 @@ codeunit 13914 "XRechnung Format" implements "E-Document"
9597
exit;
9698

9799
if not (SourceDocumentHeader.Number in
98-
[Database::"Sales Invoice Header",
100+
[Database::"Sales Header",
101+
Database::"Sales Invoice Header",
99102
Database::"Sales Cr.Memo Header",
103+
Database::"Service Header",
100104
Database::"Service Invoice Header",
101105
Database::"Service Cr.Memo Header"])
102106
then

Apps/DE/EDocumentDE/app/src/ZUGFeRD/ZUGFeRDFormat.Codeunit.al

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,11 @@ using System.Utilities;
88
using Microsoft.eServices.EDocument.IO.Peppol;
99
using Microsoft.Foundation.Company;
1010
using Microsoft.Sales.Customer;
11+
using Microsoft.Sales.Document;
1112
using Microsoft.Sales.History;
1213
using Microsoft.Purchases.Document;
1314
using Microsoft.eServices.EDocument;
15+
using Microsoft.Service.Document;
1416
using Microsoft.Service.History;
1517
using System.IO;
1618

@@ -138,8 +140,10 @@ codeunit 13920 "ZUGFeRD Format" implements "E-Document"
138140
exit;
139141

140142
if not (SourceDocumentHeader.Number in
141-
[Database::"Sales Invoice Header",
143+
[Database::"Sales Header",
144+
Database::"Sales Invoice Header",
142145
Database::"Sales Cr.Memo Header",
146+
Database::"Service Header",
143147
Database::"Service Invoice Header",
144148
Database::"Service Cr.Memo Header"])
145149
then

Apps/DE/EDocumentDE/test/src/XRechnungXMLDocumentTests.Codeunit.al

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,28 @@ codeunit 13918 "XRechnung XML Document Tests"
112112
VerifyBuyerReference(SalesInvoiceHeader."Your Reference", TempXMLBuffer, '/ubl:Invoice');
113113
end;
114114

115+
[Test]
116+
procedure ExportPostedSalesInvoiceInXRechnungFormatMandateBuyerReferenceAsYourReference();
117+
var
118+
SalesHeader: Record "Sales Header";
119+
begin
120+
// Mandate buyer reference as your reference when releasing sales invoice for XRechnung format
121+
Initialize();
122+
123+
// [GIVEN] Set Buyer reference = your reference
124+
SetEdocumentServiceBuyerReference("E-Document Buyer Reference"::"Your Reference");
125+
126+
// [GIVEN] Create Sales Invoice with your reference = XX
127+
SalesHeader.Get("Sales Document Type"::Invoice, CreateSalesDocumentWithLine("Sales Document Type"::Invoice, Enum::"Sales Line Type"::Item, false));
128+
129+
// [WHEN] Remove your reference
130+
SalesHeader.Validate("Your Reference", '');
131+
SalesHeader.Modify(false);
132+
133+
// [THEN] Error message is shown when releasing the sales invoice
134+
asserterror CheckSalesHeader(SalesHeader);
135+
end;
136+
115137
[Test]
116138
procedure ExportPostedSalesInvoiceInXRechnungFormatVerifyAccountingSupplierParty();
117139
var
@@ -370,6 +392,28 @@ codeunit 13918 "XRechnung XML Document Tests"
370392
VerifyBuyerReference(SalesCrMemoHeader."Your Reference", TempXMLBuffer, '/ns0:CreditNote');
371393
end;
372394

395+
[Test]
396+
procedure ExportPostedSalesCrMemoInXRechnungFormatMandateBuyerReferenceAsYourReference();
397+
var
398+
SalesHeader: Record "Sales Header";
399+
begin
400+
// Mandate buyer reference as your reference when releasing sales credit memo for XRechnung format
401+
Initialize();
402+
403+
// [GIVEN] Set Buyer reference = your reference
404+
SetEdocumentServiceBuyerReference("E-Document Buyer Reference"::"Your Reference");
405+
406+
// [GIVEN] Create Sales Invoice with your reference = XX
407+
SalesHeader.Get("Sales Document Type"::"Credit Memo", CreateSalesDocumentWithLine("Sales Document Type"::"Credit Memo", Enum::"Sales Line Type"::Item, false));
408+
409+
// [WHEN] Remove your reference
410+
SalesHeader.Validate("Your Reference", '');
411+
SalesHeader.Modify(false);
412+
413+
// [THEN] Error message is shown when releasing the sales invoice
414+
asserterror CheckSalesHeader(SalesHeader);
415+
end;
416+
373417
[Test]
374418
procedure ExportPostedSalesCrMemoInXRechnungFormatVerifyAccountingSupplierParty();
375419
var
@@ -726,6 +770,14 @@ codeunit 13918 "XRechnung XML Document Tests"
726770
SalesLine.Modify(true);
727771
end;
728772

773+
local procedure CheckSalesHeader(SalesHeader: Record "Sales Header")
774+
var
775+
SourceDocumentHeader: RecordRef;
776+
begin
777+
SourceDocumentHeader.GetTable(SalesHeader);
778+
ExportXRechnungFormat.Check(SourceDocumentHeader, EDocumentService, "E-Document Processing Phase"::Release);
779+
end;
780+
729781
local procedure ExportInvoice(SalesInvoiceHeader: Record "Sales Invoice Header"; var TempXMLBuffer: Record "XML Buffer" temporary);
730782
var
731783
SalesInvoiceLine: Record "Sales Invoice Line";

Apps/DE/EDocumentDE/test/src/ZUGFeRDXMLDocumentTests.Codeunit.al

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,28 @@ codeunit 13922 "ZUGFeRD XML Document Tests"
115115
VerifyBuyerReference(SalesInvoiceHeader."Your Reference", TempXMLBuffer, '/rsm:CrossIndustryInvoice');
116116
end;
117117

118+
[Test]
119+
procedure ExportPostedSalesInvoiceInZUGFeRDFormatMandateBuyerReferenceAsYourReference();
120+
var
121+
SalesHeader: Record "Sales Header";
122+
begin
123+
// Mandate buyer reference as your reference when releasing sales invoice for ZUGFeRD format
124+
Initialize();
125+
126+
// [GIVEN] Set Buyer reference = your reference
127+
SetEdocumentServiceBuyerReference("E-Document Buyer Reference"::"Your Reference");
128+
129+
// [GIVEN] Create Sales Invoice with your reference = XX
130+
SalesHeader.Get("Sales Document Type"::Invoice, CreateSalesDocumentWithLine("Sales Document Type"::Invoice, Enum::"Sales Line Type"::Item, false));
131+
132+
// [WHEN] Remove your reference
133+
SalesHeader.Validate("Your Reference", '');
134+
SalesHeader.Modify(false);
135+
136+
// [THEN] Error message is shown when releasing the sales invoice
137+
asserterror CheckSalesHeader(SalesHeader);
138+
end;
139+
118140
[Test]
119141
procedure ExportPostedSalesInvoiceInZUGFeRDFormatVerifySellerDataApplicableHeaderTradeAgreement();
120142
var
@@ -447,6 +469,28 @@ codeunit 13922 "ZUGFeRD XML Document Tests"
447469
VerifyBuyerReference(SalesCrMemoHeader."Your Reference", TempXMLBuffer, '/rsm:CrossIndustryInvoice');
448470
end;
449471

472+
[Test]
473+
procedure ExportPostedSalesCrMemoInZUGFeRDFormatMandateBuyerReferenceAsYourReference();
474+
var
475+
SalesHeader: Record "Sales Header";
476+
begin
477+
// Mandate buyer reference as your reference when releasing sales credit memo for ZUGFeRD format
478+
Initialize();
479+
480+
// [GIVEN] Set Buyer reference = your reference
481+
SetEdocumentServiceBuyerReference("E-Document Buyer Reference"::"Your Reference");
482+
483+
// [GIVEN] Create Sales Invoice with your reference = XX
484+
SalesHeader.Get("Sales Document Type"::"Credit Memo", CreateSalesDocumentWithLine("Sales Document Type"::"Credit Memo", Enum::"Sales Line Type"::Item, false));
485+
486+
// [WHEN] Remove your reference
487+
SalesHeader.Validate("Your Reference", '');
488+
SalesHeader.Modify(false);
489+
490+
// [THEN] Error message is shown when releasing the sales invoice
491+
asserterror CheckSalesHeader(SalesHeader);
492+
end;
493+
450494
[Test]
451495
procedure ExportPostedSalesCrMemoInZUGFeRDFormatVerifySellerDataApplicableHeaderTradeAgreement();
452496
var
@@ -830,6 +874,14 @@ codeunit 13922 "ZUGFeRD XML Document Tests"
830874
SalesLine.Modify(true);
831875
end;
832876

877+
local procedure CheckSalesHeader(SalesHeader: Record "Sales Header")
878+
var
879+
SourceDocumentHeader: RecordRef;
880+
begin
881+
SourceDocumentHeader.GetTable(SalesHeader);
882+
ZUGFeRDFormat.Check(SourceDocumentHeader, EDocumentService, "E-Document Processing Phase"::Release);
883+
end;
884+
833885
local procedure ExportInvoice(SalesInvoiceHeader: Record "Sales Invoice Header"; var TempXMLBuffer: Record "XML Buffer" temporary);
834886
var
835887
SalesInvoiceLine: Record "Sales Invoice Line";

0 commit comments

Comments
 (0)