Table 175 Standard Vendor Purchase Code, source in 29

Source29

src/Layers/W1/BaseApp/Purchases/Document/StandardVendorPurchaseCode.Table.al352 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.Purchases.Document;

using Microsoft.Finance.Currency;
using Microsoft.Finance.Dimension;
using Microsoft.Foundation.ExtendedText;
using Microsoft.Purchases.Vendor;

table 175 "Standard Vendor Purchase Code"
{
    Caption = 'Standard Vendor Purchase Code';
    DataClassification = CustomerContent;

    fields
    {
        field(1; "Vendor No."; Code[20])
        {
            Caption = 'Vendor No.';
            ToolTip = 'Specifies the number of the vendor to which the standard purchase code is assigned.';
            NotBlank = true;
            TableRelation = Vendor;
        }
        field(2; "Code"; Code[10])
        {
            Caption = 'Code';
            ToolTip = 'Specifies a standard purchase code from the Standard Purchase Code table.';
            NotBlank = true;
            TableRelation = "Standard Purchase Code";

            trigger OnValidate()
            var
                StdPurchCode: Record "Standard Purchase Code";
            begin
                if Code = '' then
                    exit;
                StdPurchCode.Get(Code);
                Description := StdPurchCode.Description;
                "Currency Code" := StdPurchCode."Currency Code";
            end;
        }
        field(3; Description; Text[100])
        {
            Caption = 'Description';
            ToolTip = 'Specifies a description of the standard purchase code.';
        }
        field(13; "Currency Code"; Code[10])
        {
            Caption = 'Currency Code';
            Editable = false;
            TableRelation = Currency;
        }
        field(15; "Insert Rec. Lines On Quotes"; Option)
        {
            Caption = 'Insert Rec. Lines On Quotes';
            ToolTip = 'Specifies how you want to use standard purchase codes on purchase quotes.';
            DataClassification = SystemMetadata;
            OptionCaption = 'Manual,Automatic,Always Ask';
            OptionMembers = Manual,Automatic,"Always Ask";
        }
        field(16; "Insert Rec. Lines On Orders"; Option)
        {
            Caption = 'Insert Rec. Lines On Orders';
            ToolTip = 'Specifies how you want to use standard purchase codes on purchase orders.';
            DataClassification = SystemMetadata;
            OptionCaption = 'Manual,Automatic,Always Ask';
            OptionMembers = Manual,Automatic,"Always Ask";
        }
        field(17; "Insert Rec. Lines On Invoices"; Option)
        {
            Caption = 'Insert Rec. Lines On Invoices';
            ToolTip = 'Specifies how you want to use standard purchase codes on purchase invoices.';
            DataClassification = SystemMetadata;
            OptionCaption = 'Manual,Automatic,Always Ask';
            OptionMembers = Manual,Automatic,"Always Ask";
        }
        field(18; "Insert Rec. Lines On Cr. Memos"; Option)
        {
            Caption = 'Insert Rec. Lines On Cr. Memos';
            ToolTip = 'Specifies how you want to use standard purchase codes on purchase credit memos.';
            DataClassification = SystemMetadata;
            OptionCaption = 'Manual,Automatic,Always Ask';
            OptionMembers = Manual,Automatic,"Always Ask";
        }
    }

    keys
    {
        key(Key1; "Vendor No.", "Code")
        {
            Clustered = true;
        }
        key(Key2; Code, "Currency Code")
        {
        }
    }

    fieldgroups
    {
    }

    trigger OnRename()
    begin
        Error(RenameErr);
    end;

    var
        RenameErr: Label 'You cannot rename the line.';

    procedure InsertPurchLines(PurchHeader: Record "Purchase Header")
    var
        StdVendPurchCode: Record "Standard Vendor Purchase Code";
        StdVendPurchCodes: Page "Standard Vendor Purchase Codes";
        IsHandled: Boolean;
    begin
        PurchHeader.TestField("No.");
        PurchHeader.TestField("Buy-from Vendor No.");

        StdVendPurchCode.FilterGroup := 2;
        StdVendPurchCode.SetRange("Vendor No.", PurchHeader."Buy-from Vendor No.");
        StdVendPurchCode.FilterGroup := 0;

        IsHandled := false;
        OnInsertPurchLinesOnBeforeApplyStdVendPurchCodes(StdVendPurchCode, IsHandled, PurchHeader);
        if not IsHandled then begin
            StdVendPurchCodes.SetTableView(StdVendPurchCode);
            StdVendPurchCodes.LookupMode(true);
            if StdVendPurchCodes.RunModal() = ACTION::LookupOK then begin
                StdVendPurchCodes.GetSelected(StdVendPurchCode);
                if StdVendPurchCode.FindSet() then
                    repeat
                        ApplyStdCodesToPurchaseLines(PurchHeader, StdVendPurchCode);
                    until StdVendPurchCode.Next() = 0;
            end;
        end;
    end;

    procedure ApplyStdCodesToPurchaseLines(PurchHeader: Record "Purchase Header"; StdVendPurchCode: Record "Standard Vendor Purchase Code")
    var
        Currency: Record Currency;
        PurchLine: Record "Purchase Line";
        StdPurchLine: Record "Standard Purchase Line";
        StdPurchCode: Record "Standard Purchase Code";
        Factor: Integer;
        IsHandled: Boolean;
    begin
        Currency.Initialize(PurchHeader."Currency Code");

        StdVendPurchCode.TestField(Code);
        StdVendPurchCode.TestField("Vendor No.", PurchHeader."Buy-from Vendor No.");
        StdPurchCode.Get(StdVendPurchCode.Code);
        StdPurchCode.TestField("Currency Code", PurchHeader."Currency Code");
        StdPurchLine.SetRange("Standard Purchase Code", StdVendPurchCode.Code);

        PurchLine."Document Type" := PurchHeader."Document Type";
        PurchLine."Document No." := PurchHeader."No.";
        PurchLine.SetRange("Document Type", PurchHeader."Document Type");
        PurchLine.SetRange("Document No.", PurchHeader."No.");
        if PurchHeader."Prices Including VAT" then
            Factor := 1
        else
            Factor := 0;

        OnApplyStdCodesToPurchaseLinesOnBeforeStdPurchLineFind(Rec, StdPurchLine, PurchLine, PurchHeader, StdPurchCode);
        PurchLine.LockTable();
        StdPurchLine.LockTable();
        if StdPurchLine.Find('-') then
            repeat
                PurchLine.Init();
                PurchLine.SetPurchHeader(PurchHeader);
                PurchLine."Line No." := 0;
                PurchLine.Validate(Type, StdPurchLine.Type);

                IsHandled := false;
                OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine(Rec, StdPurchLine, PurchLine, PurchHeader, StdPurchCode, IsHandled);
                if not IsHandled then
                    if StdPurchLine.Type = StdPurchLine.Type::" " then begin
                        PurchLine.Validate("No.", StdPurchLine."No.");
                        PurchLine.Description := StdPurchLine.Description;
                        PurchLine."Buy-from Vendor No." := PurchHeader."Buy-from Vendor No.";
                    end else
                        if not StdPurchLine.EmptyLine() then begin
                            StdPurchLine.TestField("No.");
                            PurchLine.Validate("No.", StdPurchLine."No.");
                            if StdPurchLine."Variant Code" <> '' then
                                PurchLine.Validate("Variant Code", StdPurchLine."Variant Code");
                            PurchLine.Validate(Quantity, StdPurchLine.Quantity);
                            if StdPurchLine."Unit of Measure Code" <> '' then
                                PurchLine.Validate("Unit of Measure Code", StdPurchLine."Unit of Measure Code");
                            if StdPurchLine.Description <> '' then
                                PurchLine.Validate(Description, StdPurchLine.Description);
                            if (StdPurchLine.Type = StdPurchLine.Type::"G/L Account") or
                               (StdPurchLine.Type = StdPurchLine.Type::"Charge (Item)")
                            then
                                PurchLine.Validate(
                                  "Direct Unit Cost",
                                  Round(StdPurchLine."Amount Excl. VAT" *
                                    (PurchLine."VAT %" / 100 * Factor + 1), Currency."Unit-Amount Rounding Precision"));
                        end;

                PurchLine."Shortcut Dimension 1 Code" := StdPurchLine."Shortcut Dimension 1 Code";
                PurchLine."Shortcut Dimension 2 Code" := StdPurchLine."Shortcut Dimension 2 Code";

                CombineDimensions(PurchLine, StdPurchLine);
                OnBeforeApplyStdCodesToPurchaseLines(PurchLine, StdPurchLine);
                if StdPurchLine.InsertLine() then begin
                    PurchLine."Line No." := GetNextLineNo(PurchLine);
                    PurchLine.Insert(true);
                    OnApplyStdCodesToPurchaseLinesOnAfterPurchLineInsert(PurchLine, PurchHeader, StdPurchLine);
                    InsertExtendedText(PurchLine, PurchHeader);
                end;
            until StdPurchLine.Next() = 0;

        OnAfterApplyStdCodesToPurchaseLines(Rec, StdPurchLine, PurchLine, PurchHeader, StdPurchCode);
    end;

    local procedure CombineDimensions(var PurchaseLine: Record "Purchase Line"; StdPurchaseLine: Record "Standard Purchase Line")
    var
        DimensionManagement: Codeunit DimensionManagement;
        DimensionSetIDArr: array[10] of Integer;
    begin
        DimensionSetIDArr[1] := PurchaseLine."Dimension Set ID";
        DimensionSetIDArr[2] := StdPurchaseLine."Dimension Set ID";

        PurchaseLine."Dimension Set ID" :=
          DimensionManagement.GetCombinedDimensionSetID(
            DimensionSetIDArr, PurchaseLine."Shortcut Dimension 1 Code", PurchaseLine."Shortcut Dimension 2 Code");

        OnAfterCombineDimensions(PurchaseLine, StdPurchaseLine);
    end;

    procedure InsertExtendedText(PurchLine: Record "Purchase Line")
    var
        TransferExtendedText: Codeunit "Transfer Extended Text";
    begin
        if PurchLine.Type = PurchLine.Type::" " then
            exit;
        if TransferExtendedText.PurchCheckIfAnyExtText(PurchLine, false) then
            TransferExtendedText.InsertPurchExtText(PurchLine);
    end;

    procedure InsertExtendedText(PurchLine: Record "Purchase Line"; PurchaseHeader: Record "Purchase Header")
    var
        TransferExtendedText: Codeunit "Transfer Extended Text";
    begin
        if TransferExtendedText.PurchCheckIfAnyExtText(PurchLine, false, PurchaseHeader) then
            TransferExtendedText.InsertPurchExtText(PurchLine);
    end;

    procedure GetNextLineNo(PurchLine: Record "Purchase Line"): Integer
    begin
        PurchLine.SetRange("Document Type", PurchLine."Document Type");
        PurchLine.SetRange("Document No.", PurchLine."Document No.");
        if PurchLine.FindLast() then
            exit(PurchLine."Line No." + 10000);

        exit(10000);
    end;

    procedure SetFilterByAutomaticAndAlwaysAskCodes(PurchaseHeader: Record "Purchase Header")
    begin
        SetRange("Vendor No.", PurchaseHeader."Buy-from Vendor No.");
        SetRange("Currency Code", PurchaseHeader."Currency Code");
        case PurchaseHeader."Document Type" of
            PurchaseHeader."Document Type"::Quote:
                SetFilter("Insert Rec. Lines On Quotes", '<>%1', "Insert Rec. Lines On Quotes"::Manual);
            PurchaseHeader."Document Type"::Order:
                SetFilter("Insert Rec. Lines On Orders", '<>%1', "Insert Rec. Lines On Orders"::Manual);
            PurchaseHeader."Document Type"::Invoice:
                SetFilter("Insert Rec. Lines On Invoices", '<>%1', "Insert Rec. Lines On Invoices"::Manual);
            PurchaseHeader."Document Type"::"Credit Memo":
                SetFilter("Insert Rec. Lines On Cr. Memos", '<>%1', "Insert Rec. Lines On Cr. Memos"::Manual);
        end;
        OnAfterSetFilterByAutomaticAndAlwaysAskCodes(Rec, PurchaseHeader);
    end;

    procedure IsInsertRecurringLinesOnDocumentAutomatic(PurchaseHeader: Record "Purchase Header"): Boolean
    begin
        case PurchaseHeader."Document Type" of
            PurchaseHeader."Document Type"::Quote:
                exit("Insert Rec. Lines On Quotes" = "Insert Rec. Lines On Quotes"::Automatic);
            PurchaseHeader."Document Type"::Order:
                exit("Insert Rec. Lines On Orders" = "Insert Rec. Lines On Orders"::Automatic);
            PurchaseHeader."Document Type"::Invoice:
                exit("Insert Rec. Lines On Invoices" = "Insert Rec. Lines On Invoices"::Automatic);
            PurchaseHeader."Document Type"::"Credit Memo":
                exit("Insert Rec. Lines On Cr. Memos" = "Insert Rec. Lines On Cr. Memos"::Automatic);
            else
                exit(false);
        end;
    end;

    procedure ShouldAutoInsertRecurringLinesOnDocument(PurchaseHeader: Record "Purchase Header"): Boolean
    begin
        case PurchaseHeader."Document Type" of
            PurchaseHeader."Document Type"::Quote:
                exit("Insert Rec. Lines On Quotes" <> "Insert Rec. Lines On Quotes"::Manual);
            PurchaseHeader."Document Type"::Order:
                exit("Insert Rec. Lines On Orders" <> "Insert Rec. Lines On Orders"::Manual);
            PurchaseHeader."Document Type"::Invoice:
                exit("Insert Rec. Lines On Invoices" <> "Insert Rec. Lines On Invoices"::Manual);
            PurchaseHeader."Document Type"::"Credit Memo":
                exit("Insert Rec. Lines On Cr. Memos" <> "Insert Rec. Lines On Cr. Memos"::Manual);
            else
                exit(false);
        end;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeApplyStdCodesToPurchaseLines(var PurchLine: Record "Purchase Line"; StdPurchLine: Record "Standard Purchase Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterCombineDimensions(var PurchaseLine: Record "Purchase Line"; StdPurchaseLine: Record "Standard Purchase Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterApplyStdCodesToPurchaseLines(var StandardVendorPurchaseCode: Record "Standard Vendor Purchase Code"; var StandardPurchaseLine: Record "Standard Purchase Line"; var PurchaseLine: Record "Purchase Line"; PurchaseHeader: Record "Purchase Header"; StandardPurchaseCode: Record "Standard Purchase Code")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnApplyStdCodesToPurchaseLinesOnBeforeStdPurchLineFind(var StandardVendorPurchaseCode: Record "Standard Vendor Purchase Code"; var StandardPurchaseLine: Record "Standard Purchase Line"; var PurchaseLine: Record "Purchase Line"; PurchaseHeader: Record "Purchase Header"; StandardPurchaseCode: Record "Standard Purchase Code")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnApplyStdCodesToPurchaseLinesOnLoopStdPurchLine(var StandardVendorPurchaseCode: Record "Standard Vendor Purchase Code"; var StandardPurchaseLine: Record "Standard Purchase Line"; var PurchaseLine: Record "Purchase Line"; var PurchaseHeader: Record "Purchase Header"; var StandardPurchaseCode: Record "Standard Purchase Code"; var IsHandled: Boolean)
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnApplyStdCodesToPurchaseLinesOnAfterPurchLineInsert(var PurchaseLine: Record "Purchase Line"; var PurchaseHeader: Record "Purchase Header"; var StandardPurchaseLine: Record "Standard Purchase Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnInsertPurchLinesOnBeforeApplyStdVendPurchCodes(var StandardVendorPurchaseCode: Record "Standard Vendor Purchase Code"; var IsHandled: Boolean; var PurchaseHeader: Record "Purchase Header")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSetFilterByAutomaticAndAlwaysAskCodes(var StandardVendorPurchaseCode: Record "Standard Vendor Purchase Code"; var PurchaseHeader: Record "Purchase Header")
    begin
    end;
}