Skip to content
Original file line number Diff line number Diff line change
Expand Up @@ -195,7 +195,7 @@ pageextension 99001503 "Subc. Prod. Order Rtng." extends "Prod. Order Routing"
local procedure UpdateWIPEnabled()
begin
Rec.Calcfields(Subcontracting);
TransferWIPItemEnabled := Rec.Subcontracting;
TransferWIPItemEnabled := Rec.Subcontracting and (Rec.Type = Rec.Type::"Work Center");
end;

internal procedure CreateSubcontractingOrders(var ProdOrderRoutingLine: Record "Prod. Order Routing Line")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ tableextension 99001506 "Subc. ProdOrderRtngLine Ext." extends "Prod. Order Rout
if "Transfer WIP Item" then begin
CalcFields(Subcontracting);
TestField(Subcontracting, true);
TestField(Type, Type::"Work Center");
end;
end;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@ tableextension 99001560 "Subc. Routing Line" extends "Routing Line"
if "Transfer WIP Item" then begin
CalcFields(Subcontracting);
TestField(Subcontracting, true);
TestField(Type, Type::"Work Center");
Comment thread
ChethanT marked this conversation as resolved.
Comment thread
ChethanT marked this conversation as resolved.
end;
end;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ pageextension 99001508 "Subc. Routing Lines" extends "Routing Lines"
local procedure UpdateWIPEnabled()
begin
Rec.Calcfields(Subcontracting);
TransferWIPItemEnabled := Rec.Subcontracting;
TransferWIPItemEnabled := Rec.Subcontracting and (Rec.Type = Rec.Type::"Work Center");
end;

procedure ShowRelatedSubcontractorPrices()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -106,7 +106,7 @@ pageextension 99001509 "Subc. Routing Version Lines" extends "Routing Version Li
local procedure UpdateWIPEnabled()
begin
Rec.Calcfields(Subcontracting);
TransferWIPItemEnabled := Rec.Subcontracting;
TransferWIPItemEnabled := Rec.Subcontracting and (Rec.Type = Rec.Type::"Work Center");
end;

