Page 99000882 Change Status on Prod. Order
- App
- Base Application
- Namespace
- Microsoft.Manufacturing.Document
- Versions
- 17-28
Procedures, 3Events, 7Obsolete, 1
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Manufacturing/Document/ChangeStatusonProdOrder.Page.al188 lines, Copyright (c) Microsoft Corporation. MIT
// ------------------------------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
// Licensed under the MIT License. See License.txt in the project root for license information.
// ------------------------------------------------------------------------------------------------
namespace Microsoft.Manufacturing.Document;
using Microsoft.Manufacturing.Setup;
page 99000882 "Change Status on Prod. Order"
{
Caption = 'Change Status on Prod. Order';
DataCaptionExpression = '';
DeleteAllowed = false;
InsertAllowed = false;
InstructionalText = 'Do you want to change the status of this production order?';
ModifyAllowed = false;
PageType = ConfirmationDialog;
layout
{
area(content)
{
field(FirmPlannedStatus; ProdOrderStatus.Status)
{
ApplicationArea = Manufacturing;
Caption = 'New Status';
ToolTip = 'Specifies the new status for the production order.';
ValuesAllowed = "Firm Planned", Released, Finished;
trigger OnValidate()
begin
case ProdOrderStatus.Status of
ProdOrderStatus.Status::Finished:
CheckStatus(FinishedStatusEditable);
ProdOrderStatus.Status::Released:
CheckStatus(ReleasedStatusEditable);
ProdOrderStatus.Status::"Firm Planned":
CheckStatus(FirmPlannedStatusEditable);
end;
if ProdOrderStatus.Status <> ProdOrderStatus.Status::Finished then
FinishOrderWithoutOutput := false;
CurrPage.Update(true);
end;
}
field(PostingDate; PostingDate)
{
ApplicationArea = Manufacturing;
Caption = 'Posting Date';
Tooltip = 'Specifies the posting date used for automatic posting of consumption, output, or capacity, based on the Flushing method defined for components and routing lines.';
}
field(ReqUpdUnitCost; ReqUpdUnitCost)
{
ApplicationArea = Manufacturing;
Caption = 'Update Unit Cost';
Tooltip = 'Specifies whether to update the unit cost of the produced item and any related production or sales orders.';
}
field("Finish Order without Output"; FinishOrderWithoutOutput)
{
Caption = 'Finish Order';
Tooltip = 'Specifies that the status of orders with no output can be changed to finished, and the WIP will be written off to the Inventory Adjustment Account.';
ApplicationArea = Manufacturing;
Editable = FinishOrderWithoutOutputEditable;
}
}
}
actions
{
}
trigger OnInit()
begin
FinishedStatusEditable := true;
ReleasedStatusEditable := true;
FirmPlannedStatusEditable := true;
end;
trigger OnAfterGetCurrRecord()
begin
SetFinishOrderWithoutOutputEditable();
end;
trigger OnAfterGetRecord()
begin
SetFinishOrderWithoutOutputEditable();
end;
var
ManufacturingSetup: Record "Manufacturing Setup";
ProdOrderStatus: Record "Production Order";
PostingDate: Date;
FirmPlannedStatusEditable: Boolean;
ReleasedStatusEditable: Boolean;
FinishedStatusEditable: Boolean;
FinishOrderWithoutOutput: Boolean;
FinishOrderWithoutOutputEditable: Boolean;
#pragma warning disable AA0074
#pragma warning disable AA0470
Text666: Label '%1 is not a valid selection.';
#pragma warning restore AA0470
#pragma warning restore AA0074
protected var
ReqUpdUnitCost: Boolean;
procedure Set(ProdOrder: Record "Production Order")
begin
OnBeforeSet(ProdOrder);
if ProdOrder.Status = ProdOrder.Status::Finished then
ProdOrder.FieldError(Status);
FirmPlannedStatusEditable := ProdOrder.Status.AsInteger() < ProdOrder.Status::"Firm Planned".AsInteger();
ReleasedStatusEditable := ProdOrder.Status <> ProdOrder.Status::Released;
FinishedStatusEditable := ProdOrder.Status = ProdOrder.Status::Released;
OnSetOnAfterCalcEditable(ProdOrder, FirmPlannedStatusEditable, ReleasedStatusEditable, FinishedStatusEditable);
if ProdOrder.Status.AsInteger() > ProdOrder.Status::Simulated.AsInteger() then
ProdOrderStatus.Status := "Production Order Status".FromInteger(ProdOrder.Status.AsInteger() + 1)
else
ProdOrderStatus.Status := ProdOrderStatus.Status::"Firm Planned";
PostingDate := WorkDate();
OnAfterSet(ProdOrder, PostingDate, ReqUpdUnitCost, ProdOrderStatus, FirmPlannedStatusEditable, ReleasedStatusEditable, FinishedStatusEditable);
end;
#if not CLEAN27
[Obsolete('Replaced with namesake procedure with additional parameter.', '27.0')]
procedure ReturnPostingInfo(var Status: Enum "Production Order Status"; var PostingDate2: Date; var UpdUnitCost: Boolean)
var
DummyFinishOrderWithoutOutput: Boolean;
begin
ReturnPostingInfo(Status, PostingDate2, UpdUnitCost, DummyFinishOrderWithoutOutput);
end;
#endif
procedure ReturnPostingInfo(var Status: Enum "Production Order Status"; var PostingDate2: Date; var UpdUnitCost: Boolean; var NewFinishOrderWithoutOutput: Boolean)
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeReturnPostingInfo(Status, PostingDate2, UpdUnitCost, IsHandled, NewFinishOrderWithoutOutput);
if IsHandled then
exit;
Status := ProdOrderStatus.Status;
PostingDate2 := PostingDate;
UpdUnitCost := ReqUpdUnitCost;
NewFinishOrderWithoutOutput := FinishOrderWithoutOutput;
end;
local procedure CheckStatus(StatusEditable: Boolean)
begin
if not StatusEditable then
Error(Text666, ProdOrderStatus.Status);
end;
local procedure SetFinishOrderWithoutOutputEditable()
begin
ManufacturingSetup.GetRecordOnce();
FinishOrderWithoutOutputEditable := (ProdOrderStatus.Status = ProdOrderStatus.Status::Finished) and (ManufacturingSetup."Finish Order without Output");
end;
[IntegrationEvent(true, false)]
local procedure OnAfterSet(ProdOrder: Record "Production Order"; var PostingDate: Date; var ReqUpdUnitCost: Boolean; var ProductionOrderStatus: Record "Production Order"; var FirmPlannedStatusEditable: Boolean; var ReleasedStatusEditable: Boolean; var FinishedStatusEditable: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeReturnPostingInfo(var Status: Enum "Production Order Status"; var PostingDate2: Date; var UpdUnitCost: Boolean; var IsHandled: Boolean; var NewFinishOrderWithoutOutput: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnSetOnAfterCalcEditable(ProdOrder: Record "Production Order"; var FirmPlannedStatusEditable: Boolean; var ReleasedStatusEditable: Boolean; var FinishedStatusEditable: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSet(var ProdOrder: Record "Production Order")
begin
end;
}