Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,7 @@ tableextension 99001509 "Subc. Purchase Header" extends "Purchase Header"
{
CalcFormula = exist("Purchase Line" where("Document Type" = const(Order),
"Document No." = field("No."),
"Prod. Order No." = filter(<> ''),
"Prod. Order Line No." = filter(<> 0)));
"Subc. Purchase Line Type" = filter(<> None)));
Caption = 'Subcontracting Order';
Editable = false;
FieldClass = FlowField;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -499,6 +499,9 @@ codeunit 139981 "Subc. Location Handler Test"
PurchaseLine."Routing No." := ProdOrderRtngLine."Routing No.";
PurchaseLine."Operation No." := ProdOrderRtngLine."Operation No.";
PurchaseLine."Routing Reference No." := ProdOrderRtngLine."Routing Reference No.";
// Mirror SetSubcontractingLineType() since fields are assigned directly (no Validate trigger).
// The single routing line created here is the last operation, so the type is LastOperation.
PurchaseLine."Subc. Purchase Line Type" := PurchaseLine."Subc. Purchase Line Type"::LastOperation;
PurchaseLine.Modify();
end;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -707,6 +707,84 @@ codeunit 139991 "Subc. Purch. Subcont. Test"
Assert.RecordIsEmpty(PurchaseLine);
end;

[Test]
[HandlerFunctions('DoConfirmCreateProdOrderForSubcontractingProcess')]
procedure SubcOrderFlowFieldIsTrueAfterCreatingSubcontractingPurchaseOrder()
var
FinishedItem: Record Item;
Location: Record Location;
ProdOrderRtngLine: Record "Prod. Order Routing Line";
ProductionBOMHeader: Record "Production BOM Header";
ProductionOrder: Record "Production Order";
PurchaseHeader: Record "Purchase Header";
PurchaseLine: Record "Purchase Line";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
Vendor: Record Vendor;
WorkCenter: Record "Work Center";
ReleasedProdOrderRtng: TestPage "Prod. Order Routing";
begin
// [SCENARIO 640115] After creating a subcontracting purchase order from a Prod. Order Routing Line,
// the "Subc. Order" FlowField on the Purchase Header must evaluate to true so the order is visible
// in the "Subcontracting Orders" view of the Purchase Order List.

Initialize();

// [GIVEN] A subcontracting work center with vendor and location
CreateAndCalculateNeededWorkCenter(WorkCenter, true);
Vendor.Get(WorkCenter."Subcontractor No.");
LibraryWarehouse.CreateLocationWithInventoryPostingSetup(Location);
Vendor."Subc. Location Code" := Location.Code;
Vendor.Modify();

// [GIVEN] A routing with a single subcontracting operation
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
LibraryManufacturing.CreateRoutingLineSetup(
RoutingLine, RoutingHeader, WorkCenter."No.", '100',
LibraryRandom.RandInt(5), LibraryRandom.RandInt(5));
RoutingHeader.Validate(Status, RoutingHeader.Status::Certified);
RoutingHeader.Modify(true);

// [GIVEN] A finished good item with the routing
LibraryManufacturing.CreateItemManufacturing(
FinishedItem, "Costing Method"::FIFO, LibraryRandom.RandInt(10),
"Reordering Policy"::"Lot-for-Lot", "Flushing Method"::"Pick + Manual",
RoutingHeader."No.", '');
LibraryManufacturing.CreateProductionBOMHeader(ProductionBOMHeader, FinishedItem."Base Unit of Measure");
ProductionBOMHeader.Validate(Status, ProductionBOMHeader.Status::Certified);
ProductionBOMHeader.Modify(true);
FinishedItem.Validate("Production BOM No.", ProductionBOMHeader."No.");
FinishedITem.Validate("Routing No.", RoutingHeader."No.");
FinishedItem.Modify(true);
Comment thread
ChethanT marked this conversation as resolved.

// [GIVEN] A released production order
SubcWarehouseLibrary.CreateAndRefreshProductionOrder(
ProductionOrder, "Production Order Status"::Released,
ProductionOrder."Source Type"::Item, FinishedItem."No.", LibraryRandom.RandInt(10), Location.Code);

// [GIVEN] Requisition worksheet template for subcontracting
LibraryMfgManagement.CreateSubcontractingReqWkshTemplateAndNameAndUpdateSetup();

// [WHEN] Create subcontracting purchase order from Prod. Order Routing
ProdOrderRtngLine.SetRange(Status, "Production Order Status"::Released);
ProdOrderRtngLine.SetRange("Prod. Order No.", ProductionOrder."No.");
ProdOrderRtngLine.SetRange(Type, ProdOrderRtngLine.Type::"Work Center");
ProdOrderRtngLine.SetRange("Work Center No.", WorkCenter."No.");
ProdOrderRtngLine.FindFirst();
ReleasedProdOrderRtng.OpenView();
ReleasedProdOrderRtng.GoToRecord(ProdOrderRtngLine);
ReleasedProdOrderRtng.CreateSubcontracting.Invoke();

PurchaseLine.SetRange("Document Type", PurchaseLine."Document Type"::Order);
PurchaseLine.SetRange("Prod. Order No.", ProductionOrder."No.");
PurchaseLine.FindFirst();

// [THEN] A purchase order was created and the "Subc. Order" FlowField is true
PurchaseHeader.Get(PurchaseLine."Document Type", PurchaseLine."Document No.");
PurchaseHeader.CalcFields("Subc. Order");
Assert.IsTrue(PurchaseHeader."Subc. Order",
'The Subc. Order FlowField must be true for a subcontracting purchase order');
end;
[ModalPageHandler]
procedure ItemTrackingLinesSimpleHandler(var ItemTrackingLines: TestPage "Item Tracking Lines")
begin
Expand Down
Loading