diff --git a/src/Apps/W1/EDocument/App/src/DataExchange/EDocDataExchangeImpl.Codeunit.al b/src/Apps/W1/EDocument/App/src/DataExchange/EDocDataExchangeImpl.Codeunit.al index 111e9a52fb..7ec2b23fba 100644 --- a/src/Apps/W1/EDocument/App/src/DataExchange/EDocDataExchangeImpl.Codeunit.al +++ b/src/Apps/W1/EDocument/App/src/DataExchange/EDocDataExchangeImpl.Codeunit.al @@ -7,10 +7,10 @@ namespace Microsoft.eServices.EDocument.IO.Peppol; using Microsoft.eServices.EDocument; using Microsoft.Foundation.Attachment; using Microsoft.Foundation.Company; +using Microsoft.Peppol; using Microsoft.Purchases.Document; using Microsoft.Sales.Document; using Microsoft.Sales.History; -using Microsoft.Sales.Peppol; using Microsoft.Service.History; using System.IO; using System.Reflection; @@ -27,34 +27,40 @@ codeunit 6152 "E-Doc. Data Exchange Impl." implements "E-Document" SalesCrMemoHeader: Record "Sales Cr.Memo Header"; ServiceInvoiceHeader: Record "Service Invoice Header"; ServiceCrMemoHeader: Record "Service Cr.Memo Header"; - PEPPOLValidation: Codeunit "PEPPOL Validation"; - PEPPOLServiceValidation: Codeunit "PEPPOL Service Validation"; + PeppolSetup: Record "PEPPOL 3.0 Setup"; + SalesValidation: Interface "PEPPOL30 Validation"; + ServiceValidation: Interface "PEPPOL30 Validation"; begin + PeppolSetup.GetSetup(); + SalesValidation := PeppolSetup."PEPPOL 3.0 Sales Format"; + ServiceValidation := PeppolSetup."PEPPOL 3.0 Service Format"; + case SourceDocumentHeader.Number of Database::"Sales Header": begin SourceDocumentHeader.SetTable(SalesHeader); - PEPPOLValidation.Run(SalesHeader); + SalesValidation.ValidateDocument(SalesHeader); + SalesValidation.ValidateDocumentLines(SalesHeader); end; Database::"Sales Invoice Header": begin SourceDocumentHeader.SetTable(SalesInvoiceHeader); - PEPPOLValidation.CheckSalesInvoice(SalesInvoiceHeader); + SalesValidation.ValidatePostedDocument(SalesInvoiceHeader); end; Database::"Sales Cr.Memo Header": begin SourceDocumentHeader.SetTable(SalesCrMemoHeader); - PEPPOLValidation.CheckSalesCreditMemo(SalesCrMemoHeader); + SalesValidation.ValidatePostedDocument(SalesCrMemoHeader); end; Database::"Service Invoice Header": begin SourceDocumentHeader.SetTable(ServiceInvoiceHeader); - PEPPOLServiceValidation.CheckServiceInvoice(ServiceInvoiceHeader); + ServiceValidation.ValidatePostedDocument(ServiceInvoiceHeader); end; Database::"Service Cr.Memo Header": begin SourceDocumentHeader.SetTable(ServiceCrMemoHeader); - PEPPOLServiceValidation.CheckServiceCreditMemo(ServiceCrMemoHeader); + ServiceValidation.ValidatePostedDocument(ServiceCrMemoHeader); end; end; end; diff --git a/src/Apps/W1/EDocument/App/src/DataExchange/PEPPOL Data Exchange Definition/EDocDEDPEPPOLSubscribers.Codeunit.al b/src/Apps/W1/EDocument/App/src/DataExchange/PEPPOL Data Exchange Definition/EDocDEDPEPPOLSubscribers.Codeunit.al index d06a93424f..d0d0d2f30b 100644 --- a/src/Apps/W1/EDocument/App/src/DataExchange/PEPPOL Data Exchange Definition/EDocDEDPEPPOLSubscribers.Codeunit.al +++ b/src/Apps/W1/EDocument/App/src/DataExchange/PEPPOL Data Exchange Definition/EDocDEDPEPPOLSubscribers.Codeunit.al @@ -9,10 +9,10 @@ using Microsoft.Finance.GeneralLedger.Setup; using Microsoft.Finance.VAT.Calculation; using Microsoft.Finance.VAT.Setup; using Microsoft.Foundation.Attachment; +using Microsoft.Peppol; using Microsoft.Sales.Customer; using Microsoft.Sales.Document; using Microsoft.Sales.History; -using Microsoft.Sales.Peppol; using Microsoft.Service.History; using System.IO; using System.Utilities; @@ -451,7 +451,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" OriginCountryIdCode, OriginCountryIdCodeListID); - PEPPOLMgt.GetLineItemClassfiedTaxCategoryBIS( + PEPPOLMgt.GetLineItemClassifiedTaxCategoryBIS( SalesLine, ClassifiedTaxCategoryID, DummyVar, @@ -631,7 +631,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" TempSalesLineRounding.TransferFields(SalesLine); TempSalesLineRounding.Insert(); end else begin - PEPPOLMgt.GetTotals(SalesLine, TempVATAmtLine); + PEPPOLMgt.GetTaxTotals(SalesLine, TempVATAmtLine); PEPPOLMgt.GetTaxCategories(SalesLine, TempVATProductPostingGroup); end; until SalesInvoiceLine.Next() = 0; @@ -650,12 +650,12 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" if ServiceInvoiceLine.FindSet() then repeat PEPPOLMgt.TransferLineToSalesLine(ServiceInvoiceLine, SalesLine); - SalesLine.Type := ServPEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceInvoiceLine.Type); + SalesLine.Type := PEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceInvoiceLine.Type); if IsRoundingLine(SalesLine) then begin TempSalesLineRounding.TransferFields(SalesLine); TempSalesLineRounding.Insert(); end else begin - PEPPOLMgt.GetTotals(SalesLine, TempVATAmtLine); + PEPPOLMgt.GetTaxTotals(SalesLine, TempVATAmtLine); PEPPOLMgt.GetTaxCategories(SalesLine, TempVATProductPostingGroup); end; until ServiceInvoiceLine.Next() = 0; @@ -678,7 +678,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" TempSalesLineRounding.TransferFields(SalesLine); TempSalesLineRounding.Insert(); end else begin - PEPPOLMgt.GetTotals(SalesLine, TempVATAmtLine); + PEPPOLMgt.GetTaxTotals(SalesLine, TempVATAmtLine); PEPPOLMgt.GetTaxCategories(SalesLine, TempVATProductPostingGroup); end; until SalesCrMemoLine.Next() = 0; @@ -697,12 +697,12 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" if ServiceCrMemoLine.FindSet() then repeat PEPPOLMgt.TransferLineToSalesLine(ServiceCrMemoLine, SalesLine); - SalesLine.Type := ServPEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceCrMemoLine.Type); + SalesLine.Type := PEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceCrMemoLine.Type); if IsRoundingLine(SalesLine) then begin TempSalesLineRounding.TransferFields(SalesLine); TempSalesLineRounding.Insert(); end else begin - PEPPOLMgt.GetTotals(SalesLine, TempVATAmtLine); + PEPPOLMgt.GetTaxTotals(SalesLine, TempVATAmtLine); PEPPOLMgt.GetTaxCategories(SalesLine, TempVATProductPostingGroup); end; until ServiceCrMemoLine.Next() = 0; @@ -738,7 +738,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" ServiceInvoiceLine.FindFirst(); PEPPOLMgt.TransferLineToSalesLine(ServiceInvoiceLine, SalesLine); - SalesLine.Type := ServPEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceInvoiceLine.Type); + SalesLine.Type := PEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceInvoiceLine.Type); end; ProcessedDocType::"Sales Credit Memo": begin @@ -754,7 +754,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" ServiceCrMemoLine.FindFirst(); PEPPOLMgt.TransferLineToSalesLine(ServiceCrMemoLine, SalesLine); - SalesLine.Type := ServPEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceCrMemoLine.Type); + SalesLine.Type := PEPPOLMgt.MapServiceLineTypeToSalesLineType(ServiceCrMemoLine.Type); end; end; end; @@ -801,8 +801,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers" #pragma warning restore AL0432 TempSalesLineRounding: Record "Sales Line" temporary; TempVATProductPostingGroup: Record "VAT Product Posting Group" temporary; - PEPPOLMgt: Codeunit "PEPPOL Management"; - ServPEPPOLMgt: Codeunit "Serv. PEPPOL Management"; + PEPPOLMgt: Codeunit "PEPPOL30"; ProcessedDocType: Enum "E-Document Type"; DocumentAttachmentNumber, ProcessedDocTypeInt : Integer; AdditionalDocumentReferenceID, AdditionalDocRefDocumentType, URI, Filename, MimeCode, EmbeddedDocumentBinaryObject : Text; diff --git a/src/Apps/W1/EDocument/App/src/Extensions/EDocPurchaseHeader.TableExt.al b/src/Apps/W1/EDocument/App/src/Extensions/EDocPurchaseHeader.TableExt.al index a53da43d88..5f3c6ca303 100644 --- a/src/Apps/W1/EDocument/App/src/Extensions/EDocPurchaseHeader.TableExt.al +++ b/src/Apps/W1/EDocument/App/src/Extensions/EDocPurchaseHeader.TableExt.al @@ -50,5 +50,5 @@ tableextension 6169 "E-Doc. Purchase Header" extends "Purchase Header" internal procedure IsLinkedToEDoc(EDocumentToExclude: Record "E-Document"): Boolean begin exit(not IsNullGuid("E-Document Link") and ("E-Document Link" <> EDocumentToExclude.SystemId)); - end; + end; } diff --git a/src/Apps/W1/EDocument/App/src/Format/EDocPEPPOLBIS30.Codeunit.al b/src/Apps/W1/EDocument/App/src/Format/EDocPEPPOLBIS30.Codeunit.al index 8e85d5d1f3..f56d582fba 100644 --- a/src/Apps/W1/EDocument/App/src/Format/EDocPEPPOLBIS30.Codeunit.al +++ b/src/Apps/W1/EDocument/App/src/Format/EDocPEPPOLBIS30.Codeunit.al @@ -8,7 +8,6 @@ using Microsoft.Purchases.Document; using Microsoft.Sales.Document; using Microsoft.Sales.FinanceCharge; using Microsoft.Sales.History; -using Microsoft.Sales.Peppol; using Microsoft.Sales.Reminder; using Microsoft.Service.Document; using Microsoft.Service.History; @@ -26,35 +25,39 @@ codeunit 6165 "EDoc PEPPOL BIS 3.0" implements "E-Document" ServiceCrMemoHeader: Record "Service Cr.Memo Header"; ReminderHeader: Record "Reminder Header"; FinChargeMemoHeader: Record "Finance Charge Memo Header"; - PEPPOLValidation: Codeunit "PEPPOL Validation"; - PEPPOLServiceValidation: Codeunit "PEPPOL Service Validation"; EDocPEPPOLValidation: Codeunit "E-Doc. PEPPOL Validation"; + SalesValidation: Interface "PEPPOL30 Validation"; + ServiceValidation: Interface "PEPPOL30 Validation"; begin + SalesValidation := GetSalesFormat(); + ServiceValidation := GetServiceFormat(); + case SourceDocumentHeader.Number of Database::"Sales Header": begin SourceDocumentHeader.SetTable(SalesHeader); - PEPPOLValidation.Run(SalesHeader); + SalesValidation.ValidateDocument(SalesHeader); + SalesValidation.ValidateDocumentLines(SalesHeader); end; Database::"Sales Invoice Header": begin SourceDocumentHeader.SetTable(SalesInvoiceHeader); - PEPPOLValidation.CheckSalesInvoice(SalesInvoiceHeader); + SalesValidation.ValidatePostedDocument(SalesInvoiceHeader); end; Database::"Sales Cr.Memo Header": begin SourceDocumentHeader.SetTable(SalesCrMemoHeader); - PEPPOLValidation.CheckSalesCreditMemo(SalesCrMemoHeader); + SalesValidation.ValidatePostedDocument(SalesCrMemoHeader); end; Database::"Service Invoice Header": begin SourceDocumentHeader.SetTable(ServiceInvoiceHeader); - PEPPOLServiceValidation.CheckServiceInvoice(ServiceInvoiceHeader); + ServiceValidation.ValidatePostedDocument(ServiceInvoiceHeader); end; Database::"Service Cr.Memo Header": begin SourceDocumentHeader.SetTable(ServiceCrMemoHeader); - PEPPOLServiceValidation.CheckServiceCreditMemo(ServiceCrMemoHeader); + ServiceValidation.ValidatePostedDocument(ServiceCrMemoHeader); end; Database::"Reminder Header": begin @@ -69,7 +72,8 @@ codeunit 6165 "EDoc PEPPOL BIS 3.0" implements "E-Document" Database::"Service Header": begin SourceDocumentHeader.SetTable(ServiceHeader); - PEPPOLServiceValidation.CheckServiceHeader(ServiceHeader); + ServiceValidation.ValidateDocument(ServiceHeader); + ServiceValidation.ValidateDocumentLines(ServiceHeader); end; end; end; @@ -81,10 +85,14 @@ codeunit 6165 "EDoc PEPPOL BIS 3.0" implements "E-Document" begin TempBlob.CreateOutStream(DocOutStream); case EDocument."Document Type" of - EDocument."Document Type"::"Sales Invoice", EDocument."Document Type"::"Service Invoice": - GenerateInvoiceXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export"); - EDocument."Document Type"::"Sales Credit Memo", EDocument."Document Type"::"Service Credit Memo": - GenerateCrMemoXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export"); + EDocument."Document Type"::"Sales Invoice": + GenerateInvoiceXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export", GetSalesFormat()); + EDocument."Document Type"::"Service Invoice": + GenerateInvoiceXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export", GetServiceFormat()); + EDocument."Document Type"::"Sales Credit Memo": + GenerateCrMemoXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export", GetSalesFormat()); + EDocument."Document Type"::"Service Credit Memo": + GenerateCrMemoXMLFile(SourceDocumentHeader, DocOutStream, EDocumentService."Embed PDF in export", GetServiceFormat()); EDocument."Document Type"::"Issued Reminder", EDocument."Document Type"::"Issued Finance Charge Memo": GenerateFinancialResultsXMLFile(SourceDocumentHeader, DocOutStream); EDocument."Document Type"::"Sales Shipment": @@ -122,24 +130,40 @@ codeunit 6165 "EDoc PEPPOL BIS 3.0" implements "E-Document" CreatedDocumentLines.GetTable(TempPurchaseLine); end; - local procedure GenerateInvoiceXMLFile(VariantRec: Variant; var OutStr: OutStream; GeneratePDF: Boolean) + local procedure GenerateInvoiceXMLFile(VariantRec: Variant; var OutStr: OutStream; GeneratePDF: Boolean; PEPPOLFormat: Enum "PEPPOL 3.0 Format") var - SalesInvoicePEPPOLBIS30: XMLport "Sales Invoice - PEPPOL BIS 3.0"; + SalesInvoicePEPPOL30: XMLport "Sales Invoice - PEPPOL30"; begin - SalesInvoicePEPPOLBIS30.Initialize(VariantRec); - SalesInvoicePEPPOLBIS30.SetGeneratePDF(GeneratePDF); - SalesInvoicePEPPOLBIS30.SetDestination(OutStr); - SalesInvoicePEPPOLBIS30.Export(); + SalesInvoicePEPPOL30.Initialize(VariantRec, PEPPOLFormat); + SalesInvoicePEPPOL30.SetGeneratePDF(GeneratePDF); + SalesInvoicePEPPOL30.SetDestination(OutStr); + SalesInvoicePEPPOL30.Export(); end; - local procedure GenerateCrMemoXMLFile(VariantRec: Variant; var OutStr: OutStream; GeneratePDF: Boolean) + local procedure GenerateCrMemoXMLFile(VariantRec: Variant; var OutStr: OutStream; GeneratePDF: Boolean; PEPPOLFormat: Enum "PEPPOL 3.0 Format") var - SalesCrMemoPEPPOLBIS30: XMLport "Sales Cr.Memo - PEPPOL BIS 3.0"; + SalesCrMemoPEPPOL30: XMLport "Sales Cr.Memo - PEPPOL30"; begin - SalesCrMemoPEPPOLBIS30.Initialize(VariantRec); - SalesCrMemoPEPPOLBIS30.SetGeneratePDF(GeneratePDF); - SalesCrMemoPEPPOLBIS30.SetDestination(OutStr); - SalesCrMemoPEPPOLBIS30.Export(); + SalesCrMemoPEPPOL30.Initialize(VariantRec, PEPPOLFormat); + SalesCrMemoPEPPOL30.SetGeneratePDF(GeneratePDF); + SalesCrMemoPEPPOL30.SetDestination(OutStr); + SalesCrMemoPEPPOL30.Export(); + end; + + local procedure GetSalesFormat(): Enum "PEPPOL 3.0 Format" + var + PeppolSetup: Record "PEPPOL 3.0 Setup"; + begin + PeppolSetup.GetSetup(); + exit(PeppolSetup."PEPPOL 3.0 Sales Format"); + end; + + local procedure GetServiceFormat(): Enum "PEPPOL 3.0 Format" + var + PeppolSetup: Record "PEPPOL 3.0 Setup"; + begin + PeppolSetup.GetSetup(); + exit(PeppolSetup."PEPPOL 3.0 Service Format"); end; local procedure GenerateFinancialResultsXMLFile(VariantRec: Variant; var OutStr: OutStream) diff --git a/src/Apps/W1/EDocument/App/src/Format/FinResultsPEPPOLBIS30.XmlPort.al b/src/Apps/W1/EDocument/App/src/Format/FinResultsPEPPOLBIS30.XmlPort.al index f96f18627c..d93281d3d8 100644 --- a/src/Apps/W1/EDocument/App/src/Format/FinResultsPEPPOLBIS30.XmlPort.al +++ b/src/Apps/W1/EDocument/App/src/Format/FinResultsPEPPOLBIS30.XmlPort.al @@ -2,9 +2,9 @@ namespace Microsoft.EServices.EDocument.IO.Peppol; using Microsoft.Finance.VAT.Calculation; using Microsoft.Finance.VAT.Setup; +using Microsoft.Peppol; using Microsoft.Sales.Document; using Microsoft.Sales.FinanceCharge; -using Microsoft.Sales.Peppol; using Microsoft.Sales.Reminder; using System.Utilities; @@ -1036,7 +1036,7 @@ xmlport 6100 "Fin. Results - PEPPOL BIS 3.0" trigger OnBeforePassVariable() begin - this.PEPPOLMgt.GetLineItemClassfiedTaxCategoryBIS( + this.PEPPOLMgt.GetLineItemClassifiedTaxCategoryBIS( this.GlobalSalesLine, ClassifiedTaxCategoryID, this.DummyVar, @@ -1179,7 +1179,7 @@ xmlport 6100 "Fin. Results - PEPPOL BIS 3.0" GlobalIssuedFinChargeMemoHeader: Record "Issued Fin. Charge Memo Header"; GlobalIssuedFinChargeMemoLine: Record "Issued Fin. Charge Memo Line"; TempVATProductPostingGroup: Record "VAT Product Posting Group" temporary; - PEPPOLMgt: Codeunit "PEPPOL Management"; + PEPPOLMgt: Codeunit "PEPPOL30"; SourceRecRef: RecordRef; DummyVar: Text; IsReminder: Boolean; @@ -1194,7 +1194,7 @@ xmlport 6100 "Fin. Results - PEPPOL BIS 3.0" if this.GlobalIssuedReminderLine.FindSet() then repeat this.CopyReminderLineToSalesLine(this.GlobalSalesLine, this.GlobalIssuedReminderHeader, this.GlobalIssuedReminderLine); - this.PEPPOLMgt.GetTotals(this.GlobalSalesLine, this.TempVATAmtLine); + this.PEPPOLMgt.GetTaxTotals(this.GlobalSalesLine, this.TempVATAmtLine); this.PEPPOLMgt.GetTaxCategories(this.GlobalSalesLine, this.TempVATProductPostingGroup); until this.GlobalIssuedReminderLine.Next() = 0; end; @@ -1204,7 +1204,7 @@ xmlport 6100 "Fin. Results - PEPPOL BIS 3.0" if this.GlobalIssuedFinChargeMemoLine.FindSet() then repeat this.CopyFinChargeMemoLineToSalesLine(this.GlobalSalesLine, this.GlobalIssuedFinChargeMemoHeader, this.GlobalIssuedFinChargeMemoLine); - this.PEPPOLMgt.GetTotals(this.GlobalSalesLine, this.TempVATAmtLine); + this.PEPPOLMgt.GetTaxTotals(this.GlobalSalesLine, this.TempVATAmtLine); this.PEPPOLMgt.GetTaxCategories(this.GlobalSalesLine, this.TempVATProductPostingGroup); until this.GlobalIssuedFinChargeMemoLine.Next() = 0; end; diff --git a/src/Apps/W1/EDocument/Demo Data/3.Transactions/CreateEDocumentTransactions.Codeunit.al b/src/Apps/W1/EDocument/Demo Data/3.Transactions/CreateEDocumentTransactions.Codeunit.al index 20117a3c73..8f0c7b3c19 100644 --- a/src/Apps/W1/EDocument/Demo Data/3.Transactions/CreateEDocumentTransactions.Codeunit.al +++ b/src/Apps/W1/EDocument/Demo Data/3.Transactions/CreateEDocumentTransactions.Codeunit.al @@ -10,12 +10,12 @@ using Microsoft.DemoTool.Helpers; using Microsoft.eServices.EDocument; using Microsoft.eServices.EDocument.Processing.Import; using Microsoft.Foundation.Company; +using Microsoft.Peppol; using Microsoft.Purchases.Document; using Microsoft.Purchases.Posting; using Microsoft.Purchases.Vendor; using Microsoft.Sales.Document; using Microsoft.Sales.History; -using Microsoft.Sales.Peppol; using Microsoft.Sales.Setup; using System.IO; using System.Utilities; @@ -142,7 +142,7 @@ codeunit 5376 "Create E-Document Transactions" SalesSetup: Record "Sales & Receivables Setup"; ContosoCustomer: Codeunit "Create Common Customer/Vendor"; CreateEDocTransactions: Codeunit "Create E-Document Transactions"; - ExportSalesInv: Codeunit "Exp. Sales Inv. PEPPOL BIS3.0"; + ExportSalesInv: Codeunit "Exp. Sales Inv. PEPPOL30"; TempBlob: Codeunit "Temp Blob"; TempBlobList: Codeunit "Temp Blob List"; OutStr: OutStream; @@ -170,7 +170,7 @@ codeunit 5376 "Create E-Document Transactions" CorrectSalesInvHeader(SalesInvHeader); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); @@ -200,7 +200,7 @@ codeunit 5376 "Create E-Document Transactions" Clear(TempBlob); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); @@ -220,7 +220,7 @@ codeunit 5376 "Create E-Document Transactions" Clear(TempBlob); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); @@ -245,7 +245,7 @@ codeunit 5376 "Create E-Document Transactions" Clear(TempBlob); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); @@ -268,7 +268,7 @@ codeunit 5376 "Create E-Document Transactions" Clear(TempBlob); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); @@ -288,7 +288,7 @@ codeunit 5376 "Create E-Document Transactions" Clear(TempBlob); TempBlob.CreateOutStream(OutStr); - ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr); + ExportSalesInv.GenerateXMLFile(SalesInvHeader, OutStr, "PEPPOL 3.0 Format"::"PEPPOL 3.0 - Sales"); TempBlobList.Add(TempBlob); SalesInvHeader.Delete(true); SalesHeader.Delete(); diff --git a/src/Apps/W1/EDocument/Demo Data/app.json b/src/Apps/W1/EDocument/Demo Data/app.json index 7f074178d1..dad9d6b296 100644 --- a/src/Apps/W1/EDocument/Demo Data/app.json +++ b/src/Apps/W1/EDocument/Demo Data/app.json @@ -23,6 +23,12 @@ "name": "Contoso Coffee Demo Dataset", "publisher": "Microsoft", "version": "29.0.0.0" + }, + { + "id": "e1966889-b5fb-4fda-a84c-ea71b590e1a9", + "name": "PEPPOL", + "publisher": "Microsoft", + "version": "29.0.0.0" } ], "internalsVisibleTo": [ diff --git a/src/Apps/W1/EDocument/Test/app.json b/src/Apps/W1/EDocument/Test/app.json index e182d37bc9..d16388289a 100644 --- a/src/Apps/W1/EDocument/Test/app.json +++ b/src/Apps/W1/EDocument/Test/app.json @@ -18,6 +18,12 @@ "publisher": "Microsoft", "version": "29.0.0.0" }, + { + "id": "e1966889-b5fb-4fda-a84c-ea71b590e1a9", + "name": "PEPPOL", + "publisher": "Microsoft", + "version": "29.0.0.0" + }, { "id": "5d86850b-0d76-4eca-bd7b-951ad998e997", "name": "Tests-TestLibraries", diff --git a/src/Apps/W1/EDocument/Test/src/LibraryEDocument.Codeunit.al b/src/Apps/W1/EDocument/Test/src/LibraryEDocument.Codeunit.al index adf51d6adf..a866609a2a 100644 --- a/src/Apps/W1/EDocument/Test/src/LibraryEDocument.Codeunit.al +++ b/src/Apps/W1/EDocument/Test/src/LibraryEDocument.Codeunit.al @@ -69,6 +69,8 @@ codeunit 139629 "Library - E-Document" CountryRegion: Record "Country/Region"; DocumentSendingProfile: Record "Document Sending Profile"; SalesSetup: Record "Sales & Receivables Setup"; + Contact: Record Contact; + ContactBusinessRelation: Record "Contact Business Relation"; WorkflowSetup: Codeunit "Workflow Setup"; WorkflowCode: Code[20]; begin @@ -92,9 +94,22 @@ codeunit 139629 "Library - E-Document" Customer.Validate("VAT Bus. Posting Group", VATPostingSetup."VAT Bus. Posting Group"); Customer."VAT Registration No." := LibraryERM.GenerateVATRegistrationNo(CountryRegion.Code); Customer.Validate(GLN, '1234567890128'); + Customer.Validate("E-Mail", 'edoc-test@contoso.com'); Customer."Document Sending Profile" := DocumentSendingProfile.Code; Customer.Modify(true); + // Set the same e-mail on the customer's contact. Validating the sell-to customer on a sales + // document copies the customer e-mail to "Sell-to E-Mail"; if the linked contact has no + // e-mail (e.g. via the OIOUBL "Sell-to Customer No." validation on NAV_DK) base app raises + // the "contact has no e-mail address" confirm, which fails these tests as Unhandled UI. + ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer); + ContactBusinessRelation.SetRange("No.", Customer."No."); + if ContactBusinessRelation.FindFirst() then + if Contact.Get(ContactBusinessRelation."Contact No.") then begin + Contact."E-Mail" := 'edoc-test@contoso.com'; + Contact.Modify(); + end; + // Create Item if StandardItem."No." = '' then begin VATPostingSetup.TestField("VAT Prod. Posting Group"); diff --git a/src/Apps/W1/EDocument/Test/src/Processing/EDocFormatTests.Codeunit.al b/src/Apps/W1/EDocument/Test/src/Processing/EDocFormatTests.Codeunit.al index 7980fc4e21..2babe473a0 100644 --- a/src/Apps/W1/EDocument/Test/src/Processing/EDocFormatTests.Codeunit.al +++ b/src/Apps/W1/EDocument/Test/src/Processing/EDocFormatTests.Codeunit.al @@ -14,6 +14,7 @@ using Microsoft.Foundation.Address; using Microsoft.Foundation.Company; using Microsoft.Foundation.Reporting; using Microsoft.Inventory.Item; +using Microsoft.Peppol; using Microsoft.Purchases.History; using Microsoft.Purchases.Payables; using Microsoft.Purchases.Vendor; @@ -51,6 +52,7 @@ codeunit 139519 "E-Doc. Format Tests" DocumentSendingProfile: Record "Document Sending Profile"; ServiceHeader: Record "Service Header"; ServiceMngmtSetup: Record "Service Mgt. Setup"; + Peppol30Setup: Record "PEPPOL 3.0 Setup"; LibraryERMCountryData: Codeunit "Library - ERM Country Data"; ExpectedErr: Text; WorkflowCode: Code[20]; @@ -58,6 +60,12 @@ codeunit 139519 "E-Doc. Format Tests" // [SCENARIO 608765] E-Documents: Check 'Your reference' not available in service documents in Belgian localisation Initialize(Enum::"Service Integration"::Mock); + // Force the W1 PEPPOL 3.0 service validation impl so that country-specific overrides (e.g. DE, + // which omits the Your Reference check) do not change the asserted W1 behavior. + Peppol30Setup.GetSetup(); + Peppol30Setup."PEPPOL 3.0 Service Format" := Peppol30Setup."PEPPOL 3.0 Service Format"::"PEPPOL 3.0 - Service"; + Peppol30Setup.Modify(); + // [WHEN] Team member create invoice and update company information. UpdateCompanyInformation(); LibraryLowerPermission.SetTeamMember(); diff --git a/src/Apps/W1/PEPPOL/App/src/Setup/PEPPOL30Setup.Table.al b/src/Apps/W1/PEPPOL/App/src/Setup/PEPPOL30Setup.Table.al index 8d2e9a116b..8aa6580988 100644 --- a/src/Apps/W1/PEPPOL/App/src/Setup/PEPPOL30Setup.Table.al +++ b/src/Apps/W1/PEPPOL/App/src/Setup/PEPPOL30Setup.Table.al @@ -28,11 +28,13 @@ table 37202 "PEPPOL 3.0 Setup" { Caption = 'PEPPOL 3.0 Sales Format'; ToolTip = 'Specifies the PEPPOL 3.0 format to be used for electronic documents of type sales.'; + DataClassification = SystemMetadata; } field(3; "PEPPOL 3.0 Service Format"; Enum "PEPPOL 3.0 Format") { Caption = 'PEPPOL 3.0 Service Format'; ToolTip = 'Specifies the PEPPOL 3.0 format to be used for electronic documents of type service.'; + DataClassification = SystemMetadata; } field(4; "PEPPOL 3.0 Purchase Format"; Enum "PEPPOL 3.0 Purchase") {