Codeunit 6482 Serv. Item Tracking Doc. Mgt.

App
Base Application
Namespace
Microsoft.Inventory.Tracking
Versions
25-28

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Service/Inventory/Tracking/ServItemTrackingDocMgt.Codeunit.al139 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.Tracking;

using Microsoft.Inventory.Item;
using Microsoft.Service.Document;
using Microsoft.Service.History;

codeunit 6482 "Serv. Item Tracking Doc. Mgt."
{

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Tracking Doc. Management", 'OnRetrieveDocumentItemTracking', '', true, false)]
    local procedure OnRetrieveDocumentItemTracking(var TempTrackingSpecBuffer: Record "Tracking Specification" temporary; SourceType: Integer; SourceSubType: Option; SourceID: Code[20]; var sender: Codeunit "Item Tracking Doc. Management"; var Found: Boolean)
    begin
        case SourceType of
            Database::"Service Header":
                begin
                    RetrieveTrackingService(TempTrackingSpecBuffer, sender, SourceID, SourceSubType);
                    Found := true;
                end;
            Database::"Service Shipment Header":
                begin
                    RetrieveTrackingServiceShipment(TempTrackingSpecBuffer, sender, SourceID);
                    Found := true;
                end;
            Database::"Service Invoice Header":
                begin
                    RetrieveTrackingServiceInvoice(TempTrackingSpecBuffer, sender, SourceID);
                    Found := true;
                end;
        end;
    end;

    local procedure RetrieveTrackingService(var TempTrackingSpecBuffer: Record "Tracking Specification" temporary; var sender: Codeunit "Item Tracking Doc. Management"; SourceID: Code[20]; SourceSubType: Option)
    var
        ServLine: Record "Service Line";
        Item: Record Item;
        Descr: Text[100];
    begin
        ServLine.SetRange("Document Type", SourceSubType);
        ServLine.SetRange("Document No.", SourceID);
        if not ServLine.IsEmpty() then begin
            ServLine.FindSet();
            repeat
                if (ServLine.Type = ServLine.Type::Item) and
                   (ServLine."No." <> '') and
                   (ServLine."Quantity (Base)" <> 0)
                then begin
                    if Item.Get(ServLine."No.") then
                        Descr := Item.Description;
                    sender.FindReservEntries(
                        TempTrackingSpecBuffer, Database::"Service Line", ServLine."Document Type".AsInteger(),
                        ServLine."Document No.", '', 0, ServLine."Line No.", Descr);
                    sender.FindTrackingEntries(
                        TempTrackingSpecBuffer, Database::"Service Line", ServLine."Document Type".AsInteger(),
                        ServLine."Document No.", '', 0, ServLine."Line No.", Descr);
                end;
            until ServLine.Next() = 0;
        end;
    end;

    local procedure RetrieveTrackingServiceShipment(var TempTrackingSpecBuffer: Record "Tracking Specification" temporary; var sender: Codeunit "Item Tracking Doc. Management"; SourceID: Code[20])
    var
        ServShptLine: Record "Service Shipment Line";
        Item: Record Item;
        Descr: Text[100];
    begin
        ServShptLine.SetRange("Document No.", SourceID);
        if not ServShptLine.IsEmpty() then begin
            ServShptLine.FindSet();
            repeat
                if (ServShptLine.Type = ServShptLine.Type::Item) and
                   (ServShptLine."No." <> '') and
                   (ServShptLine."Quantity (Base)" <> 0)
                then begin
                    if Item.Get(ServShptLine."No.") then
                        Descr := Item.Description;
                    sender.FindShptRcptEntries(TempTrackingSpecBuffer,
                      Database::"Service Shipment Line", 0, ServShptLine."Document No.", '', 0, ServShptLine."Line No.", Descr);
                end;
            until ServShptLine.Next() = 0;
        end;
    end;

    local procedure RetrieveTrackingServiceInvoice(var TempTrackingSpecBuffer: Record "Tracking Specification" temporary; var sender: Codeunit "Item Tracking Doc. Management"; SourceID: Code[20])
    var
        ServInvLine: Record "Service Invoice Line";
        Item: Record Item;
        Descr: Text[100];
    begin
        ServInvLine.SetRange("Document No.", SourceID);
        if not ServInvLine.IsEmpty() then begin
            ServInvLine.FindSet();
            repeat
                if (ServInvLine.Type = ServInvLine.Type::Item) and
                   (ServInvLine."No." <> '') and
                   (ServInvLine."Quantity (Base)" <> 0)
                then begin
                    if Item.Get(ServInvLine."No.") then
                        Descr := Item.Description;
                    sender.FindInvoiceEntries(TempTrackingSpecBuffer,
                      Database::"Service Invoice Line", 0, ServInvLine."Document No.", '', 0, ServInvLine."Line No.", Descr);
                end;
            until ServInvLine.Next() = 0;
        end;
    end;

    [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Tracking Doc. Management", 'OnAfterTableSignFactor', '', true, false)]
    local procedure OnAfterTableSignFactor(TableNo: Integer; var Sign: Integer)
    begin
        if TableNo in [
                       Database::"Service Line",
                       Database::"Service Shipment Line",
                       Database::"Service Invoice Line"]
        then
            Sign := -1;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Item Tracking Lines", 'OnAfterGetInvoiceSource', '', true, false)]
    local procedure OnAfterGetInvoiceSource(TrackingSpecification: Record "Tracking Specification"; var QtyToInvoiceColumnIsHidden: Boolean)
    begin
        if not QtyToInvoiceColumnIsHidden then
            QtyToInvoiceColumnIsHidden :=
                ((TrackingSpecification."Source Type" = Database::"Service Line") and
                (TrackingSpecification."Source Subtype" in [0, 2, 3, 4]));
    end;

    [EventSubscriber(ObjectType::Page, Page::"Item Tracking Lines", 'OnAfterGetHandleSource', '', true, false)]
    local procedure OnAferGetHandleSource(TrackingSpecification: Record "Tracking Specification"; var QtyToHandleColumnIsHidden: Boolean)
    begin
        if not QtyToHandleColumnIsHidden then
            QtyToHandleColumnIsHidden :=
                ((TrackingSpecification."Source Type" = Database::"Service Line") and
                (TrackingSpecification."Source Subtype" in [0, 2, 3]));
    end;
}