diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/EDocumentPINTANZHandler.Codeunit.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/EDocumentPINTANZHandler.Codeunit.al new file mode 100644 index 0000000000..7f5213a426 --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/EDocumentPINTANZHandler.Codeunit.al @@ -0,0 +1,291 @@ +namespace Microsoft.eServices.EDocument.Format; + +using Microsoft.eServices.EDocument; +using Microsoft.eServices.EDocument.Helpers; +using Microsoft.eServices.EDocument.Processing.Import; +using Microsoft.eServices.EDocument.Processing.Import.Purchase; +using Microsoft.eServices.EDocument.Processing.Interfaces; +using Microsoft.eServices.EDocument.Service.Participant; +using Microsoft.Purchases.Vendor; +using System.Utilities; + +codeunit 28008 "E-Document PINT A-NZ Handler" implements IStructuredFormatReader +{ + Access = Internal; + InherentEntitlements = X; + InherentPermissions = X; + + var + EDocumentImportHelper: Codeunit "E-Document Import Helper"; + GLNSchemeIdTok: Label '0088', Locked = true; + + /// + /// Reads a PINT A-NZ format XML document and converts it into a draft purchase document. + /// This procedure processes both Invoice and CreditNote document types and populates the E-Document Purchase Header with the extracted data. + /// + /// The E-Document record that contains the document metadata and information. + /// A temporary blob containing the XML document stream to be processed. + /// Returns an enum indicating that the process resulted in a purchase document draft. + internal procedure ReadIntoDraft(EDocument: Record "E-Document"; TempBlob: Codeunit "Temp Blob"): Enum "E-Doc. Process Draft" + var + EDocumentPurchaseHeader: Record "E-Document Purchase Header"; + PINTANZXml: XmlDocument; + XmlNamespaces: XmlNamespaceManager; + XmlElement: XmlElement; + CommonAggregateComponentsTok: Label 'urn:oasis:names:specification:ubl:schema:xsd:CommonAggregateComponents-2', Locked = true; + CommonBasicComponentsTok: Label 'urn:oasis:names:specification:ubl:schema:xsd:CommonBasicComponents-2', Locked = true; + DefaultInvoiceTok: Label 'urn:oasis:names:specification:ubl:schema:xsd:Invoice-2', Locked = true; + DefaultCreditNoteTok: Label 'urn:oasis:names:specification:ubl:schema:xsd:CreditNote-2', Locked = true; + begin + EDocumentPurchaseHeader.InsertForEDocument(EDocument); + + XmlDocument.ReadFrom(TempBlob.CreateInStream(TextEncoding::UTF8), PINTANZXml); + XmlNamespaces.AddNamespace('cac', CommonAggregateComponentsTok); + XmlNamespaces.AddNamespace('cbc', CommonBasicComponentsTok); + XmlNamespaces.AddNamespace('inv', DefaultInvoiceTok); + XmlNamespaces.AddNamespace('cn', DefaultCreditNoteTok); + + PINTANZXml.GetRoot(XmlElement); + case UpperCase(XmlElement.LocalName()) of + 'INVOICE': + PopulateEDocumentForInvoice(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, EDocument); + 'CREDITNOTE': + PopulateEDocumentForCreditNote(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, EDocument); + end; + + EDocumentPurchaseHeader.Modify(false); + EDocument.Direction := EDocument.Direction::Incoming; + exit(Enum::"E-Doc. Process Draft"::"Purchase Document"); + end; + + /// + /// Displays a readable view of the processed E-Document purchase information. + /// This procedure opens a page showing the purchase header and lines in a user-friendly format for review. + /// + /// The E-Document record that contains the document to be displayed. + /// A temporary blob containing the document data (not used in current implementation). + internal procedure View(EDocument: Record "E-Document"; TempBlob: Codeunit "Temp Blob") + var + EDocPurchaseHeader: Record "E-Document Purchase Header"; + EDocPurchaseLine: Record "E-Document Purchase Line"; + EDocReadablePurchaseDoc: Page "E-Doc. Readable Purchase Doc."; + begin + EDocPurchaseHeader.GetFromEDocument(EDocument); + EDocPurchaseLine.SetRange("E-Document Entry No.", EDocPurchaseHeader."E-Document Entry No."); + EDocReadablePurchaseDoc.SetBuffer(EDocPurchaseHeader, EDocPurchaseLine); + EDocReadablePurchaseDoc.Run(); + end; + +#pragma warning disable AA0139 // false positive: overflow handled by SetStringValueInField + local procedure PopulateEDocumentForInvoice(PINTANZXml: XmlDocument; XmlNamespaces: XmlNamespaceManager; var EDocumentPurchaseHeader: Record "E-Document Purchase Header"; var EDocument: Record "E-Document") + var + EDocumentXMLHelper: Codeunit "EDocument XML Helper"; + VendorNo: Code[20]; + begin + EDocumentPurchaseHeader."E-Document Type" := "E-Document Type"::"Purchase Invoice"; + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cbc:ID', MaxStrLen(EDocumentPurchaseHeader."Sales Invoice No."), EDocumentPurchaseHeader."Sales Invoice No."); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cac:OrderReference/cbc:ID', MaxStrLen(EDocumentPurchaseHeader."Purchase Order No."), EDocumentPurchaseHeader."Purchase Order No."); + EDocumentXMLHelper.SetDateValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cbc:IssueDate', EDocumentPurchaseHeader."Document Date"); + EDocumentXMLHelper.SetDateValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cbc:DueDate', EDocumentPurchaseHeader."Due Date"); + EDocumentXMLHelper.SetCurrencyValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cbc:DocumentCurrencyCode', MaxStrLen(EDocumentPurchaseHeader."Currency Code"), EDocumentPurchaseHeader."Currency Code"); + EDocumentXMLHelper.SetNumberValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount', EDocumentPurchaseHeader."Sub Total"); + EDocumentXMLHelper.SetNumberValueInField(PINTANZXml, XmlNamespaces, '/inv:Invoice/cac:LegalMonetaryTotal/cbc:PayableAmount', EDocumentPurchaseHeader.Total); + EDocumentPurchaseHeader."Amount Due" := EDocumentPurchaseHeader.Total; + VendorNo := ParseAccountingSupplierPartyForPurchaseHeader(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, EDocument, 'inv:Invoice'); + ParseAccountingCustomerPartyForPurchaseHeader(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, 'inv:Invoice'); + if VendorNo <> '' then + EDocumentPurchaseHeader."[BC] Vendor No." := VendorNo; + InsertPINTANZPurchaseInvoiceLines(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader."E-Document Entry No."); + end; + + local procedure PopulateEDocumentForCreditNote(PINTANZXml: XmlDocument; XmlNamespaces: XmlNamespaceManager; var EDocumentPurchaseHeader: Record "E-Document Purchase Header"; var EDocument: Record "E-Document") + var + EDocumentXMLHelper: Codeunit "EDocument XML Helper"; + VendorNo: Code[20]; + begin + EDocumentPurchaseHeader."E-Document Type" := "E-Document Type"::"Purchase Credit Memo"; + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cbc:ID', MaxStrLen(EDocumentPurchaseHeader."Sales Invoice No."), EDocumentPurchaseHeader."Sales Invoice No."); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cac:OrderReference/cbc:ID', MaxStrLen(EDocumentPurchaseHeader."Purchase Order No."), EDocumentPurchaseHeader."Purchase Order No."); + EDocumentXMLHelper.SetDateValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cbc:IssueDate', EDocumentPurchaseHeader."Document Date"); + EDocumentXMLHelper.SetDateValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cac:PaymentMeans/cbc:PaymentDueDate', EDocumentPurchaseHeader."Due Date"); + EDocumentXMLHelper.SetCurrencyValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cbc:DocumentCurrencyCode', MaxStrLen(EDocumentPurchaseHeader."Currency Code"), EDocumentPurchaseHeader."Currency Code"); + EDocumentXMLHelper.SetNumberValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cac:LegalMonetaryTotal/cbc:TaxExclusiveAmount', EDocumentPurchaseHeader."Sub Total"); + EDocumentXMLHelper.SetNumberValueInField(PINTANZXml, XmlNamespaces, '/cn:CreditNote/cac:LegalMonetaryTotal/cbc:PayableAmount', EDocumentPurchaseHeader.Total); + EDocumentPurchaseHeader."Amount Due" := EDocumentPurchaseHeader.Total; + VendorNo := ParseAccountingSupplierPartyForPurchaseHeader(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, EDocument, 'cn:CreditNote'); + ParseAccountingCustomerPartyForPurchaseHeader(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader, 'cn:CreditNote'); + if VendorNo <> '' then + EDocumentPurchaseHeader."[BC] Vendor No." := VendorNo; + InsertPINTANZPurchaseInvoiceLines(PINTANZXml, XmlNamespaces, EDocumentPurchaseHeader."E-Document Entry No."); + end; +#pragma warning disable AA0139 // false positive: overflow handled by SetStringValueInField + + local procedure ParseAccountingSupplierPartyForPurchaseHeader(PINTANZXml: XmlDocument; XmlNamespaces: XmlNamespaceManager; var EDocumentPurchaseHeader: Record "E-Document Purchase Header"; var EDocument: Record "E-Document"; DocumentType: Text) VendorNo: Code[20] + var + EDocumentXMLHelper: Codeunit "EDocument XML Helper"; + VendorName, VendorAddress, VendorParticipantId : Text; + VATRegistrationNo: Text[20]; + GLN: Code[13]; + ABN: Code[11]; + XMLNode: XmlNode; + ABNSchemeIdTok: Label '0151', Locked = true; + BasePathTxt: Text; + begin + BasePathTxt := '/' + DocumentType + '/cac:AccountingSupplierParty/cac:Party'; + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PartyName/cbc:Name', MaxStrLen(EDocumentPurchaseHeader."Vendor Company Name"), EDocumentPurchaseHeader."Vendor Company Name"); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PostalAddress/cbc:StreetName', MaxStrLen(EDocumentPurchaseHeader."Vendor Address"), EDocumentPurchaseHeader."Vendor Address"); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PartyTaxScheme/cbc:CompanyID', MaxStrLen(EDocumentPurchaseHeader."Vendor VAT Id"), EDocumentPurchaseHeader."Vendor VAT Id"); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:Contact/cbc:Name', MaxStrLen(EDocumentPurchaseHeader."Vendor Contact Name"), EDocumentPurchaseHeader."Vendor Contact Name"); + if PINTANZXml.SelectSingleNode(BasePathTxt + '/cbc:EndpointID/@schemeID', XmlNamespaces, XMLNode) then begin + if XMLNode.AsXmlAttribute().Value() = ABNSchemeIdTok then + ABN := CopyStr(EDocumentXMLHelper.GetNodeValue(PINTANZXml, XmlNamespaces, BasePathTxt + '/cbc:EndpointID'), 1, MaxStrLen(ABN)); + if XMLNode.AsXmlAttribute().Value() = GLNSchemeIdTok then begin + GLN := CopyStr(EDocumentXMLHelper.GetNodeValue(PINTANZXml, XmlNamespaces, BasePathTxt + '/cbc:EndpointID'), 1, MaxStrLen(GLN)); + EDocumentPurchaseHeader."Vendor GLN" := GLN; + end; + VendorParticipantId := XMLNode.AsXmlAttribute().Value() + ':' + EDocumentXMLHelper.GetNodeValue(PINTANZXml, XmlNamespaces, BasePathTxt + '/cbc:EndpointID'); + end; + VATRegistrationNo := EDocumentPurchaseHeader."Vendor VAT Id"; + VendorName := EDocumentPurchaseHeader."Vendor Company Name"; + VendorAddress := EDocumentPurchaseHeader."Vendor Address"; + if not FindVendorByABN(VendorNo, ABN) then + if not FindVendorByVATRegNoOrGLN(VendorNo, VATRegistrationNo, GLN) then + if not FindVendorByParticipantId(VendorNo, EDocument, VendorParticipantId) then + VendorNo := EDocumentImportHelper.FindVendorByNameAndAddress(VendorName, VendorAddress); + end; + + local procedure ParseAccountingCustomerPartyForPurchaseHeader(PINTANZXml: XmlDocument; XmlNamespaces: XmlNamespaceManager; var EDocumentPurchaseHeader: Record "E-Document Purchase Header"; DocumentType: Text) + var + EDocumentXMLHelper: Codeunit "EDocument XML Helper"; + ReceivingId: Text[250]; + SchemaId, CompanyIdentifierValue : Text; + BasePathTxt: Text; + XMLNode: XmlNode; + begin + BasePathTxt := '/' + DocumentType + '/cac:AccountingCustomerParty/cac:Party'; + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PartyName/cbc:Name', MaxStrLen(EDocumentPurchaseHeader."Customer Company Name"), EDocumentPurchaseHeader."Customer Company Name"); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PostalAddress/cbc:StreetName', MaxStrLen(EDocumentPurchaseHeader."Customer Address"), EDocumentPurchaseHeader."Customer Address"); + EDocumentXMLHelper.SetStringValueInField(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PartyTaxScheme/cbc:CompanyID', MaxStrLen(EDocumentPurchaseHeader."Customer VAT Id"), EDocumentPurchaseHeader."Customer VAT Id"); + if PINTANZXml.SelectSingleNode(BasePathTxt + '/cbc:EndpointID/@schemeID', XmlNamespaces, XMLNode) then begin + SchemaId := XMLNode.AsXmlAttribute().Value(); + CompanyIdentifierValue := EDocumentXMLHelper.GetNodeValue(PINTANZXml, XmlNamespaces, BasePathTxt + '/cbc:EndpointID'); + if SchemaId = GLNSchemeIdTok then + EDocumentPurchaseHeader."Customer GLN" := CopyStr(CompanyIdentifierValue, 1, MaxStrLen(EDocumentPurchaseHeader."Customer GLN")); + ReceivingId := CopyStr(SchemaId, 1, (MaxStrLen(EDocumentPurchaseHeader."Customer Company Id") - 1)) + ':'; + ReceivingId += CopyStr(CompanyIdentifierValue, 1, MaxStrLen(EDocumentPurchaseHeader."Customer Company Id") - StrLen(ReceivingId)); + EDocumentPurchaseHeader."Customer Company Id" := ReceivingId; + end; + if (EDocumentPurchaseHeader."Customer GLN" = '') and PINTANZXml.SelectSingleNode(BasePathTxt + '/cac:PartyIdentification/cbc:ID/@schemeID', XmlNamespaces, XMLNode) then begin + SchemaId := XMLNode.AsXmlAttribute().Value(); + CompanyIdentifierValue := EDocumentXMLHelper.GetNodeValue(PINTANZXml, XmlNamespaces, BasePathTxt + '/cac:PartyIdentification/cbc:ID'); + if SchemaId = GLNSchemeIdTok then + EDocumentPurchaseHeader."Customer GLN" := CopyStr(CompanyIdentifierValue, 1, MaxStrLen(EDocumentPurchaseHeader."Customer GLN")); + end; + end; + + local procedure InsertPINTANZPurchaseInvoiceLines(PINTANZXml: XmlDocument; XmlNamespaces: XmlNamespaceManager; EDocumentEntryNo: Integer) + var + EDocumentPurchaseLine: Record "E-Document Purchase Line"; + NewLineXML: XmlDocument; + LineXMLList: XmlNodeList; + LineXMLNode: XmlNode; + i: Integer; + InvoiceLinePathTok: Label '/inv:Invoice/cac:InvoiceLine', Locked = true; + CreditNoteLinePathTok: Label '/cn:CreditNote/cac:CreditNoteLine', Locked = true; + begin + if not PINTANZXml.SelectNodes(InvoiceLinePathTok, XmlNamespaces, LineXMLList) then + if not PINTANZXml.SelectNodes(CreditNoteLinePathTok, XmlNamespaces, LineXMLList) then + exit; + + i := 0; + foreach LineXMLNode in LineXMLList do begin + i += 1; + Clear(EDocumentPurchaseLine); + EDocumentPurchaseLine.Init(); + EDocumentPurchaseLine."E-Document Entry No." := EDocumentEntryNo; + EDocumentPurchaseLine."Line No." := i * 10000; + Clear(NewLineXML); + NewLineXML := XmlDocument.Create(); + NewLineXML.Add(LineXMLNode.AsXmlElement()); + PopulatePINTANZPurchaseLine(NewLineXML, XmlNamespaces, EDocumentPurchaseLine); + EDocumentPurchaseLine.Insert(false); + end; + end; + + local procedure PopulatePINTANZPurchaseLine(LineXML: XmlDocument; XmlNamespaces: XmlNamespaceManager; var EDocumentPurchaseLine: Record "E-Document Purchase Line") + var + EDocumentXMLHelper: Codeunit "EDocument XML Helper"; + begin + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cac:Item/cac:SellersItemIdentification/cbc:ID', MaxStrLen(EDocumentPurchaseLine."Product Code"), EDocumentPurchaseLine."Product Code"); + if EDocumentPurchaseLine."Product Code" = '' then + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cac:Item/cac:SellersItemIdentification/cbc:ID', MaxStrLen(EDocumentPurchaseLine."Product Code"), EDocumentPurchaseLine."Product Code"); + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cac:Item/cbc:Name', MaxStrLen(EDocumentPurchaseLine.Description), EDocumentPurchaseLine.Description); + if EDocumentPurchaseLine.Description = '' then + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cac:Item/cbc:Name', MaxStrLen(EDocumentPurchaseLine.Description), EDocumentPurchaseLine.Description); + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cbc:InvoicedQuantity', EDocumentPurchaseLine.Quantity); + if EDocumentPurchaseLine.Quantity = 0 then + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cbc:CreditedQuantity', EDocumentPurchaseLine.Quantity); + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cbc:InvoicedQuantity/@unitCode', MaxStrLen(EDocumentPurchaseLine."Unit of Measure"), EDocumentPurchaseLine."Unit of Measure"); + if EDocumentPurchaseLine."Unit of Measure" = '' then + EDocumentXMLHelper.SetStringValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cbc:CreditedQuantity/@unitCode', MaxStrLen(EDocumentPurchaseLine."Unit of Measure"), EDocumentPurchaseLine."Unit of Measure"); + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cac:Price/cbc:PriceAmount', EDocumentPurchaseLine."Unit Price"); + if EDocumentPurchaseLine."Unit Price" = 0 then + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cac:Price/cbc:PriceAmount', EDocumentPurchaseLine."Unit Price"); + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cbc:LineExtensionAmount', EDocumentPurchaseLine."Sub Total"); + if EDocumentPurchaseLine."Sub Total" = 0 then + EDocumentXMLHelper.SetNumberValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cbc:LineExtensionAmount', EDocumentPurchaseLine."Sub Total"); + EDocumentXMLHelper.SetCurrencyValueInField(LineXML, XmlNamespaces, 'cac:InvoiceLine/cbc:LineExtensionAmount/@currencyID', MaxStrLen(EDocumentPurchaseLine."Currency Code"), EDocumentPurchaseLine."Currency Code"); + if EDocumentPurchaseLine."Currency Code" = '' then + EDocumentXMLHelper.SetCurrencyValueInField(LineXML, XmlNamespaces, 'cac:CreditNoteLine/cbc:LineExtensionAmount/@currencyID', MaxStrLen(EDocumentPurchaseLine."Currency Code"), EDocumentPurchaseLine."Currency Code"); + end; + + local procedure FindVendorByABN(var VendorNo: Code[20]; InputABN: Code[11]): Boolean + var + Vendor: Record Vendor; + begin + if InputABN = '' then + exit(false); + + Vendor.SetLoadFields(ABN); + Vendor.SetRange(ABN, InputABN); + if Vendor.FindFirst() then + VendorNo := Vendor."No."; + exit(VendorNo <> ''); + end; + + local procedure FindVendorByVATRegNoOrGLN(var VendorNo: Code[20]; VATRegistrationNo: Text[20]; InputGLN: Code[13]): Boolean + begin + VendorNo := EDocumentImportHelper.FindVendor('', InputGLN, VATRegistrationNo); + exit(VendorNo <> ''); + end; + + local procedure FindVendorByParticipantId(var VendorNo: Code[20]; EDocument: Record "E-Document"; VendorParticipantId: Text): Boolean + var + EDocumentService: Record "E-Document Service"; + ServiceParticipant: Record "Service Participant"; + EDocumentHelper: Codeunit "E-Document Helper"; + begin + if VendorParticipantId = '' then + exit(false); + + EDocumentHelper.GetEdocumentService(EDocument, EDocumentService); + ServiceParticipant.SetRange("Participant Type", ServiceParticipant."Participant Type"::Vendor); + ServiceParticipant.SetRange("Participant Identifier", VendorParticipantId); + ServiceParticipant.SetRange(Service, EDocumentService.Code); + if not ServiceParticipant.FindFirst() then begin + ServiceParticipant.SetRange(Service); + if ServiceParticipant.FindFirst() then; + end; + + VendorNo := ServiceParticipant.Participant; + exit(VendorNo <> ''); + end; + + procedure ResetDraft(EDocument: Record "E-Document") + var + EDocPurchaseHeader: Record "E-Document Purchase Header"; + begin + EDocPurchaseHeader.GetFromEDocument(EDocument); + EDocPurchaseHeader.Delete(true); + end; +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/PINTANZEDocReadintoDraft.EnumExt.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/PINTANZEDocReadintoDraft.EnumExt.al new file mode 100644 index 0000000000..5073ad2f76 --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/app/src/Core/PINTANZEDocReadintoDraft.EnumExt.al @@ -0,0 +1,13 @@ +namespace Microsoft.eServices.EDocument.Format; + +using Microsoft.eServices.EDocument.Processing.Import; +using Microsoft.eServices.EDocument.Processing.Interfaces; + +enumextension 28006 "PINT A-NZ EDoc Read into Draft" extends "E-Doc. Read into Draft" +{ + value(28005; "PINT A-NZ") + { + Caption = 'PINT A-NZ'; + Implementation = IStructuredFormatReader = "E-Document PINT A-NZ Handler"; + } +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/.resources/pint_a-nz/pint_a-nz-invoice-0.xml b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/.resources/pint_a-nz/pint_a-nz-invoice-0.xml new file mode 100644 index 0000000000..0944d97eca --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/.resources/pint_a-nz/pint_a-nz-invoice-0.xml @@ -0,0 +1,207 @@ + + + urn:cen.eu:en16931:2017#compliant#urn:fdc:peppol.eu:2017:poacc:billing:3.0 + urn:fdc:peppol.eu:2017:poacc:billing:01:1.0 + 103033 + 2026-01-22 + 2026-02-22 + 380 + XYZ + 1 + + 2 + + + 103033 + + + 103033 + + + + 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MzAxMjE5MDBaKS9Nb2REYXRlKEQ6MjAyMjA2MTUxMzEzMDBaKT4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAzIDAgUi9MYW5nKGVuLVVTKS9NZXRhZGF0YSA0IDAgUj4+DQplbmRvYmoNCjMgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWzUgMCBSXT4+DQplbmRvYmoNCjQgMCBvYmoNCjw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDIxIDAgUj4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJQREZOZXQiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgo8eG1wOkNyZWF0ZURhdGU+MjAxNy0wMS0zMFQxMjoxOTowMFo8L3htcDpDcmVhdGVEYXRlPgo8eG1wOk1vZGlmeURhdGU+MjAyMi0wNi0xNVQxMzoxMzowMFo8L3htcDpNb2RpZnlEYXRlPgo8eG1wOkNyZWF0b3JUb29sPk1pY3Jvc29mdCBPZmZpY2UgV29yZDwveG1wOkNyZWF0b3JUb29sPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KPGRjOnRpdGxlPgo8cmRmOkFsdD4KPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5TYWxlcyAtIEludm9pY2U8L3JkZjpsaT4KPC9yZGY6QWx0Pgo8L2RjOnRpdGxlPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KPHBkZjpQcm9kdWNlcj5Bc3Bvc2UuV29yZHMgZm9yIC5ORVQgMjMuOS4wPC9wZGY6UHJvZHVjZXI+CjwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+Cg0KZW5kc3RyZWFtDQplbmRvYmoNCjIxIDAgb2JqDQo4NTQNCmVuZG9iag0KMTYgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFCRytTZWdvZVVJLUJvbGQvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL0ZpcnN0Q2hhciAzMi9MYXN0Q2hhciAxNjMvV2lkdGhzIDE3IDAgUi9Gb250RGVzY3JpcHRvciAxOCAwIFI+Pg0KZW5kb2JqDQoxNyAwIG9iag0KWzI3NiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjcxIDAgMjcxIDAgNTc1IDU3NSA1NzUgMCA1NzUgNTc1IDAgNTc1IDAgNTc1IDAgMCAwIDAgMCAwIDAgNzAzIDY0MSA2MjQgMCAwIDAgNzExIDAgMCAwIDY0OSA1MTEgOTU3IDAgMCA2MTQgMCAwIDU2MSA1ODYgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTM4IDAgMCA2MTkgNTQxIDAgNjE5IDYwMiAyODQgMCA1NTkgMjg0IDkxNiA2MDUgNjExIDYyMCA2MTkgMzk4IDAgMzg5IDYwNSAwIDAgMCA1MzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU3NV0NCmVuZG9iag0KMTggMCBvYmoNCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvRkFBQUJHK1NlZ29lVUktQm9sZC9TdGVtViA4MC9EZXNjZW50IC0yNTEvQXNjZW50IDEwNzkvQ2FwSGVpZ2h0IDcwMC9GbGFncyAyNjIxNzYvSXRhbGljQW5nbGUgMC9Gb250QkJveFstNTczIC00MzEgMTk5OSAxMjk4XS9Gb250RmlsZTIgMTUgMCBSPj4NCmVuZG9iag0KMTIgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFCQytTZWdvZVVJLUxpZ2h0L0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTE4L1dpZHRocyAxMyAwIFIvRm9udERlc2NyaXB0b3IgMTQgMCBSPj4NCmVuZG9iag0KMTMgMCBvYmoNClsyNzQgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMiAwIDIyMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2MjkgNTQ0IDYyMSAwIDAgMCAwIDAgMjI4IDAgMCAwIDAgNzA5IDc2MSAwIDAgNTU1IDQ5NyAwIDY0OCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNDk0IDAgNDQ0IDAgNTA1IDAgNTYwIDUzNSAyMDUgMCAwIDAgODIyIDUzNSA1NjEgMCAwIDMzMCAwIDAgMCA0NTNdDQplbmRvYmoNCjE0IDAgb2JqDQo8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0ZBQUFCQytTZWdvZVVJLUxpZ2h0L1N0ZW1WIDgwL0Rlc2NlbnQgLTI1MS9Bc2NlbnQgMTA3OS9DYXBIZWlnaHQgNzAwL0ZsYWdzIDMyL0l0YWxpY0FuZ2xlIDAvRm9udEJCb3hbLTU4NyAtMzk2IDE5OTkgMTI5OV0vRm9udEZpbGUyIDExIDAgUj4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFBSStTZWdvZVVJL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTIxL1dpZHRocyA5IDAgUi9Gb250RGVzY3JpcHRvciAxMCAwIFI+Pg0KZW5kb2JqDQo5IDAgb2JqDQpbMjc0IDAgMCAwIDAgODE4IDAgMCAwIDAgMCA2ODQgMjE3IDQwMCAyMTcgMzkwIDUzOSA1MzkgNTM5IDUzOSA1MzkgNTM5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MODW9nYEFJ/+03vN/EfC/wC1cf8ACIPH+01vN/EfCv7Vx/wiC9HFLTNYMWxuxVMjJqiy2qjoJ5oteR76aBkTnN1AOhLdRqEGNd+9i8S6h9v59vcxrLjbrca2G5UdwtckcdRDV07ZGRP+VjkY5ukjgWlvEd4PFBULn/lQbnWuaon243CsOW0DdXQ0d4jntNby6ahg8MVUL3Ds1L2A9ug7EEart5fvVtaJSx21Elxi1+TqaC62qoY7QAk8ravnHbp7TRr3IOtUvRP1U1kvhQ7LX1jg0u5pzTQN0H5807G6+rVBlPFvLW6qMhkjF0xuzYVBIW/9zervTPAaeOpZbjWvGnoLdfUgnPtB5VeB49U0l33izCpz2ohIe7F7Sx9ttpcO1k1Rzmpmb62GE/1haTjuOWDEbLb8cxay0WPWG1R+DbrPb4GU9NCzUnRkcYDRqSSeHE8TxQc0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP/2Q0KZW5kc3RyZWFtDQplbmRvYmoNCjIyIDAgb2JqDQoxNTE2OA0KZW5kb2JqDQoxNSAwIG9iag0KPDwvTGVuZ3RoMSAyMyAwIFIvTGVuZ3RoIDI0IDAgUi9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KeJzsfAl4VFWW8LlvqX1PVVJJBfIqlbAVppJUAokgKcjCEoghCZgCgilIQgKBBBJAVBaHIBpXRFRwaVptRntorWCPHVFbnHZp/XXcp8Vuu22l3RqQ7kb0Q/Jqzr3vVVJhcfz7m+lv5vt4lXffufeee+/Z7jnnPqoAAgBm2AI8VF9eG8hvvDX0Abb8Du/GpSsjnbpb9Q4AMhnvuqXruqWNk9paALjbAQw5LZ3LVs6seX8ZgOkQ1hcta9/Q8tD8f3oMICUdwHWktTnSdB9kcACX4HQwoRUbnBbdp1gvwnpW68ruqx5/0erF+iKs39fesTQC5KHrsf4t1veujFzVyT9t/hAg5x6sS6siK5s/tq57A+v9AGOyOju6umNzYT3AfEqv1LmmuXPFX9J1WD8DIFwCvNDPPQMi6MQ9YhA58ChP/i1o4Rw6kTPqOAE/HH8EcmKH4MhmnEVPSZ1TK0kggTk2IL4jzyVm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 + + + + + + + 103033 + + + + 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MzAxMjE5MDBaKS9Nb2REYXRlKEQ6MjAyMjA2MTUxMzEzMDBaKT4+DQplbmRvYmoNCjIgMCBvYmoNCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAzIDAgUi9MYW5nKGVuLVVTKS9NZXRhZGF0YSA0IDAgUj4+DQplbmRvYmoNCjMgMCBvYmoNCjw8L1R5cGUvUGFnZXMvQ291bnQgMS9LaWRzWzUgMCBSXT4+DQplbmRvYmoNCjQgMCBvYmoNCjw8L1R5cGUvTWV0YWRhdGEvU3VidHlwZS9YTUwvTGVuZ3RoIDIxIDAgUj4+c3RyZWFtDQo8P3hwYWNrZXQgYmVnaW49Iu+7vyIgaWQ9Ilc1TTBNcENlaGlIenJlU3pOVGN6a2M5ZCI/Pgo8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4OnhtcHRrPSJQREZOZXQiPgo8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgo8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPgo8eG1wOkNyZWF0ZURhdGU+MjAxNy0wMS0zMFQxMjoxOTowMFo8L3htcDpDcmVhdGVEYXRlPgo8eG1wOk1vZGlmeURhdGU+MjAyMi0wNi0xNVQxMzoxMzowMFo8L3htcDpNb2RpZnlEYXRlPgo8eG1wOkNyZWF0b3JUb29sPk1pY3Jvc29mdCBPZmZpY2UgV29yZDwveG1wOkNyZWF0b3JUb29sPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIj4KPGRjOmZvcm1hdD5hcHBsaWNhdGlvbi9wZGY8L2RjOmZvcm1hdD4KPGRjOnRpdGxlPgo8cmRmOkFsdD4KPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij5TYWxlcyAtIEludm9pY2U8L3JkZjpsaT4KPC9yZGY6QWx0Pgo8L2RjOnRpdGxlPgo8L3JkZjpEZXNjcmlwdGlvbj4KPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6cGRmPSJodHRwOi8vbnMuYWRvYmUuY29tL3BkZi8xLjMvIj4KPHBkZjpQcm9kdWNlcj5Bc3Bvc2UuV29yZHMgZm9yIC5ORVQgMjMuOS4wPC9wZGY6UHJvZHVjZXI+CjwvcmRmOkRlc2NyaXB0aW9uPgo8L3JkZjpSREY+CjwveDp4bXBtZXRhPgo8P3hwYWNrZXQgZW5kPSJ3Ij8+Cg0KZW5kc3RyZWFtDQplbmRvYmoNCjIxIDAgb2JqDQo4NTQNCmVuZG9iag0KMTYgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFCRytTZWdvZVVJLUJvbGQvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nL0ZpcnN0Q2hhciAzMi9MYXN0Q2hhciAxNjMvV2lkdGhzIDE3IDAgUi9Gb250RGVzY3JpcHRvciAxOCAwIFI+Pg0KZW5kb2JqDQoxNyAwIG9iag0KWzI3NiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMjcxIDAgMjcxIDAgNTc1IDU3NSA1NzUgMCA1NzUgNTc1IDAgNTc1IDAgNTc1IDAgMCAwIDAgMCAwIDAgNzAzIDY0MSA2MjQgMCAwIDAgNzExIDAgMCAwIDY0OSA1MTEgOTU3IDAgMCA2MTQgMCAwIDU2MSA1ODYgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNTM4IDAgMCA2MTkgNTQxIDAgNjE5IDYwMiAyODQgMCA1NTkgMjg0IDkxNiA2MDUgNjExIDYyMCA2MTkgMzk4IDAgMzg5IDYwNSAwIDAgMCA1MzggMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDU3NV0NCmVuZG9iag0KMTggMCBvYmoNCjw8L1R5cGUvRm9udERlc2NyaXB0b3IvRm9udE5hbWUvRkFBQUJHK1NlZ29lVUktQm9sZC9TdGVtViA4MC9EZXNjZW50IC0yNTEvQXNjZW50IDEwNzkvQ2FwSGVpZ2h0IDcwMC9GbGFncyAyNjIxNzYvSXRhbGljQW5nbGUgMC9Gb250QkJveFstNTczIC00MzEgMTk5OSAxMjk4XS9Gb250RmlsZTIgMTUgMCBSPj4NCmVuZG9iag0KMTIgMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFCQytTZWdvZVVJLUxpZ2h0L0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTE4L1dpZHRocyAxMyAwIFIvRm9udERlc2NyaXB0b3IgMTQgMCBSPj4NCmVuZG9iag0KMTMgMCBvYmoNClsyNzQgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDIyMiAwIDIyMiAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgMCA2MjkgNTQ0IDYyMSAwIDAgMCAwIDAgMjI4IDAgMCAwIDAgNzA5IDc2MSAwIDAgNTU1IDQ5NyAwIDY0OCAwIDAgMCAwIDAgMCAwIDAgMCAwIDAgNDk0IDAgNDQ0IDAgNTA1IDAgNTYwIDUzNSAyMDUgMCAwIDAgODIyIDUzNSA1NjEgMCAwIDMzMCAwIDAgMCA0NTNdDQplbmRvYmoNCjE0IDAgb2JqDQo8PC9UeXBlL0ZvbnREZXNjcmlwdG9yL0ZvbnROYW1lL0ZBQUFCQytTZWdvZVVJLUxpZ2h0L1N0ZW1WIDgwL0Rlc2NlbnQgLTI1MS9Bc2NlbnQgMTA3OS9DYXBIZWlnaHQgNzAwL0ZsYWdzIDMyL0l0YWxpY0FuZ2xlIDAvRm9udEJCb3hbLTU4NyAtMzk2IDE5OTkgMTI5OV0vRm9udEZpbGUyIDExIDAgUj4+DQplbmRvYmoNCjggMCBvYmoNCjw8L1R5cGUvRm9udC9TdWJ0eXBlL1RydWVUeXBlL0Jhc2VGb250L0ZBQUFBSStTZWdvZVVJL0VuY29kaW5nL1dpbkFuc2lFbmNvZGluZy9GaXJzdENoYXIgMzIvTGFzdENoYXIgMTIxL1dpZHRocyA5IDAgUi9Gb250RGVzY3JpcHRvciAxMCAwIFI+Pg0KZW5kb2JqDQo5IDAgb2JqDQpbMjc0IDAgMCAwIDAgODE4IDAgMCAwIDAgMCA2ODQgMjE3IDQwMCAyMTcgMzkwIDUzOSA1MzkgNTM5IDUzOSA1MzkgNTM5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MODW9nYEFJ/+03vN/EfC/wC1cf8ACIPH+01vN/EfCv7Vx/wiC9HFLTNYMWxuxVMjJqiy2qjoJ5oteR76aBkTnN1AOhLdRqEGNd+9i8S6h9v59vcxrLjbrca2G5UdwtckcdRDV07ZGRP+VjkY5ukjgWlvEd4PFBULn/lQbnWuaon243CsOW0DdXQ0d4jntNby6ahg8MVUL3Ds1L2A9ug7EEart5fvVtaJSx21Elxi1+TqaC62qoY7QAk8ravnHbp7TRr3IOtUvRP1U1kvhQ7LX1jg0u5pzTQN0H5807G6+rVBlPFvLW6qMhkjF0xuzYVBIW/9zervTPAaeOpZbjWvGnoLdfUgnPtB5VeB49U0l33izCpz2ohIe7F7Sx9ttpcO1k1Rzmpmb62GE/1haTjuOWDEbLb8cxay0WPWG1R+DbrPb4GU9NCzUnRkcYDRqSSeHE8TxQc0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIP/2Q0KZW5kc3RyZWFtDQplbmRvYmoNCjIyIDAgb2JqDQoxNTE2OA0KZW5kb2JqDQoxNSAwIG9iag0KPDwvTGVuZ3RoMSAyMyAwIFIvTGVuZ3RoIDI0IDAgUi9GaWx0ZXIvRmxhdGVEZWNvZGU+PnN0cmVhbQ0KeJzsfAl4VFWW8LlvqX1PVVJJBfIqlbAVppJUAokgKcjCEoghCZgCgilIQgKBBBJAVBaHIBpXRFRwaVptRntorWCPHVFbnHZp/XXcp8Vuu22l3RqQ7kb0Q/Jqzr3vVVJhcfz7m+lv5vt4lXffufeee+/Z7jnnPqoAAgBm2AI8VF9eG8hvvDX0Abb8Du/GpSsjnbpb9Q4AMhnvuqXruqWNk9paALjbAQw5LZ3LVs6seX8ZgOkQ1hcta9/Q8tD8f3oMICUdwHWktTnSdB9kcACX4HQwoRUbnBbdp1gvwnpW68ruqx5/0erF+iKs39fesTQC5KHrsf4t1veujFzVyT9t/hAg5x6sS6siK5s/tq57A+v9AGOyOju6umNzYT3AfEqv1LmmuXPFX9J1WD8DIFwCvNDPPQMi6MQ9YhA58ChP/i1o4Rw6kTPqOAE/HH8EcmKH4MhmnEVPSZ1TK0kggTk2IL4jzyVm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 + + + + + + + + 1234567890128 + + CRONUS International + + + Main Street, 14 + Birmingham + B27 4KT + + GB + + + + GB123456789 + + VAT + + + + CRONUS International + 123456789 + + + Jim Olive + JO@contoso.com + + + + + + 789456278 + + 8712345000004 + + + The Cannon Group PLC + + + 192 Market Square + Birmingham + B27 4KT + + GB + + + + GB789456278 + + VAT + + + + The Cannon Group PLC + 789456278 + + + Mr. Andy Teal + + + + + 2026-01-22 + + 8712345000004 + + 192 Market Square + Birmingham + B27 4KT + + GB + + + + + + 31 + + GB12CPBK08929965044991 + + BG99999 + + + + + 1 Month/2% 8 days + + + 1000 + + 4000 + 1000 + + S + 25 + + VAT + + + + + + 14000 + 14000 + 14140 + 0 + 0.00 + 0 + 14140 + + + 10000 + Item + 1 + 4000 + + Bicycle + + 1000 + + + 1000 + + + S + 25 + + VAT + + + + + 4000.00 + 1 + + + + 20000 + Item + 2 + 10000 + + Bicycle v2 + + 2000 + + + 2000 + + + S + 25 + + VAT + + + + + 5000.00 + 2 + + + \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/app.json b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/app.json index b9f2419391..e2ebcd43be 100644 --- a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/app.json +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/app.json @@ -51,7 +51,7 @@ "idRanges": [ { "from": 148003, - "to": 148004 + "to": 148007 } ], "resourceExposurePolicy": { @@ -59,5 +59,8 @@ "allowDownloadingSource": true, "includeSourceInSymbolFile": true }, - "application": "27.0.0.0" -} + "application": "27.0.0.0", + "resourceFolders": [ + ".resources" + ] +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.Codeunit.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.Codeunit.al new file mode 100644 index 0000000000..72ba56b3cf --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.Codeunit.al @@ -0,0 +1,54 @@ +codeunit 148007 "E-Doc. Format Mock" implements "E-Document" +{ + SingleInstance = true; + + procedure Check(var SourceDocumentHeader: RecordRef; EDocService: Record "E-Document Service"; EDocumentProcessingPhase: enum "E-Document Processing Phase"); + begin + OnCheck(SourceDocumentHeader, EDocService, EDocumentProcessingPhase); + end; + + procedure Create(EDocService: Record "E-Document Service"; var EDocument: Record "E-Document"; var SourceDocumentHeader: RecordRef; var SourceDocumentLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + OnCreate(EDocService, EDocument, SourceDocumentHeader, SourceDocumentLines, TempBlob); + end; + + procedure CreateBatch(EDocService: Record "E-Document Service"; var EDocuments: Record "E-Document"; var SourceDocumentHeaders: RecordRef; var SourceDocumentsLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + OnCreateBatch(EDocService, EDocuments, SourceDocumentHeaders, SourceDocumentsLines, TempBlob); + end; + + procedure GetBasicInfoFromReceivedDocument(var EDocument: Record "E-Document"; var TempBlob: codeunit "Temp Blob"); + begin + OnGetBasicInfoFromReceivedDocument(EDocument, TempBlob); + end; + + procedure GetCompleteInfoFromReceivedDocument(var EDocument: Record "E-Document"; var CreatedDocumentHeader: RecordRef; var CreatedDocumentLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + OnGetCompleteInfoFromReceivedDocument(EDocument, CreatedDocumentHeader, CreatedDocumentLines, TempBlob); + end; + + [IntegrationEvent(false, false)] + local procedure OnCheck(var SourceDocumentHeader: RecordRef; EDocService: Record "E-Document Service"; EDocumentProcessingPhase: enum "E-Document Processing Phase") + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnCreate(EDocService: Record "E-Document Service"; var EDocument: Record "E-Document"; var SourceDocumentHeader: RecordRef; var SourceDocumentLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnCreateBatch(EDocService: Record "E-Document Service"; var EDocuments: Record "E-Document"; var SourceDocumentHeaders: RecordRef; var SourceDocumentsLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnGetBasicInfoFromReceivedDocument(var EDocument: Record "E-Document"; var TempBlob: codeunit "Temp Blob"); + begin + end; + + [IntegrationEvent(false, false)] + local procedure OnGetCompleteInfoFromReceivedDocument(var EDocument: Record "E-Document"; var CreatedDocumentHeader: RecordRef; var CreatedDocumentLines: RecordRef; var TempBlob: codeunit "Temp Blob"); + begin + end; +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.EnumExt.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.EnumExt.al new file mode 100644 index 0000000000..7005a06f86 --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocFormatMock.EnumExt.al @@ -0,0 +1,7 @@ +enumextension 148003 "E-Doc. Format Mock" extends "E-Document Format" +{ + value(6160; "Mock") + { + Implementation = "E-Document" = "E-Doc. Format Mock"; + } +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocumentStructuredTests.Codeunit.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocumentStructuredTests.Codeunit.al new file mode 100644 index 0000000000..8856740919 --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/EDocumentStructuredTests.Codeunit.al @@ -0,0 +1,268 @@ +codeunit 148005 "E-Document Structured Tests" +{ + Subtype = Test; + TestType = IntegrationTest; + + var + Customer: Record Customer; + Vendor: Record Vendor; + EDocumentService: Record "E-Document Service"; + Assert: Codeunit Assert; + LibraryVariableStorage: Codeunit "Library - Variable Storage"; + LibraryEDoc: Codeunit "Library - E-Document"; + LibraryLowerPermission: Codeunit "Library - Lower Permissions"; + PINTANZStructuredValidations: Codeunit "PINTANZ Structured Validations"; + IsInitialized: Boolean; + EDocumentStatusNotUpdatedErr: Label 'The status of the EDocument was not updated to the expected status after the step was executed.'; + TestFileTok: Label 'pint_a-nz/pint_a-nz-invoice-0.xml', Locked = true; + MockCurrencyCode: Code[10]; + MockDate: Date; + + #region PINT A-NZ XML + [Test] + procedure TestPINTANZInvoice_ValidDocument() + var + EDocument: Record "E-Document"; + begin + // [FEATURE] [E-Document] [PINTANZ] [Import] + // [SCENARIO] Import and process a valid PINTANZ invoice document + + // [GIVEN] A valid PINTANZ XML invoice document is imported + Initialize(Enum::"Service Integration"::"No Integration"); + SetupPINTANZEDocumentService(); + CreateInboundEDocumentFromXML(EDocument, TestFileTok); + + // [WHEN] The document is processed to draft status + if ProcessEDocumentToStep(EDocument, "Import E-Document Steps"::"Read into Draft") then begin + PINTANZStructuredValidations.SetMockCurrencyCode(MockCurrencyCode); + PINTANZStructuredValidations.SetMockDate(MockDate); + + // [THEN] The full E-Document content is correctly extracted + PINTANZStructuredValidations.AssertFullEDocumentContentExtracted(EDocument."Entry No"); + end else + Assert.Fail(EDocumentStatusNotUpdatedErr); + end; + + [Test] + [HandlerFunctions('EDocumentPurchaseHeaderPageHandler')] + procedure TestPINTANZInvoice_ValidDocument_ViewExtractedData() + var + EDocument: Record "E-Document"; + EDocImport: Codeunit "E-Doc. Import"; + begin + // [FEATURE] [E-Document] [PINTANZ] [View Data] + // [SCENARIO] View extracted data from a valid PINTANZ invoice document + + // [GIVEN] A valid PINTANZ XML invoice document is imported + Initialize(Enum::"Service Integration"::"No Integration"); + SetupPINTANZEDocumentService(); + CreateInboundEDocumentFromXML(EDocument, TestFileTok); + + // [WHEN] The document is processed to draft status + ProcessEDocumentToStep(EDocument, "Import E-Document Steps"::"Read into Draft"); + EDocument.Get(EDocument."Entry No"); + + // [WHEN] View extracted data is called + EDocImport.ViewExtractedData(EDocument); + + // [THEN] The extracted data page opens and can be handled properly (verified by page handler) + // EDocumentPurchaseHeaderPageHandler + end; + + [Test] + procedure TestPINTANZInvoice_ValidDocument_PurchaseInvoiceCreated() + var + EDocument: Record "E-Document"; + PurchaseHeader: Record "Purchase Header"; + DummyItem: Record Item; + EDocumentProcessing: Codeunit "E-Document Processing"; + DataTypeManagement: Codeunit "Data Type Management"; + RecRef: RecordRef; + VariantRecord: Variant; + begin + // [FEATURE] [E-Document] [PINTANZ] [Purchase Invoice Creation] + // [SCENARIO] Create a purchase invoice from a valid PINTANZ invoice document + + // [GIVEN] A valid PINTANZ XML invoice document is imported + Initialize(Enum::"Service Integration"::"No Integration"); + SetupPINTANZEDocumentService(); + CreateInboundEDocumentFromXML(EDocument, TestFileTok); + + // [WHEN] The document is processed through finish draft step + ProcessEDocumentToStep(EDocument, "Import E-Document Steps"::"Finish draft"); + EDocument.Get(EDocument."Entry No"); + + // [WHEN] The created purchase record is retrieved + EDocumentProcessing.GetRecord(EDocument, VariantRecord); + DataTypeManagement.GetRecordRef(VariantRecord, RecRef); + RecRef.SetTable(PurchaseHeader); + + // [THEN] The purchase header is correctly created with PINTANZ data + PINTANZStructuredValidations.SetMockCurrencyCode(MockCurrencyCode); + PINTANZStructuredValidations.SetMockDate(MockDate); + PINTANZStructuredValidations.AssertPurchaseDocument(Vendor."No.", PurchaseHeader, DummyItem); + end; + + [Test] + procedure TestPINTANZInvoice_ValidDocument_UpdateDraftAndFinalize() + var + EDocument: Record "E-Document"; + PurchaseHeader: Record "Purchase Header"; + Item: Record Item; + EDocImportParameters: Record "E-Doc. Import Parameters"; + EDocImport: Codeunit "E-Doc. Import"; + EDocumentProcessing: Codeunit "E-Document Processing"; + DataTypeManagement: Codeunit "Data Type Management"; + RecRef: RecordRef; + EDocPurchaseDraft: TestPage "E-Document Purchase Draft"; + VariantRecord: Variant; + begin + // [FEATURE] [E-Document] [PINTANZ] [Draft Update] + // [SCENARIO] Update draft purchase document data and finalize processing + + // [GIVEN] A valid PINTANZ XML invoice document is imported and processed to draft preparation + Initialize(Enum::"Service Integration"::"No Integration"); + SetupPINTANZEDocumentService(); + CreateInboundEDocumentFromXML(EDocument, TestFileTok); + ProcessEDocumentToStep(EDocument, "Import E-Document Steps"::"Prepare draft"); + + // [GIVEN] A generic item is created for manual assignment + LibraryEDoc.CreateGenericItem(Item, ''); + + // [WHEN] The draft document is opened and modified through UI + EDocPurchaseDraft.OpenEdit(); + EDocPurchaseDraft.GoToRecord(EDocument); + EDocPurchaseDraft.Lines.First(); + EDocPurchaseDraft.Lines."No.".SetValue(Item."No."); + EDocPurchaseDraft.Lines.Next(); + + // [WHEN] The processing is completed to finish draft step + EDocImportParameters."Step to Run" := "Import E-Document Steps"::"Finish draft"; + EDocImport.ProcessIncomingEDocument(EDocument, EDocImportParameters); + EDocument.Get(EDocument."Entry No"); + + // [WHEN] The final purchase record is retrieved + EDocumentProcessing.GetRecord(EDocument, VariantRecord); + DataTypeManagement.GetRecordRef(VariantRecord, RecRef); + RecRef.SetTable(PurchaseHeader); + + // [THEN] The purchase header contains both imported PINTANZ data and manual updates + PINTANZStructuredValidations.SetMockCurrencyCode(MockCurrencyCode); + PINTANZStructuredValidations.SetMockDate(MockDate); + PINTANZStructuredValidations.AssertPurchaseDocument(Vendor."No.", PurchaseHeader, Item); + end; + + [PageHandler] + procedure EDocumentPurchaseHeaderPageHandler(var EDocReadablePurchaseDoc: TestPage "E-Doc. Readable Purchase Doc.") + begin + EDocReadablePurchaseDoc.Close(); + end; + #endregion + + local procedure Initialize(Integration: Enum "Service Integration") + var + TransformationRule: Record "Transformation Rule"; + EDocument: Record "E-Document"; + EDocDataStorage: Record "E-Doc. Data Storage"; + EDocumentsSetup: Record "E-Documents Setup"; + EDocumentServiceStatus: Record "E-Document Service Status"; + EDocumentPurchaseHeader: Record "E-Document Purchase Header"; + EDocumentPurchaseLine: Record "E-Document Purchase Line"; + DocumentAttachment: Record "Document Attachment"; + Currency: Record Currency; + begin + LibraryLowerPermission.SetOutsideO365Scope(); + LibraryVariableStorage.Clear(); + Clear(LibraryVariableStorage); + + if IsInitialized then + exit; + + EDocument.DeleteAll(false); + EDocumentServiceStatus.DeleteAll(false); + EDocumentService.DeleteAll(false); + EDocDataStorage.DeleteAll(false); + EDocumentPurchaseHeader.DeleteAll(false); + EDocumentPurchaseLine.DeleteAll(false); + DocumentAttachment.DeleteAll(false); + + LibraryEDoc.SetupStandardVAT(); + LibraryEDoc.SetupStandardSalesScenario(Customer, EDocumentService, Enum::"E-Document Format"::"PINT A-NZ", Integration); + LibraryEDoc.SetupStandardPurchaseScenario(Vendor, EDocumentService, Enum::"E-Document Format"::"PINT A-NZ", Integration); + EDocumentService."Import Process" := "E-Document Import Process"::"Version 2.0"; + EDocumentService."Read into Draft Impl." := "E-Doc. Read into Draft"::"PINT A-NZ"; + EDocumentService.Modify(); + EDocumentsSetup.InsertNewExperienceSetup(); + + // Set a currency that can be used across all localizations + MockCurrencyCode := 'XYZ'; + Currency.Init(); + Currency.Validate(Code, MockCurrencyCode); + if Currency.Insert(true) then; + CreateCurrencyExchangeRate(); + + MockDate := DMY2Date(22, 01, 2026); + + TransformationRule.DeleteAll(false); + TransformationRule.CreateDefaultTransformations(); + + IsInitialized := true; + end; + + local procedure SetupPINTANZEDocumentService() + begin + EDocumentService."Read into Draft Impl." := "E-Doc. Read into Draft"::"PINT A-NZ"; + EDocumentService.Modify(false); + end; + + local procedure CreateInboundEDocumentFromXML(var EDocument: Record "E-Document"; FilePath: Text) + var + EDocLogRecord: Record "E-Document Log"; + EDocumentLog: Codeunit "E-Document Log"; + begin + LibraryEDoc.CreateInboundEDocument(EDocument, EDocumentService); + + EDocumentLog.SetBlob('Test', Enum::"E-Doc. File Format"::XML, NavApp.GetResourceAsText(FilePath)); + EDocumentLog.SetFields(EDocument, EDocumentService); + EDocLogRecord := EDocumentLog.InsertLog(Enum::"E-Document Service Status"::Imported, Enum::"Import E-Doc. Proc. Status"::Readable); + + EDocument."Structured Data Entry No." := EDocLogRecord."E-Doc. Data Storage Entry No."; + EDocument.Modify(false); + end; + + local procedure ProcessEDocumentToStep(var EDocument: Record "E-Document"; ProcessingStep: Enum "Import E-Document Steps"): Boolean + var + EDocImportParameters: Record "E-Doc. Import Parameters"; + EDocImport: Codeunit "E-Doc. Import"; + EDocumentProcessing: Codeunit "E-Document Processing"; + begin + EDocumentProcessing.ModifyEDocumentProcessingStatus(EDocument, "Import E-Doc. Proc. Status"::Readable); + EDocImportParameters."Step to Run" := ProcessingStep; + EDocImport.ProcessIncomingEDocument(EDocument, EDocImportParameters); + EDocument.CalcFields("Import Processing Status"); + + // Update the exit condition to handle different processing steps + case ProcessingStep of + "Import E-Document Steps"::"Read into Draft": + exit(EDocument."Import Processing Status" = Enum::"Import E-Doc. Proc. Status"::"Ready for draft"); + "Import E-Document Steps"::"Finish draft": + exit(EDocument."Import Processing Status" = Enum::"Import E-Doc. Proc. Status"::Processed); + "Import E-Document Steps"::"Prepare draft": + exit(EDocument."Import Processing Status" = Enum::"Import E-Doc. Proc. Status"::"Draft Ready"); + else + exit(EDocument."Import Processing Status" = Enum::"Import E-Doc. Proc. Status"::"Ready for draft"); + end; + end; + + local procedure CreateCurrencyExchangeRate() + var + CurrencyExchangeRate: Record "Currency Exchange Rate"; + begin + CurrencyExchangeRate.Init(); + CurrencyExchangeRate."Currency Code" := MockCurrencyCode; + CurrencyExchangeRate."Starting Date" := WorkDate(); + CurrencyExchangeRate."Exchange Rate Amount" := 10; + CurrencyExchangeRate."Relational Exch. Rate Amount" := 1.23; + CurrencyExchangeRate.Insert(true); + end; +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/LibraryEDocument.Codeunit.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/LibraryEDocument.Codeunit.al new file mode 100644 index 0000000000..2a6011bcfd --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/LibraryEDocument.Codeunit.al @@ -0,0 +1,1112 @@ +codeunit 148006 "Library - E-Document" +{ + EventSubscriberInstance = Manual; + Permissions = tabledata "E-Document Service" = rimd, + tabledata "E-Doc. Service Supported Type" = rimd, + tabledata "E-Doc. Mapping" = rimd; + + var + StandardItem: Record Item; + VATPostingSetup: Record "VAT Posting Setup"; + Assert: Codeunit Assert; + LibraryUtility: Codeunit "Library - Utility"; + LibraryWorkflow: Codeunit "Library - Workflow"; + LibrarySales: Codeunit "Library - Sales"; + LibraryPurchase: Codeunit "Library - Purchase"; + LibraryERM: Codeunit "Library - ERM"; + LibraryRandom: Codeunit "Library - Random"; + LibraryInvt: Codeunit "Library - Inventory"; + LibraryJobQueue: Codeunit "Library - Job Queue"; + LibraryVariableStorage: Codeunit "Library - Variable Storage"; + LibraryFinChargeMemo: Codeunit "Library - Finance Charge Memo"; + LibraryInventory: Codeunit "Library - Inventory"; + + procedure SetupStandardVAT() + begin + if (VATPostingSetup."VAT Bus. Posting Group" = '') and (VATPostingSetup."VAT Prod. Posting Group" = '') then + LibraryERM.CreateVATPostingSetupWithAccounts(VATPostingSetup, Enum::"Tax Calculation Type"::"Normal VAT", 1); + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use SetupStandardSalesScenario(var Customer: Record Customer; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") instead', '26.0')] + procedure SetupStandardSalesScenario(var Customer: Record Customer; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "E-Document Integration") + var + ServiceCode: Code[20]; + begin + // Create standard service and simple workflow + ServiceCode := CreateService(EDocDocumentFormat, EDocIntegration); + EDocService.Get(ServiceCode); + SetupStandardSalesScenario(Customer, EDocService); + end; +#pragma warning restore AL0432 +#endif + + procedure SetupStandardSalesScenario(var Customer: Record Customer; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") + var + ServiceCode: Code[20]; + begin + // Create standard service and simple workflow + ServiceCode := CreateService(EDocDocumentFormat, EDocIntegration); + EDocService.Get(ServiceCode); + SetupStandardSalesScenario(Customer, EDocService); + end; + + procedure SetupStandardSalesScenario(var Customer: Record Customer; var EDocService: Record "E-Document Service") + var + CountryRegion: Record "Country/Region"; + DocumentSendingProfile: Record "Document Sending Profile"; + SalesSetup: Record "Sales & Receivables Setup"; + WorkflowSetup: Codeunit "Workflow Setup"; + WorkflowCode: Code[20]; + begin + LibraryWorkflow.DeleteAllExistingWorkflows(); + WorkflowSetup.InitWorkflow(); + SetupCompanyInfo(); + + CreateDocSendingProfile(DocumentSendingProfile); + WorkflowCode := CreateSimpleFlow(DocumentSendingProfile.Code, EDocService.Code); + DocumentSendingProfile."Electronic Document" := DocumentSendingProfile."Electronic Document"::"Extended E-Document Service Flow"; + DocumentSendingProfile."Electronic Service Flow" := WorkflowCode; + DocumentSendingProfile.Modify(); + + // Create Customer for sales scenario + LibrarySales.CreateCustomer(Customer); + LibraryERM.FindCountryRegion(CountryRegion); + Customer.Validate(Address, LibraryUtility.GenerateRandomCode(Customer.FieldNo(Address), DATABASE::Customer)); + Customer.Validate("Country/Region Code", CountryRegion.Code); + Customer.Validate(City, LibraryUtility.GenerateRandomCode(Customer.FieldNo(City), DATABASE::Customer)); + Customer.Validate("Post Code", LibraryUtility.GenerateRandomCode(Customer.FieldNo("Post Code"), DATABASE::Customer)); + Customer.Validate("VAT Bus. Posting Group", VATPostingSetup."VAT Bus. Posting Group"); + Customer."VAT Registration No." := LibraryERM.GenerateVATRegistrationNo(CountryRegion.Code); + Customer.Validate(GLN, '1234567890128'); + Customer."Document Sending Profile" := DocumentSendingProfile.Code; + Customer.Modify(true); + + // Create Item + if StandardItem."No." = '' then begin + VATPostingSetup.TestField("VAT Prod. Posting Group"); + CreateGenericItem(StandardItem); + StandardItem."VAT Prod. Posting Group" := VATPostingSetup."VAT Prod. Posting Group"; + StandardItem.Modify(); + end; + + SalesSetup.Get(); + SalesSetup."Invoice Rounding" := false; + SalesSetup.Modify(); + end; + + procedure GetGenericItem(var Item: Record Item) + begin + if StandardItem."No." = '' then + CreateGenericItem(StandardItem); + Item.Get(StandardItem."No."); + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use SetupStandardPurchaseScenario(var Vendor: Record Vendor; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") instead', '26.0')] + procedure SetupStandardPurchaseScenario(var Vendor: Record Vendor; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "E-Document Integration") + var + ServiceCode: Code[20]; + begin + // Create standard service and simple workflow + if EDocService.Code = '' then begin + ServiceCode := CreateService(EDocDocumentFormat, EDocIntegration); + EDocService.Get(ServiceCode); + end; + SetupStandardPurchaseScenario(Vendor, EDocService); + end; +#pragma warning restore AL0432 +#endif + + procedure SetupStandardPurchaseScenario(var Vendor: Record Vendor; var EDocService: Record "E-Document Service"; EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") + var + ServiceCode: Code[20]; + begin + // Create standard service and simple workflow + if EDocService.Code = '' then begin + ServiceCode := CreateService(EDocDocumentFormat, EDocIntegration); + EDocService.Get(ServiceCode); + end; + SetupStandardPurchaseScenario(Vendor, EDocService); + end; + + + procedure SetupStandardPurchaseScenario(var Vendor: Record Vendor; var EDocService: Record "E-Document Service") + var + CountryRegion: Record "Country/Region"; + ItemReference: Record "Item Reference"; + UnitOfMeasure: Record "Unit of Measure"; + ExtraItem: Record "Item"; + WorkflowSetup: Codeunit "Workflow Setup"; + LibraryItemReference: Codeunit "Library - Item Reference"; + begin + WorkflowSetup.InitWorkflow(); + SetupCompanyInfo(); + + // Create Customer for sales scenario + LibraryPurchase.CreateVendor(Vendor); + LibraryERM.FindCountryRegion(CountryRegion); + Vendor.Validate(Address, LibraryUtility.GenerateRandomCode(Vendor.FieldNo(Address), DATABASE::Vendor)); + Vendor.Validate("Country/Region Code", CountryRegion.Code); + Vendor.Validate(City, LibraryUtility.GenerateRandomCode(Vendor.FieldNo(City), DATABASE::Vendor)); + Vendor.Validate("Post Code", LibraryUtility.GenerateRandomCode(Vendor.FieldNo("Post Code"), DATABASE::Vendor)); + Vendor.Validate("VAT Bus. Posting Group", VATPostingSetup."VAT Bus. Posting Group"); + Vendor."VAT Registration No." := LibraryERM.GenerateVATRegistrationNo(CountryRegion.Code); + Vendor."Receive E-Document To" := Enum::"E-Document Type"::"Purchase Invoice"; + Vendor.Validate(GLN, '1234567890128'); + Vendor.Modify(true); + + // Create Item + if StandardItem."No." = '' then begin + VATPostingSetup.TestField("VAT Prod. Posting Group"); + CreateGenericItem(StandardItem, VATPostingSetup."VAT Prod. Posting Group"); + end; + + UnitOfMeasure.Init(); + UnitOfMeasure."International Standard Code" := 'PCS'; + UnitOfMeasure.Code := 'PCS'; + if UnitOfMeasure.Insert() then; + + CreateItemUnitOfMeasure(StandardItem."No.", UnitOfMeasure.Code); + LibraryItemReference.CreateItemReference(ItemReference, StandardItem."No.", '', 'PCS', Enum::"Item Reference Type"::Vendor, Vendor."No.", '1000'); + + CreateGenericItem(ExtraItem, VATPostingSetup."VAT Prod. Posting Group"); + CreateItemUnitOfMeasure(ExtraItem."No.", UnitOfMeasure.Code); + LibraryItemReference.CreateItemReference(ItemReference, ExtraItem."No.", '', 'PCS', Enum::"Item Reference Type"::Vendor, Vendor."No.", '2000'); + end; + + procedure PostInvoice(var Customer: Record Customer) SalesInvHeader: Record "Sales Invoice Header"; + var + SalesHeader: Record "Sales Header"; + begin + LibraryJobQueue.SetDoNotHandleCodeunitJobQueueEnqueueEvent(true); + CreateSalesHeaderWithItem(Customer, SalesHeader, Enum::"Sales Document Type"::Invoice); + PostSalesDocument(SalesHeader, SalesInvHeader); + end; + + procedure PostSalesDocument(var Customer: Record Customer; Ship: Boolean) SalesInvHeader: Record "Sales Invoice Header"; + var + SalesHeader: Record "Sales Header"; + begin + LibraryJobQueue.SetDoNotHandleCodeunitJobQueueEnqueueEvent(true); + CreateSalesHeaderWithItem(Customer, SalesHeader, Enum::"Sales Document Type"::Invoice); + PostSalesDocument(SalesHeader, SalesInvHeader, Ship); + end; + + procedure PostSalesShipment(var Customer: Record Customer) SalesShipmentHeader: Record "Sales Shipment Header"; + var + SalesHeader: Record "Sales Header"; + begin + this.CreateSalesHeaderWithItem(Customer, SalesHeader, Enum::"Sales Document Type"::Order); + SalesShipmentHeader.Get(this.LibrarySales.PostSalesDocument(SalesHeader, true, false)); + end; + + procedure RunEDocumentJobQueue(var EDocument: Record "E-Document") + begin + LibraryJobQueue.FindAndRunJobQueueEntryByRecordId(EDocument.RecordId); + end; + + procedure RunImportJob() + var + JobQueueEntry: Record "Job Queue Entry"; + begin + JobQueueEntry.FindJobQueueEntry(JobQueueEntry."Object Type to Run"::Codeunit, Codeunit::"E-Document Import Job"); + LibraryJobQueue.RunJobQueueDispatcher(JobQueueEntry); + end; + + procedure CreateInboundEDocument(var EDocument: Record "E-Document"; EDocService: Record "E-Document Service") + var + EDocumentServiceStatus: Record "E-Document Service Status"; + begin + EDocument.Insert(); + EDocumentServiceStatus."E-Document Entry No" := EDocument."Entry No"; + EDocumentServiceStatus."E-Document Service Code" := EDocService.Code; + EDocumentServiceStatus.Insert(); + end; + + procedure MockPurchaseDraftPrepared(EDocument: Record "E-Document") + var + EDocumentPurchaseHeader: Record "E-Document Purchase Header"; + EDocumentProcessing: Codeunit "E-Document Processing"; + begin + EDocumentPurchaseHeader.InsertForEDocument(EDocument); + EDocumentPurchaseHeader."Sub Total" := 1000; + EDocumentPurchaseHeader."Total VAT" := 100; + EDocumentPurchaseHeader.Total := 1100; + EDocumentPurchaseHeader.Modify(); + EDocumentProcessing.ModifyEDocumentProcessingStatus(EDocument, "Import E-Doc. Proc. Status"::"Draft Ready"); + EDocument."Document Type" := "E-Document Type"::"Purchase Invoice"; + EDocument.Modify(); + end; + + procedure CreateInboundPEPPOLDocumentToState(var EDocument: Record "E-Document"; EDocumentService: Record "E-Document Service"; FileName: Text; EDocImportParams: Record "E-Doc. Import Parameters"): Boolean + var + EDocImport: Codeunit "E-Doc. Import"; + InStream: InStream; + begin + NavApp.GetResource(FileName, InStream, TextEncoding::UTF8); + EDocImport.CreateFromType(EDocument, EDocumentService, Enum::"E-Doc. File Format"::XML, 'TestFile', InStream); + exit(EDocImport.ProcessIncomingEDocument(EDocument, EDocImportParams)); + end; + + /// + /// Given a purchase header with purchase lines created from an e-document, it modifies the required fields to make it ready for posting. + /// + procedure EditPurchaseDocumentFromEDocumentForPosting(var PurchaseHeader: Record "Purchase Header"; var EDocument: Record "E-Document") + var + PurchaseLine: Record "Purchase Line"; + GLAccount: Record "G/L Account"; + GeneralPostingSetup: Record "General Posting Setup"; + GenBusinessPostingGroup: Record "Gen. Business Posting Group"; + GenProductPostingGroup: Record "Gen. Product Posting Group"; + VATBusinessPostingGroup: Record "VAT Business Posting Group"; + VATProductPostingGroup: Record "VAT Product Posting Group"; + LocalVATPostingSetup: Record "VAT Posting Setup"; + begin + Assert.AreEqual(EDocument.SystemId, PurchaseHeader."E-Document Link", 'The purchase header has no link to the e-document.'); + LibraryERM.CreateGenBusPostingGroup(GenBusinessPostingGroup); + LibraryERM.CreateGenProdPostingGroup(GenProductPostingGroup); + LibraryERM.CreateGeneralPostingSetup(GeneralPostingSetup, GenBusinessPostingGroup.Code, GenProductPostingGroup.Code); + LibraryERM.CreateVATBusinessPostingGroup(VATBusinessPostingGroup); + LibraryERM.CreateVATProductPostingGroup(VATProductPostingGroup); + LibraryERM.CreateVATPostingSetup(LocalVATPostingSetup, VATBusinessPostingGroup.Code, VATProductPostingGroup.Code); + LibraryERM.CreateGLAccount(GLAccount); + LocalVATPostingSetup."Purchase VAT Account" := GLAccount."No."; + LocalVATPostingSetup.Modify(); + LibraryERM.CreateGLAccount(GLAccount); + PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); + PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); + PurchaseLine.FindSet(); + repeat + PurchaseLine.Type := PurchaseLine.Type::"G/L Account"; + PurchaseLine."No." := GLAccount."No."; + PurchaseLine."Gen. Bus. Posting Group" := GenBusinessPostingGroup.Code; + PurchaseLine."Gen. Prod. Posting Group" := GenProductPostingGroup.Code; + PurchaseLine."VAT Bus. Posting Group" := VATBusinessPostingGroup.Code; + PurchaseLine."VAT Prod. Posting Group" := VATProductPostingGroup.Code; + PurchaseLine.UpdateAmounts(); + PurchaseLine.Modify(); + until PurchaseLine.Next() = 0; + PurchaseHeader.CalcFields("Amount Including VAT"); + EDocument."Amount Incl. VAT" := PurchaseHeader."Amount Including VAT"; + EDocument.Modify(); + end; + + procedure CreateDocSendingProfile(var DocumentSendingProfile: Record "Document Sending Profile") + begin + DocumentSendingProfile.Init(); + DocumentSendingProfile.Code := LibraryUtility.GenerateRandomCode(DocumentSendingProfile.FieldNo(Code), DATABASE::"Document Sending Profile"); + DocumentSendingProfile.Insert(); + end; + + + procedure CreateSimpleFlow(DocSendingProfileCode: Code[20]; ServiceCode: Code[20]): Code[20] + var + Workflow: Record Workflow; + WorkflowStepResponse: Record "Workflow Step"; + WorkflowStepArgument: Record "Workflow Step Argument"; + WorkflowStep: Record "Workflow Step"; + EDocWorkflowSetup: Codeunit "E-Document Workflow Setup"; + EDocCreatedEventID, SendEDocResponseEventID : Integer; + begin + // Create a simple workflow + // Send to Service 'ServiceCode' when using Document Sending Profile 'DocSendingProfile' + WorkflowStep.SetRange("Function Name", EDocWorkflowSetup.EDocCreated()); + WorkflowStep.SetRange("Entry Point", true); + if WorkflowStep.FindSet() then + repeat + Workflow.Get(WorkflowStep."Workflow Code"); + if not Workflow.Template then + exit; + until WorkflowStep.Next() = 0; + + LibraryWorkflow.CreateWorkflow(Workflow); + EDocCreatedEventID := LibraryWorkflow.InsertEntryPointEventStep(Workflow, EDocWorkflowSetup.EDocCreated()); + SendEDocResponseEventID := LibraryWorkflow.InsertResponseStep(Workflow, EDocWorkflowSetup.EDocSendEDocResponseCode(), EDocCreatedEventID); + + WorkflowStepResponse.Get(Workflow.Code, SendEDocResponseEventID); + WorkflowStepArgument.Get(WorkflowStepResponse.Argument); + + WorkflowStepArgument."E-Document Service" := ServiceCode; + WorkflowStepArgument.Modify(); + + LibraryWorkflow.EnableWorkflow(Workflow); + exit(Workflow.Code); + end; + + procedure CreateCustomerNoWithEDocSendingProfile(var DocumentSendingProfile: Code[20]): Code[20] + var + CustomerNo: Code[20]; + begin + CustomerNo := LibrarySales.CreateCustomerNo(); + DocumentSendingProfile := CreateDocumentSendingProfileForWorkflow(CustomerNo, ''); + exit(CustomerNo); + end; + + procedure CreateEDocumentFromSales(var EDocument: Record "E-Document") + begin + CreateEDocumentFromSales(EDocument, LibrarySales.CreateCustomerNo()); + end; + + procedure CreateEDocumentFromSales(var EDocument: Record "E-Document"; CustomerNo: Code[20]) + var + SalesInvHeader: Record "Sales Invoice Header"; + SalesHeader: Record "Sales Header"; + begin + LibrarySales.CreateSalesInvoiceForCustomerNo(SalesHeader, CustomerNo); + SalesInvHeader.Get(LibrarySales.PostSalesDocument(SalesHeader, true, true)); + EDocument.FindLast(); + end; + + local procedure CreateGenericSalesHeader(var Cust: Record Customer; var SalesHeader: Record "Sales Header"; DocumentType: Enum "Sales Document Type") + begin + LibrarySales.CreateSalesHeader(SalesHeader, DocumentType, Cust."No."); + SalesHeader.Validate("Your Reference", LibraryUtility.GenerateRandomCode(SalesHeader.FieldNo("Your Reference"), DATABASE::"Sales Header")); + + if DocumentType = SalesHeader."Document Type"::"Credit Memo" then + SalesHeader.Validate("Shipment Date", WorkDate()); + + SalesHeader.Modify(true); + end; + + procedure CreateGenericItem(var Item: Record Item; VATProdPostingGroupCode: Code[20]) + begin + CreateGenericItem(Item); + Item."VAT Prod. Posting Group" := VATPostingSetup."VAT Prod. Posting Group"; + Item.Modify(); + end; + + procedure CreateGenericItem(var Item: Record Item) + var + UOM: Record "Unit of Measure"; + ItemUOM: Record "Item Unit of Measure"; + QtyPerUnit: Integer; + begin + QtyPerUnit := LibraryRandom.RandInt(10); + + LibraryInvt.CreateUnitOfMeasureCode(UOM); + UOM.Validate("International Standard Code", + LibraryUtility.GenerateRandomCode(UOM.FieldNo("International Standard Code"), DATABASE::"Unit of Measure")); + UOM.Modify(true); + + CreateItemWithPrice(Item, LibraryRandom.RandInt(10)); + + LibraryInvt.CreateItemUnitOfMeasure(ItemUOM, Item."No.", UOM.Code, QtyPerUnit); + + Item.Validate("Sales Unit of Measure", UOM.Code); + Item.Modify(true); + end; + + local procedure CreateItemWithPrice(var Item: Record Item; UnitPrice: Decimal) + begin + LibraryInvt.CreateItem(Item); + Item."Unit Price" := UnitPrice; + Item.Modify(); + end; + + procedure SetupCompanyInfo() + var + CompanyInfo: Record "Company Information"; + CountryRegion: Record "Country/Region"; + begin + LibraryERM.FindCountryRegion(CountryRegion); + + CompanyInfo.Get(); + CompanyInfo.Validate(IBAN, 'GB33BUKB20201555555555'); + CompanyInfo.Validate("SWIFT Code", 'MIDLGB22Z0K'); + CompanyInfo.Validate("Bank Branch No.", '1234'); + CompanyInfo.Validate(Address, CopyStr(LibraryUtility.GenerateRandomXMLText(MaxStrLen(CompanyInfo.Address)), 1, MaxStrLen(CompanyInfo.Address))); + CompanyInfo.Validate("Post Code", CopyStr(LibraryUtility.GenerateRandomXMLText(MaxStrLen(CompanyInfo."Post Code")), 1, MaxStrLen(CompanyInfo."Post Code"))); + CompanyInfo.Validate("City", CopyStr(LibraryUtility.GenerateRandomXMLText(MaxStrLen(CompanyInfo."City")), 1, MaxStrLen(CompanyInfo."Post Code"))); + CompanyInfo."Country/Region Code" := CountryRegion.Code; + + if CompanyInfo."VAT Registration No." = '' then + CompanyInfo."VAT Registration No." := LibraryERM.GenerateVATRegistrationNo(CompanyInfo."Country/Region Code"); + + CompanyInfo.Modify(true); + end; + + procedure CreateSalesHeaderWithItem(Customer: Record Customer; var SalesHeader: Record "Sales Header"; DocumentType: Enum "Sales Document Type") + var + SalesLine: Record "Sales Line"; + begin + CreateGenericSalesHeader(Customer, SalesHeader, DocumentType); + + if StandardItem."No." = '' then + CreateGenericItem(StandardItem); + + LibrarySales.CreateSalesLine(SalesLine, SalesHeader, SalesLine.Type::Item, StandardItem."No.", 1); + end; + + procedure CreatePurchaseOrderWithLine(var Vendor: Record Vendor; var PurchaseHeader: Record "Purchase Header"; var PurchaseLine: Record "Purchase Line"; Quantity: Decimal) + begin + LibraryPurchase.CreatePurchHeader(PurchaseHeader, Enum::"Purchase Document Type"::Order, Vendor."No."); + if StandardItem."No." = '' then + CreateGenericItem(StandardItem); + LibraryPurchase.CreatePurchaseLine(PurchaseLine, PurchaseHeader, PurchaseLine.Type::Item, StandardItem."No.", Quantity); + end; + + procedure PostSalesDocument(var SalesHeader: Record "Sales Header"; var SalesInvHeader: Record "Sales Invoice Header") + begin + SalesInvHeader.Get(LibrarySales.PostSalesDocument(SalesHeader, true, true)); + end; + + procedure PostSalesDocument(var SalesHeader: Record "Sales Header"; var SalesInvHeader: Record "Sales Invoice Header"; Ship: Boolean) + begin + SalesInvHeader.Get(LibrarySales.PostSalesDocument(SalesHeader, Ship, true)); + end; + + procedure CreateReminderWithLine(Customer: Record Customer; var ReminderHeader: Record "Reminder Header") + var + ReminderLine: Record "Reminder Line"; + begin + LibraryERM.CreateReminderHeader(ReminderHeader); + ReminderHeader.Validate("Customer No.", Customer."No."); + ReminderHeader."Your Reference" := LibraryRandom.RandText(35); + ReminderHeader.Modify(false); + + LibraryERM.CreateReminderLine(ReminderLine, ReminderHeader."No.", Enum::"Reminder Source Type"::"G/L Account"); + ReminderLine.Validate("Remaining Amount", this.LibraryRandom.RandInt(100)); + ReminderLine.Description := LibraryRandom.RandText(100); + ReminderLine.Modify(false); + end; + + procedure CreateFinChargeMemoWithLine(Customer: Record Customer; var FinChargeMemoHeader: Record "Finance Charge Memo Header") + var + FinChargeMemoLine: Record "Finance Charge Memo Line"; + FinanceChargeTerms: Record "Finance Charge Terms"; + begin + LibraryERM.CreateFinanceChargeMemoHeader(FinChargeMemoHeader, Customer."No."); + LibraryFinChargeMemo.CreateFinanceChargeTermAndText(FinanceChargeTerms); + FinChargeMemoHeader.Validate("Fin. Charge Terms Code", FinanceChargeTerms.Code); + FinChargeMemoHeader."Your Reference" := LibraryRandom.RandText(35); + FinChargeMemoHeader.Modify(false); + + LibraryERM.CreateFinanceChargeMemoLine(FinChargeMemoLine, FinChargeMemoHeader."No.", FinChargeMemoLine.Type::"G/L Account"); + FinChargeMemoLine.Validate("Remaining Amount", this.LibraryRandom.RandInt(100)); + FinChargeMemoLine.Description := LibraryRandom.RandText(100); + FinChargeMemoLine.Modify(false); + end; + + procedure IssueReminder(Customer: Record Customer) IssuedReminderHeader: Record "Issued Reminder Header" + var + ReminderHeader: Record "Reminder Header"; + ReminderIssue: Codeunit "Reminder-Issue"; + begin + CreateReminderWithLine(Customer, ReminderHeader); + + ReminderHeader.SetRange("No.", ReminderHeader."No."); + ReminderIssue.Set(ReminderHeader, false, 0D); + ReminderIssue.Run(); + + ReminderIssue.GetIssuedReminder(IssuedReminderHeader); + end; + + procedure IssueFinChargeMemo(Customer: Record Customer) IssuedFinChargeMemoHeader: Record "Issued Fin. Charge Memo Header" + var + FinChargeMemoHeader: Record "Finance Charge Memo Header"; + FinChargeMemoIssue: Codeunit "FinChrgMemo-Issue"; + begin + CreateFinChargeMemoWithLine(Customer, FinChargeMemoHeader); + + FinChargeMemoHeader.SetRange("No.", FinChargeMemoHeader."No."); + FinChargeMemoIssue.Set(FinChargeMemoHeader, false, 0D); + FinChargeMemoIssue.Run(); + + FinChargeMemoIssue.GetIssuedFinChrgMemo(IssuedFinChargeMemoHeader); + end; + + procedure SetupReminderNoSeries() + var + SalesSetup: Record "Sales & Receivables Setup"; + begin + SalesSetup.Get(); + SalesSetup.Validate("Reminder Nos.", this.LibraryERM.CreateNoSeriesCode()); + SalesSetup.Validate("Issued Reminder Nos.", this.LibraryERM.CreateNoSeriesCode()); + SalesSetup.Modify(false); + end; + + procedure SetupFinChargeMemoNoSeries() + var + SalesSetup: Record "Sales & Receivables Setup"; + begin + SalesSetup.Get(); + SalesSetup.Validate("Fin. Chrg. Memo Nos.", this.LibraryERM.CreateNoSeriesCode()); + SalesSetup.Validate("Issued Fin. Chrg. M. Nos.", this.LibraryERM.CreateNoSeriesCode()); + SalesSetup.Modify(false); + end; + + procedure Initialize() + var + DocumentSendingProfile: Record "Document Sending Profile"; + EDocService: Record "E-Document Service"; + EDocServiceStatus: Record "E-Document Service Status"; + EDocServiceSupportedType: Record "E-Doc. Service Supported Type"; + EDocMapping: Record "E-Doc. Mapping"; + EDocLogs: Record "E-Document Log"; + EDocMappingLogs: Record "E-Doc. Mapping Log"; + EDocDataStorage: Record "E-Doc. Data Storage"; + EDocument: Record "E-Document"; + WorkflowSetup: Codeunit "Workflow Setup"; + begin + LibraryWorkflow.DeleteAllExistingWorkflows(); + WorkflowSetup.InitWorkflow(); + DocumentSendingProfile.DeleteAll(); + EDocService.DeleteAll(); + EDocServiceSupportedType.DeleteAll(); + EDocument.DeleteAll(); + EDocServiceStatus.DeleteAll(); + EDocDataStorage.DeleteAll(); + EDocMapping.DeleteAll(); + EDocLogs.DeleteAll(); + EDocMappingLogs.DeleteAll(); + Commit(); + end; + + procedure PostSalesDocument(CustomerNo: Code[20]): Code[20] + var + SalesInvHeader: Record "Sales Invoice Header"; + SalesHeader: Record "Sales Header"; + begin + LibrarySales.CreateSalesInvoiceForCustomerNo(SalesHeader, CustomerNo); + SalesInvHeader.Get(LibrarySales.PostSalesDocument(SalesHeader, true, true)); + exit(SalesInvHeader."No."); + end; + + procedure PostSalesDocument(): Code[20] + begin + PostSalesDocument(''); + end; + + procedure CreateDocumentSendingProfileForWorkflow(CustomerNo: Code[20]; WorkflowCode: Code[20]): Code[20] + var + Customer: Record Customer; + DocumentSendingProfile: Record "Document Sending Profile"; + begin + DocumentSendingProfile.Init(); + DocumentSendingProfile.Code := LibraryUtility.GenerateRandomCode20(DocumentSendingProfile.FieldNo(Code), Database::"Document Sending Profile"); + DocumentSendingProfile."Electronic Document" := Enum::"Doc. Sending Profile Elec.Doc."::"Extended E-Document Service Flow"; + DocumentSendingProfile."Electronic Service Flow" := WorkflowCode; + DocumentSendingProfile.Insert(); + + Customer.Get(CustomerNo); + Customer.Validate("Document Sending Profile", DocumentSendingProfile.Code); + Customer.Modify(); + exit(DocumentSendingProfile.Code); + end; + + procedure UpdateWorkflowOnDocumentSendingProfile(DocSendingProfile: Code[20]; WorkflowCode: Code[20]) + var + DocumentSendingProfile: Record "Document Sending Profile"; + begin + DocumentSendingProfile.Get(DocSendingProfile); + DocumentSendingProfile.Validate("Electronic Service Flow", WorkflowCode); + DocumentSendingProfile.Modify(); + end; + + procedure CreateFlowWithService(DocSendingProfile: Code[20]; ServiceCode: Code[20]): Code[20] + var + Workflow: Record Workflow; + WorkflowStepResponse: Record "Workflow Step"; + WorkflowStepArgument: Record "Workflow Step Argument"; + EDocWorkflowSetup: Codeunit "E-Document Workflow Setup"; + EDocCreatedEventID, SendEDocResponseEventID : Integer; + EventConditions: Text; + begin + LibraryWorkflow.CreateWorkflow(Workflow); + EventConditions := CreateWorkflowEventConditionDocSendingProfileFilter(DocSendingProfile); + + EDocCreatedEventID := LibraryWorkflow.InsertEntryPointEventStep(Workflow, EDocWorkflowSetup.EDocCreated()); + LibraryWorkflow.InsertEventArgument(EDocCreatedEventID, EventConditions); + SendEDocResponseEventID := LibraryWorkflow.InsertResponseStep(Workflow, EDocWorkflowSetup.EDocSendEDocResponseCode(), EDocCreatedEventID); + + WorkflowStepResponse.Get(Workflow.Code, SendEDocResponseEventID); + WorkflowStepArgument.Get(WorkflowStepResponse.Argument); + + WorkflowStepArgument.Validate("E-Document Service", ServiceCode); + WorkflowStepArgument.Modify(); + + LibraryWorkflow.EnableWorkflow(Workflow); + exit(Workflow.Code); + end; + + procedure CreateEmptyFlow(): Code[20] + var + Workflow: Record Workflow; + EDocWorkflowSetup: Codeunit "E-Document Workflow Setup"; + EDocCreatedEventID: Integer; + begin + LibraryWorkflow.CreateWorkflow(Workflow); + EDocCreatedEventID := LibraryWorkflow.InsertEntryPointEventStep(Workflow, EDocWorkflowSetup.EDocCreated()); + LibraryWorkflow.InsertResponseStep(Workflow, EDocWorkflowSetup.EDocSendEDocResponseCode(), EDocCreatedEventID); + + LibraryWorkflow.EnableWorkflow(Workflow); + exit(Workflow.Code); + end; + + procedure CreateFlowWithServices(DocSendingProfile: Code[20]; ServiceCodeA: Code[20]; ServiceCodeB: Code[20]): Code[20] + var + Workflow: Record Workflow; + WorkflowStepResponse: Record "Workflow Step"; + WorkflowStepArgument: Record "Workflow Step Argument"; + EDocWorkflowSetup: Codeunit "E-Document Workflow Setup"; + EDocCreatedEventID, SendEDocResponseEventIDA, SendEDocResponseEventIDB : Integer; + EventConditionsDocProfile, EventConditionsService : Text; + begin + LibraryWorkflow.CreateWorkflow(Workflow); + EventConditionsDocProfile := CreateWorkflowEventConditionDocSendingProfileFilter(DocSendingProfile); + EventConditionsService := CreateWorkflowEventConditionServiceFilter(ServiceCodeA); + + EDocCreatedEventID := LibraryWorkflow.InsertEntryPointEventStep(Workflow, EDocWorkflowSetup.EDocCreated()); + LibraryWorkflow.InsertEventArgument(EDocCreatedEventID, EventConditionsDocProfile); + SendEDocResponseEventIDA := LibraryWorkflow.InsertResponseStep(Workflow, EDocWorkflowSetup.EDocSendEDocResponseCode(), EDocCreatedEventID); + SendEDocResponseEventIDB := LibraryWorkflow.InsertResponseStep(Workflow, EDocWorkflowSetup.EDocSendEDocResponseCode(), SendEDocResponseEventIDA); + + WorkflowStepResponse.Get(Workflow.Code, SendEDocResponseEventIDA); + WorkflowStepArgument.Get(WorkflowStepResponse.Argument); + WorkflowStepArgument."E-Document Service" := ServiceCodeA; + WorkflowStepArgument.Modify(); + + WorkflowStepResponse.Get(Workflow.Code, SendEDocResponseEventIDB); + WorkflowStepArgument.Get(WorkflowStepResponse.Argument); + WorkflowStepArgument."E-Document Service" := ServiceCodeB; + WorkflowStepArgument.Modify(); + + LibraryWorkflow.EnableWorkflow(Workflow); + exit(Workflow.Code); + end; + + local procedure DeleteEDocumentRelatedEntities() + var + DynamicRequestPageEntity: Record "Dynamic Request Page Entity"; + begin + DynamicRequestPageEntity.SetRange("Table ID", DATABASE::"E-Document"); + DynamicRequestPageEntity.DeleteAll(true); + end; + + local procedure CreateWorkflowEventConditionDocSendingProfileFilter(DocSendingProfile: Code[20]): Text + var + RequestPageParametersHelper: Codeunit "Request Page Parameters Helper"; + FilterPageBuilder: FilterPageBuilder; + EntityName: Code[20]; + begin + EntityName := CreateDynamicRequestPageEntity(DATABASE::"E-Document", Database::"Document Sending Profile"); + CreateEDocumentDocSendingProfileDataItem(FilterPageBuilder, DocSendingProfile); + exit(RequestPageParametersHelper.GetViewFromDynamicRequestPage(FilterPageBuilder, EntityName, Database::"E-Document")); + end; + + local procedure CreateWorkflowEventConditionServiceFilter(ServiceCode: Code[20]): Text + var + RequestPageParametersHelper: Codeunit "Request Page Parameters Helper"; + FilterPageBuilder: FilterPageBuilder; + EntityName: Code[20]; + begin + EntityName := CreateDynamicRequestPageEntity(DATABASE::"E-Document", Database::"E-Document Service"); + CreateEDocServiceDataItem(FilterPageBuilder, ServiceCode); + exit(RequestPageParametersHelper.GetViewFromDynamicRequestPage(FilterPageBuilder, EntityName, Database::"E-Document Service")); + end; + + local procedure CreateEDocumentDocSendingProfileDataItem(var FilterPageBuilder: FilterPageBuilder; DocumentSendingProfile: Code[20]) + var + EDocument: Record "E-Document"; + EDocumentDataItem: Text; + begin + EDocumentDataItem := FilterPageBuilder.AddTable(EDocument.TableCaption, DATABASE::"E-Document"); + FilterPageBuilder.AddField(EDocumentDataItem, EDocument."Document Sending Profile", DocumentSendingProfile); + end; + + local procedure CreateEDocServiceDataItem(var FilterPageBuilder: FilterPageBuilder; ServiceCode: Code[20]) + var + EDocService: Record "E-Document Service"; + EDocumentDataItem: Text; + begin + EDocumentDataItem := FilterPageBuilder.AddTable(EDocService.TableCaption, DATABASE::"E-Document Service"); + FilterPageBuilder.AddField(EDocumentDataItem, EDocService.Code, ServiceCode); + end; + + local procedure CreateDynamicRequestPageEntity(TableID: Integer; RelatedTable: Integer): Code[20] + var + EntityName: Code[20]; + begin + DeleteEDocumentRelatedEntities(); + EntityName := LibraryUtility.GenerateGUID(); + LibraryWorkflow.CreateDynamicRequestPageEntity(EntityName, TableID, RelatedTable); + exit(EntityName); + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use CreateService(EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") instead', '26.0')] + procedure CreateService(Integration: Enum "E-Document Integration"): Code[20] + var + EDocService: Record "E-Document Service"; + begin + EDocService.Init(); + EDocService.Code := LibraryUtility.GenerateRandomCode20(EDocService.FieldNo(Code), Database::"E-Document Service"); + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration" := Integration; + EDocService.Insert(); + + CreateSupportedDocTypes(EDocService); + + exit(EDocService.Code); + end; +#pragma warning restore AL0432 +#endif + + procedure CreateService(Integration: Enum "Service Integration"): Code[20] + var + EDocService: Record "E-Document Service"; + begin + EDocService.Init(); + EDocService.Code := LibraryUtility.GenerateRandomCode20(EDocService.FieldNo(Code), Database::"E-Document Service"); + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration V2" := Integration; + EDocService.Insert(); + + CreateSupportedDocTypes(EDocService); + + exit(EDocService.Code); + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use CreateService(EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration") instead', '26.0')] + procedure CreateService(EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "E-Document Integration"): Code[20] + var + EDocService: Record "E-Document Service"; + begin + EDocService.Init(); + EDocService.Code := LibraryUtility.GenerateRandomCode20(EDocService.FieldNo(Code), Database::"E-Document Service"); + EDocService."Document Format" := EDocDocumentFormat; + EDocService."Service Integration" := EDocIntegration; + EDocService.Insert(); + + CreateSupportedDocTypes(EDocService); + + exit(EDocService.Code); + end; +#pragma warning restore AL0432 +#endif + + procedure CreateService(EDocDocumentFormat: Enum "E-Document Format"; EDocIntegration: Enum "Service Integration"): Code[20] + var + EDocService: Record "E-Document Service"; + begin + EDocService.Init(); + EDocService.Code := LibraryUtility.GenerateRandomCode20(EDocService.FieldNo(Code), Database::"E-Document Service"); + EDocService."Document Format" := EDocDocumentFormat; + EDocService."Service Integration V2" := EDocIntegration; + EDocService.Insert(); + + CreateSupportedDocTypes(EDocService); + + exit(EDocService.Code); + end; + + + procedure CreateServiceMapping(EDocService: Record "E-Document Service") + var + TransformationRule: Record "Transformation Rule"; + EDocMapping: Record "E-Doc. Mapping"; + SalesInvHeader: Record "Sales Invoice Header"; + begin + TransformationRule.Get(TransformationRule.GetLowercaseCode()); + // Lower case mapping + CreateTransformationMapping(EDocMapping, TransformationRule, EDocService.Code); + EDocMapping."Table ID" := Database::"Sales Invoice Header"; + EDocMapping."Field ID" := SalesInvHeader.FieldNo("Bill-to Name"); + EDocMapping.Modify(); + CreateTransformationMapping(EDocMapping, TransformationRule, EDocService.Code); + EDocMapping."Table ID" := Database::"Sales Invoice Header"; + EDocMapping."Field ID" := SalesInvHeader.FieldNo("Bill-to Address"); + EDocMapping.Modify(); + end; + + procedure DeleteServiceMapping(EDocService: Record "E-Document Service") + var + EDocMapping: Record "E-Doc. Mapping"; + begin + EDocMapping.SetRange(Code, EDocService.Code); + EDocMapping.DeleteAll(); + end; + + + // procedure CreateServiceWithMapping(var EDocMapping: Record "E-Doc. Mapping"; TransformationRule: Record "Transformation Rule"; Integration: Enum "E-Document Integration"): Code[20] + // begin + // exit(CreateServiceWithMapping(EDocMapping, TransformationRule, false, Integration)); + // end; + + // procedure CreateServiceWithMapping(var EDocMapping: Record "E-Doc. Mapping"; TransformationRule: Record "Transformation Rule"; UseBatching: Boolean; Integration: Enum "E-Document Integration"): Code[20] + // var + // SalesInvHeader: Record "Sales Invoice Header"; + // EDocService: Record "E-Document Service"; + // begin + // EDocService.Init(); + // EDocService.Code := LibraryUtility.GenerateRandomCode20(EDocService.FieldNo(Code), Database::"E-Document Service"); + // EDocService."Document Format" := "E-Document Format"::Mock; + // EDocService."Service Integration" := Integration; + // EDocService."Use Batch Processing" := UseBatching; + // EDocService.Insert(); + + // CreateSupportedDocTypes(EDocService); + + // // Lower case mapping + // CreateTransformationMapping(EDocMapping, TransformationRule, EDocService.Code); + // EDocMapping."Table ID" := Database::"Sales Invoice Header"; + // EDocMapping."Field ID" := SalesInvHeader.FieldNo("Bill-to Name"); + // EDocMapping.Modify(); + // CreateTransformationMapping(EDocMapping, TransformationRule, EDocService.Code); + // EDocMapping."Table ID" := Database::"Sales Invoice Header"; + // EDocMapping."Field ID" := SalesInvHeader.FieldNo("Bill-to Address"); + // EDocMapping.Modify(); + + // exit(EDocService.Code); + // end; + + procedure CreateSupportedDocTypes(EDocService: Record "E-Document Service") + var + EDocServiceSupportedType: Record "E-Doc. Service Supported Type"; + begin + EDocServiceSupportedType.Init(); + EDocServiceSupportedType."E-Document Service Code" := EDocService.Code; + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Sales Invoice"; + EDocServiceSupportedType.Insert(); + + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Sales Credit Memo"; + EDocServiceSupportedType.Insert(); + + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Service Invoice"; + EDocServiceSupportedType.Insert(); + + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Service Credit Memo"; + EDocServiceSupportedType.Insert(); + + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Issued Finance Charge Memo"; + EDocServiceSupportedType.Insert(); + + EDocServiceSupportedType."Source Document Type" := EDocServiceSupportedType."Source Document Type"::"Issued Reminder"; + EDocServiceSupportedType.Insert(); + end; + + procedure AddEDocServiceSupportedType(EDocService: Record "E-Document Service"; EDocumentType: Enum "E-Document Type") + var + EDocServiceSupportedType: Record "E-Doc. Service Supported Type"; + begin + if not EDocService.Get(EDocService.Code) then + exit; + + EDocServiceSupportedType.Init(); + EDocServiceSupportedType."E-Document Service Code" := EDocService.Code; + EDocServiceSupportedType."Source Document Type" := EDocumentType; + if EDocServiceSupportedType.Insert() then; + end; + + procedure CreateTestReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") + begin + if not EDocService.Get('TESTRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'TESTRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration V2" := Integration; + EDocService.Insert(); + end; + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use CreateTestReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") instead', '26.0')] + procedure CreateTestReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "E-Document Integration") + begin + if not EDocService.Get('TESTRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'TESTRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration" := Integration; + EDocService.Insert(); + end; + end; +#pragma warning restore AL0432 +#endif + + procedure CreateGetBasicInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") + begin + if not EDocService.Get('BIERRRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'BIERRRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration V2" := Integration; + EDocService.Insert(); + end; + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use CreateGetBasicInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") instead', '26.0')] + procedure CreateGetBasicInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "E-Document Integration") + begin + if not EDocService.Get('BIERRRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'BIERRRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration" := Integration; + EDocService.Insert(); + end; + end; +#pragma warning restore AL0432 +#endif + + procedure CreateGetCompleteInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") + begin + if not EDocService.Get('CIERRRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'CIERRRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration V2" := Integration; + EDocService.Insert(); + end; + end; + +#if not CLEAN26 +#pragma warning disable AL0432 + [Obsolete('Use CreateGetCompleteInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "Service Integration") instead', '26.0')] + procedure CreateGetCompleteInfoErrorReceiveServiceForEDoc(var EDocService: Record "E-Document Service"; Integration: Enum "E-Document Integration") + begin + if not EDocService.Get('CIERRRECEIVE') then begin + EDocService.Init(); + EDocService.Code := 'CIERRRECEIVE'; + EDocService."Document Format" := "E-Document Format"::Mock; + EDocService."Service Integration" := Integration; + EDocService.Insert(); + end; + end; +#pragma warning restore AL0432 +#endif + + procedure CreateDirectMapping(var EDocMapping: Record "E-Doc. Mapping"; EDocService: Record "E-Document Service"; FindValue: Text; ReplaceValue: Text) + begin + CreateDirectMapping(EDocMapping, EDocService, FindValue, ReplaceValue, 0, 0); + end; + + procedure CreateTransformationMapping(var EDocMapping: Record "E-Doc. Mapping"; TransformationRule: Record "Transformation Rule") + begin + CreateTransformationMapping(EDocMapping, TransformationRule, ''); + end; + + procedure CreateTransformationMapping(var EDocMapping: Record "E-Doc. Mapping"; TransformationRule: Record "Transformation Rule"; ServiceCode: Code[20]) + begin + EDocMapping.Init(); + EDocMapping.Code := ServiceCode; + EDocMapping."Entry No." := 0; + EDocMapping."Transformation Rule" := TransformationRule.Code; + EDocMapping.Insert(); + end; + + procedure CreateDirectMapping(var EDocMapping: Record "E-Doc. Mapping"; EDocService: Record "E-Document Service"; FindValue: Text; ReplaceValue: Text; TableId: Integer; FieldId: Integer) + begin + EDocMapping.Init(); + EDocMapping."Entry No." := 0; + EDocMapping.Code := EDocService.Code; + EDocMapping."Table ID" := TableId; + EDocMapping."Field ID" := FieldId; + EDocMapping."Find Value" := CopyStr(FindValue, 1, LibraryUtility.GetFieldLength(DATABASE::"E-Doc. Mapping", EDocMapping.FieldNo("Find Value"))); + EDocMapping."Replace Value" := CopyStr(ReplaceValue, 1, LibraryUtility.GetFieldLength(DATABASE::"E-Doc. Mapping", EDocMapping.FieldNo("Replace Value"))); + EDocMapping.Insert(); + end; + + local procedure CreateItemUnitOfMeasure(ItemNo: Code[20]; UnitOfMeasureCode: Code[10]) + var + ItemUnitOfMeasure: Record "Item Unit of Measure"; + begin + ItemUnitOfMeasure.Init(); + ItemUnitOfMeasure.Validate("Item No.", ItemNo); + ItemUnitOfMeasure.Validate(Code, UnitOfMeasureCode); + ItemUnitOfMeasure."Qty. per Unit of Measure" := 1; + if ItemUnitOfMeasure.Insert() then; + end; + + procedure TempBlobToTxt(var TempBlob: Codeunit "Temp Blob"): Text + var + InStr: InStream; + Content: Text; + begin + TempBlob.CreateInStream(InStr); + InStr.Read(Content); + exit(Content); + end; + + internal procedure CreateLocationsWithPostingSetups( + var FromLocation: Record Location; + var ToLocation: Record Location; + var InTransitLocation: Record Location; + var InventoryPostingGroup: Record "Inventory Posting Group") + var + InventoryPostingSetupFromLocation: Record "Inventory Posting Setup"; + InventoryPostingSetupToLocation: Record "Inventory Posting Setup"; + InventoryPostingSetupInTransitLocation: Record "Inventory Posting Setup"; + LibraryWarehouse: Codeunit "Library - Warehouse"; + begin + LibraryWarehouse.CreateLocation(FromLocation); + LibraryWarehouse.CreateLocation(ToLocation); + LibraryWarehouse.CreateInTransitLocation(InTransitLocation); + + LibraryInventory.CreateInventoryPostingGroup(InventoryPostingGroup); + LibraryInventory.CreateInventoryPostingSetup(InventoryPostingSetupFromLocation, FromLocation.Code, InventoryPostingGroup.Code); + LibraryInventory.UpdateInventoryPostingSetup(FromLocation, InventoryPostingGroup.Code); + + InventoryPostingSetupFromLocation.Get(FromLocation.Code, InventoryPostingGroup.Code); + InventoryPostingSetupToLocation := InventoryPostingSetupFromLocation; + InventoryPostingSetupToLocation."Location Code" := ToLocation.Code; + InventoryPostingSetupToLocation.Insert(false); + + InventoryPostingSetupInTransitLocation := InventoryPostingSetupFromLocation; + InventoryPostingSetupInTransitLocation."Location Code" := InTransitLocation.Code; + InventoryPostingSetupInTransitLocation.Insert(false); + end; + + internal procedure CreateItemWithInventoryPostingGroup(var Item: Record Item; InventoryPostingGroupCode: Code[20]) + begin + LibraryInventory.CreateItem(Item); + Item."Inventory Posting Group" := InventoryPostingGroupCode; + Item.Modify(false); + end; + + internal procedure CreateItemWIthInventoryStock(var Item: Record Item; var FromLocation: Record Location; var InventoryPostingGroup: Record "Inventory Posting Group") + var + ItemJournalLine: Record "Item Journal Line"; + begin + CreateItemWithInventoryPostingGroup(Item, InventoryPostingGroup.Code); + LibraryInventory.CreateItemJournalLineInItemTemplate( + ItemJournalLine, Item."No.", FromLocation.Code, '', LibraryRandom.RandIntInRange(10, 20)); + LibraryInventory.PostItemJournalLine( + ItemJournalLine."Journal Template Name", ItemJournalLine."Journal Batch Name"); + end; + + // Verify procedures + + procedure AssertEDocumentLogs(EDocument: Record "E-Document"; EDocumentService: Record "E-Document Service"; EDocLogList: List of [Enum "E-Document Service Status"]) + var + EDocLog: Record "E-Document Log"; + Count: Integer; + begin + EDocLog.SetRange("E-Doc. Entry No", EDocument."Entry No"); + EDocLog.SetRange("Service Code", EDocumentService.Code); + Assert.AreEqual(EDocLogList.Count(), EDocLog.Count(), 'Wrong number of logs'); + Count := 1; + EDocLog.SetCurrentKey("Entry No."); + EDocLog.SetAscending("Entry No.", true); + if EDocLog.FindSet() then + repeat + Assert.AreEqual(EDocLogList.Get(Count), EDocLog.Status, 'Wrong status'); + Count := Count + 1; + until EDocLog.Next() = 0; + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"E-Doc. Export", 'OnAfterCreateEDocument', '', false, false)] + local procedure OnAfterCreateEDocument(var EDocument: Record "E-Document") + begin + LibraryVariableStorage.Enqueue(EDocument); + end; +} \ No newline at end of file diff --git a/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/PINTANZStructuredValidations.Codeunit.al b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/PINTANZStructuredValidations.Codeunit.al new file mode 100644 index 0000000000..143cee663e --- /dev/null +++ b/Apps/APAC/EDocumentFormats/PINT A-NZ/test/src/PINTANZStructuredValidations.Codeunit.al @@ -0,0 +1,105 @@ +codeunit 148003 "PINTANZ Structured Validations" +{ + var + Assert: Codeunit Assert; + UnitOfMeasureCodeTok: Label 'PCS', Locked = true; + SalesInvoiceNoTok: Label '103033', Locked = true; + PurchaseorderNoTok: Label '2', Locked = true; + MockDate: Date; + MockCurrencyCode: Code[10]; + MockDataMismatchErr: Label 'The %1 in %2 does not align with the mock data. Expected: %3, Actual: %4', Locked = true, Comment = '%1 = Field caption, %2 = Table caption, %3 = Expected value, %4 = Actual value'; + + + internal procedure AssertFullEDocumentContentExtracted(EDocumentEntryNo: Integer) + var + EDocumentPurchaseHeader: Record "E-Document Purchase Header"; + EDocumentPurchaseLine: Record "E-Document Purchase Line"; + begin + EDocumentPurchaseHeader.Get(EDocumentEntryNo); + Assert.AreEqual(SalesInvoiceNoTok, EDocumentPurchaseHeader."Sales Invoice No.", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Sales Invoice No."), EDocumentPurchaseHeader.TableCaption(), SalesInvoiceNoTok, EDocumentPurchaseHeader."Sales Invoice No.")); + Assert.AreEqual(MockDate, EDocumentPurchaseHeader."Document Date", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Document Date"), EDocumentPurchaseHeader.TableCaption(), MockDate, EDocumentPurchaseHeader."Document Date")); + Assert.AreEqual(CalcDate('<+1M>', MockDate), EDocumentPurchaseHeader."Due Date", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Due Date"), EDocumentPurchaseHeader.TableCaption(), CalcDate('<+1M>', MockDate), EDocumentPurchaseHeader."Due Date")); + Assert.AreEqual(MockCurrencyCode, EDocumentPurchaseHeader."Currency Code", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Currency Code"), EDocumentPurchaseHeader.TableCaption(), MockCurrencyCode, EDocumentPurchaseHeader."Currency Code")); + Assert.AreEqual(PurchaseorderNoTok, EDocumentPurchaseHeader."Purchase Order No.", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Purchase Order No."), EDocumentPurchaseHeader.TableCaption(), PurchaseorderNoTok, EDocumentPurchaseHeader."Purchase Order No.")); + Assert.AreEqual('CRONUS International', EDocumentPurchaseHeader."Vendor Company Name", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Vendor Company Name"), EDocumentPurchaseHeader.TableCaption(), 'CRONUS International', EDocumentPurchaseHeader."Vendor Company Name")); + Assert.AreEqual('Main Street, 14', EDocumentPurchaseHeader."Vendor Address", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Vendor Address"), EDocumentPurchaseHeader.TableCaption(), 'Main Street, 14', EDocumentPurchaseHeader."Vendor Address")); + Assert.AreEqual('GB123456789', EDocumentPurchaseHeader."Vendor VAT Id", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Vendor VAT Id"), EDocumentPurchaseHeader.TableCaption(), 'GB123456789', EDocumentPurchaseHeader."Vendor VAT Id")); + Assert.AreEqual('Jim Olive', EDocumentPurchaseHeader."Vendor Contact Name", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Vendor Contact Name"), EDocumentPurchaseHeader.TableCaption(), 'Jim Olive', EDocumentPurchaseHeader."Vendor Contact Name")); + Assert.AreEqual('The Cannon Group PLC', EDocumentPurchaseHeader."Customer Company Name", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Customer Company Name"), EDocumentPurchaseHeader.TableCaption(), 'The Cannon Group PLC', EDocumentPurchaseHeader."Customer Company Name")); + Assert.AreEqual('GB789456278', EDocumentPurchaseHeader."Customer VAT Id", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Customer VAT Id"), EDocumentPurchaseHeader.TableCaption(), 'GB789456278', EDocumentPurchaseHeader."Customer VAT Id")); + Assert.AreEqual('192 Market Square', EDocumentPurchaseHeader."Customer Address", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseHeader.FieldCaption("Customer Address"), EDocumentPurchaseHeader.TableCaption(), '192 Market Square', EDocumentPurchaseHeader."Customer Address")); + + EDocumentPurchaseLine.SetRange("E-Document Entry No.", EDocumentEntryNo); + EDocumentPurchaseLine.FindSet(); + Assert.AreEqual(1, EDocumentPurchaseLine."Quantity", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Quantity"), EDocumentPurchaseLine.TableCaption(), 1, EDocumentPurchaseLine."Quantity")); + Assert.AreEqual(UnitOfMeasureCodeTok, EDocumentPurchaseLine."Unit of Measure", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Unit of Measure"), EDocumentPurchaseLine.TableCaption(), UnitOfMeasureCodeTok, EDocumentPurchaseLine."Unit of Measure")); + Assert.AreEqual(4000, EDocumentPurchaseLine."Sub Total", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Sub Total"), EDocumentPurchaseLine.TableCaption(), 4000, EDocumentPurchaseLine."Sub Total")); + Assert.AreEqual(MockCurrencyCode, EDocumentPurchaseLine."Currency Code", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Currency Code"), EDocumentPurchaseLine.TableCaption(), MockCurrencyCode, EDocumentPurchaseLine."Currency Code")); + Assert.AreEqual(0, EDocumentPurchaseLine."Total Discount", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Total Discount"), EDocumentPurchaseLine.TableCaption(), 0, EDocumentPurchaseLine."Total Discount")); + Assert.AreEqual('Bicycle', EDocumentPurchaseLine.Description, StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption(Description), EDocumentPurchaseLine.TableCaption(), 'Bicycle', EDocumentPurchaseLine.Description)); + Assert.AreEqual('1000', EDocumentPurchaseLine."Product Code", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Product Code"), EDocumentPurchaseLine.TableCaption(), '1000', EDocumentPurchaseLine."Product Code")); + Assert.AreEqual(4000, EDocumentPurchaseLine."Unit Price", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Unit Price"), EDocumentPurchaseLine.TableCaption(), 4000, EDocumentPurchaseLine."Unit Price")); + + EDocumentPurchaseLine.Next(); + Assert.AreEqual(2, EDocumentPurchaseLine."Quantity", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Quantity"), EDocumentPurchaseLine.TableCaption(), 2, EDocumentPurchaseLine."Quantity")); + Assert.AreEqual(UnitOfMeasureCodeTok, EDocumentPurchaseLine."Unit of Measure", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Unit of Measure"), EDocumentPurchaseLine.TableCaption(), UnitOfMeasureCodeTok, EDocumentPurchaseLine."Unit of Measure")); + Assert.AreEqual(10000, EDocumentPurchaseLine."Sub Total", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Sub Total"), EDocumentPurchaseLine.TableCaption(), 10000, EDocumentPurchaseLine."Sub Total")); + Assert.AreEqual(MockCurrencyCode, EDocumentPurchaseLine."Currency Code", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Currency Code"), EDocumentPurchaseLine.TableCaption(), MockCurrencyCode, EDocumentPurchaseLine."Currency Code")); + Assert.AreEqual(0, EDocumentPurchaseLine."Total Discount", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Total Discount"), EDocumentPurchaseLine.TableCaption(), 0, EDocumentPurchaseLine."Total Discount")); + Assert.AreEqual('Bicycle v2', EDocumentPurchaseLine.Description, StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption(Description), EDocumentPurchaseLine.TableCaption(), 'Bicycle v2', EDocumentPurchaseLine.Description)); + Assert.AreEqual('2000', EDocumentPurchaseLine."Product Code", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Product Code"), EDocumentPurchaseLine.TableCaption(), '2000', EDocumentPurchaseLine."Product Code")); + Assert.AreEqual(5000, EDocumentPurchaseLine."Unit Price", StrSubstNo(MockDataMismatchErr, EDocumentPurchaseLine.FieldCaption("Unit Price"), EDocumentPurchaseLine.TableCaption(), 5000, EDocumentPurchaseLine."Unit Price")); + end; + + internal procedure AssertPurchaseDocument(VendorNo: Code[20]; PurchaseHeader: Record "Purchase Header"; Item: Record Item) + var + PurchaseLine: Record "Purchase Line"; + Item1NoTok: Label 'GL00000001', Locked = true; + Item2NoTok: Label 'GL00000003', Locked = true; + begin + Assert.AreEqual(SalesInvoiceNoTok, PurchaseHeader."Vendor Invoice No.", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Vendor Invoice No."), PurchaseHeader.TableCaption(), SalesInvoiceNoTok, PurchaseHeader."Vendor Invoice No.")); + Assert.AreEqual(MockDate, PurchaseHeader."Document Date", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Document Date"), PurchaseHeader.TableCaption(), MockDate, PurchaseHeader."Document Date")); + Assert.AreEqual(CalcDate('<+1M>', MockDate), PurchaseHeader."Due Date", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Due Date"), PurchaseHeader.TableCaption(), CalcDate('<+1M>', MockDate), PurchaseHeader."Due Date")); + Assert.AreEqual(MockCurrencyCode, PurchaseHeader."Currency Code", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Currency Code"), PurchaseHeader.TableCaption(), MockCurrencyCode, PurchaseHeader."Currency Code")); + Assert.AreEqual(PurchaseorderNoTok, PurchaseHeader."Vendor Order No.", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Vendor Order No."), PurchaseHeader.TableCaption(), PurchaseorderNoTok, PurchaseHeader."Vendor Order No.")); + Assert.AreEqual(VendorNo, PurchaseHeader."Buy-from Vendor No.", StrSubstNo(MockDataMismatchErr, PurchaseHeader.FieldCaption("Buy-from Vendor No."), PurchaseHeader.TableCaption(), VendorNo, PurchaseHeader."Buy-from Vendor No.")); + + PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); + PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); + PurchaseLine.FindSet(); + Assert.AreEqual(1, PurchaseLine.Quantity, StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption(Quantity), PurchaseLine.TableCaption(), 1, PurchaseLine.Quantity)); + Assert.AreEqual(4000, PurchaseLine."Direct Unit Cost", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Direct Unit Cost"), PurchaseLine.TableCaption(), 4000, PurchaseLine."Direct Unit Cost")); + Assert.AreEqual(MockCurrencyCode, PurchaseLine."Currency Code", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Currency Code"), PurchaseLine.TableCaption(), MockCurrencyCode, PurchaseLine."Currency Code")); + Assert.AreEqual(0, PurchaseLine."Line Discount Amount", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Line Discount Amount"), PurchaseLine.TableCaption(), 0, PurchaseLine."Line Discount Amount")); + // In the import file we have a name 'Bicycle' but because of Item Cross Reference validation Item description is being used + if Item."No." <> '' then begin + Assert.AreEqual('Bicycle', PurchaseLine.Description, StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption(Description), PurchaseLine.TableCaption(), Item."No.", PurchaseLine.Description)); + Assert.AreEqual(Item."No.", PurchaseLine."No.", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("No."), PurchaseLine.TableCaption(), Item."No.", PurchaseLine."No.")); + Assert.AreEqual(Item."Purch. Unit of Measure", PurchaseLine."Unit of Measure Code", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Unit of Measure Code"), PurchaseLine.TableCaption(), UnitOfMeasureCodeTok, PurchaseLine."Unit of Measure Code")); + end else begin + Assert.AreEqual(Item1NoTok, PurchaseLine.Description, StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption(Description), PurchaseLine.TableCaption(), Item1NoTok, PurchaseLine.Description)); + Assert.AreEqual(Item1NoTok, PurchaseLine."No.", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("No."), PurchaseLine.TableCaption(), Item1NoTok, PurchaseLine."No.")); + Assert.AreEqual(UnitOfMeasureCodeTok, PurchaseLine."Unit of Measure Code", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Unit of Measure Code"), PurchaseLine.TableCaption(), UnitOfMeasureCodeTok, PurchaseLine."Unit of Measure Code")); + end; + + PurchaseLine.Next(); + Assert.AreEqual(2, PurchaseLine.Quantity, StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption(Quantity), PurchaseLine.TableCaption(), 2, PurchaseLine.Quantity)); + Assert.AreEqual(UnitOfMeasureCodeTok, PurchaseLine."Unit of Measure Code", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Unit of Measure Code"), PurchaseLine.TableCaption(), UnitOfMeasureCodeTok, PurchaseLine."Unit of Measure Code")); + Assert.AreEqual(5000, PurchaseLine."Direct Unit Cost", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Direct Unit Cost"), PurchaseLine.TableCaption(), 5000, PurchaseLine."Direct Unit Cost")); + Assert.AreEqual(MockCurrencyCode, PurchaseLine."Currency Code", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Currency Code"), PurchaseLine.TableCaption(), MockCurrencyCode, PurchaseLine."Currency Code")); + Assert.AreEqual(0, PurchaseLine."Line Discount Amount", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("Line Discount Amount"), PurchaseLine.TableCaption(), 0, PurchaseLine."Line Discount Amount")); + // In the import file we have a name 'Bicycle v2' but because of Item Cross Reference validation Item description is being used + Assert.AreEqual(Item2NoTok, PurchaseLine.Description, StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption(Description), PurchaseLine.TableCaption(), Item2NoTok, PurchaseLine.Description)); + Assert.AreEqual(Item2NoTok, PurchaseLine."No.", StrSubstNo(MockDataMismatchErr, PurchaseLine.FieldCaption("No."), PurchaseLine.TableCaption(), Item2NoTok, PurchaseLine."No.")); + end; + + procedure SetMockDate(MockDate: Date) + begin + this.MockDate := MockDate; + end; + + procedure SetMockCurrencyCode(MockCurrencyCode: Code[10]) + begin + this.MockCurrencyCode := MockCurrencyCode; + end; +} \ No newline at end of file diff --git a/Apps/W1/EDocument/app/app.json b/Apps/W1/EDocument/app/app.json index 69bae72d52..7e0e9bdf14 100644 --- a/Apps/W1/EDocument/app/app.json +++ b/Apps/W1/EDocument/app/app.json @@ -37,6 +37,16 @@ "id": "967eceac-106e-4102-b76a-fe5dc3d799e5", "name": "Payables Agent Tests", "publisher": "Microsoft" + }, + { + "id": "8238f99b-cbe5-4b9c-1234-7771145b7470", + "name": "E-Document Format for PINT A-NZ", + "publisher": "Microsoft" + }, + { + "id": "8238f78b-cbe5-4339-b247-7771145b7470", + "name": "E-Document Format for PINT A-NZ Tests", + "publisher": "Microsoft" } ], "screenshots": [],