Codeunit 7029 Price List Line - Price

App
Base Application
Namespace
Microsoft.Pricing.PriceList
Versions
17-28

Procedures, 16Events, 4

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Pricing/PriceList/PriceListLinePrice.Codeunit.al189 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.Pricing.PriceList;

using Microsoft.Pricing.Asset;
using Microsoft.Pricing.Calculation;
using Microsoft.Pricing.Source;

codeunit 7029 "Price List Line - Price" implements "Line With Price"
{
    var
        PriceListHeader: Record "Price List Header";
        PriceListLine: Record "Price List Line";
        PriceSourceList: codeunit "Price Source List";
        CurrPriceType: Enum "Price Type";
        PriceCalculated: Boolean;

    procedure GetTableNo(): Integer
    begin
        exit(Database::"Price List Line")
    end;

    procedure SetLine(PriceType: Enum "Price Type"; Line: Variant)
    begin
        PriceListLine := Line;
        CurrPriceType := PriceType;
        PriceCalculated := false;
        AddSources();
    end;

    procedure SetLine(PriceType: Enum "Price Type"; Header: Variant; Line: Variant)
    begin
        ClearAll();
        PriceListHeader := Header;
        SetLine(PriceType, Line);
    end;

    procedure SetSources(var NewPriceSourceList: codeunit "Price Source List")
    begin
        PriceSourceList.Copy(NewPriceSourceList);
    end;

    procedure GetLine(var Line: Variant)
    begin
        Line := PriceListLine;
    end;

    procedure GetLine(var Header: Variant; var Line: Variant)
    begin
        Header := PriceListHeader;
        Line := PriceListLine;
    end;

    procedure GetPriceType(): Enum "Price Type"
    begin
        exit(CurrPriceType);
    end;

    procedure IsPriceUpdateNeeded(AmountType: enum "Price Amount Type"; FoundPrice: Boolean; CalledByFieldNo: Integer) Result: Boolean;
    begin
        Result := true
    end;

    procedure IsDiscountAllowed() Result: Boolean;
    begin
        Result := false;
    end;

    procedure Verify()
    begin
        PriceListLine.TestField("Asset Type");
        PriceListLine.TestField("Asset No.");
    end;

    procedure SetAssetSourceForSetup(var DtldPriceCalculationSetup: Record "Dtld. Price Calculation Setup"): Boolean
    begin
        DtldPriceCalculationSetup.Init();
        DtldPriceCalculationSetup.Type := CurrPriceType;
        DtldPriceCalculationSetup.Method := DtldPriceCalculationSetup.Method::"Lowest Price";
        DtldPriceCalculationSetup."Asset Type" := GetAssetType();
        DtldPriceCalculationSetup."Asset No." := PriceListLine."Asset No.";
        exit(PriceSourceList.GetSourceGroup(DtldPriceCalculationSetup));
    end;

    local procedure SetAssetSource(var PriceCalculationBuffer: Record "Price Calculation Buffer"): Boolean
    begin
        PriceCalculationBuffer."Price Type" := CurrPriceType;
        PriceCalculationBuffer."Asset Type" := GetAssetType();
        PriceCalculationBuffer."Asset No." := PriceListLine."Asset No.";
        exit((PriceCalculationBuffer."Asset Type" <> PriceCalculationBuffer."Asset Type"::" ") and (PriceCalculationBuffer."Asset No." <> ''));
    end;

    procedure GetAssetType() AssetType: Enum "Price Asset Type";
    begin
        exit(PriceListLine."Asset Type");
    end;

    procedure CopyToBuffer(var PriceCalculationBufferMgt: Codeunit "Price Calculation Buffer Mgt."): Boolean
    var
        PriceCalculationBuffer: Record "Price Calculation Buffer";
    begin
        PriceCalculationBuffer.Init();
        if not SetAssetSource(PriceCalculationBuffer) then
            exit(false);

        FillBuffer(PriceCalculationBuffer);
        PriceCalculationBufferMgt.Set(PriceCalculationBuffer, PriceSourceList);
        exit(true);
    end;

    local procedure FillBuffer(var PriceCalculationBuffer: Record "Price Calculation Buffer")
    begin
        PriceCalculationBuffer."Price Calculation Method" :=
            PriceCalculationBuffer."Price Calculation Method"::"Lowest Price";
        PriceCalculationBuffer."Variant Code" := PriceListLine."Variant Code";
        PriceCalculationBuffer."Work Type Code" := PriceListLine."Work Type Code";
        PriceCalculationBuffer."Document Date" := GetDocumentDate();

        // Currency
        PriceCalculationBuffer.Validate("Currency Code", PriceListLine."Currency Code");

        // Tax
        PriceCalculationBuffer."Prices Including Tax" := PriceListLine."Price Includes VAT";

        // UoM
        PriceCalculationBuffer.Quantity := 1;
        PriceCalculationBuffer."Unit of Measure Code" := PriceListLine."Unit of Measure Code";
        PriceCalculationBuffer."Qty. per Unit of Measure" := 1;
        // Discounts
        PriceCalculationBuffer."Line Discount %" := PriceListLine."Line Discount %";
        PriceCalculationBuffer."Allow Line Disc." := IsDiscountAllowed();
        PriceCalculationBuffer."Allow Invoice Disc." := PriceListLine."Allow Invoice Disc.";
        OnAfterFillBuffer(PriceCalculationBuffer, PriceListHeader, PriceListLine);
    end;

    local procedure AddSources()
    begin
        PriceSourceList.Init();
        PriceSourceList.Add(PriceListLine."Source Type");
        OnAfterAddSources(PriceListHeader, PriceListLine, CurrPriceType, PriceSourceList);
    end;

    local procedure GetDocumentDate() DocumentDate: Date;
    begin
        DocumentDate := WorkDate();
        OnAfterGetDocumentDate(DocumentDate, PriceListLine);
    end;

    procedure SetPrice(AmountType: Enum "Price Amount Type"; FromPriceListLine: Record "Price List Line")
    begin
        PriceListLine := FromPriceListLine;
        OnAfterSetPrice(PriceListLine, FromPriceListLine, AmountType);
    end;

    procedure ValidatePrice(AmountType: enum "Price Amount Type")
    begin
    end;

    procedure Update(AmountType: enum "Price Amount Type")
    begin
        if not PriceListLine."Allow Line Disc." then
            PriceListLine."Line Discount %" := 0;
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterAddSources(
        PriceListHeader: Record "Price List Header"; PriceListLine: Record "Price List Line";
        PriceType: Enum "Price Type"; var PriceSourceList: Codeunit "Price Source List")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterFillBuffer(
        var PriceCalculationBuffer: Record "Price Calculation Buffer"; PriceListHeader: Record "Price List Header"; PriceListLine: Record "Price List Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetDocumentDate(var DocumentDate: Date; PriceListLine: Record "Price List Line")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterSetPrice(var ToPriceListLine: Record "Price List Line"; FromPriceListLine: Record "Price List Line"; AmountType: Enum "Price Amount Type")
    begin
    end;
}