diff --git a/src/Apps/W1/EDocument/App/src/Processing/Import/Purchase/EDocumentPurchaseDraft.Page.al b/src/Apps/W1/EDocument/App/src/Processing/Import/Purchase/EDocumentPurchaseDraft.Page.al index e1234e674b..0d99ba8b25 100644 --- a/src/Apps/W1/EDocument/App/src/Processing/Import/Purchase/EDocumentPurchaseDraft.Page.al +++ b/src/Apps/W1/EDocument/App/src/Processing/Import/Purchase/EDocumentPurchaseDraft.Page.al @@ -272,7 +272,7 @@ page 6181 "E-Document Purchase Draft" } part(ErrorMessagesFactBox; "Error Messages Part") { - Visible = false; + Visible = HasErrorsOrWarnings; ShowFilter = false; UpdatePropagation = Both; } @@ -524,7 +524,7 @@ page 6181 "E-Document Purchase Draft" SetPageCaption(); Rec.CalcFields("Import Processing Status"); - ShowFinalizeDraftAction := Rec."Import Processing Status" = Enum::"Import E-Doc. Proc. Status"::"Draft Ready"; + ShowFinalizeDraftAction := Rec."Import Processing Status" in [Enum::"Import E-Doc. Proc. Status"::"Ready for draft", Enum::"Import E-Doc. Proc. Status"::"Draft Ready"]; ShowAnalyzeDocumentAction := (Rec."Import Processing Status" = Enum::"Import E-Document Steps"::"Structure received data") and (Rec.Status = Enum::"E-Document Status"::Error); diff --git a/src/Apps/W1/EDocument/Test/src/Processing/EDocProcessTest.Codeunit.al b/src/Apps/W1/EDocument/Test/src/Processing/EDocProcessTest.Codeunit.al index 25d665dc35..ae7ca0130a 100644 --- a/src/Apps/W1/EDocument/Test/src/Processing/EDocProcessTest.Codeunit.al +++ b/src/Apps/W1/EDocument/Test/src/Processing/EDocProcessTest.Codeunit.al @@ -332,6 +332,60 @@ codeunit 139883 "E-Doc Process Test" Assert.RecordIsEmpty(PurchaseHeader); end; + [Test] + procedure FinishDraftFromReadyForDraftStateSucceeds() + var + EDocument: Record "E-Document"; + EDocImportParameters: Record "E-Doc. Import Parameters"; + PurchaseHeader: Record "Purchase Header"; + EDocLogRecord: Record "E-Document Log"; + EDocumentPurchaseHeader: Record "E-Document Purchase Header"; + EDocumentPurchaseLine: Record "E-Document Purchase Line"; + EDocImport: Codeunit "E-Doc. Import"; + EDocumentLog: Codeunit "E-Document Log"; + EDocumentProcessing: Codeunit "E-Document Processing"; + begin + // [SCENARIO] When finalize action is invoked from Ready for draft state, the system should automatically run Prepare draft first and then Finish draft + Initialize(Enum::"Service Integration"::"Mock"); + LibraryEDoc.CreateInboundEDocument(EDocument, EDocumentService); + EDocument."Document Type" := "E-Document Type"::"Purchase Invoice"; + EDocument.Modify(); + EDocumentService."Import Process" := "E-Document Import Process"::"Version 2.0"; + EDocumentService.Modify(); + + EDocumentPurchaseHeader."E-Document Entry No." := EDocument."Entry No"; + EDocumentPurchaseHeader."Vendor VAT Id" := Vendor."VAT Registration No."; + EDocumentPurchaseHeader.Insert(); + EDocumentPurchaseLine."E-Document Entry No." := EDocument."Entry No"; + EDocumentPurchaseLine."Product Code" := '1234'; + EDocumentPurchaseLine.Description := 'Test description'; + EDocumentPurchaseLine.Insert(); + + EDocumentLog.SetBlob('Test', Enum::"E-Doc. File Format"::XML, 'Data'); + 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(); + + // [GIVEN] E-Document is in Ready for draft state + EDocumentProcessing.ModifyEDocumentProcessingStatus(EDocument, "Import E-Doc. Proc. Status"::"Ready for draft"); + EDocument.CalcFields("Import Processing Status"); + Assert.AreEqual(Enum::"Import E-Doc. Proc. Status"::"Ready for draft", EDocument."Import Processing Status", 'The status should be Ready for draft before processing.'); + + // [WHEN] Finish draft step is executed (simulating finalize action) + EDocImportParameters."Step to Run" := "Import E-Document Steps"::"Finish draft"; + EDocImportParameters."Processing Customizations" := "E-Doc. Proc. Customizations"::"Mock Create Purchase Invoice"; + EDocImport.ProcessIncomingEDocument(EDocument, EDocImportParameters); + + // [THEN] The document is processed (the system ran Prepare draft automatically and then Finish draft) + EDocument.CalcFields("Import Processing Status"); + Assert.AreEqual(Enum::"Import E-Doc. Proc. Status"::Processed, EDocument."Import Processing Status", 'The status should be Processed after finalize action from Ready for draft state.'); + + PurchaseHeader.SetRange("E-Document Link", EDocument.SystemId); + Assert.IsTrue(PurchaseHeader.FindFirst(), 'The purchase header should be created.'); + end; + #region HistoricalMatchingTest [Test]