Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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 @@ -188,6 +188,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
DocumentAttachment: Record "Document Attachment";
DocumentAttachmentData: Codeunit "Temp Blob";
InStream: InStream;
LineNo: Integer;
begin
PurchaseHeader."Document Type" := PurchaseHeader."Document Type"::Invoice;
PurchaseHeader."No." := CopyStr(GetNodeByPath(TempXMLBuffer, '/Invoice/cbc:ID'), 1, MaxStrLen(PurchaseHeader."No."));
Expand All @@ -198,11 +199,11 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
TempXMLBuffer.Reset();
if TempXMLBuffer.FindSet() then
repeat
ParseInvoice(EDocument, PurchaseHeader, PurchaseLine, DocumentAttachment, DocumentAttachmentData, TempXMLBuffer);
ParseInvoice(EDocument, PurchaseHeader, PurchaseLine, DocumentAttachment, DocumentAttachmentData, TempXMLBuffer, LineNo);
until TempXMLBuffer.Next() = 0;

// Insert last document attachment
if DocumentAttachment."No." <> '' then begin
if (DocumentAttachment."No." <> '') and (DocumentAttachment."File Name" <> '') then begin
DocumentAttachmentData.CreateInStream(InStream, TextEncoding::UTF8);
EDocumentAttachmentGen.Insert(EDocument, InStream, DocumentAttachment.FindUniqueFileName(DocumentAttachment."File Name", DocumentAttachment."File Extension"));
Clear(DocumentAttachment);
Expand All @@ -222,6 +223,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
DocumentAttachment: Record "Document Attachment";
DocumentAttachmentData: Codeunit "Temp Blob";
InStream: InStream;
LineNo: Integer;
begin
PurchaseHeader."Document Type" := PurchaseHeader."Document Type"::"Credit Memo";
PurchaseHeader."No." := CopyStr(GetNodeByPath(TempXMLBuffer, '/CreditNote/cbc:ID'), 1, MaxStrLen(PurchaseHeader."No."));
Expand All @@ -230,11 +232,11 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
TempXMLBuffer.Reset();
if TempXMLBuffer.FindSet() then
repeat
ParseCreditMemo(EDocument, PurchaseHeader, PurchaseLine, DocumentAttachment, DocumentAttachmentData, TempXMLBuffer);
ParseCreditMemo(EDocument, PurchaseHeader, PurchaseLine, DocumentAttachment, DocumentAttachmentData, TempXMLBuffer, LineNo);
until TempXMLBuffer.Next() = 0;

