diff --git a/src/Layers/ES/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/ES/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index 142fb1cc037..3b390f02ba9 100644 --- a/src/Layers/ES/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/ES/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -442,6 +442,9 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -595,6 +598,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1972,6 +1978,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5713,6 +5722,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/IT/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/IT/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index 49168407a38..a6a2edaf062 100644 --- a/src/Layers/IT/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/IT/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -438,6 +438,9 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -591,6 +594,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1978,6 +1984,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5717,6 +5726,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/NA/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/NA/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index c1030a8b7d5..b58dfbd40d1 100644 --- a/src/Layers/NA/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/NA/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -449,6 +449,9 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -603,6 +606,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1987,6 +1993,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5729,6 +5738,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/NL/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/NL/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index 7b0f52588eb..b6403067ac4 100644 --- a/src/Layers/NL/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/NL/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -438,6 +438,9 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -591,6 +594,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1965,6 +1971,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5703,6 +5712,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/RU/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/RU/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index 28db6ba8219..41b2d1c1554 100644 --- a/src/Layers/RU/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/RU/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -440,6 +440,9 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -593,6 +596,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1968,6 +1974,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5720,6 +5729,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/W1/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al b/src/Layers/W1/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al index a74096314f5..4a58be6222f 100644 --- a/src/Layers/W1/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al +++ b/src/Layers/W1/BaseApp/Utilities/CopyDocumentMgt.Codeunit.al @@ -438,6 +438,10 @@ codeunit 6620 "Copy Document Mgt." FromDocType.AsInteger(), FromDocNo, ToSalesHeader, FromDocOccurrenceNo, FromDocVersionNo, IncludeHeader, RecalculateLines, MoveNegLines); end; + + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLine(FromSalesHeader: Record "Sales Header"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var AssemblyHeader: Record "Assembly Header"; @@ -591,6 +595,9 @@ codeunit 6620 "Copy Document Mgt." CopySalesReturnRcptLinesToDoc(ToSalesHeader, FromReturnRcptLine, LinesNotCopied, MissingExCostRevLink); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure CopySalesDocSalesLineArchive(FromSalesHeaderArchive: Record "Sales Header Archive"; var ToSalesHeader: Record "Sales Header"; var LinesNotCopied: Integer; NextLineNo: Integer) var ToSalesLine: Record "Sales Line"; @@ -1965,6 +1972,9 @@ codeunit 6620 "Copy Document Mgt." OnAfterRecalculateSalesLine(ToSalesHeader, ToSalesLine, FromSalesHeader, FromSalesLine, CopyThisLine); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] procedure HandleAsmAttachedToSalesLine(var ToSalesLine: Record "Sales Line") var AssemblyItem: Record Item; @@ -5703,6 +5713,9 @@ codeunit 6620 "Copy Document Mgt." exit(QtyNotShipped); end; + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Header", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assembly Line", 'RIM', InherentPermissionsScope::Both)] + [InherentPermissions(PermissionObjectType::TableData, Database::"Assemble-to-Order Link", 'RIM', InherentPermissionsScope::Both)] local procedure CopyAsmOrderToAsmOrder(var TempFromAsmHeader: Record "Assembly Header" temporary; var TempFromAsmLine: Record "Assembly Line" temporary; ToSalesLine: Record "Sales Line"; ToAsmHeaderDocType: Option; ToAsmHeaderDocNo: Code[20]; InclAsmHeader: Boolean) var FromAsmHeader: Record "Assembly Header"; diff --git a/src/Layers/W1/Tests/SCM/SCMCopyDocumentMgt.Codeunit.al b/src/Layers/W1/Tests/SCM/SCMCopyDocumentMgt.Codeunit.al index b071ed726db..8de07805bbe 100644 --- a/src/Layers/W1/Tests/SCM/SCMCopyDocumentMgt.Codeunit.al +++ b/src/Layers/W1/Tests/SCM/SCMCopyDocumentMgt.Codeunit.al @@ -27,6 +27,7 @@ codeunit 137212 "SCM Copy Document Mgt." LibrarySetupStorage: Codeunit "Library - Setup Storage"; LibraryRandom: Codeunit "Library - Random"; LibraryWarehouse: Codeunit "Library - Warehouse"; + LibraryE2EPlanPermissions: Codeunit "Library - E2E Plan Permissions"; IsInitialized: Boolean; MsgCorrectedInvoiceNo: Label 'have a Corrected Invoice No. Do you want to continue?'; WrongDimensionsCopiedErr: Label 'Wrong dimensions in copied document'; @@ -1726,6 +1727,69 @@ codeunit 137212 "SCM Copy Document Mgt." ReturnSalesLine.TestField(Quantity, TotalQty); end; + [Test] + [HandlerFunctions('MessageHandler')] + [Scope('OnPrem')] + procedure CopySalesQuoteWithATOAsTeamMember() + var + Item: Record Item; + AssemblyItem: Record Item; + FromSalesHeader: Record "Sales Header"; + FromSalesLine: Record "Sales Line"; + ToSalesHeader: Record "Sales Header"; + ToSalesLine: Record "Sales Line"; + AssemblyHeader: Record "Assembly Header"; + LibraryLowerPermissions: Codeunit "Library - Lower Permissions"; + Qty: Decimal; + begin + // [FEATURE] [Assemble-to-Order] [Copy Document] [Permissions] + // [SCENARIO] AB#630947: A user restricted to the D365 Team Member permission set can copy a sales quote whose + // line has an assemble-to-order link, and the copy reproduces the ATO link on the target line. + Initialize(); + + // [GIVEN] Assemble-to-order item with a resource component (resource-only BOM avoids the + // component availability engine that would read Prod. Order tables outside the fix under test) + LibraryInventory.CreateItem(Item); + Item.Validate("Replenishment System", Item."Replenishment System"::Assembly); + Item.Validate("Assembly Policy", Item."Assembly Policy"::"Assemble-to-Order"); + Item.Modify(true); + LibraryAssembly.CreateAssemblyList( + AssemblyItem."Costing Method"::Standard, Item."No.", true, 0, 1, 0, LibraryRandom.RandInt(5), '', ''); + + // [GIVEN] Source sales quote with the ATO item; validating the item auto-creates the ATO link + Qty := LibraryRandom.RandIntInRange(2, 10); + LibrarySales.CreateSalesDocumentWithItem( + FromSalesHeader, FromSalesLine, FromSalesHeader."Document Type"::Quote, LibrarySales.CreateCustomerNo(), + Item."No.", Qty, '', WorkDate()); + + // [GIVEN] Empty target sales quote created while the user still has full permissions + CreateEmptySalesHeader(ToSalesHeader, ToSalesHeader."Document Type"::Quote); + Commit(); + + // [GIVEN] User is now restricted to the D365 Team Member plan (regression harness for AB#630947) + LibraryE2EPlanPermissions.SetTeamMemberPlan(); + + // [WHEN] Copy Document is executed for the source quote into the target quote + CopyDocumentMgt.SetProperties(true, false, false, false, true, false, false); + CopyDocumentMgt.CopySalesDoc("Sales Document Type From"::Quote, FromSalesHeader."No.", ToSalesHeader); + + // [THEN] The copied line exists on the target quote with the same quantity and Qty. to Assemble to Order... + LibraryLowerPermissions.SetO365Full(); + ToSalesLine.SetRange("Document Type", ToSalesHeader."Document Type"); + ToSalesLine.SetRange("Document No.", ToSalesHeader."No."); + ToSalesLine.SetRange(Type, ToSalesLine.Type::Item); + ToSalesLine.SetRange("No.", Item."No."); + Assert.RecordCount(ToSalesLine, 1); + ToSalesLine.FindFirst(); + ToSalesLine.TestField(Quantity, Qty); + ToSalesLine.TestField("Qty. to Assemble to Order", Qty); + + // [THEN] ...and an Assembly Header is linked to the copied sales line + Assert.IsTrue( + ToSalesLine.AsmToOrderExists(AssemblyHeader), + 'Assemble-to-Order link should exist for the copied sales line.'); + end; + local procedure Initialize() var LibraryERMCountryData: Codeunit "Library - ERM Country Data";