Codeunit 5889 Phys. Invt. Tracking Mgt.

App
Base Application
Namespace
Microsoft.Inventory.Counting.Tracking
Versions
17-28

Procedures, 5Events, 3Obsolete, 1

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Counting/Tracking/PhysInvtTrackingMgt.Codeunit.al132 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.Counting.Tracking;

using Microsoft.Inventory.Counting.Document;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Journal;
using Microsoft.Inventory.Location;
using Microsoft.Inventory.Tracking;

codeunit 5889 "Phys. Invt. Tracking Mgt."
{
    Permissions = TableData "Reservation Entry" = rimd,
                  TableData "Pstd. Phys. Invt. Tracking" = rimd;

    trigger OnRun()
    begin
    end;

    var
        CreateReservEntry: Codeunit "Create Reserv. Entry";

    procedure SuggestUseTrackingLines(Item: Record Item) Result: Boolean
    var
        ItemTrackingCode: Record "Item Tracking Code";
    begin
        if Item."Item Tracking Code" = '' then
            Result := false
        else begin
            ItemTrackingCode.Get(Item."Item Tracking Code");
            Result :=
                ItemTrackingCode."SN Specific Tracking" or
                ItemTrackingCode."SN Pos. Adjmt. Inb. Tracking" or
                ItemTrackingCode."SN Pos. Adjmt. Outb. Tracking" or
                ItemTrackingCode."SN Neg. Adjmt. Inb. Tracking" or
                ItemTrackingCode."SN Neg. Adjmt. Outb. Tracking" or
                ItemTrackingCode."Lot Specific Tracking" or
                ItemTrackingCode."Lot Pos. Adjmt. Inb. Tracking" or
                ItemTrackingCode."Lot Pos. Adjmt. Outb. Tracking" or
                ItemTrackingCode."Lot Neg. Adjmt. Inb. Tracking" or
                ItemTrackingCode."Lot Neg. Adjmt. Outb. Tracking" or
                ItemTrackingCode."Package Specific Tracking" or
                ItemTrackingCode."Package Pos. Inb. Tracking" or
                ItemTrackingCode."Package Pos. Outb. Tracking" or
                ItemTrackingCode."Package Neg. Inb. Tracking" or
                ItemTrackingCode."Package Neg. Outb. Tracking";
        end;
        OnAfterSuggestUseTrackingLines(Item, ItemTrackingCode, Result);
    end;

    procedure GetTrackingNosFromWhse(Item: Record Item) Result: Boolean
    var
        ItemTrackingCode: Record "Item Tracking Code";
    begin
        if Item."Item Tracking Code" = '' then
            Result := false
        else begin
            ItemTrackingCode.Get(Item."Item Tracking Code");
            Result := (ItemTrackingCode."SN Specific Tracking" and ItemTrackingCode."SN Warehouse Tracking") or
                      (ItemTrackingCode."Lot Specific Tracking" and ItemTrackingCode."Lot Warehouse Tracking") or
                      (ItemTrackingCode."Package Specific Tracking" and ItemTrackingCode."Package Warehouse Tracking");
        end;
        OnAfterGetTrackingNosFromWhse(Item, ItemTrackingCode, Result);
    end;

    procedure LocationIsBinMandatory(LocationCode: Code[20]): Boolean
    var
        Location: Record Location;
    begin
        if LocationCode = '' then
            exit(false);

        Location.Get(LocationCode);
        exit(Location."Bin Mandatory");
    end;

    procedure TransferResEntryToItemJnlLine(var PhysInvtOrderLine: Record "Phys. Invt. Order Line"; var ItemJnlLine: Record "Item Journal Line"; Qty: Decimal; Positive: Boolean)
    var
        ReservEntry: Record "Reservation Entry";
    begin
        // Transfer all Reserve Entry, connected by a PhysInvtOrderLine, to an ItemJnlLine bevor posting the PhysInvtOrderLine

        if Qty = 0 then
            exit;

        ItemJnlLine.TestField("Item No.", PhysInvtOrderLine."Item No.");
        ItemJnlLine.TestField("Variant Code", PhysInvtOrderLine."Variant Code");
        ItemJnlLine.TestField("Location Code", PhysInvtOrderLine."Location Code");
        ItemJnlLine.TestField("Bin Code", PhysInvtOrderLine."Bin Code");

        ReservEntry.Reset();
        ReservEntry.SetSourceFilter(Database::"Phys. Invt. Order Line", 0, PhysInvtOrderLine."Document No.", PhysInvtOrderLine."Line No.", true);
        ReservEntry.SetSourceFilter('', 0);
        ReservEntry.SetRange(Positive, Positive);
        if ReservEntry.FindSet() then
            repeat
                ReservEntry.TestField("Reservation Status", ReservEntry."Reservation Status"::Prospect);
                ReservEntry.TestField("Item No.", PhysInvtOrderLine."Item No.");
                ReservEntry.TestField("Variant Code", PhysInvtOrderLine."Variant Code");
                ReservEntry.TestField("Location Code", PhysInvtOrderLine."Location Code");
                ReservEntry."New Serial No." := ReservEntry."Serial No.";
                ReservEntry."New Lot No." := ReservEntry."Lot No.";
                ReservEntry."New Package No." := ReservEntry."Package No.";
                ReservEntry."New Expiration Date" := ReservEntry."Expiration Date";
                OnTransferResEntryToItemJnlLineOnBeforeTransfer(ReservEntry, PhysInvtOrderLine);
                Qty :=
                    CreateReservEntry.TransferReservEntry(
                        Database::"Item Journal Line",
                        ItemJnlLine."Entry Type".AsInteger(), ItemJnlLine."Journal Template Name", ItemJnlLine."Journal Batch Name", 0,
                        ItemJnlLine."Line No.", ItemJnlLine."Qty. per Unit of Measure", ReservEntry, Qty);
            until (ReservEntry.Next() = 0) or (Qty = 0);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetTrackingNosFromWhse(Item: Record Item; ItemTrackingCode: Record "Item Tracking Code"; var Result: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSuggestUseTrackingLines(Item: Record Item; ItemTrackingCode: Record "Item Tracking Code"; var Result: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnTransferResEntryToItemJnlLineOnBeforeTransfer(var ReservationEntry: Record "Reservation Entry"; PhysInvtOrderLine: Record "Phys. Invt. Order Line")
    begin
    end;
}