Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
a485711
Switch E-Document Core from obsoleted BaseApp PEPPOL objects to new P…
Apr 9, 2026
e5491d9
Fix AA0477: sort using Microsoft.Peppol in alphabetical order
Apr 10, 2026
9e5aa64
Fix E-Document Demo Data to use new PEPPOL App codeunit
Apr 10, 2026
f827c11
Fix AA0477: sort using Microsoft.Peppol in alphabetical order
Apr 10, 2026
4899c0d
Merge remote-tracking branch 'origin/main' into pr-7619
Apr 13, 2026
89eda09
Merge branch 'main' of https://github.com/microsoft/BCApps into priva…
Apr 23, 2026
cd19573
Merge remote-tracking branch 'origin/main' into edoc-peppol-obsoletion
May 8, 2026
5fb2b25
Read PEPPOL 3.0 Format from setup in E-Document bridge
May 8, 2026
2c1b28e
Merge commit '855d53be30' into edoc-peppol-obsoletion
May 12, 2026
5f216a3
Merge remote-tracking branch 'origin/main' into edoc-peppol-obsoletion
May 26, 2026
1df3bd9
Merge remote-tracking branch 'origin/main' into edoc-peppol-obsoletion
Jun 1, 2026
1a1dd8b
Add DataClassification to PEPPOL 3.0 Setup fields 2 and 3
Jun 1, 2026
a8d582c
Set Customer E-Mail in EDocument test library
Jun 2, 2026
989503a
Force W1 PEPPOL 3.0 Service Format in EDoc Format Tests
Jun 2, 2026
103c425
Add PEPPOL dependency to E-Document Core Tests app
Jun 3, 2026
403e7e5
Sort Microsoft.Peppol using statement alphabetically
Jun 3, 2026
8ed7adf
Set contact e-mail in EDocument test library to avoid Sell-to confirm
Jun 4, 2026
a21e6b5
Merge origin/main into edoc-peppol-obsoletion
Copilot Jun 5, 2026
b074ea0
Remove trailing whitespace in EDocPurchaseHeader table extension
Copilot Jun 5, 2026
e1c643c
Merge origin/main into edoc-peppol-obsoletion
Copilot Jun 5, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -451,7 +451,7 @@ codeunit 6162 "E-Doc. DED PEPPOL Subscribers"
OriginCountryIdCode,
OriginCountryIdCodeListID);

PEPPOLMgt.GetLineItemClassfiedTaxCategoryBIS(
PEPPOLMgt.GetLineItemClassifiedTaxCategoryBIS(
SalesLine,
ClassifiedTaxCategoryID,
DummyVar,
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down Expand Up @@ -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
Expand All @@ -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;
Expand Down Expand Up @@ -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;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
74 changes: 49 additions & 25 deletions src/Apps/W1/EDocument/App/src/Format/EDocPEPPOLBIS30.Codeunit.al
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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
Expand All @@ -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;
Expand All @@ -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":
Expand Down Expand Up @@ -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)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand Down Expand Up @@ -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,
Expand Down Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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;
Expand Down
Loading
Loading