From 3e81f6a4a07661656640280db87833876e3fc627 Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Wed, 11 Dec 2024 15:16:15 +0100 Subject: [PATCH 01/19] add EDocument app workspace --- .../EDocument/edocument_workspace.code-workspace | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 Apps/W1/EDocument/edocument_workspace.code-workspace diff --git a/Apps/W1/EDocument/edocument_workspace.code-workspace b/Apps/W1/EDocument/edocument_workspace.code-workspace new file mode 100644 index 0000000000..f10f2a03cc --- /dev/null +++ b/Apps/W1/EDocument/edocument_workspace.code-workspace @@ -0,0 +1,16 @@ +{ + "folders": [ + { + "name": "app", + "path": "app" + }, + { + "name": "test", + "path": "test" + }, + { + "name": "demo data", + "path": "demo data" + } + ] +} \ No newline at end of file From f4c11e284549a39e0b356ae69c618198edd0bdc0 Mon Sep 17 00:00:00 2001 From: Piotr Michalak Date: Thu, 12 Dec 2024 11:10:12 +0100 Subject: [PATCH 02/19] add code analyzers settings to code workspace --- Apps/W1/EDocument/edocument_workspace.code-workspace | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/Apps/W1/EDocument/edocument_workspace.code-workspace b/Apps/W1/EDocument/edocument_workspace.code-workspace index f10f2a03cc..35fb4f1ea3 100644 --- a/Apps/W1/EDocument/edocument_workspace.code-workspace +++ b/Apps/W1/EDocument/edocument_workspace.code-workspace @@ -1,4 +1,12 @@ { + "settings": { + "al.enableCodeAnalysis": true, + "al.codeAnalyzers": [ + "${CodeCop}", + "${UICop}", + "${AppSourceCop}" + ] + }, "folders": [ { "name": "app", From 8370437c42acc9b71b141731e6ff4745737d4d4a Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Tue, 14 Jan 2025 14:35:58 +0200 Subject: [PATCH 03/19] allow to recreate unposted purchase documents from an incoming e-document --- .../app/src/Document/EDocument.Page.al | 18 ++++++++++++++++- .../EDocumentProcessing.Codeunit.al | 20 +++++++++++++++++-- .../EDocumentSubscription.Codeunit.al | 5 ++++- 3 files changed, 39 insertions(+), 4 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al index d975f90883..12c5afc6ed 100644 --- a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al +++ b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al @@ -345,6 +345,19 @@ page 6121 "E-Document" EDocOrderMatch.RunMatching(Rec); end; } + action(DeleteRelatedDocument) + { + Caption = 'Delete Related Document'; + ToolTip = 'Delete the related purchase document.'; + Image = Delete; + Visible = IsIncomingDoc and IsProcessed; + + trigger OnAction() + begin + if Confirm(StrSubstNo(this.ConfirmDeleteRelatedDocQst, this.RecordLinkTxt)) then + this.EDocumentHelper.DeleteRelatedRecords(Rec); + end; + } } group(Troubleshoot) { @@ -411,6 +424,7 @@ page 6121 "E-Document" actionref(Recreate_Promoted; Recreate) { } actionref(Cancel_promoteed; Cancel) { } actionref(Approval_promoteed; GetApproval) { } + actionref(DeleteRelatedDocument_Promoted; DeleteRelatedDocument) { } } group(Category_Troubleshoot) @@ -491,10 +505,11 @@ page 6121 "E-Document" trigger OnAfterGetRecord() begin + RecordLinkTxt := EDocumentHelper.GetRecordLinkText(Rec); + IsProcessed := Rec.Status = Rec.Status::Processed; IsIncomingDoc := Rec.Direction = Rec.Direction::Incoming; - RecordLinkTxt := EDocumentHelper.GetRecordLinkText(Rec); HasErrorsOrWarnings := (EDocumentErrorHelper.ErrorMessageCount(Rec) + EDocumentErrorHelper.WarningMessageCount(Rec)) > 0; HasErrors := EDocumentErrorHelper.ErrorMessageCount(Rec) > 0; if HasErrorsOrWarnings then @@ -600,5 +615,6 @@ page 6121 "E-Document" ShowRelink, ShowMapToOrder, HasErrorsOrWarnings, HasErrors, IsIncomingDoc, IsProcessed, CopilotVisible : Boolean; EDocHasErrorOrWarningMsg: Label 'Errors or warnings found for E-Document. Please review below in "Error Messages" section.'; DocNotCreatedMsg: Label 'Failed to create new %1 from E-Document. Please review errors below.', Comment = '%1 - E-Document Document Type'; + ConfirmDeleteRelatedDocQst: Label 'Do you want to delete the related document %1?', Comment = '%1 - related record ID'; } diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al index 671f235690..be7fcfe687 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al @@ -256,8 +256,12 @@ codeunit 6108 "E-Document Processing" VariantRecord: Variant; begin if GetRecord(EDocument, VariantRecord) and DataTypeManagement.GetRecordRef(VariantRecord, RecRef) then - exit(GetRelatedRecordCaption(EDocument, RecRef)); - exit(''); + exit(GetRelatedRecordCaption(EDocument, RecRef)) + else begin + EDocument.Status := EDocument.Status::"In Progress"; + EDocument.Modify(false); + exit(''); + end; end; procedure GetRecord(var EDocument: Record "E-Document"; var RelatedRecord: Variant): Boolean @@ -294,6 +298,17 @@ codeunit 6108 "E-Document Processing" exit(EDocTok); end; + procedure DeleteRelatedRecords(EDocument: Record "E-Document") + var + RecRef: RecordRef; + begin + if this.GetRelatedRecord(EDocument, RecRef) then + if RecRef.Number = Database::"Purchase Header" then + RecRef.Delete(true) + else + Error(this.CannotDeletePostedRecordErr); + end; + local procedure GetDocSendingProfileForCustVend(CustomerNo: Code[20]; VendorNo: Code[20]) DocumentSendingProfile: Record "Document Sending Profile"; var Customer: Record Customer; @@ -444,4 +459,5 @@ codeunit 6108 "E-Document Processing" EDocTelemetryCategoryLbl: Label 'E-Document', Locked = true; EDocTelemetryIdLbl: Label 'E-Doc %1', Locked = true; EDocTok: Label 'W1 E-Document', Locked = true; + CannotDeletePostedRecordErr: Label 'Cannot delete related record because it is already posted.'; } diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 99292f1b1a..2f8c63ca33 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -198,7 +198,9 @@ codeunit 6103 "E-Document Subscription" local procedure OnBeforeOnDeletePurchaseHeader(var PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean) begin if not IsNullGuid(PurchaseHeader."E-Document Link") then - Error(DeleteNotAllowedErr); + if GuiAllowed() then + if not Confirm(this.ConfirmDeleteQst) then + Error(''); end; local procedure RunEDocumentCheck(Record: Variant; EDocumentProcPhase: Enum "E-Document Processing Phase") @@ -309,4 +311,5 @@ codeunit 6103 "E-Document Subscription" EDocumentProcessingPhase: Enum "E-Document Processing Phase"; WrongAmountErr: Label 'Purchase Document cannot be released as Amount Incl. VAT: %1, is different from E-Document Amount Incl. VAT: %2', Comment = '%1 - Purchase document amount, %2 - E-document amount'; DeleteNotAllowedErr: Label 'Deletion of Purchase Header linked to E-Document is not allowed.'; + ConfirmDeleteQst: Label 'This purchase document is created from E-Document. Do you want to proceed with deletion?'; } From 508be12628b25b6451e9cbd925b2bbfc79257b19 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Thu, 16 Jan 2025 11:52:22 +0200 Subject: [PATCH 04/19] change status modifying, add automated tests --- .../app/src/Document/EDocument.Page.al | 5 +- .../EDocumentProcessing.Codeunit.al | 29 ++--- .../EDocumentSubscription.Codeunit.al | 12 ++ .../src/Processing/EDocE2ETest.Codeunit.al | 16 ++- .../src/Receive/EDocReceiveTest.Codeunit.al | 108 ++++++++++++++++++ 5 files changed, 146 insertions(+), 24 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al index 12c5afc6ed..9da09e740b 100644 --- a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al +++ b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al @@ -355,7 +355,7 @@ page 6121 "E-Document" trigger OnAction() begin if Confirm(StrSubstNo(this.ConfirmDeleteRelatedDocQst, this.RecordLinkTxt)) then - this.EDocumentHelper.DeleteRelatedRecords(Rec); + this.EDocumentHelper.DeleteRelatedRecord(Rec); end; } } @@ -505,11 +505,10 @@ page 6121 "E-Document" trigger OnAfterGetRecord() begin - RecordLinkTxt := EDocumentHelper.GetRecordLinkText(Rec); - IsProcessed := Rec.Status = Rec.Status::Processed; IsIncomingDoc := Rec.Direction = Rec.Direction::Incoming; + RecordLinkTxt := EDocumentHelper.GetRecordLinkText(Rec); HasErrorsOrWarnings := (EDocumentErrorHelper.ErrorMessageCount(Rec) + EDocumentErrorHelper.WarningMessageCount(Rec)) > 0; HasErrors := EDocumentErrorHelper.ErrorMessageCount(Rec) > 0; if HasErrorsOrWarnings then diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al index be7fcfe687..c94bb4c402 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al @@ -256,12 +256,7 @@ codeunit 6108 "E-Document Processing" VariantRecord: Variant; begin if GetRecord(EDocument, VariantRecord) and DataTypeManagement.GetRecordRef(VariantRecord, RecRef) then - exit(GetRelatedRecordCaption(EDocument, RecRef)) - else begin - EDocument.Status := EDocument.Status::"In Progress"; - EDocument.Modify(false); - exit(''); - end; + exit(GetRelatedRecordCaption(EDocument, RecRef)); end; procedure GetRecord(var EDocument: Record "E-Document"; var RelatedRecord: Variant): Boolean @@ -269,6 +264,17 @@ codeunit 6108 "E-Document Processing" exit(GetPostedRecord(EDocument, RelatedRecord)); end; + procedure DeleteRelatedRecord(EDocument: Record "E-Document") + var + RecRef: RecordRef; + begin + if this.GetRelatedRecord(EDocument, RecRef) then + if RecRef.Number = Database::"Purchase Header" then + RecRef.Delete(true) + else + Error(this.CannotDeletePostedRecordErr); + end; + procedure GetTelemetryDimensions(EDocService: Record "E-Document Service"; var EDocument: Record "E-Document"; var Dimensions: Dictionary of [Text, Text]) var EDocument2: Record "E-Document"; @@ -298,17 +304,6 @@ codeunit 6108 "E-Document Processing" exit(EDocTok); end; - procedure DeleteRelatedRecords(EDocument: Record "E-Document") - var - RecRef: RecordRef; - begin - if this.GetRelatedRecord(EDocument, RecRef) then - if RecRef.Number = Database::"Purchase Header" then - RecRef.Delete(true) - else - Error(this.CannotDeletePostedRecordErr); - end; - local procedure GetDocSendingProfileForCustVend(CustomerNo: Code[20]; VendorNo: Code[20]) DocumentSendingProfile: Record "Document Sending Profile"; var Customer: Record Customer; diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 2f8c63ca33..3002ec605f 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -203,6 +203,18 @@ codeunit 6103 "E-Document Subscription" Error(''); end; + [EventSubscriber(ObjectType::Table, Database::"Purchase Header", 'OnAfterDeleteEvent', '', false, false)] + local procedure OnAfterDeletePurchaseHeader(var Rec: Record "Purchase Header"; RunTrigger: Boolean) + var + EDocument: Record "E-Document"; + begin + if not IsNullGuid(Rec."E-Document Link") then begin + EDocument.GetBySystemId(Rec."E-Document Link"); + EDocument.Status := EDocument.Status::"In Progress"; + EDocument.Modify(false); + end; + end; + local procedure RunEDocumentCheck(Record: Variant; EDocumentProcPhase: Enum "E-Document Processing Phase") var EDocument: Record "E-Document"; diff --git a/Apps/W1/EDocument/test/src/Processing/EDocE2ETest.Codeunit.al b/Apps/W1/EDocument/test/src/Processing/EDocE2ETest.Codeunit.al index 5a156bd006..822c0728b1 100644 --- a/Apps/W1/EDocument/test/src/Processing/EDocE2ETest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Processing/EDocE2ETest.Codeunit.al @@ -1421,6 +1421,7 @@ codeunit 139624 "E-Doc E2E Test" end; [Test] + [HandlerFunctions('DeleteConfirmationHandler')] procedure DeleteLinkedPurchaseHeaderNoAllowedSuccess() var PurchaseHeader: Record "Purchase Header"; @@ -1436,9 +1437,8 @@ codeunit 139624 "E-Doc E2E Test" PurchaseHeader.Modify(); Commit(); - // [THEN] Fails to delete + // [THEN] Show confirmation message and throw error if cancelled asserterror PurchaseHeader.Delete(true); - Assert.ExpectedError(DeleteNotAllowedErr); // [GIVEN] Reset link PurchaseHeader."E-Document Link" := NullGuid; @@ -2226,6 +2226,7 @@ codeunit 139624 "E-Doc E2E Test" end; [Test] + [HandlerFunctions('DeleteConfirmationHandler')] internal procedure DeleteLinkedPurchaseHeaderNoAllowedSuccess26() var PurchaseHeader: Record "Purchase Header"; @@ -2241,9 +2242,8 @@ codeunit 139624 "E-Doc E2E Test" PurchaseHeader.Modify(); Commit(); - // [THEN] Fails to delete + // [THEN] Show confirmation message and throw error if cancelled asserterror PurchaseHeader.Delete(true); - Assert.ExpectedError(DeleteNotAllowedErr); // [GIVEN] Reset link PurchaseHeader."E-Document Link" := NullGuid; @@ -2256,4 +2256,12 @@ codeunit 139624 "E-Doc E2E Test" #endif #pragma warning restore AS0018 + [ConfirmHandler] + procedure DeleteConfirmationHandler(Message: Text[1024]; var Reply: Boolean) + var + ExpectedConfirmLbl: Label 'This purchase document is created from E-Document. Do you want to proceed with deletion?'; + begin + Assert.ExpectedConfirm(ExpectedConfirmLbl, Message); + Reply := false; + end; } diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index 98a2793f6b..0d9f163eb1 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1342,6 +1342,114 @@ codeunit 139628 "E-Doc. Receive Test" PurchaseHeader.Delete(true); end; + [Test] + [HandlerFunctions('ConfirmHandlerYes')] + procedure RecreateReceivedPurchaseInvoice() + var + EDocService: Record "E-Document Service"; + EDocServicePage: TestPage "E-Document Service"; + EDocumentPage: TestPage "E-Document"; + i: Integer; + begin + // [FEATURE] [E-Document] [Receive] + // [SCENARIO] Delete and recreate purchase invoice from E-Document page + Initialize(); + + // [GIVEN] e-Document service to receive one single purchase invoice + LibraryEDoc.CreateTestReceiveServiceForEDoc(EDocService, Enum::"Service Integration"::"Mock"); + BindSubscription(EDocImplState); + + EDocService."Lookup Account Mapping" := false; + EDocService."Lookup Item GTIN" := false; + EDocService."Lookup Item Reference" := false; + EDocService."Resolve Unit Of Measure" := false; + EDocService."Validate Line Discount" := false; + EDocService."Verify Totals" := false; + EDocService."Use Batch Processing" := false; + EDocService.Modify(); + + // [GIVEN] purchase invoice + LibraryPurchase.CreateVendorWithAddress(Vendor); + Vendor."Receive E-Document To" := Vendor."Receive E-Document To"::"Purchase Invoice"; + Vendor.Modify(); + LibraryPurchase.CreatePurchHeader(PurchaseHeader, PurchaseHeader."Document Type"::Invoice, Vendor."No."); + + for i := 1 to 3 do begin + LibraryPurchase.CreatePurchaseLine(PurchaseLine, PurchaseHeader, PurchaseLine.Type::Item, LibraryInventory.CreateItemNo(), LibraryRandom.RandInt(100)); + PurchaseLine.Validate("Direct Unit Cost", LibraryRandom.RandDecInRange(1, 100, 2)); + PurchaseLine.Modify(true); + end; + + PurchOrderTestBuffer.ClearTempVariables(); + PurchOrderTestBuffer.AddPurchaseDocToTemp(PurchaseHeader); + + // [WHEN] Running Receive + EDocServicePage.OpenView(); + EDocServicePage.Filter.SetFilter(Code, EDocService.Code); + EDocServicePage.Receive.Invoke(); + + // [THEN] Purchase invoice is created with corresponding values + EDocumentPage.OpenView(); + EDocumentPage.Last(); + + CreatedPurchaseHeader.Reset(); + CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); + CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); + CreatedPurchaseHeader.FindFirst(); + + CheckPurchaseHeadersAreEqual(PurchaseHeader, CreatedPurchaseHeader); + + CreatedPurchaseLine.SetRange("Document Type", CreatedPurchaseHeader."Document Type"); + CreatedPurchaseLine.SetRange("Document No.", CreatedPurchaseHeader."No."); + if CreatedPurchaseLine.FindSet() then + repeat + PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); + PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); + PurchaseLine.SetRange("Line No.", CreatedPurchaseLine."Line No."); + PurchaseLine.FindFirst(); + CheckPurchaseLinesAreEqual(PurchaseLine, CreatedPurchaseLine); + until CreatedPurchaseLine.Next() = 0; + + // [WHEN] Delete created purchase invoice from E-Document page + EDocumentPage.DeleteRelatedDocument.Invoke(); + + // [THEN] Check that purchase invoice is deleted + CreatedPurchaseHeader.Reset(); + CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); + CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); + Assert.RecordIsEmpty(CreatedPurchaseHeader); + + // [WHEN] Recreate purchase invoice + EDocumentPage.CreateDocument.Invoke(); + + // [THEN] Check that purchase invoice is created again with corresponding values + CreatedPurchaseHeader.Reset(); + CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); + CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); + CreatedPurchaseHeader.FindFirst(); + + CheckPurchaseHeadersAreEqual(PurchaseHeader, CreatedPurchaseHeader); + + CreatedPurchaseLine.SetRange("Document Type", CreatedPurchaseHeader."Document Type"); + CreatedPurchaseLine.SetRange("Document No.", CreatedPurchaseHeader."No."); + if CreatedPurchaseLine.FindSet() then + repeat + PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); + PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); + PurchaseLine.SetRange("Line No.", CreatedPurchaseLine."Line No."); + PurchaseLine.FindFirst(); + CheckPurchaseLinesAreEqual(PurchaseLine, CreatedPurchaseLine); + until CreatedPurchaseLine.Next() = 0; + + PurchaseHeader.SetHideValidationDialog(true); + PurchaseHeader."E-Document Link" := NullGuid; + PurchaseHeader.Delete(true); + + CreatedPurchaseHeader.SetHideValidationDialog(true); + CreatedPurchaseHeader."E-Document Link" := NullGuid; + CreatedPurchaseHeader.Delete(true); + end; + [ModalPageHandler] procedure SelectPOHandler(var POList: TestPage "Purchase Order List") var From 59a96630bc52de8730413db2e55f74d0b066e321 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Thu, 16 Jan 2025 14:13:40 +0200 Subject: [PATCH 05/19] refactor automated test --- .../src/Receive/EDocReceiveTest.Codeunit.al | 143 ++++++++++-------- 1 file changed, 76 insertions(+), 67 deletions(-) diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index 0d9f163eb1..9732ea8a82 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1349,7 +1349,6 @@ codeunit 139628 "E-Doc. Receive Test" EDocService: Record "E-Document Service"; EDocServicePage: TestPage "E-Document Service"; EDocumentPage: TestPage "E-Document"; - i: Integer; begin // [FEATURE] [E-Document] [Receive] // [SCENARIO] Delete and recreate purchase invoice from E-Document page @@ -1357,31 +1356,15 @@ codeunit 139628 "E-Doc. Receive Test" // [GIVEN] e-Document service to receive one single purchase invoice LibraryEDoc.CreateTestReceiveServiceForEDoc(EDocService, Enum::"Service Integration"::"Mock"); - BindSubscription(EDocImplState); + BindSubscription(this.EDocImplState); - EDocService."Lookup Account Mapping" := false; - EDocService."Lookup Item GTIN" := false; - EDocService."Lookup Item Reference" := false; - EDocService."Resolve Unit Of Measure" := false; - EDocService."Validate Line Discount" := false; - EDocService."Verify Totals" := false; - EDocService."Use Batch Processing" := false; - EDocService.Modify(); + SetupEDocService(EDocService); // [GIVEN] purchase invoice - LibraryPurchase.CreateVendorWithAddress(Vendor); - Vendor."Receive E-Document To" := Vendor."Receive E-Document To"::"Purchase Invoice"; - Vendor.Modify(); - LibraryPurchase.CreatePurchHeader(PurchaseHeader, PurchaseHeader."Document Type"::Invoice, Vendor."No."); - - for i := 1 to 3 do begin - LibraryPurchase.CreatePurchaseLine(PurchaseLine, PurchaseHeader, PurchaseLine.Type::Item, LibraryInventory.CreateItemNo(), LibraryRandom.RandInt(100)); - PurchaseLine.Validate("Direct Unit Cost", LibraryRandom.RandDecInRange(1, 100, 2)); - PurchaseLine.Modify(true); - end; + CreatePurchaseInvoiceWithLines(this.PurchaseHeader, this.PurchaseLine, this.Vendor); PurchOrderTestBuffer.ClearTempVariables(); - PurchOrderTestBuffer.AddPurchaseDocToTemp(PurchaseHeader); + PurchOrderTestBuffer.AddPurchaseDocToTemp(this.PurchaseHeader); // [WHEN] Running Receive EDocServicePage.OpenView(); @@ -1392,62 +1375,21 @@ codeunit 139628 "E-Doc. Receive Test" EDocumentPage.OpenView(); EDocumentPage.Last(); - CreatedPurchaseHeader.Reset(); - CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); - CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); - CreatedPurchaseHeader.FindFirst(); - - CheckPurchaseHeadersAreEqual(PurchaseHeader, CreatedPurchaseHeader); - - CreatedPurchaseLine.SetRange("Document Type", CreatedPurchaseHeader."Document Type"); - CreatedPurchaseLine.SetRange("Document No.", CreatedPurchaseHeader."No."); - if CreatedPurchaseLine.FindSet() then - repeat - PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); - PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); - PurchaseLine.SetRange("Line No.", CreatedPurchaseLine."Line No."); - PurchaseLine.FindFirst(); - CheckPurchaseLinesAreEqual(PurchaseLine, CreatedPurchaseLine); - until CreatedPurchaseLine.Next() = 0; + CheckPurchaseInvoiceCreatedWithCorrectValues(this.PurchaseHeader, this.CreatedPurchaseHeader, this.PurchaseLine, this.CreatedPurchaseLine, EDocumentPage."Document No.".Value); // [WHEN] Delete created purchase invoice from E-Document page EDocumentPage.DeleteRelatedDocument.Invoke(); // [THEN] Check that purchase invoice is deleted - CreatedPurchaseHeader.Reset(); - CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); - CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); - Assert.RecordIsEmpty(CreatedPurchaseHeader); + CheckPurchaseInvoiceDeleted(this.CreatedPurchaseHeader, EDocumentPage."Document No.".Value); // [WHEN] Recreate purchase invoice EDocumentPage.CreateDocument.Invoke(); // [THEN] Check that purchase invoice is created again with corresponding values - CreatedPurchaseHeader.Reset(); - CreatedPurchaseHeader.SetRange("Document Type", CreatedPurchaseHeader."Document Type"::Invoice); - CreatedPurchaseHeader.SetRange("No.", EDocumentPage."Document No.".Value); - CreatedPurchaseHeader.FindFirst(); - - CheckPurchaseHeadersAreEqual(PurchaseHeader, CreatedPurchaseHeader); - - CreatedPurchaseLine.SetRange("Document Type", CreatedPurchaseHeader."Document Type"); - CreatedPurchaseLine.SetRange("Document No.", CreatedPurchaseHeader."No."); - if CreatedPurchaseLine.FindSet() then - repeat - PurchaseLine.SetRange("Document Type", PurchaseHeader."Document Type"); - PurchaseLine.SetRange("Document No.", PurchaseHeader."No."); - PurchaseLine.SetRange("Line No.", CreatedPurchaseLine."Line No."); - PurchaseLine.FindFirst(); - CheckPurchaseLinesAreEqual(PurchaseLine, CreatedPurchaseLine); - until CreatedPurchaseLine.Next() = 0; + CheckPurchaseInvoiceCreatedWithCorrectValues(this.PurchaseHeader, this.CreatedPurchaseHeader, this.PurchaseLine, this.CreatedPurchaseLine, EDocumentPage."Document No.".Value); - PurchaseHeader.SetHideValidationDialog(true); - PurchaseHeader."E-Document Link" := NullGuid; - PurchaseHeader.Delete(true); - - CreatedPurchaseHeader.SetHideValidationDialog(true); - CreatedPurchaseHeader."E-Document Link" := NullGuid; - CreatedPurchaseHeader.Delete(true); + DeletePurchaseHeaders(this.PurchaseHeader, this.CreatedPurchaseHeader); end; [ModalPageHandler] @@ -1507,6 +1449,34 @@ codeunit 139628 "E-Doc. Receive Test" EDocument.DeleteAll(); end; + local procedure SetupEDocService(var EDocumentService: Record "E-Document Service") + begin + EDocumentService."Lookup Account Mapping" := false; + EDocumentService."Lookup Item GTIN" := false; + EDocumentService."Lookup Item Reference" := false; + EDocumentService."Resolve Unit Of Measure" := false; + EDocumentService."Validate Line Discount" := false; + EDocumentService."Verify Totals" := false; + EDocumentService."Use Batch Processing" := false; + EDocumentService.Modify(false); + end; + + local procedure CreatePurchaseInvoiceWithLines(var PurchHeader: Record "Purchase Header"; var PurchLine: Record "Purchase Line"; var Vendor: Record Vendor) + var + i: Integer; + begin + this.LibraryPurchase.CreateVendorWithAddress(Vendor); + Vendor."Receive E-Document To" := Vendor."Receive E-Document To"::"Purchase Invoice"; + Vendor.Modify(); + this.LibraryPurchase.CreatePurchHeader(PurchHeader, PurchHeader."Document Type"::Invoice, Vendor."No."); + + for i := 1 to 3 do begin + this.LibraryPurchase.CreatePurchaseLine(PurchLine, PurchHeader, PurchLine.Type::Item, this.LibraryInventory.CreateItemNo(), this.LibraryRandom.RandInt(100)); + PurchLine.Validate("Direct Unit Cost", this.LibraryRandom.RandDecInRange(1, 100, 2)); + PurchLine.Modify(true); + end; + end; + local procedure CheckPurchaseHeadersAreEqual(var PurchHeader1: Record "Purchase Header"; var PurchHeader2: Record "Purchase Header") begin Assert.AreEqual(PurchHeader1."Pay-to Vendor No.", PurchHeader2."Pay-to Vendor No.", ''); @@ -1545,6 +1515,46 @@ codeunit 139628 "E-Doc. Receive Test" Assert.AreEqual(PurchHeader."Amount Including VAT", Abs(GenJnlLine.Amount), ''); end; + local procedure CheckPurchaseInvoiceCreatedWithCorrectValues(PurchHeader: Record "Purchase Header"; var CreatedPurchHeader: Record "Purchase Header"; PurchLine: Record "Purchase Line"; CreatedPurchLine: Record "Purchase Line"; DocumentNo: Code[20]) + begin + CreatedPurchHeader.Reset(); + CreatedPurchHeader.SetRange("Document Type", CreatedPurchHeader."Document Type"::Invoice); + CreatedPurchHeader.SetRange("No.", DocumentNo); + CreatedPurchHeader.FindFirst(); + + CheckPurchaseHeadersAreEqual(PurchHeader, CreatedPurchHeader); + + CreatedPurchLine.SetRange("Document Type", CreatedPurchHeader."Document Type"); + CreatedPurchLine.SetRange("Document No.", CreatedPurchHeader."No."); + if CreatedPurchLine.FindSet() then + repeat + PurchLine.SetRange("Document Type", PurchHeader."Document Type"); + PurchLine.SetRange("Document No.", PurchHeader."No."); + PurchLine.SetRange("Line No.", CreatedPurchLine."Line No."); + PurchLine.FindFirst(); + CheckPurchaseLinesAreEqual(PurchLine, CreatedPurchLine); + until CreatedPurchLine.Next() = 0; + end; + + local procedure CheckPurchaseInvoiceDeleted(var CreatedPurchHeader: Record "Purchase Header"; DocumentNo: Code[20]) + begin + CreatedPurchHeader.Reset(); + CreatedPurchHeader.SetRange("Document Type", CreatedPurchHeader."Document Type"::Invoice); + CreatedPurchHeader.SetRange("No.", DocumentNo); + Assert.RecordIsEmpty(CreatedPurchHeader); + end; + + local procedure DeletePurchaseHeaders(var PurchHeader: Record "Purchase Header"; var CreatedPurchHeader: Record "Purchase Header") + begin + PurchHeader.SetHideValidationDialog(true); + PurchHeader."E-Document Link" := NullGuid; + PurchHeader.Delete(true); + + CreatedPurchHeader.SetHideValidationDialog(true); + CreatedPurchHeader."E-Document Link" := NullGuid; + CreatedPurchHeader.Delete(true); + end; + [EventSubscriber(ObjectType::Codeunit, Codeunit::"E-Document Create Purch. Doc.", 'OnBeforeProcessHeaderFieldsAssignment', '', false, false)] local procedure OnBeforeProcessHeaderFieldsAssignment(var DocumentHeader: RecordRef; var PurchaseField: Record Field); begin @@ -2873,5 +2883,4 @@ codeunit 139628 "E-Doc. Receive Test" #endif #pragma warning restore AS0018 - } \ No newline at end of file From 4648160997fc0f695d1a3619d1353ca24d680ae9 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Fri, 17 Jan 2025 10:59:21 +0200 Subject: [PATCH 06/19] clear document no after deletion --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 2 +- .../EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 3002ec605f..73f056381e 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -211,6 +211,7 @@ codeunit 6103 "E-Document Subscription" if not IsNullGuid(Rec."E-Document Link") then begin EDocument.GetBySystemId(Rec."E-Document Link"); EDocument.Status := EDocument.Status::"In Progress"; + EDocument."Document No." := ''; EDocument.Modify(false); end; end; @@ -322,6 +323,5 @@ codeunit 6103 "E-Document Subscription" EDocumentHelper: Codeunit "E-Document Helper"; EDocumentProcessingPhase: Enum "E-Document Processing Phase"; WrongAmountErr: Label 'Purchase Document cannot be released as Amount Incl. VAT: %1, is different from E-Document Amount Incl. VAT: %2', Comment = '%1 - Purchase document amount, %2 - E-document amount'; - DeleteNotAllowedErr: Label 'Deletion of Purchase Header linked to E-Document is not allowed.'; ConfirmDeleteQst: Label 'This purchase document is created from E-Document. Do you want to proceed with deletion?'; } diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index 9732ea8a82..fff794db45 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1349,6 +1349,7 @@ codeunit 139628 "E-Doc. Receive Test" EDocService: Record "E-Document Service"; EDocServicePage: TestPage "E-Document Service"; EDocumentPage: TestPage "E-Document"; + CreatedInvoiceNo: Text[20]; begin // [FEATURE] [E-Document] [Receive] // [SCENARIO] Delete and recreate purchase invoice from E-Document page @@ -1374,14 +1375,16 @@ codeunit 139628 "E-Doc. Receive Test" // [THEN] Purchase invoice is created with corresponding values EDocumentPage.OpenView(); EDocumentPage.Last(); + CreatedInvoiceNo := EDocumentPage."Document No.".Value; - CheckPurchaseInvoiceCreatedWithCorrectValues(this.PurchaseHeader, this.CreatedPurchaseHeader, this.PurchaseLine, this.CreatedPurchaseLine, EDocumentPage."Document No.".Value); + CheckPurchaseInvoiceCreatedWithCorrectValues(this.PurchaseHeader, this.CreatedPurchaseHeader, this.PurchaseLine, this.CreatedPurchaseLine, CreatedInvoiceNo); // [WHEN] Delete created purchase invoice from E-Document page EDocumentPage.DeleteRelatedDocument.Invoke(); // [THEN] Check that purchase invoice is deleted - CheckPurchaseInvoiceDeleted(this.CreatedPurchaseHeader, EDocumentPage."Document No.".Value); + this.Assert.AreEqual('', EDocumentPage."Document No.".Value, ''); + CheckPurchaseInvoiceDeleted(this.CreatedPurchaseHeader, CreatedInvoiceNo); // [WHEN] Recreate purchase invoice EDocumentPage.CreateDocument.Invoke(); From 1687dcd49e5e607c2b05f1070831c53c0e44967c Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 20 Jan 2025 10:56:11 +0200 Subject: [PATCH 07/19] insert log after deleting document --- .../app/src/Document/EDocumentServiceStatus.Enum.al | 1 + .../app/src/Processing/EDocumentSubscription.Codeunit.al | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Document/EDocumentServiceStatus.Enum.al b/Apps/W1/EDocument/app/src/Document/EDocumentServiceStatus.Enum.al index a48e18a1e2..0b05125e35 100644 --- a/Apps/W1/EDocument/app/src/Document/EDocumentServiceStatus.Enum.al +++ b/Apps/W1/EDocument/app/src/Document/EDocumentServiceStatus.Enum.al @@ -29,4 +29,5 @@ enum 6106 "E-Document Service Status" value(18; "Pending") { Caption = 'Pending Document Link'; } value(19; "Approval Error") { Caption = 'Approval error'; } value(20; "Ready For Processing") { Caption = 'Ready for processing'; } + value(21; "Imported Document Deleted") { Caption = 'Imported document deleted'; } } diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 73f056381e..11cc785cb9 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -207,12 +207,17 @@ codeunit 6103 "E-Document Subscription" local procedure OnAfterDeletePurchaseHeader(var Rec: Record "Purchase Header"; RunTrigger: Boolean) var EDocument: Record "E-Document"; + EDocumentLog: Codeunit "E-Document Log"; + EDocumentProcessing: Codeunit "E-Document Processing"; + EDocServiceStatus: Enum "E-Document Service Status"; begin if not IsNullGuid(Rec."E-Document Link") then begin EDocument.GetBySystemId(Rec."E-Document Link"); - EDocument.Status := EDocument.Status::"In Progress"; EDocument."Document No." := ''; - EDocument.Modify(false); + EDocServiceStatus := Enum::"E-Document Service Status"::"Imported Document Deleted"; + EDocumentLog.InsertLog(EDocument, EDocumentLog.GetLastServiceFromLog(EDocument), EDocServiceStatus); + EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentLog.GetLastServiceFromLog(EDocument), EDocServiceStatus); + EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatus); end; end; From 5b89c532cdd3d2f90fe624a84fe3412750d7fa6c Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 20 Jan 2025 10:59:13 +0200 Subject: [PATCH 08/19] fix --- .../test/src/Receive/EDocReceiveTest.Codeunit.al | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index fff794db45..325334d5c5 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1468,10 +1468,10 @@ codeunit 139628 "E-Doc. Receive Test" var i: Integer; begin - this.LibraryPurchase.CreateVendorWithAddress(Vendor); - Vendor."Receive E-Document To" := Vendor."Receive E-Document To"::"Purchase Invoice"; - Vendor.Modify(); - this.LibraryPurchase.CreatePurchHeader(PurchHeader, PurchHeader."Document Type"::Invoice, Vendor."No."); + this.LibraryPurchase.CreateVendorWithAddress(this.Vendor); + this.Vendor."Receive E-Document To" := this.Vendor."Receive E-Document To"::"Purchase Invoice"; + this.Vendor.Modify(); + this.LibraryPurchase.CreatePurchHeader(PurchHeader, PurchHeader."Document Type"::Invoice, this.Vendor."No."); for i := 1 to 3 do begin this.LibraryPurchase.CreatePurchaseLine(PurchLine, PurchHeader, PurchLine.Type::Item, this.LibraryInventory.CreateItemNo(), this.LibraryRandom.RandInt(100)); From 60bb62b5d959cf031c6fe91745272230bddcb84d Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 20 Jan 2025 11:01:49 +0200 Subject: [PATCH 09/19] fix --- .../EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al | 1 + 1 file changed, 1 insertion(+) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al index c94bb4c402..d3201eab8b 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al @@ -257,6 +257,7 @@ codeunit 6108 "E-Document Processing" begin if GetRecord(EDocument, VariantRecord) and DataTypeManagement.GetRecordRef(VariantRecord, RecRef) then exit(GetRelatedRecordCaption(EDocument, RecRef)); + exit(''); end; procedure GetRecord(var EDocument: Record "E-Document"; var RelatedRecord: Variant): Boolean From a19432d4c1604aa5d934f17522d683e27cdbf82b Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 20 Jan 2025 14:33:09 +0200 Subject: [PATCH 10/19] refactor status modification --- .../Processing/EDocumentSubscription.Codeunit.al | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 11cc785cb9..edaeab61dc 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -207,17 +207,21 @@ codeunit 6103 "E-Document Subscription" local procedure OnAfterDeletePurchaseHeader(var Rec: Record "Purchase Header"; RunTrigger: Boolean) var EDocument: Record "E-Document"; + EDocumentService: Record "E-Document Service"; EDocumentLog: Codeunit "E-Document Log"; EDocumentProcessing: Codeunit "E-Document Processing"; - EDocServiceStatus: Enum "E-Document Service Status"; + EDocServiceStatusDeleted: Enum "E-Document Service Status"; begin if not IsNullGuid(Rec."E-Document Link") then begin EDocument.GetBySystemId(Rec."E-Document Link"); + + EDocServiceStatusDeleted := Enum::"E-Document Service Status"::"Imported Document Deleted"; + EDocumentService := EDocumentLog.GetLastServiceFromLog(EDocument); + + EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); + EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocument."Document No." := ''; - EDocServiceStatus := Enum::"E-Document Service Status"::"Imported Document Deleted"; - EDocumentLog.InsertLog(EDocument, EDocumentLog.GetLastServiceFromLog(EDocument), EDocServiceStatus); - EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentLog.GetLastServiceFromLog(EDocument), EDocServiceStatus); - EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatus); + EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); end; end; From 629fe290cd89ea5d528d05eaefc8ce3a9f04f922 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Tue, 21 Jan 2025 17:12:02 +0200 Subject: [PATCH 11/19] fixes --- .../EDocumentProcessing.Codeunit.al | 4 +++ .../EDocumentSubscription.Codeunit.al | 19 +++++++------- .../src/Receive/EDocReceiveTest.Codeunit.al | 26 ++++++++++--------- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al index d3201eab8b..ef7011ca1c 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentProcessing.Codeunit.al @@ -265,6 +265,10 @@ codeunit 6108 "E-Document Processing" exit(GetPostedRecord(EDocument, RelatedRecord)); end; + /// + /// Deletes related record if it is not posted. + /// + /// E-Document record procedure DeleteRelatedRecord(EDocument: Record "E-Document") var RecRef: RecordRef; diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index edaeab61dc..b5d806fb14 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -212,17 +212,18 @@ codeunit 6103 "E-Document Subscription" EDocumentProcessing: Codeunit "E-Document Processing"; EDocServiceStatusDeleted: Enum "E-Document Service Status"; begin - if not IsNullGuid(Rec."E-Document Link") then begin - EDocument.GetBySystemId(Rec."E-Document Link"); + if IsNullGuid(Rec."E-Document Link") then + exit; - EDocServiceStatusDeleted := Enum::"E-Document Service Status"::"Imported Document Deleted"; - EDocumentService := EDocumentLog.GetLastServiceFromLog(EDocument); + EDocument.GetBySystemId(Rec."E-Document Link"); - EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); - EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); - EDocument."Document No." := ''; - EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); - end; + EDocServiceStatusDeleted := Enum::"E-Document Service Status"::"Imported Document Deleted"; + EDocumentService := EDocumentLog.GetLastServiceFromLog(EDocument); + + EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); + EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); + EDocument."Document No." := ''; + EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); end; local procedure RunEDocumentCheck(Record: Variant; EDocumentProcPhase: Enum "E-Document Processing Phase") diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index 325334d5c5..2b14652456 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1359,9 +1359,9 @@ codeunit 139628 "E-Doc. Receive Test" LibraryEDoc.CreateTestReceiveServiceForEDoc(EDocService, Enum::"Service Integration"::"Mock"); BindSubscription(this.EDocImplState); - SetupEDocService(EDocService); + SetDefaultEDocServiceValues(EDocService); - // [GIVEN] purchase invoice + // [GIVEN] Purchase invoice CreatePurchaseInvoiceWithLines(this.PurchaseHeader, this.PurchaseLine, this.Vendor); PurchOrderTestBuffer.ClearTempVariables(); @@ -1452,16 +1452,18 @@ codeunit 139628 "E-Doc. Receive Test" EDocument.DeleteAll(); end; - local procedure SetupEDocService(var EDocumentService: Record "E-Document Service") + local procedure SetDefaultEDocServiceValues(var EDocService: Record "E-Document Service") begin - EDocumentService."Lookup Account Mapping" := false; - EDocumentService."Lookup Item GTIN" := false; - EDocumentService."Lookup Item Reference" := false; - EDocumentService."Resolve Unit Of Measure" := false; - EDocumentService."Validate Line Discount" := false; - EDocumentService."Verify Totals" := false; - EDocumentService."Use Batch Processing" := false; - EDocumentService.Modify(false); + EDocService."Document Format" := "E-Document Format"::"PEPPOL BIS 3.0"; + EDocService."Lookup Account Mapping" := false; + EDocService."Lookup Item GTIN" := false; + EDocService."Lookup Item Reference" := false; + EDocService."Resolve Unit Of Measure" := false; + EDocService."Validate Line Discount" := false; + EDocService."Verify Totals" := false; + EDocService."Use Batch Processing" := false; + EDocService."Validate Receiving Company" := false; + EDocService.Modify(false); end; local procedure CreatePurchaseInvoiceWithLines(var PurchHeader: Record "Purchase Header"; var PurchLine: Record "Purchase Line"; var Vendor: Record Vendor) @@ -1470,7 +1472,7 @@ codeunit 139628 "E-Doc. Receive Test" begin this.LibraryPurchase.CreateVendorWithAddress(this.Vendor); this.Vendor."Receive E-Document To" := this.Vendor."Receive E-Document To"::"Purchase Invoice"; - this.Vendor.Modify(); + this.Vendor.Modify(false); this.LibraryPurchase.CreatePurchHeader(PurchHeader, PurchHeader."Document Type"::Invoice, this.Vendor."No."); for i := 1 to 3 do begin From 08f04ded8dba099ce2976f4a234e04dec857a974 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Wed, 22 Jan 2025 11:22:48 +0200 Subject: [PATCH 12/19] clear order no when order is deleted --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index b5d806fb14..5c55c1908a 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -223,6 +223,8 @@ codeunit 6103 "E-Document Subscription" EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocument."Document No." := ''; + if Rec."Document Type" = Rec."Document Type"::Order then + EDocument."Order No." := ''; EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); end; From d8293d2cbe3fa898d21e158f85e723d1a8f7d06b Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Fri, 24 Jan 2025 16:25:24 +0200 Subject: [PATCH 13/19] fix service status after posting purchase document --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 5c55c1908a..3af73cdb1c 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -297,6 +297,7 @@ codeunit 6103 "E-Document Subscription" EDocService: Record "E-Document Service"; EDocumentLog: Codeunit "E-Document Log"; EDocLogHelper: Codeunit "E-Document Log Helper"; + EDocumentProcessing: Codeunit "E-Document Processing"; PostedSourceDocumentHeader: RecordRef; begin PostedSourceDocumentHeader.GetTable(PostedRecord); @@ -308,6 +309,7 @@ codeunit 6103 "E-Document Subscription" EDocService := EDocumentLog.GetLastServiceFromLog(EDocument); EDocLogHelper.InsertLog(EDocument, EDocService, Enum::"E-Document Service Status"::"Imported Document Created"); + EDocumentProcessing.ModifyServiceStatus(EDocument, EDocService, Enum::"E-Document Service Status"::"Imported Document Created"); end; local procedure CreateEDocumentFromPosedDocument(PostedRecord: Variant) From 0d1cc5f0fdabe25239ea242c6855d96c5e4473b1 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 3 Feb 2025 13:29:10 +0200 Subject: [PATCH 14/19] use clear procedure --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 3af73cdb1c..226569df69 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -222,9 +222,9 @@ codeunit 6103 "E-Document Subscription" EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); - EDocument."Document No." := ''; + Clear(EDocument."Document No."); if Rec."Document Type" = Rec."Document Type"::Order then - EDocument."Order No." := ''; + Clear(EDocument."Order No."); EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); end; From 4008028af4f305285345949805afed6bd6298588 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 3 Feb 2025 16:15:52 +0200 Subject: [PATCH 15/19] test fix --- Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al | 1 - 1 file changed, 1 deletion(-) diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index 2b14652456..04ad557d7c 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1454,7 +1454,6 @@ codeunit 139628 "E-Doc. Receive Test" local procedure SetDefaultEDocServiceValues(var EDocService: Record "E-Document Service") begin - EDocService."Document Format" := "E-Document Format"::"PEPPOL BIS 3.0"; EDocService."Lookup Account Mapping" := false; EDocService."Lookup Item GTIN" := false; EDocService."Lookup Item Reference" := false; From 5c52ac83ea00c2640dd3a392b0be05b3fb0648b5 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Tue, 11 Feb 2025 13:02:42 +0200 Subject: [PATCH 16/19] clear document record id after deleting purchase document --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 1 + 1 file changed, 1 insertion(+) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 226569df69..99141b14d4 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -223,6 +223,7 @@ codeunit 6103 "E-Document Subscription" EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); Clear(EDocument."Document No."); + Clear(EDocument."Document Record ID"); if Rec."Document Type" = Rec."Document Type"::Order then Clear(EDocument."Order No."); EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); From 4bb541c1d806857f2bca31e5f261bed86a5c8868 Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Tue, 11 Feb 2025 13:21:56 +0200 Subject: [PATCH 17/19] restructure afterdelete event --- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index 99141b14d4..b3c47be076 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -220,12 +220,13 @@ codeunit 6103 "E-Document Subscription" EDocServiceStatusDeleted := Enum::"E-Document Service Status"::"Imported Document Deleted"; EDocumentService := EDocumentLog.GetLastServiceFromLog(EDocument); - EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); - EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); Clear(EDocument."Document No."); Clear(EDocument."Document Record ID"); if Rec."Document Type" = Rec."Document Type"::Order then Clear(EDocument."Order No."); + + EDocumentLog.InsertLog(EDocument, EDocumentService, EDocServiceStatusDeleted); + EDocumentProcessing.ModifyServiceStatus(EDocument, EDocumentService, EDocServiceStatusDeleted); EDocumentProcessing.ModifyEDocumentStatus(EDocument, EDocServiceStatusDeleted); end; From 705b1a041a1ac80dc97d02f0523b44baa6c96d1e Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Fri, 14 Feb 2025 15:00:42 +0200 Subject: [PATCH 18/19] fixes --- Apps/W1/EDocument/app/src/Document/EDocument.Page.al | 2 -- .../app/src/Processing/EDocumentSubscription.Codeunit.al | 5 +++-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al index 4a919f6ff0..388c63c964 100644 --- a/Apps/W1/EDocument/app/src/Document/EDocument.Page.al +++ b/Apps/W1/EDocument/app/src/Document/EDocument.Page.al @@ -475,8 +475,6 @@ page 6121 "E-Document" actionref(Cancel_promoteed; Cancel) { } actionref(Approval_promoteed; GetApproval) { } actionref(Preview_promoteed; ViewFile) { } - actionref(DeleteRelatedDocument_Promoted; DeleteRelatedDocument) { } - } group(Category_Troubleshoot) { diff --git a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al index b3c47be076..e96a2bef90 100644 --- a/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al +++ b/Apps/W1/EDocument/app/src/Processing/EDocumentSubscription.Codeunit.al @@ -215,7 +215,8 @@ codeunit 6103 "E-Document Subscription" if IsNullGuid(Rec."E-Document Link") then exit; - EDocument.GetBySystemId(Rec."E-Document Link"); + if not EDocument.GetBySystemId(Rec."E-Document Link") then + exit; EDocServiceStatusDeleted := Enum::"E-Document Service Status"::"Imported Document Deleted"; EDocumentService := EDocumentLog.GetLastServiceFromLog(EDocument); @@ -339,5 +340,5 @@ codeunit 6103 "E-Document Subscription" EDocumentHelper: Codeunit "E-Document Helper"; EDocumentProcessingPhase: Enum "E-Document Processing Phase"; WrongAmountErr: Label 'Purchase Document cannot be released as Amount Incl. VAT: %1, is different from E-Document Amount Incl. VAT: %2', Comment = '%1 - Purchase document amount, %2 - E-document amount'; - ConfirmDeleteQst: Label 'This purchase document is created from E-Document. Do you want to proceed with deletion?'; + ConfirmDeleteQst: Label 'This purchase document is created from an E-Document. Do you want to proceed with deletion?'; } From 4a54f57d98fb9a41659c7e08d2a7bbc0f845c1fb Mon Sep 17 00:00:00 2001 From: Adele Smiciene Date: Mon, 17 Feb 2025 18:06:18 +0200 Subject: [PATCH 19/19] fix automated test --- Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al | 1 + 1 file changed, 1 insertion(+) diff --git a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al index f3b86feb3e..1431c62293 100644 --- a/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al +++ b/Apps/W1/EDocument/test/src/Receive/EDocReceiveTest.Codeunit.al @@ -1460,6 +1460,7 @@ codeunit 139628 "E-Doc. Receive Test" EDocService."Verify Totals" := false; EDocService."Use Batch Processing" := false; EDocService."Validate Receiving Company" := false; + EDocService."Create Journal Lines" := false; EDocService.Modify(false); end;