procedure ShowRelatedSubcontractorPrices()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ pageextension 99001524 "Subc. PO Subform" extends "Purchase Order Subform"
{
ApplicationArea = Subcontracting;
Visible = false;
Editable = false;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@ codeunit 139984 "Subc. Library Mfg. Management"
MachineCenterNo := MachineCenter."No.";
end;

procedure CreateRoutingLineForMachineCenter(var RoutingLine: Record "Routing Line"; RoutingHeader: Record "Routing Header"; MachineCenterNo: Code[20])
Comment thread
SPinkow marked this conversation as resolved.
Comment thread
SPinkow marked this conversation as resolved.
begin
RoutingLine.Type := RoutingLine.Type::"Machine Center";
CreateRoutingLine(RoutingLine, RoutingHeader, MachineCenterNo);
end;

procedure CreateRouting(var RoutingNo: Code[20]; MachineCenterNo: Code[20]; MachineCenterNo2: Code[20]; WorkCenterNo: Code[20]; WorkCenterNo2: Code[20])
var
RoutingHeader: Record "Routing Header";
Expand All @@ -143,7 +149,7 @@ codeunit 139984 "Subc. Library Mfg. Management"
RoutingNo := RoutingHeader."No.";
end;

local procedure CreateRoutingLine(var RoutingLine: Record "Routing Line"; RoutingHeader: Record "Routing Header"; CenterNo: Code[20])
procedure CreateRoutingLine(var RoutingLine: Record "Routing Line"; RoutingHeader: Record "Routing Header"; CenterNo: Code[20])
var
CapacityUnitOfMeasure: Record "Capacity Unit of Measure";
OperationNo: Code[10];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,11 +80,11 @@ codeunit 139990 "Subc. Subcontracting UI Test"
procedure SubcontractingSetupWizardShowsCompanyDefaultsAndConfigurationLinks()
var
ManufacturingSetup: Record "Manufacturing Setup";
SubcCompTransferLeadTime: DateFormula;
SubcontractingSetupWizard: TestPage "Subcontracting Setup Wizard";
ComponentDirectUnitCost: Option Standard,"Prod. Order Component";
CreateProdOrderInfoLine: Boolean;
SubcDefaultCompLocation: Enum "Components at Location";
SubcCompTransferLeadTime: DateFormula;
SubcontractingBatchName: Code[10];
SubcontractingTemplateName: Code[10];
begin
Expand Down Expand Up @@ -1014,6 +1014,228 @@ codeunit 139990 "Subc. Subcontracting UI Test"
ItemLedgerEntry.Delete();
end;

[Test]
procedure RoutingLinesTransferWIPItemDisabledForMachineCenterLine()
var
WorkCenter: Record "Work Center";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
RoutingLines: TestPage "Routing Lines";
MachineCenterNo: Code[20];
begin
// [SCENARIO] Transfer WIP Item field is disabled on Routing Lines page for a Machine Center routing line,
// even when the parent Work Center has a Subcontractor No.
Initialize();

// [GIVEN] A Work Center with a Subcontractor No.
LibraryMfgManagement.CreateWorkCenterWithCalendar(WorkCenter, 0);
WorkCenter.Validate("Subcontractor No.", LibraryMfgManagement.CreateSubcontractorWithCurrency(''));
WorkCenter.Modify(true);

// [GIVEN] A Machine Center belonging to that Work Center
LibraryMfgManagement.CreateMachineCenter(MachineCenterNo, WorkCenter."No.", 0);

// [GIVEN] A Routing with a Machine Center routing line
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
LibraryMfgManagement.CreateRoutingLineForMachineCenter(RoutingLine, RoutingHeader, MachineCenterNo);

// [WHEN] The Routing Lines page is opened for that line
RoutingLines.OpenEdit();
RoutingLines.GoToRecord(RoutingLine);

// [THEN] Transfer WIP Item is not enabled (Machine Center type is not eligible for Transfer WIP Item)
Assert.IsFalse(RoutingLines."Transfer WIP Item".Enabled(), RoutingLineTransferWIPEnabledErr);
RoutingLines.Close();
end;

[Test]
procedure RoutingLinesTransferWIPItemEnabledForSubcontractingWorkCenterLine()
var
WorkCenter: Record "Work Center";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
RoutingLines: TestPage "Routing Lines";
begin
// [SCENARIO] Transfer WIP Item field is enabled on Routing Lines page for a Work Center routing line
// when the Work Center has a Subcontractor No.
Initialize();

// [GIVEN] A Work Center with a Subcontractor No.
LibraryMfgManagement.CreateWorkCenterWithCalendar(WorkCenter, 0);
WorkCenter.Validate("Subcontractor No.", LibraryMfgManagement.CreateSubcontractorWithCurrency(''));
WorkCenter.Modify(true);

// [GIVEN] A Routing with a Work Center routing line
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
LibraryMfgManagement.CreateRoutingLine(RoutingLine, RoutingHeader, WorkCenter."No.");

// [WHEN] The Routing Lines page is opened for that line
RoutingLines.OpenEdit();
RoutingLines.GoToRecord(RoutingLine);

// [THEN] Transfer WIP Item is enabled (subcontracting Work Center type)
Assert.IsTrue(RoutingLines."Transfer WIP Item".Enabled(), RoutingLineTransferWIPNotEnabledErr);
RoutingLines.Close();
end;

[Test]
procedure RoutingVersionLinesTransferWIPItemDisabledForMachineCenterLine()
var
WorkCenter: Record "Work Center";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
RoutingVersionLines: TestPage "Routing Version Lines";
MachineCenterNo: Code[20];
VersionCode: Code[20];
begin
// [SCENARIO] Transfer WIP Item field is disabled on Routing Version Lines page for a Machine Center
// routing line, even when the parent Work Center has a Subcontractor No.
Initialize();

// [GIVEN] A Work Center with a Subcontractor No.
LibraryMfgManagement.CreateWorkCenterWithCalendar(WorkCenter, 0);
WorkCenter.Validate("Subcontractor No.", LibraryMfgManagement.CreateSubcontractorWithCurrency(''));
WorkCenter.Modify(true);

// [GIVEN] A Machine Center belonging to that Work Center
LibraryMfgManagement.CreateMachineCenter(MachineCenterNo, WorkCenter."No.", 0);

// [GIVEN] A Routing Version with a Machine Center routing line
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
VersionCode := '1';
CreateRoutingVersionAndMachineCenterLine(RoutingHeader."No.", VersionCode, MachineCenterNo, RoutingLine);

// [WHEN] The Routing Version Lines page is opened for that line
RoutingVersionLines.OpenEdit();
RoutingVersionLines.Filter.SetFilter("Routing No.", RoutingHeader."No.");
RoutingVersionLines.Filter.SetFilter("Version Code", VersionCode);
RoutingVersionLines.GoToRecord(RoutingLine);

// [THEN] Transfer WIP Item is not enabled (Machine Center type is not eligible for Transfer WIP Item)
Assert.IsFalse(RoutingVersionLines."Transfer WIP Item".Enabled(), RoutingLineTransferWIPEnabledErr);
RoutingVersionLines.Close();
end;

[Test]
procedure RoutingVersionLinesTransferWIPItemEnabledForSubcontractingWorkCenterLine()
var
WorkCenter: Record "Work Center";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
RoutingVersionLines: TestPage "Routing Version Lines";
VersionCode: Code[20];
begin
// [SCENARIO] Transfer WIP Item field is enabled on Routing Version Lines page for a Work Center routing line
// when the Work Center has a Subcontractor No.
Initialize();

// [GIVEN] A Work Center with a Subcontractor No.
LibraryMfgManagement.CreateWorkCenterWithCalendar(WorkCenter, 0);
WorkCenter.Validate("Subcontractor No.", LibraryMfgManagement.CreateSubcontractorWithCurrency(''));
WorkCenter.Modify(true);

// [GIVEN] A Routing Version with a Work Center routing line
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
VersionCode := '1';
CreateRoutingVersionAndWorkCenterLine(RoutingHeader."No.", VersionCode, WorkCenter."No.", RoutingLine);

// [WHEN] The Routing Version Lines page is opened for that line
RoutingVersionLines.OpenEdit();
RoutingVersionLines.Filter.SetFilter("Routing No.", RoutingHeader."No.");
RoutingVersionLines.Filter.SetFilter("Version Code", VersionCode);
RoutingVersionLines.GoToRecord(RoutingLine);

// [THEN] Transfer WIP Item is enabled (subcontracting Work Center type)
Assert.IsTrue(RoutingVersionLines."Transfer WIP Item".Enabled(), RoutingLineTransferWIPNotEnabledErr);
RoutingVersionLines.Close();
end;

[Test]
procedure RoutingLineTransferWIPItemValidationFailsForMachineCenterType()
var
WorkCenter: Record "Work Center";
RoutingHeader: Record "Routing Header";
RoutingLine: Record "Routing Line";
MachineCenterNo: Code[20];
begin
// [SCENARIO] Validating Transfer WIP Item = true on a Machine Center routing line fails
// with an error because the Type must be Work Center.
Initialize();

// [GIVEN] A Work Center with a Subcontractor No.
LibraryMfgManagement.CreateWorkCenterWithCalendar(WorkCenter, 0);
WorkCenter.Validate("Subcontractor No.", LibraryMfgManagement.CreateSubcontractorWithCurrency(''));
WorkCenter.Modify(true);

// [GIVEN] A Machine Center belonging to that Work Center
LibraryMfgManagement.CreateMachineCenter(MachineCenterNo, WorkCenter."No.", 0);

// [GIVEN] A Routing with a Machine Center routing line
LibraryManufacturing.CreateRoutingHeader(RoutingHeader, RoutingHeader.Type::Serial);
LibraryMfgManagement.CreateRoutingLineForMachineCenter(RoutingLine, RoutingHeader, MachineCenterNo);

// [WHEN] Transfer WIP Item is set to true on the Machine Center routing line
// [THEN] An error is raised because the line type must be Work Center
asserterror RoutingLine.Validate("Transfer WIP Item", true);
Assert.ExpectedTestFieldError(RoutingLine.FieldCaption(Type), Format(RoutingLine.Type::"Work Center"));
end;

local procedure CreateRoutingVersionAndWorkCenterLine(RoutingNo: Code[20]; VersionCode: Code[20]; WorkCenterNo: Code[20]; var RoutingLine: Record "Routing Line")
Comment thread
SPinkow marked this conversation as resolved.
var
RoutingVersion: Record "Routing Version";
CapacityUoM: Record "Capacity Unit of Measure";
begin
RoutingVersion.Init();
RoutingVersion.Validate("Routing No.", RoutingNo);
RoutingVersion."Version Code" := VersionCode;
RoutingVersion.Insert(true);

#pragma warning disable AA0210
CapacityUoM.SetRange(Type, CapacityUoM.Type::Minutes);
#pragma warning restore AA0210
CapacityUoM.FindFirst();

RoutingLine.Init();
RoutingLine.Validate("Routing No.", RoutingNo);
RoutingLine.Validate("Version Code", VersionCode);
RoutingLine.Validate("Operation No.", '10');
RoutingLine.Validate(Type, RoutingLine.Type::"Work Center");
RoutingLine.Validate("No.", WorkCenterNo);
RoutingLine.Validate("Setup Time", 1);
RoutingLine.Validate("Run Time", 1);
RoutingLine.Validate("Run Time Unit of Meas. Code", CapacityUoM.Code);
RoutingLine.Validate("Setup Time Unit of Meas. Code", CapacityUoM.Code);
RoutingLine.Insert(true);
end;

local procedure CreateRoutingVersionAndMachineCenterLine(RoutingNo: Code[20]; VersionCode: Code[20]; MachineCenterNo: Code[20]; var RoutingLine: Record "Routing Line")
var
RoutingVersion: Record "Routing Version";
CapacityUoM: Record "Capacity Unit of Measure";
begin
RoutingVersion.Init();
RoutingVersion.Validate("Routing No.", RoutingNo);
RoutingVersion."Version Code" := VersionCode;
RoutingVersion.Insert(true);

#pragma warning disable AA0210
CapacityUoM.SetRange(Type, CapacityUoM.Type::Minutes);
#pragma warning restore AA0210
CapacityUoM.FindFirst();

RoutingLine.Init();
RoutingLine.Validate("Routing No.", RoutingNo);
RoutingLine.Validate("Version Code", VersionCode);
RoutingLine.Validate("Operation No.", '10');
RoutingLine.Validate(Type, RoutingLine.Type::"Machine Center");
RoutingLine.Validate("No.", MachineCenterNo);
RoutingLine.Validate("Setup Time", 1);
RoutingLine.Validate("Run Time", 1);
RoutingLine.Validate("Run Time Unit of Meas. Code", CapacityUoM.Code);
RoutingLine.Validate("Setup Time Unit of Meas. Code", CapacityUoM.Code);
RoutingLine.Insert(true);
end;

local procedure GetNextItemLedgerEntryNo(): Integer
var
ItemLedgerEntry: Record "Item Ledger Entry";
Expand All @@ -1037,6 +1259,7 @@ codeunit 139990 "Subc. Subcontracting UI Test"
LibraryTestInitialize: Codeunit "Library - Test Initialize";
LibraryVariableStorage: Codeunit "Library - Variable Storage";
LibraryWarehouse: Codeunit "Library - Warehouse";
LibraryManufacturing: Codeunit "Library - Manufacturing";
LibraryMfgManagement: Codeunit "Subc. Library Mfg. Management";
SubcontractingMgmtLibrary: Codeunit "Subc. Management Library";
SubSetupLibrary: Codeunit "Subc. Setup Library";
Expand All @@ -1050,6 +1273,8 @@ codeunit 139990 "Subc. Subcontracting UI Test"
ILEProdActionsNotEnabledErr: Label 'Production actions should be enabled for a subcontracting Item Ledger Entry.';
ILEPurchActionsEnabledErr: Label 'Purchase Order action should not be enabled for a non-subcontracting Item Ledger Entry.';
ILEPurchActionsNotEnabledErr: Label 'Purchase Order action should be enabled for a subcontracting Item Ledger Entry.';
RoutingLineTransferWIPEnabledErr: Label 'Transfer WIP Item should not be enabled for a Machine Center routing line.';
RoutingLineTransferWIPNotEnabledErr: Label 'Transfer WIP Item should be enabled for a subcontracting Work Center routing line.';
SetupNotCompletedQst: Label 'The Subcontracting setup is not complete. Are you sure you want to exit?';
MissingSubcontractingLocationMsg: Label 'Vendor %1 has no subcontracting location. This location is used to track components and work-in-process (WIP) items at the subcontractor. Choose a Subcontracting Location Code on the vendor before using this work center for subcontracting.', Comment = '%1 = Vendor No.';
NotificationIdErr: Label 'The subcontractor location notification ID is unexpected.';
Expand All @@ -1060,4 +1285,4 @@ codeunit 139990 "Subc. Subcontracting UI Test"
SendNotificationTok: Label 'Send', Locked = true;
VendorCardNoErr: Label 'The Vendor Card opened for an unexpected vendor.';
VendorNoTok: Label 'VendorNo', Locked = true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,9 @@ codeunit 149912 "Subc. WIP Avail. Warn Test"
UnbindSubscription(AvailCheckSpy);

// [THEN] The Quantity is persisted and the item-availability warning check was NOT performed for the WIP item
#pragma warning disable AA0181
TransferLine.Find('=');
#pragma warning restore AA0181
Assert.AreEqual(NewQuantity, TransferLine.Quantity, 'Quantity should be updated on the WIP transfer line.');
Assert.IsFalse(
AvailCheckSpy.WasInvokedForItem(Item."No."),
Expand Down Expand Up @@ -96,7 +98,9 @@ codeunit 149912 "Subc. WIP Avail. Warn Test"
UnbindSubscription(AvailCheckSpy);

// [THEN] The item-availability warning check WAS performed for the normal item
#pragma warning disable AA0181
TransferLine.Find('=');
#pragma warning restore AA0181
Assert.AreEqual(NewQuantity, TransferLine.Quantity, 'Quantity should be updated on the transfer line.');
Assert.IsTrue(
AvailCheckSpy.WasInvokedForItem(Item."No."),
Expand Down
Loading
Loading