// Insert last document attachment
if DocumentAttachment."No." <> '' then begin
if (DocumentAttachment."No." <> '') and (DocumentAttachment."File Name" <> '') then begin
DocumentAttachmentData.CreateInStream(InStream, TextEncoding::UTF8);
EDocumentAttachmentGen.Insert(EDocument, InStream, DocumentAttachment.FindUniqueFileName(DocumentAttachment."File Name", DocumentAttachment."File Extension"));
Clear(DocumentAttachment);
Expand Down Expand Up @@ -311,7 +313,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
/// Parses credit memo information line by line from TempXMLBuffer.
/// We handle the insert of Purchase Order Line and Document Attachment after the call to this function.
/// </summary>
local procedure ParseCreditMemo(EDocument: Record "E-Document"; var PurchaseHeader: Record "Purchase Header" temporary; var PurchaseLine: record "Purchase Line" temporary; var DocumentAttachment: Record "Document Attachment"; DocumentAttachmentData: Codeunit "Temp Blob"; var TempXMLBuffer: Record "XML Buffer" temporary)
local procedure ParseCreditMemo(EDocument: Record "E-Document"; var PurchaseHeader: Record "Purchase Header" temporary; var PurchaseLine: record "Purchase Line" temporary; var DocumentAttachment: Record "Document Attachment"; DocumentAttachmentData: Codeunit "Temp Blob"; var TempXMLBuffer: Record "XML Buffer" temporary; var LineNo: Integer)
var
Base64Convert: Codeunit "Base64 Convert";
OutStream: OutStream;
Expand Down Expand Up @@ -352,7 +354,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
Evaluate(PurchaseHeader.Amount, Value, 9);
'/CreditNote/cac:AdditionalDocumentReference/cbc:ID':
begin
if DocumentAttachment."No." <> '' then begin
if (DocumentAttachment."No." <> '') and (DocumentAttachment."File Name" <> '') then begin
DocumentAttachmentData.CreateInStream(InStream, TextEncoding::UTF8);
EDocumentAttachmentGen.Insert(EDocument, InStream, DocumentAttachment.FindUniqueFileName(DocumentAttachment."File Name", DocumentAttachment."File Extension"));
Clear(DocumentAttachment);
Expand Down Expand Up @@ -381,6 +383,8 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
PurchaseLine.Init();
PurchaseLine."Document Type" := PurchaseHeader."Document Type";
PurchaseLine."Document No." := PurchaseHeader."No.";
LineNo += 10000;
PurchaseLine."Line No." := LineNo;
end;
'/CreditNote/cac:CreditNoteLine/cbc:CreditedQuantity':
if Value <> '' then
Expand All @@ -404,8 +408,6 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
PurchaseLine."Item Reference No." := CopyStr(Value, 1, MaxStrLen(PurchaseLine."Item Reference No."));
'/CreditNote/cac:CreditNoteLine/cac:Item/cac:StandardItemIdentification/cbc:ID':
PurchaseLine."No." := CopyStr(Value, 1, MaxStrLen(PurchaseLine."No."));
'/CreditNote/cac:CreditNoteLine/cbc:ID':
Evaluate(PurchaseLine."Line No.", Value, 9);
'/CreditNote/cac:CreditNoteLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent':
if Value <> '' then
Evaluate(PurchaseLine."VAT %", Value, 9);
Expand All @@ -425,7 +427,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
/// Parses invoice information line by line from TempXMLBuffer.
/// We handle the insert of Purchase Order Line and Document Attachment after the call to this function.
/// </summary>
local procedure ParseInvoice(EDocument: Record "E-Document"; var PurchaseHeader: Record "Purchase Header" temporary; var PurchaseLine: Record "Purchase Line" temporary; var DocumentAttachment: Record "Document Attachment"; DocumentAttachmentData: Codeunit "Temp Blob"; var TempXMLBuffer: Record "XML Buffer" temporary)
local procedure ParseInvoice(EDocument: Record "E-Document"; var PurchaseHeader: Record "Purchase Header" temporary; var PurchaseLine: Record "Purchase Line" temporary; var DocumentAttachment: Record "Document Attachment"; DocumentAttachmentData: Codeunit "Temp Blob"; var TempXMLBuffer: Record "XML Buffer" temporary; var LineNo: Integer)
var
Base64Convert: Codeunit "Base64 Convert";
OutStream: OutStream;
Expand Down Expand Up @@ -464,7 +466,7 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
Evaluate(PurchaseHeader."Document Date", Value, 9);
'/Invoice/cac:AdditionalDocumentReference/cbc:ID':
begin
if DocumentAttachment."No." <> '' then begin
if (DocumentAttachment."No." <> '') and (DocumentAttachment."File Name" <> '') then begin
DocumentAttachmentData.CreateInStream(InStream, TextEncoding::UTF8);
EDocumentAttachmentGen.Insert(EDocument, InStream, DocumentAttachment.FindUniqueFileName(DocumentAttachment."File Name", DocumentAttachment."File Extension"));
Clear(DocumentAttachment);
Expand Down Expand Up @@ -493,6 +495,8 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
PurchaseLine.Init();
PurchaseLine."Document Type" := PurchaseHeader."Document Type";
PurchaseLine."Document No." := PurchaseHeader."No.";
LineNo += 10000;
PurchaseLine."Line No." := LineNo;
end;
'/Invoice/cac:InvoiceLine/cbc:InvoicedQuantity':
if Value <> '' then
Expand All @@ -517,8 +521,6 @@ codeunit 6166 "EDoc Import PEPPOL BIS 3.0"
PurchaseLine."Item Reference No." := CopyStr(Value, 1, MaxStrLen(PurchaseLine."Item Reference No."));
'/Invoice/cac:InvoiceLine/cac:Item/cac:StandardItemIdentification/cbc:ID':
PurchaseLine."No." := CopyStr(Value, 1, MaxStrLen(PurchaseLine."No."));
'/Invoice/cac:InvoiceLine/cbc:ID':
Evaluate(PurchaseLine."Line No.", Value, 9);
'/Invoice/cac:InvoiceLine/cac:Item/cac:ClassifiedTaxCategory/cbc:Percent':
if Value <> '' then
Evaluate(PurchaseLine."VAT %", Value, 9);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Invoice xmlns:cac="urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2"
xmlns:cbc="urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2"
xmlns:ccts="urn:un:unece:uncefact:documentation:2"
xmlns:qdt="urn:oasis:names:specification:ubl:schema:xsd:QualifiedDatatypes-2"
xmlns:udt="urn:un:unece:uncefact:data:specification:UnqualifiedDataTypesSchemaModule:2"
xmlns="urn:oasis:names:specification:ubl:schema:xsd:Invoice-2">
<cbc:CustomizationID>urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0</cbc:CustomizationID>
<cbc:ProfileID>urn:fdc:peppol.eu:2017:poacc:billing:01:1.0</cbc:ProfileID>
<cbc:ID>103033</cbc:ID>
<cbc:IssueDate>2026-01-22</cbc:IssueDate>
<cbc:DueDate>2026-02-22</cbc:DueDate>
<cbc:InvoiceTypeCode>380</cbc:InvoiceTypeCode>
<cbc:DocumentCurrencyCode>XYZ</cbc:DocumentCurrencyCode>
<cbc:BuyerReference>1</cbc:BuyerReference>
<cac:OrderReference>
<cbc:ID>2</cbc:ID>
</cac:OrderReference>
<cac:ContractDocumentReference>
<cbc:ID>103033</cbc:ID>
</cac:ContractDocumentReference>
<cac:AdditionalDocumentReference>
<cbc:ID>103033</cbc:ID>
<cbc:DocumentType />
<cac:Attachment>
<cbc:EmbeddedDocumentBinaryObject mimeCode="application/pdf" filename="test-document.pdf">dGVzdA==</cbc:EmbeddedDocumentBinaryObject>
</cac:Attachment>
</cac:AdditionalDocumentReference>
<cac:AccountingSupplierParty>
<cac:Party>
<cbc:EndpointID schemeID="0088">1234567890128</cbc:EndpointID>
<cac:PartyName>
<cbc:Name>CRONUS International</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>Main Street, 14</cbc:StreetName>
<cbc:CityName>Birmingham</cbc:CityName>
<cbc:PostalZone>B27 4KT</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>GB123456789</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>CRONUS International</cbc:RegistrationName>
<cbc:CompanyID>123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
<cac:Contact>
<cbc:Name>Jim Olive</cbc:Name>
<cbc:ElectronicMail>JO@contoso.com</cbc:ElectronicMail>
</cac:Contact>
</cac:Party>
</cac:AccountingSupplierParty>
<cac:AccountingCustomerParty>
<cac:Party>
<cbc:EndpointID schemeID="9932">789456278</cbc:EndpointID>
<cac:PartyIdentification>
<cbc:ID schemeID="0088">8712345000004</cbc:ID>
</cac:PartyIdentification>
<cac:PartyName>
<cbc:Name>The Cannon Group PLC</cbc:Name>
</cac:PartyName>
<cac:PostalAddress>
<cbc:StreetName>192 Market Square</cbc:StreetName>
<cbc:CityName>Birmingham</cbc:CityName>
<cbc:PostalZone>B27 4KT</cbc:PostalZone>
<cac:Country>
<cbc:IdentificationCode>GB</cbc:IdentificationCode>
</cac:Country>
</cac:PostalAddress>
<cac:PartyTaxScheme>
<cbc:CompanyID>GB789456278</cbc:CompanyID>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:PartyTaxScheme>
<cac:PartyLegalEntity>
<cbc:RegistrationName>The Cannon Group PLC</cbc:RegistrationName>
</cac:PartyLegalEntity>
</cac:Party>
</cac:AccountingCustomerParty>
<cac:PayeeParty>
<cac:PartyName>
<cbc:Name>CRONUS International</cbc:Name>
</cac:PartyName>
<cac:PartyLegalEntity>
<cbc:CompanyID>GB123456789</cbc:CompanyID>
</cac:PartyLegalEntity>
</cac:PayeeParty>
<cac:PaymentMeans>
<cbc:PaymentMeansCode>30</cbc:PaymentMeansCode>
<cbc:PaymentDueDate>2026-02-22</cbc:PaymentDueDate>
<cac:PayeeFinancialAccount>
<cbc:ID>GB12CPBK08929965044991</cbc:ID>
<cac:FinancialInstitutionBranch>
<cbc:ID>BG99999</cbc:ID>
</cac:FinancialInstitutionBranch>
</cac:PayeeFinancialAccount>
</cac:PaymentMeans>
<cac:PaymentTerms>
<cbc:Note>1 Month/2% 8 days</cbc:Note>
</cac:PaymentTerms>
<cac:TaxTotal>
<cbc:TaxAmount currencyID="XYZ">1000</cbc:TaxAmount>
<cac:TaxSubtotal>
<cbc:TaxableAmount currencyID="XYZ">4000</cbc:TaxableAmount>
<cbc:TaxAmount currencyID="XYZ">1000</cbc:TaxAmount>
<cac:TaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>25</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:TaxCategory>
</cac:TaxSubtotal>
</cac:TaxTotal>
<cac:LegalMonetaryTotal>
<cbc:LineExtensionAmount currencyID="XYZ">14000</cbc:LineExtensionAmount>
<cbc:TaxExclusiveAmount currencyID="XYZ">14000</cbc:TaxExclusiveAmount>
<cbc:TaxInclusiveAmount currencyID="XYZ">14140</cbc:TaxInclusiveAmount>
<cbc:AllowanceTotalAmount currencyID="XYZ">0</cbc:AllowanceTotalAmount>
<cbc:PrepaidAmount currencyID="XYZ">0.00</cbc:PrepaidAmount>
<cbc:PayableRoundingAmount currencyID="XYZ">0</cbc:PayableRoundingAmount>
<cbc:PayableAmount currencyID="XYZ">14140</cbc:PayableAmount>
</cac:LegalMonetaryTotal>
<cac:InvoiceLine>
<cbc:ID>1.1</cbc:ID>
<cbc:Note>Item</cbc:Note>
<cbc:InvoicedQuantity unitCode="PCS">1</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="XYZ">4000</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Bicycle</cbc:Name>
<cac:StandardItemIdentification>
<cbc:ID>1000</cbc:ID>
</cac:StandardItemIdentification>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>25</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="XYZ">4000.00</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="PCS">1</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
<cac:InvoiceLine>
<cbc:ID>1.2</cbc:ID>
<cbc:Note>Item</cbc:Note>
<cbc:InvoicedQuantity unitCode="PCS">2</cbc:InvoicedQuantity>
<cbc:LineExtensionAmount currencyID="XYZ">10000</cbc:LineExtensionAmount>
<cac:Item>
<cbc:Name>Bicycle v2</cbc:Name>
<cac:StandardItemIdentification>
<cbc:ID>2000</cbc:ID>
</cac:StandardItemIdentification>
<cac:ClassifiedTaxCategory>
<cbc:ID>S</cbc:ID>
<cbc:Percent>25</cbc:Percent>
<cac:TaxScheme>
<cbc:ID>VAT</cbc:ID>
</cac:TaxScheme>
</cac:ClassifiedTaxCategory>
</cac:Item>
<cac:Price>
<cbc:PriceAmount currencyID="XYZ">5000.00</cbc:PriceAmount>
<cbc:BaseQuantity unitCode="PCS">2</cbc:BaseQuantity>
</cac:Price>
</cac:InvoiceLine>
</Invoice>
Loading
Loading