Codeunit 330 ReqJnlManagement

App
Base Application
Namespace
Microsoft.Inventory.Requisition
Versions
17-28

Procedures, 10Events, 8Obsolete, 2

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Inventory/Requisition/ReqJnlManagement.Codeunit.al301 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.Requisition;

using Microsoft.Finance.GeneralLedger.Account;
using Microsoft.Purchases.Vendor;

codeunit 330 ReqJnlManagement
{
    Permissions = TableData "Req. Wksh. Template" = rimd,
                  TableData "Requisition Wksh. Name" = rimd;

    trigger OnRun()
    begin
    end;

    var
        LastReqLine: Record "Requisition Line";
        OpenFromBatch: Boolean;

#pragma warning disable AA0074
        Text002: Label 'RECURRING';
        Text004: Label 'DEFAULT';
        Text005: Label 'Default Journal';
#pragma warning disable AA0470
        Text99000000: Label '%1 Worksheet';
#pragma warning restore AA0470
        Text99000001: Label 'Recurring Worksheet';
#pragma warning restore AA0074

    procedure WkshTemplateSelection(PageID: Integer; RecurringJnl: Boolean; TemplateType: Enum "Req. Worksheet Template Type"; var ReqLine: Record "Requisition Line"; var JnlSelected: Boolean)
    var
        ReqWkshTemplate: Record "Req. Wksh. Template";
    begin
        JnlSelected := true;

        ReqWkshTemplate.Reset();
        ReqWkshTemplate.SetRange("Page ID", PageID);
        ReqWkshTemplate.SetRange(Recurring, RecurringJnl);
        ReqWkshTemplate.SetRange(Type, TemplateType);
        OnWkshTemplateSelectionSetFilter(ReqWkshTemplate, TemplateType);

        case ReqWkshTemplate.Count() of
            0:
                begin
                    ReqWkshTemplate.Init();
                    ReqWkshTemplate.Recurring := RecurringJnl;
                    ReqWkshTemplate.Type := TemplateType;
                    if not RecurringJnl then begin
                        ReqWkshTemplate.Name := CopyStr(Format(TemplateType), 1, MaxStrLen(ReqWkshTemplate.Name));
                        ReqWkshTemplate.Description := StrSubstNo(Text99000000, Format(TemplateType));
                    end else begin
                        ReqWkshTemplate.Name := Text002;
                        ReqWkshTemplate.Description := Text99000001;
                    end;
                    ReqWkshTemplate.Validate("Page ID");
                    ReqWkshTemplate.Insert();
                    Commit();
                end;
            1:
                ReqWkshTemplate.FindFirst();
            else
                JnlSelected := PAGE.RunModal(0, ReqWkshTemplate) = ACTION::LookupOK;
        end;
        if JnlSelected then begin
            ReqLine.FilterGroup := 2;
            ReqLine.SetRange("Worksheet Template Name", ReqWkshTemplate.Name);
            ReqLine.FilterGroup := 0;
            if OpenFromBatch then begin
                ReqLine."Worksheet Template Name" := '';
                PAGE.Run(ReqWkshTemplate."Page ID", ReqLine);
            end;
        end;
    end;

    procedure TemplateSelectionFromBatch(var ReqWkshName: Record "Requisition Wksh. Name")
    var
        ReqLine: Record "Requisition Line";
        ReqWkshTmpl: Record "Req. Wksh. Template";
    begin
        OpenFromBatch := true;
        ReqWkshTmpl.Get(ReqWkshName."Worksheet Template Name");
        ReqWkshTmpl.TestField("Page ID");
        ReqWkshName.TestField(Name);

        ReqLine.FilterGroup := 2;
        ReqLine.SetRange("Worksheet Template Name", ReqWkshTmpl.Name);
        ReqLine.FilterGroup := 0;

        ReqLine."Worksheet Template Name" := '';
        ReqLine."Journal Batch Name" := ReqWkshName.Name;
        PAGE.Run(ReqWkshTmpl."Page ID", ReqLine);
    end;

    procedure OpenJnl(var CurrentJnlBatchName: Code[10]; var ReqLine: Record "Requisition Line")
    begin
        OnBeforeOpenJnl(CurrentJnlBatchName, ReqLine);

        CheckTemplateName(ReqLine.GetRangeMax("Worksheet Template Name"), CurrentJnlBatchName);
        ReqLine.FilterGroup := 2;
        ReqLine.SetRange("Journal Batch Name", CurrentJnlBatchName);
        ReqLine.FilterGroup := 0;
    end;

    procedure OpenJnlBatch(var ReqWkshName: Record "Requisition Wksh. Name")
    var
        ReqWkshTmpl: Record "Req. Wksh. Template";
        ReqLine: Record "Requisition Line";
        JnlSelected: Boolean;
        ReqWorksheetTemplateTypeList: List of [Enum "Req. Worksheet Template Type"];
        ReqWorksheetTemplateType: Enum "Req. Worksheet Template Type";
    begin
        if ReqWkshName.GetFilter("Worksheet Template Name") <> '' then
            exit;
        ReqWkshName.FilterGroup(2);
        if ReqWkshName.GetFilter("Worksheet Template Name") <> '' then begin
            ReqWkshName.FilterGroup(0);
            exit;
        end;
        ReqWkshName.FilterGroup(0);

        for ReqWorksheetTemplateType := ReqWkshTmpl.Type::"Req." to ReqWkshTmpl.Type::Planning do
            ReqWorksheetTemplateTypeList.Add(ReqWorksheetTemplateType);

        OnOpenJnlBatchOnBeforeTemplateSelection(ReqWkshName, ReqWorksheetTemplateTypeList);

        if not ReqWkshName.Find('-') then
            foreach ReqWorksheetTemplateType in ReqWorksheetTemplateTypeList do begin
                ReqWkshTmpl.Type := ReqWorksheetTemplateType;
                ReqWkshTmpl.SetRange(Type, ReqWkshTmpl.Type);
                if not ReqWkshTmpl.FindFirst() then
                    WkshTemplateSelection(0, false, ReqWkshTmpl.Type, ReqLine, JnlSelected);
                if ReqWkshTmpl.FindFirst() then
                    CheckTemplateName(ReqWkshTmpl.Name, ReqWkshName.Name);
                if ReqWkshTmpl.Type in [ReqWkshTmpl.Type::"Req."] then begin
                    ReqWkshTmpl.SetRange(Recurring, true);
                    if not ReqWkshTmpl.FindFirst() then
                        WkshTemplateSelection(0, true, ReqWkshTmpl.Type, ReqLine, JnlSelected);
                    if ReqWkshTmpl.FindFirst() then
                        CheckTemplateName(ReqWkshTmpl.Name, ReqWkshName.Name);
                    ReqWkshTmpl.SetRange(Recurring);
                end;
            end;

        ReqWkshName.Find('-');
        JnlSelected := true;
        ReqWkshName.CalcFields("Template Type", Recurring);
        ReqWkshTmpl.SetRange(Recurring, ReqWkshName.Recurring);
        if not ReqWkshName.Recurring then
            ReqWkshTmpl.SetRange(Type, ReqWkshName."Template Type");
        if ReqWkshName.GetFilter("Worksheet Template Name") <> '' then
            ReqWkshTmpl.SetRange(Name, ReqWkshName.GetFilter("Worksheet Template Name"));
        case ReqWkshTmpl.Count of
            1:
                ReqWkshTmpl.FindFirst();
            else
                JnlSelected := PAGE.RunModal(0, ReqWkshTmpl) = ACTION::LookupOK;
        end;
        if not JnlSelected then
            Error('');

        ReqWkshName.FilterGroup(0);
        ReqWkshName.SetRange("Worksheet Template Name", ReqWkshTmpl.Name);
        ReqWkshName.FilterGroup(2);
    end;

    local procedure CheckTemplateName(CurrentJnlTemplateName: Code[10]; var CurrentJnlBatchName: Code[10])
    var
        ReqWkshName: Record "Requisition Wksh. Name";
    begin
        ReqWkshName.SetRange("Worksheet Template Name", CurrentJnlTemplateName);
        if not ReqWkshName.Get(CurrentJnlTemplateName, CurrentJnlBatchName) then begin
            if not ReqWkshName.FindFirst() then begin
                ReqWkshName.Init();
                ReqWkshName."Worksheet Template Name" := CurrentJnlTemplateName;
                ReqWkshName.Name := Text004;
                ReqWkshName.Description := Text005;
                ReqWkshName.Insert(true);
                Commit();
            end;
            CurrentJnlBatchName := ReqWkshName.Name
        end;
    end;

    procedure CheckName(CurrentJnlBatchName: Code[10]; var ReqLine: Record "Requisition Line")
    var
        ReqWkshName: Record "Requisition Wksh. Name";
    begin
        ReqWkshName.Get(ReqLine.GetRangeMax("Worksheet Template Name"), CurrentJnlBatchName);
    end;

    procedure SetName(CurrentJnlBatchName: Code[10]; var ReqLine: Record "Requisition Line")
    begin
        ReqLine.FilterGroup := 2;
        ReqLine.SetRange("Journal Batch Name", CurrentJnlBatchName);
        ReqLine.FilterGroup := 0;
        if ReqLine.Find('-') then;
    end;

    procedure LookupName(var CurrentJnlBatchName: Code[10]; var ReqLine: Record "Requisition Line")
    var
        ReqWkshName: Record "Requisition Wksh. Name";
    begin
        Commit();
        ReqWkshName."Worksheet Template Name" := ReqLine.GetRangeMax("Worksheet Template Name");
        ReqWkshName.Name := ReqLine.GetRangeMax("Journal Batch Name");
        ReqWkshName.FilterGroup(2);
        ReqWkshName.SetRange("Worksheet Template Name", ReqWkshName."Worksheet Template Name");
        ReqWkshName.FilterGroup(0);
        OnBeforeLookupName(ReqWkshName);
        if PAGE.RunModal(0, ReqWkshName) = ACTION::LookupOK then begin
            CurrentJnlBatchName := ReqWkshName.Name;
            SetName(CurrentJnlBatchName, ReqLine);
        end;
    end;

    procedure GetDescriptionAndRcptName(var ReqLine: Record "Requisition Line"; var Description: Text[100]; var BuyFromVendorName: Text[100])
    var
        Vend: Record Vendor;
        GLAcc: Record "G/L Account";
    begin
        if ReqLine."No." = '' then
            Description := ''
        else
            if (ReqLine.Type <> LastReqLine.Type) or
               (ReqLine."No." <> LastReqLine."No.")
            then
                case ReqLine.Type of
                    ReqLine.Type::"G/L Account":
                        if GLAcc.Get(ReqLine."No.") then
                            Description := GLAcc.Name
                        else
                            Description := '';
                end;

        OnGetDescriptionAndRcptNameOnAfterSetDescription(ReqLine, LastReqLine, Description);

        if ReqLine."Vendor No." = '' then
            BuyFromVendorName := ''
        else
            if ReqLine."Vendor No." <> LastReqLine."Vendor No." then
                if Vend.Get(ReqLine."Vendor No.") then
                    BuyFromVendorName := Vend.Name
                else
                    BuyFromVendorName := '';

        LastReqLine := ReqLine;
        OnAfterGetDescriptionAndRcptName(ReqLine, Description, BuyFromVendorName, LastReqLine);
    end;

    procedure SetUpNewLine(var ReqLine: Record "Requisition Line"; LastReqLine: Record "Requisition Line")
    begin
        ReqLine.Type := LastReqLine.Type;
        ReqLine."Recurring Method" := LastReqLine."Recurring Method";
        ReqLine."Order Date" := LastReqLine."Order Date";

        OnAfterSetUpNewLine(ReqLine, LastReqLine);
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetDescriptionAndRcptName(var ReqLine: Record "Requisition Line"; var Description: Text[100]; var BuyFromVendorName: Text[100]; var LastReqLine: Record "Requisition Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSetUpNewLine(var ReqLine: Record "Requisition Line"; var LastReqLine: Record "Requisition Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeLookupName(var ReqWkshName: Record "Requisition Wksh. Name")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOpenJnl(var CurrentJnlBatchName: Code[10]; var ReqLine: Record "Requisition Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnWkshTemplateSelectionSetFilter(var ReqWkshTemplate: Record "Req. Wksh. Template"; var Type: Enum "Req. Worksheet Template Type")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnGetDescriptionAndRcptNameOnAfterSetDescription(var RequisitionLine: Record "Requisition Line"; LastRequisitionLine: Record "Requisition Line"; var Description: Text[100])
    begin
    end;

    /// <summary>
    /// Raised before template selection in OpenJnlBatch to allow modification of the worksheet template type list.
    /// </summary>
    /// <param name="RequisitionWkshName">The requisition worksheet name record.</param>
    /// <param name="ReqWorksheetTemplateTypeList">The list of worksheet template types to be used for selection.</param>
    [IntegrationEvent(false, false)]
    local procedure OnOpenJnlBatchOnBeforeTemplateSelection(var RequisitionWkshName: Record "Requisition Wksh. Name"; var ReqWorksheetTemplateTypeList: List of [Enum Microsoft.Inventory.Requisition."Req. Worksheet Template Type"])
    begin
    end;
}