Codeunit 5894 Inventory Adjustment Handler, source in 29

Source29

src/Layers/W1/BaseApp/Inventory/Costing/InventoryAdjustmentHandler.Codeunit.al143 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.Inventory.Costing;

using Microsoft.Inventory.Item;
using Microsoft.Inventory.Setup;

codeunit 5894 "Inventory Adjustment Handler"
{
    var
        Item: Record Item;
        SkipJobUpdate: Boolean;
        IsItemFiltered: Boolean;

    procedure MakeInventoryAdjustment(var CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.")
    var
        CostAdjustmentParameter: Record "Cost Adjustment Parameter";
        InventoryAdjustment: Interface "Inventory Adjustment";
        CostAdjustmentWithParams: Interface "Cost Adjustment With Params";
        IsHandled: Boolean;
    begin
        IsHandled := false;
        OnBeforeMakeInventoryAdjustment(InventoryAdjustment, IsHandled);
        if not IsHandled then
            InventoryAdjustment := "Inventory Adjustment Impl."::"Default Implementation";

        if InventoryAdjustment is "Cost Adjustment With Params" then begin
            CostAdjustmentWithParams := InventoryAdjustment as "Cost Adjustment With Params";
            if IsItemFiltered then
                CostAdjustmentWithParams.SetFilterItem(Item);
            CostAdjustmentWithParams.MakeMultiLevelAdjmt(CostAdjustmentParamsMgt);
        end else begin
            CostAdjustmentParamsMgt.GetParameters(CostAdjustmentParameter);
            InventoryAdjustment.SetProperties(CostAdjustmentParameter."Online Adjustment", CostAdjustmentParameter."Post to G/L");
            InventoryAdjustment.SetJobUpdateProperties(CostAdjustmentParameter."Skip Job Item Cost Update");
            if IsItemFiltered then
                InventoryAdjustment.SetFilterItem(Item);
            InventoryAdjustment.MakeMultiLevelAdjmt();
        end;

        OnAfterMakeInventoryAdjustment(CostAdjustmentParamsMgt);
    end;

    procedure MakeInventoryAdjustment(IsOnlineAdjmt: Boolean; PostToGL: Boolean)
    var
        CostAdjustmentParameter: Record "Cost Adjustment Parameter";
        CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.";
    begin
        CostAdjustmentParameter.Init();
        CostAdjustmentParameter."Online Adjustment" := IsOnlineAdjmt;
        CostAdjustmentParameter."Post to G/L" := PostToGL;
        CostAdjustmentParameter."Skip Job Item Cost Update" := SkipJobUpdate;
        OnMakeInventoryAdjustmentOnBeforeSetParameters(CostAdjustmentParameter);

        CostAdjustmentParamsMgt.SetParameters(CostAdjustmentParameter);
        OnMakeInventoryAdjustmentOnAfterSetParameters(CostAdjustmentParamsMgt);

        MakeInventoryAdjustment(CostAdjustmentParamsMgt);
    end;

    procedure MakeAutomaticInventoryAdjustment(var ItemsToAdjust: List of [Code[20]])
    var
        InventorySetup: Record "Inventory Setup";
        CostAdjustmentParameter: Record "Cost Adjustment Parameter";
        CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.";
    begin
        InventorySetup.GetRecordOnce();
        if not InventorySetup.AutomaticCostAdjmtRequired() then
            exit;

        CostAdjustmentParameter."Post to G/L" := InventorySetup."Automatic Cost Posting";
        CostAdjustmentParameter."Online Adjustment" := true;
        CostAdjustmentParameter."Skip Job Item Cost Update" := SkipJobUpdate;
        if not InventorySetup.UseLegacyPosting() then
            CostAdjustmentParamsMgt.SetItemsToAdjust(ItemsToAdjust);
        CostAdjustmentParamsMgt.SetParameters(CostAdjustmentParameter);
        MakeInventoryAdjustment(CostAdjustmentParamsMgt);
    end;

    procedure MakeAutomaticInventoryAdjustment(var ItemsToAdjust: List of [Code[20]]; var InventoryAdjmtEntryOrder: Record "Inventory Adjmt. Entry (Order)")
    var
        InventorySetup: Record "Inventory Setup";
        CostAdjustmentParameter: Record "Cost Adjustment Parameter";
        PartiallyAdjustedItem: Record Item;
        CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.";
        ItemNo: Code[20];
    begin
        InventorySetup.GetRecordOnce();
        if not InventorySetup.AutomaticCostAdjmtRequired() then
            exit;

        CostAdjustmentParameter."Post to G/L" := InventorySetup."Automatic Cost Posting";
        CostAdjustmentParameter."Online Adjustment" := true;
        CostAdjustmentParameter."Skip Job Item Cost Update" := SkipJobUpdate;
        if not InventorySetup.UseLegacyPosting() then begin
            CostAdjustmentParamsMgt.SetItemsToAdjust(ItemsToAdjust);
            CostAdjustmentParamsMgt.SetInventoryAdjmtEntryOrder(InventoryAdjmtEntryOrder);
        end;
        CostAdjustmentParamsMgt.SetParameters(CostAdjustmentParameter);
        MakeInventoryAdjustment(CostAdjustmentParamsMgt);

        if not InventorySetup.UseLegacyPosting() then
            foreach ItemNo in ItemsToAdjust do begin
                PartiallyAdjustedItem.SetLoadFields("No.", "Cost Is Adjusted");
                if PartiallyAdjustedItem.Get(ItemNo) then
                    PartiallyAdjustedItem.UpdateCostIsAdjusted();
            end;
    end;

    procedure SetJobUpdateProperties(SkipJobUpdate: Boolean)
    begin
        SkipJobUpdate := SkipJobUpdate;
    end;

    procedure SetFilterItem(var NewItem: Record Item)
    begin
        Item.CopyFilters(NewItem);
        IsItemFiltered := true;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeMakeInventoryAdjustment(var InventoryAdjustment: Interface "Inventory Adjustment"; var IsHandled: Boolean)
    begin
    end;

    [InternalEvent(false, false)]
    local procedure OnAfterMakeInventoryAdjustment(var CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnMakeInventoryAdjustmentOnBeforeSetParameters(var CostAdjustmentParameter: Record "Cost Adjustment Parameter")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnMakeInventoryAdjustmentOnAfterSetParameters(var CostAdjustmentParamsMgt: Codeunit "Cost Adjustment Params Mgt.")
    begin
    end;
}