Skip to content
Open
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 @@ -216,14 +216,7 @@ pageextension 99001503 "Subc. Prod. Order Rtng." extends "Prod. Order Routing"
PurchaseLine.SetRange("Operation No.", Rec."Operation No.");
if PurchaseLine.IsEmpty() then
Message(NoPurchOrderCreatedMsg, ProdOrderRoutingLine."Prod. Order No.")
end else begin
if NoOfCreatedPurchOrder = 1 then begin
SubcPurchaseOrderCreator.ClearOperationNoForCreatedPurchaseOrder();
SubcPurchaseOrderCreator.SetOperationNoForCreatedPurchaseOrder(Rec."Operation No.");
SubcPurchaseOrderCreator.ClearRoutingReferenceNoForCreatedPurchaseOrder();
SubcPurchaseOrderCreator.SetRoutingReferenceNoForCreatedPurchaseOrder(Rec."Routing Reference No.");
end;
end else
SubcPurchaseOrderCreator.ShowCreatedPurchaseOrder(Rec."Prod. Order No.", NoOfCreatedPurchOrder);
end;
end;
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ codeunit 99001557 "Subc. Purchase Order Creator"
{
var
ManufacturingSetup: Record "Manufacturing Setup";
CreatedPurchaseHeader: Record "Purchase Header";
PageManagement: Codeunit "Page Management";
UnitofMeasureManagement: Codeunit "Unit of Measure Management";
#if not CLEAN29
Expand All @@ -34,8 +35,6 @@ codeunit 99001557 "Subc. Purchase Order Creator"
#pragma warning restore AL0432
#endif
HasManufacturingSetup: Boolean;
OperationNo: Code[10];
RoutingReferenceNo: Integer;
PurchOrderCreatedSingularTxt: Label 'A purchase order was created.\\Do you want to view it?';
PurchOrderCreatedPluralTxt: Label '%1 purchase orders were created.\\Do you want to view them?', Comment = '%1 = number of purchase orders created';
PurchOrderAlreadyCreatedQst: Label 'Purchase orders have already been created.\\Do you want to view them?';
Expand Down Expand Up @@ -192,11 +191,10 @@ codeunit 99001557 "Subc. Purchase Order Creator"

procedure ShowCreatedPurchaseOrder(ProdOrderNo: Code[20]; NoOfCreatedPurchOrder: Integer)
var
PurchaseHeader: Record "Purchase Header";
PurchaseLine: Record "Purchase Line";
InstructionMgt: Codeunit "Instruction Mgt.";
SubcNotificationMgmt: Codeunit "Subc. Notification Mgmt.";
IsHandled: Boolean;
NoOfMarkedPurchaseOrders: Integer;
begin
#if not CLEAN29
#pragma warning disable AL0432
Expand All @@ -208,29 +206,24 @@ codeunit 99001557 "Subc. Purchase Order Creator"
if IsHandled then
exit;

if NoOfCreatedPurchOrder = 0 then
CreatedPurchaseHeader.MarkedOnly(true);
NoOfMarkedPurchaseOrders := CreatedPurchaseHeader.Count();
if NoOfMarkedPurchaseOrders = 0 then begin
CreatedPurchaseHeader.MarkedOnly(false);
exit;
end;

if InstructionMgt.IsEnabled(SubcNotificationMgmt.GetShowCreatedSubContPurchOrderCode()) then
if InstructionMgt.ShowConfirm(GetPurchOrderCreatedMessage(NoOfCreatedPurchOrder), SubcNotificationMgmt.GetShowCreatedSubContPurchOrderCode()) and
if InstructionMgt.ShowConfirm(GetPurchOrderCreatedMessage(NoOfMarkedPurchaseOrders), SubcNotificationMgmt.GetShowCreatedSubContPurchOrderCode()) and
GuiAllowed()
then begin
PurchaseLine.SetCurrentKey("Document Type", Type, "Prod. Order No.");
PurchaseLine.SetRange("Document Type", "Purchase Document Type"::Order);
PurchaseLine.SetRange(Type, "Purchase Line Type"::Item);
PurchaseLine.SetRange("Prod. Order No.", ProdOrderNo);
if NoOfCreatedPurchOrder > 1 then
PageManagement.PageRun(PurchaseLine)
else begin
PurchaseLine.SetLoadFields(SystemId);
if (NoOfCreatedPurchOrder = 1) and (OperationNo <> '') then
PurchaseLine.SetRange("Operation No.", OperationNo);
if (NoOfCreatedPurchOrder = 1) and (RoutingReferenceNo <> 0) then
PurchaseLine.SetRange("Routing Reference No.", RoutingReferenceNo);
PurchaseLine.FindFirst();
PurchaseHeader.Get(PurchaseLine."Document Type", PurchaseLine."Document No.");
PageManagement.PageRun(PurchaseHeader);
end;
end;
then
if NoOfMarkedPurchaseOrders > 1 then
Page.Run(Page::"Purchase Order List", CreatedPurchaseHeader)
else
if CreatedPurchaseHeader.FindFirst() then
PageManagement.PageRun(CreatedPurchaseHeader);

CreatedPurchaseHeader.MarkedOnly(false);
end;

local procedure GetPurchOrderCreatedMessage(NoOfCreatedPurchOrder: Integer): Text
Expand All @@ -240,26 +233,6 @@ codeunit 99001557 "Subc. Purchase Order Creator"
exit(PurchOrderCreatedSingularTxt);
end;

internal procedure SetOperationNoForCreatedPurchaseOrder(OperationNoToSet: Code[10])
begin
OperationNo := OperationNoToSet;
end;

internal procedure ClearOperationNoForCreatedPurchaseOrder()
begin
Clear(OperationNo);
end;

internal procedure SetRoutingReferenceNoForCreatedPurchaseOrder(RoutingReferenceNoToSet: Integer)
begin
RoutingReferenceNo := RoutingReferenceNoToSet;
end;

internal procedure ClearRoutingReferenceNoForCreatedPurchaseOrder()
begin
Clear(RoutingReferenceNo);
end;

local procedure CheckProdOrderRtngLine(ProdOrderRoutingLine: Record "Prod. Order Routing Line"; var ProdOrderLine: Record "Prod. Order Line"): Boolean
var
WorkCenter: Record "Work Center";
Expand Down Expand Up @@ -324,6 +297,9 @@ codeunit 99001557 "Subc. Purchase Order Creator"
var
NoOfCreatedPurchOrder: Integer;
begin
CreatedPurchaseHeader.Reset();
CreatedPurchaseHeader.MarkedOnly(false);
CreatedPurchaseHeader.ClearMarks();
ProdOrderRoutingLine.SetRange(Type, "Capacity Type"::"Work Center");
ShowExistingPurchaseOrdersForRoutingLines(ProdOrderRoutingLine);
if ProdOrderRoutingLine.FindSet() then
Expand Down Expand Up @@ -371,6 +347,7 @@ codeunit 99001557 "Subc. Purchase Order Creator"
var
RequisitionLine: Record "Requisition Line";
CarryOutActionMsgReq: Report "Carry Out Action Msg. - Req.";
ExistingPurchaseOrderNos: List of [Code[20]];
begin
ProdOrderLine.CalcFields("Total Exp. Oper. Output (Qty.)");

Expand All @@ -383,15 +360,72 @@ codeunit 99001557 "Subc. Purchase Order Creator"
InsertReqWkshLine(ProdOrderRoutingLine, ProdOrderLine, ManufacturingSetup."Subcontracting Template Name", ManufacturingSetup."Subcontracting Batch Name", QtyToPurch);

if RequisitionLine.FindFirst() then begin
CollectExistingSubcPurchaseOrderNos(ProdOrderLine, ProdOrderRoutingLine, ExistingPurchaseOrderNos);
CarryOutActionMsgReq.UseRequestPage(false);
CarryOutActionMsgReq.SetReqWkshLine(RequisitionLine);
CarryOutActionMsgReq.SetHideDialog(true);
CarryOutActionMsgReq.RunModal();
Clear(CarryOutActionMsgReq);
NoOfCreatedPurchOrder += 1;
MarkNewlyCreatedSubcPurchaseOrder(ProdOrderLine, ProdOrderRoutingLine, ExistingPurchaseOrderNos);
end;
end;

local procedure CollectExistingSubcPurchaseOrderNos(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line"; var ExistingPurchaseOrderNos: List of [Code[20]])
var
PurchaseLine: Record "Purchase Line";
begin
FilterSubcPurchaseLineForRoutingLine(PurchaseLine, ProdOrderLine, ProdOrderRoutingLine);
if PurchaseLine.FindSet() then
repeat
if not ExistingPurchaseOrderNos.Contains(PurchaseLine."Document No.") then
ExistingPurchaseOrderNos.Add(PurchaseLine."Document No.");
until PurchaseLine.Next() = 0;
end;

local procedure MarkNewlyCreatedSubcPurchaseOrder(ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line"; ExistingPurchaseOrderNos: List of [Code[20]])
var
PurchaseLine: Record "Purchase Line";
NewPurchaseOrderMarked: Boolean;
begin
FilterSubcPurchaseLineForRoutingLine(PurchaseLine, ProdOrderLine, ProdOrderRoutingLine);
if PurchaseLine.FindSet() then
repeat
if not ExistingPurchaseOrderNos.Contains(PurchaseLine."Document No.") then
if CreatedPurchaseHeader.Get("Purchase Document Type"::Order, PurchaseLine."Document No.") then begin
CreatedPurchaseHeader.Mark(true);
NewPurchaseOrderMarked := true;
end;
until PurchaseLine.Next() = 0;

if NewPurchaseOrderMarked then
exit;

// Carry Out updated an existing open purchase order instead of creating a new one;
// mark it so the confirmation prompt can still open the affected order.
if PurchaseLine.FindSet() then
repeat
if CreatedPurchaseHeader.Get("Purchase Document Type"::Order, PurchaseLine."Document No.") then
CreatedPurchaseHeader.Mark(true);
until PurchaseLine.Next() = 0;
end;

local procedure FilterSubcPurchaseLineForRoutingLine(var PurchaseLine: Record "Purchase Line"; ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line")
begin
PurchaseLine.Reset();
PurchaseLine.SetCurrentKey("Prod. Order No.", "Prod. Order Line No.", "Routing No.", "Operation No.");
PurchaseLine.SetRange("Document Type", "Purchase Document Type"::Order);
PurchaseLine.SetRange(Type, "Purchase Line Type"::Item);
PurchaseLine.SetRange("Prod. Order No.", ProdOrderLine."Prod. Order No.");
PurchaseLine.SetRange("Prod. Order Line No.", ProdOrderLine."Line No.");
PurchaseLine.SetRange("Routing No.", ProdOrderRoutingLine."Routing No.");
PurchaseLine.SetRange("Routing Reference No.", ProdOrderRoutingLine."Routing Reference No.");
PurchaseLine.SetRange("Operation No.", ProdOrderRoutingLine."Operation No.");
PurchaseLine.SetRange("Planning Flexibility", "Reservation Planning Flexibility"::Unlimited);
PurchaseLine.SetRange("Quantity Received", 0);
PurchaseLine.SetLoadFields("Document No.");
end;

local procedure FilterReqLineWithProdOrderAndRtngLine(var RequisitionLine: Record "Requisition Line"; ProdOrderLine: Record "Prod. Order Line"; ProdOrderRoutingLine: Record "Prod. Order Routing Line")
begin
RequisitionLine.SetRange("Prod. Order No.", ProdOrderLine."Prod. Order No.");
Expand Down
Loading