Codeunit 99000852 Job Planning Line-Planning

App
Base Application
Namespace
Microsoft.Projects.Project.Planning
Versions
25-28

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Projects/Project/Planning/JobPlanningLinePlanning.Codeunit.al106 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.Projects.Project.Planning;

using Microsoft.Inventory.Planning;
using Microsoft.Inventory.Requisition;
using Microsoft.Projects.Project.Job;

codeunit 99000852 "Job Planning Line-Planning"
{
    var
        Job: Record Job;
        ProjectsTxt: Label 'Projects';

    [EventSubscriber(ObjectType::Table, Database::"Requisition Line", 'OnSetDemandTypeFromUnplannedDemand', '', false, false)]
    local procedure ReqLineOnSetDemandTypeFromUnplannedDemand(var RequisitionLine: Record "Requisition Line"; UnplannedDemand: Record "Unplanned Demand")
    begin
        if UnplannedDemand."Demand Type" = UnplannedDemand."Demand Type"::Job then
            RequisitionLine."Demand Type" := Database::"Job Planning Line";
    end;

    [EventSubscriber(ObjectType::Table, Database::"Unplanned Demand", 'OnValidateDemandOrderNoOnGetSourceFields', '', false, false)]
    local procedure OnValidateDemandOrderNoOnGetSourceFields(var UnplannedDemand: Record "Unplanned Demand")
    var
        Job: Record Job;
    begin
        case UnplannedDemand."Demand Type" of
            UnplannedDemand."Demand Type"::Job:
                begin
                    Job.Get(UnplannedDemand."Demand Order No.");
                    UnplannedDemand."Sell-to Customer No." := Job."Bill-to Customer No.";
                    UnplannedDemand.Description := Job.Description;
                end;
        end;
    end;

    [EventSubscriber(ObjectType::Report, Report::"Carry Out Action Msg. - Plan.", 'OnCheckDemandType', '', false, false)]
    local procedure CarryOutActionMsgPlanOnCheckDemandType(RequisitionLine: Record "Requisition Line")
    var
        JobPlanningLine: Record "Job Planning Line";
    begin
        if RequisitionLine."Demand Type" = Database::"Job Planning Line" then begin
            JobPlanningLine.SetRange("Job Contract Entry No.", RequisitionLine."Demand Line No.");
            JobPlanningLine.FindFirst();
            JobPlanningLine.TestField(Type, JobPlanningLine.Type::Item);
            JobPlanningLine.TestField("Job No.");
            JobPlanningLine.TestField(Status, JobPlanningLine.Status::Order);
            if not ((RequisitionLine."Demand Date" = WorkDate()) and (JobPlanningLine."Planning Date" in [0D, WorkDate()])) then
                RequisitionLine.TestField("Demand Date", JobPlanningLine."Planning Date");
            RequisitionLine.TestField("No.", JobPlanningLine."No.");
            RequisitionLine.TestField("Qty. per UOM (Demand)", JobPlanningLine."Qty. per Unit of Measure");
            RequisitionLine.TestField("Variant Code", JobPlanningLine."Variant Code");
            RequisitionLine.TestField("Location Code", JobPlanningLine."Location Code");
            JobPlanningLine.CalcFields("Reserved Qty. (Base)");
            RequisitionLine.TestField(
                RequisitionLine."Demand Quantity (Base)",
                JobPlanningLine."Remaining Qty. (Base)" - JobPlanningLine."Reserved Qty. (Base)")
        end;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Order Planning", 'OnBeforeShowDemandOrder', '', false, false)]
    local procedure OrderPlanningOnBeforeShowDemandOrder(RequisitionLine: Record "Requisition Line")
    begin
        if RequisitionLine."Demand Type" = Database::"Job Planning Line" then begin
            Job.Get(RequisitionLine."Demand Order No.");
            case Job.Status of
                Job.Status::Open:
                    PAGE.Run(PAGE::"Job Card", Job);
            end;
        end;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Order Planning", 'OnSetRecDemandFilter', '', false, false)]
    local procedure OnSetRecDemandFilter(var RequisitionLine: Record "Requisition Line"; DemandOrderFilter: Enum "Demand Order Source Type")
    begin
        if DemandOrderFilter = DemandOrderFilter::"Job Demand" then begin
            RequisitionLine.SetRange("Demand Type", Database::"Job Planning Line");
            RequisitionLine.SetCurrentKey("User ID", "Demand Type", "Worksheet Template Name", "Journal Batch Name", "Line No.");
        end;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Order Planning", 'OnAfterStatusTextOnFormat', '', false, false)]
    local procedure OnAfterStatusTextOnFormat(var RequisitionLine: Record "Requisition Line"; var Text: Text)
    begin
        if RequisitionLine."Demand Line No." = 0 then
            if RequisitionLine."Demand Type" = Database::"Job Planning Line" then
                Text := Format("Job Status".FromInteger(RequisitionLine.Status));
    end;

    [EventSubscriber(ObjectType::Page, Page::"Order Planning", 'OnAfterDemandTypeTextOnFormat', '', false, false)]
    local procedure OnAfterDemandTypeTextOnFormat(var RequisitionLine: Record "Requisition Line"; var Text: Text)
    begin
        if RequisitionLine."Demand Line No." = 0 then
            if RequisitionLine."Demand Type" = Database::"Job Planning Line" then
                Text := ProjectsTxt;
    end;

    [EventSubscriber(ObjectType::Page, Page::"Order Planning", 'OnAfterDemandSubtypeTextOnFormat', '', false, false)]
    local procedure OnAfterDemandSubtypeTextOnFormat(var RequisitionLine: Record "Requisition Line"; var Text: Text)
    begin
        if RequisitionLine."Demand Type" = Database::"Job Planning Line" then
            Text := Format("Job Status".FromInteger(RequisitionLine.Status));
    end;
}