Codeunit 416 Release Service Document, source in 29
Source29
src/Layers/W1/BaseApp/Service/Document/ReleaseServiceDocument.Codeunit.al208 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.Service.Document;
using Microsoft.Finance.VAT.Calculation;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Setup;
codeunit 416 "Release Service Document"
{
TableNo = "Service Header";
Permissions = TableData "Service Header" = rm,
TableData "Service Line" = r;
trigger OnRun()
begin
ServiceHeader.Copy(Rec);
ServiceHeader.SetHideValidationDialog(Rec.GetHideValidationDialog());
Code();
Rec := ServiceHeader;
end;
var
ServiceHeader: Record "Service Header";
InvtSetup: Record "Inventory Setup";
WhseServiceRelease: Codeunit "Whse.-Service Release";
SkipWhseRequestOperations: Boolean;
#pragma warning disable AA0470
NothingToReleaseErr: Label 'There is nothing to release for %1 %2.', Comment = 'Example: There is nothing to release for Order 12345.';
#pragma warning restore AA0470
local procedure "Code"()
var
ServLine: Record "Service Line";
TempVATAmountLine0: Record "VAT Amount Line" temporary;
TempVATAmountLine1: Record "VAT Amount Line" temporary;
IsHandled: Boolean;
begin
if ServiceHeader."Release Status" = ServiceHeader."Release Status"::"Released to Ship" then
exit;
OnBeforeReleaseServiceDoc(ServiceHeader);
if ServiceHeader."Document Type" = ServiceHeader."Document Type"::Quote then
ServiceHeader.TestField("Bill-to Customer No.");
CheckServiceItemBlockedForAllAndItemServiceBlocked(ServiceHeader);
IsHandled := false;
OnBeforeNothingToReleaseErr(ServiceHeader, IsHandled);
if not IsHandled then begin
ServLine.SetRange("Document Type", ServiceHeader."Document Type");
ServLine.SetRange("Document No.", ServiceHeader."No.");
ServLine.SetFilter(Type, '<>%1', ServLine.Type::" ");
ServLine.SetFilter(Quantity, '<>0');
if ServLine.IsEmpty() then
Error(NothingToReleaseErr, ServiceHeader."Document Type", ServiceHeader."No.");
end;
IsHandled := false;
OnCodeOnBeforeCheckLocationCode(ServLine, IsHandled);
if not IsHandled then begin
InvtSetup.Get();
ServLine.SetCurrentKey(Type);
ServLine.SetRange(Type, ServLine.Type::Item);
if ServLine.FindSet() then
repeat
if InvtSetup."Location Mandatory" then
if ServLine."Location Code" = '' then
VerifyLocationCode(ServLine);
if ServLine.IsInventoriableItem() then
ServLine.TestField("Unit of Measure Code");
until ServLine.Next() = 0;
ServLine.SetFilter(Type, '<>%1', ServLine.Type::" ");
end;
OnCodeOnAfterCheck(ServiceHeader, ServLine);
ServLine.Reset();
ServiceHeader.Validate(ServiceHeader."Release Status", ServiceHeader."Release Status"::"Released to Ship");
ServLine.SetServHeader(ServiceHeader);
ServLine.CalcVATAmountLines(0, ServiceHeader, ServLine, TempVATAmountLine0, ServLine.IsShipment());
ServLine.CalcVATAmountLines(1, ServiceHeader, ServLine, TempVATAmountLine1, ServLine.IsShipment());
ServLine.UpdateVATOnLines(0, ServiceHeader, ServLine, TempVATAmountLine0);
ServLine.UpdateVATOnLines(1, ServiceHeader, ServLine, TempVATAmountLine1);
ServiceHeader.Modify(true);
if ServiceHeader."Document Type" = ServiceHeader."Document Type"::Order then
if not SkipWhseRequestOperations then
WhseServiceRelease.Release(ServiceHeader);
OnAfterReleaseServiceDoc(ServiceHeader);
end;
procedure Reopen(var ServHeader: Record "Service Header")
begin
if ServHeader."Release Status" = ServHeader."Release Status"::Open then
exit;
OnBeforeReopenServiceDoc(ServHeader);
ServHeader.Validate("Release Status", ServHeader."Release Status"::Open);
ServHeader.Modify(true);
if ServHeader."Document Type" in [ServHeader."Document Type"::Order] then
if not SkipWhseRequestOperations then
WhseServiceRelease.Reopen(ServHeader);
OnAfterReopenServiceDoc(ServHeader);
end;
procedure PerformManualRelease(var ServHeader: Record "Service Header")
begin
OnBeforePerformManualRelease(ServHeader);
CODEUNIT.Run(CODEUNIT::"Release Service Document", ServHeader);
OnAfterPerformManualRelease(ServHeader);
end;
procedure PerformManualReopen(var ServHeader: Record "Service Header")
begin
OnBeforePerformManualReopen(ServHeader);
Reopen(ServHeader);
end;
local procedure VerifyLocationCode(var ServLine: Record "Service Line")
var
Item: Record Item;
begin
if ServLine."No." <> '' then
if Item.Get(ServLine."No.") then
if Item.Type = Item.Type::"Non-Inventory" then
exit;
ServLine.TestField("Location Code");
end;
internal procedure SetSkipWhseRequestOperations(NewSkipWhseRequestOperations: Boolean)
begin
SkipWhseRequestOperations := NewSkipWhseRequestOperations;
end;
local procedure CheckServiceItemBlockedForAllAndItemServiceBlocked(var ServiceHeader2: Record "Service Header")
var
ServiceLine: Record "Service Line";
ServOrderManagement: Codeunit ServOrderManagement;
begin
ServiceLine.SetRange("Document Type", ServiceHeader2."Document Type");
ServiceLine.SetRange("Document No.", ServiceHeader2."No.");
if ServiceLine.FindSet() then
repeat
ServOrderManagement.CheckServiceItemBlockedForAll(ServiceLine);
ServOrderManagement.CheckItemServiceBlocked(ServiceLine);
until ServiceLine.Next() = 0;
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeReleaseServiceDoc(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterReleaseServiceDoc(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeReopenServiceDoc(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterReopenServiceDoc(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCodeOnAfterCheck(ServiceHeader: Record "Service Header"; var ServiceLine: Record "Service Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeNothingToReleaseErr(var ServiceHeader: Record "Service Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterPerformManualRelease(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePerformManualReopen(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforePerformManualRelease(var ServiceHeader: Record "Service Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnCodeOnBeforeCheckLocationCode(var ServiceLine: Record "Service Line"; var IsHandled: Boolean)
begin
end;
}