Page 7022 Price Worksheet, source in 29

Source29

src/Layers/W1/BaseApp/Pricing/Worksheet/PriceWorksheet.Page.al866 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.Worksheet;

using Microsoft.Pricing.Calculation;
using Microsoft.Pricing.PriceList;
using Microsoft.Pricing.Source;
using Microsoft.Projects.Project.Pricing;
using Microsoft.Purchases.Pricing;
using Microsoft.Sales.Pricing;
using System.Environment.Configuration;
using System.Integration.Excel;

page 7022 "Price Worksheet"
{
    Caption = 'Price Worksheet';
    PageType = Worksheet;
    DelayedInsert = true;
    SaveValues = true;
    SourceTable = "Price Worksheet Line";
    ApplicationArea = Basic, Suite;
    UsageCategory = Tasks;

    layout
    {
        area(content)
        {
            group(General)
            {
                Caption = 'General';
                field(PriceTypeFilter; PriceType)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Price Type';
                    ToolTip = 'Specifies a filter for which prices to display: sale or purchase.';

                    trigger OnValidate()
                    begin
                        InitSourceGroup();
                        SetRecFilters();
                    end;
                }
                field(Defaults; Defaults)
                {
                    ApplicationArea = Basic, Suite;
                    Editable = false;
                    Caption = 'Defaults';
                    ToolTip = 'Specifies the fields of the price list header that is used as defaults for new lines created in the worksheet.';
                    trigger OnDrillDown()
                    begin
                        ShowPriceListFilters();
                    end;
                }
                field(SourceGroupFilter; SourceGroup)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Assign-to Group';
                    ToolTip = 'Specifies a filter for which group the prices apply to: customer, vendor, or project.';

                    trigger OnValidate()
                    begin
                        InitSourceGroup();
                        SetRecFilters();
                    end;
                }
                field(ModifyExistingLines; UpdateMultiplePriceLists)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Update multiple price lists';
                    ToolTip = 'Specifies if the worksheet is in the mode when user can add new lines and modify the existing lines suggested by the copy lines action.';
                    trigger OnValidate()
                    begin
                        CurrPage.SaveRecord();
                        CurrPage.Update(false);
                    end;
                }
            }
            repeater(Lines)
            {
                ShowCaption = false;
                field("Price List Code"; Rec."Price List Code")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = UpdateMultiplePriceLists;
                    Editable = false;

                    trigger OnDrillDown()
                    var
                        PriceUXManagement: Codeunit "Price UX Management";
                    begin
                        PriceUXManagement.EditPriceList(Rec."Price List Code");
                    end;
                }
                field("Existing Line"; Rec."Existing Line")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = UpdateMultiplePriceLists;
                    Editable = false;
                }
                field(Status; Rec.Status)
                {
                    ApplicationArea = Basic, Suite;
                    Editable = false;
                    Style = Attention;
                    StyleExpr = ModifiedLine;
                }
                field(CustomerSourceType; CustomerSourceType)
                {
                    ApplicationArea = All;
                    Importance = Promoted;
                    Caption = 'Assign-to Type';
                    Visible = CustomerSourceTypeVisible;
                    ToolTip = 'Specifies the type of entity to which the price list is assigned. The options are relevant to the entity you are currently viewing.';

                    trigger OnValidate()
                    begin
                        ValidateSourceType(CustomerSourceType.AsInteger());
                    end;
                }
                field(VendorSourceType; VendorSourceType)
                {
                    ApplicationArea = All;
                    Importance = Promoted;
                    Caption = 'Assign-to Type';
                    Visible = VendorSourceTypeVisible;
                    ToolTip = 'Specifies the type of entity to which the price list is assigned. The options are relevant to the entity you are currently viewing.';

                    trigger OnValidate()
                    begin
                        ValidateSourceType(VendorSourceType.AsInteger());
                    end;
                }
                field(JobSourceType; JobSourceType)
                {
                    ApplicationArea = All;
                    Importance = Promoted;
                    Caption = 'Assign-to Type';
                    Visible = JobSourceGroup;
                    ToolTip = 'Specifies the type of entity to which the price list is assigned. The options are relevant to the entity you are currently viewing.';

                    trigger OnValidate()
                    begin
                        ValidateSourceType(JobSourceType.AsInteger());
                    end;
                }
                field("Parent Source No."; Rec."Parent Source No.")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = ParentSourceNoVisible;
                    Editable = ParentSourceNoEditable;
                    ShowMandatory = ParentSourceEditable;
                }
                field("Source No."; Rec."Source No.")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = SourceEditable;
                    ShowMandatory = SourceEditable;
                    Visible = UseCustomLookup;
                }
                field("Assign-to Parent No."; Rec."Assign-to Parent No.")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = AssignToParentNoVisible;
                    Editable = ParentSourceEditable;
                    ShowMandatory = ParentSourceEditable;
                }
                field("Assign-to No."; Rec."Assign-to No.")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = SourceEditable;
                    ShowMandatory = SourceEditable;
                    Visible = not UseCustomLookup;
                }
                field("Asset Type"; Rec."Asset Type")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = ProductTypeEditable;
                }
                field("Asset No."; Rec."Asset No.")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = PriceLineEditable;
                    ShowMandatory = true;
                    Visible = UseCustomLookup;
                }
                field("Product No."; Rec."Product No.")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = PriceLineEditable;
                    ShowMandatory = true;
                    Visible = not UseCustomLookup;
                }
                field("Variant Code"; Rec."Variant Code")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = VariantCodeVisible;
                    Editable = VariantCodeEditable;
                }
                field("Variant Code Lookup"; Rec."Variant Code Lookup")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = VariantCodeLookupVisible;
                    Editable = VariantCodeEditable;
                }
                field("Work Type Code"; Rec."Work Type Code")
                {
                    ApplicationArea = Jobs;
                    Visible = ResourceAssetVisible;
                    Editable = WorkTypeCodeEditable;
                }
                field("Currency Code"; Rec."Currency Code")
                {
                    ApplicationArea = Suite;
                    Editable = DateEditable;
                }
                field("Unit of Measure Code"; Rec."Unit of Measure Code")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = UoMVisible;
                    Editable = PriceLineEditable;
                }
                field("Unit of Measure Code Lookup"; Rec."Unit of Measure Code Lookup")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = UoMLookupVisible;
                    Editable = PriceLineEditable;
                }
                field("Minimum Quantity"; Rec."Minimum Quantity")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = PriceLineEditable;
                }
                field("Amount Type"; Rec."Amount Type")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = AmountTypeIsVisible;
                    Editable = AmountTypeIsEditable;
                }
                field("Existing Unit Price"; Rec."Existing Unit Price")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = SalesPriceVisible;
                }
                field("Unit Price"; Rec."Unit Price")
                {
                    Caption = 'New Unit Price';
                    ApplicationArea = Basic, Suite;
                    Visible = SalesPriceVisible;
                    Editable = UnitPriceEditable;
                    Style = Attention;
                    StyleExpr = ModifiedUnitPrice and SalesPriceLine and PriceEditable;
                }
                field("Cost Factor"; Rec."Cost Factor")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = SalesPriceVisible;
                    Editable = UnitPriceEditable;
                }
                field("Existing Direct Unit Cost"; Rec."Existing Direct Unit Cost")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = PurchPriceVisible;
                }
                field("Direct Unit Cost"; Rec."Direct Unit Cost")
                {
                    Caption = 'New Direct Unit Cost';
                    ApplicationArea = Basic, Suite;
                    Visible = PurchPriceVisible;
                    Editable = UnitPriceEditable;
                    Style = Attention;
                    StyleExpr = ModifiedDirectUnitCost and PurchPriceLine and PriceEditable;
                }
                field("Existing Unit Cost"; Rec."Existing Unit Cost")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = PurchPriceVisible;
                }
                field("Unit Cost"; Rec."Unit Cost")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = PurchPriceVisible;
                    Editable = UnitPriceEditable;
                    Style = Attention;
                    StyleExpr = ModifiedUnitCost and PurchPriceLine and PriceEditable;
                }
                field("Line Discount %"; Rec."Line Discount %")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = DiscountVisible;
                    Editable = LineDiscountEditable;
                }
                field("Starting Date"; Rec."Starting Date")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = DateEditable;
                }
                field("Ending Date"; Rec."Ending Date")
                {
                    ApplicationArea = Basic, Suite;
                    Editable = DateEditable;
                }
                field("Allow Line Disc."; Rec."Allow Line Disc.")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = PriceVisible;
                    Editable = PriceLineEditable;
                }
                field("Allow Invoice Disc."; Rec."Allow Invoice Disc.")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = PriceVisible;
                    Editable = PriceLineEditable;
                }
                field("VAT Bus. Posting Gr. (Price)"; Rec."VAT Bus. Posting Gr. (Price)")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = false;
                    Editable = PriceLineEditable;
                    ToolTip = 'Specifies the VAT business posting group for customers for whom you want the price (which includes VAT) to apply.';
                }
                field("Price Includes VAT"; Rec."Price Includes VAT")
                {
                    ApplicationArea = Basic, Suite;
                    Visible = false;
                    Editable = PriceLineEditable;
                }
            }
        }
        area(factboxes)
        {
            systempart(Control1900383207; Links)
            {
                ApplicationArea = RecordLinks;
                Visible = false;
            }
            systempart(Control1905767507; Notes)
            {
                ApplicationArea = Notes;
                Visible = false;
            }
        }
    }

    actions
    {
        area(Navigation)
        {
            action(OpenPriceList)
            {
                ApplicationArea = All;
                Caption = 'Open Price List';
                Image = EditLines;
                Visible = LineExists;
                ToolTip = 'View or edit the price list.';

                trigger OnAction()
                var
                    PriceUXManagement: Codeunit "Price UX Management";
                begin
                    PriceUXManagement.EditPriceList(Rec."Price List Code");
                end;
            }

        }
        area(processing)
        {
            group("F&unctions")
            {
                Caption = 'F&unctions';
                Image = "Action";
                action(SuggestLines)
                {
                    ApplicationArea = Basic, Suite;
                    Ellipsis = true;
                    Image = SuggestItemPrice;
                    Caption = 'Suggest Lines';
                    ToolTip = 'Creates the sales price list lines based on the unit price in the product cards, like item or resource. Change the price list status to ''Draft'' to run this action.';

                    trigger OnAction()
                    begin
                        if DefaultPriceListCode = '' then
                            Error(DefinePriceListCodeErr);
                        PriceListManagement.AddLines(TempWorksheetPriceListHeader);
                        Defaults := GetDefaults();
                        CurrPage.Update(false);
                    end;
                }
                action(CopyLines)
                {
                    ApplicationArea = Basic, Suite;
                    Ellipsis = true;
                    Image = CopyWorksheet;
                    Enabled = CopyLinesEnabled;
                    Caption = 'Copy Lines';
                    ToolTip = 'Copies the lines from the existing price list. New prices can be adjusted by a factor and rounded differently. Change the price list status to ''Draft'' to run this action unless Allow Editing Active Price is enabled.';

                    trigger OnAction()
                    begin
                        if DefaultPriceListCode = '' then
                            Error(DefinePriceListCodeErr);
                        PriceListManagement.CopyLines(TempWorksheetPriceListHeader, UpdateMultiplePriceLists);
                        Defaults := GetDefaults();
                        CurrPage.Update(false);
                    end;
                }
                action(ImplementPriceChange)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'I&mplement Price Change';
                    Ellipsis = true;
                    Image = ImplementPriceChange;
                    Scope = Repeater;
                    ToolTip = 'Update the alternate prices with the ones in the Price Worksheet window.';

                    trigger OnAction()
                    var
                        PriceWorksheetLine: Record "Price Worksheet Line";
                    begin
                        CurrPage.SetSelectionFilter(PriceWorksheetLine);
                        if PriceWorksheetLine.Count() = 1 then begin
                            PriceWorksheetLine.Reset();
                            PriceWorksheetLine.SetRange("Price Type", PriceType);
                            PriceWorksheetLine.SetRange("Source Group", SourceGroup);
                        end;
                        PriceListManagement.ImplementNewPrices(PriceWorksheetLine);
                    end;
                }
            }
            group("Page")
            {
                Caption = 'Page';
                action(EditInExcel)
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Edit in Excel';
                    Image = Excel;
                    ToolTip = 'Send the data in the worksheet to an Excel file for analysis or editing.';
                    Visible = false; //IsSaaSExcelAddinEnabled;
                    AccessByPermission = System "Allow Action Export To Excel" = X;

                    trigger OnAction()
                    var
                        EditinExcel: Codeunit "Edit in Excel";
                        EditinExcelFilters: Codeunit "Edit in Excel Filters";
                    begin
                        EditinExcelFilters.AddFieldV2('Price_Type', Enum::"Edit in Excel Filter Type"::Equal, format(Rec."Price Type"), Enum::"Edit in Excel Edm Type"::"Edm.String");
                        EditinExcelFilters.AddFieldV2('Source_Group', Enum::"Edit in Excel Filter Type"::Equal, format(Rec."Source Group"), Enum::"Edit in Excel Edm Type"::"Edm.String");
                        EditinExcel.EditPageInExcel(CopyStr(CurrPage.Caption, 1, 240), Page::"Price Worksheet", EditinExcelFilters);
                    end;
                }
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process', Comment = 'Generated from the PromotedActionCategories property index 1.';

                actionref(ImplementPriceChange_Promoted; ImplementPriceChange)
                {
                }
                actionref(SuggestLines_Promoted; SuggestLines)
                {
                }
                actionref(CopyLines_Promoted; CopyLines)
                {
                }
                actionref(OpenPriceList_Promoted; OpenPriceList)
                {
                }
            }
            group(Category_Category4)
            {
                Caption = 'Page', Comment = 'Generated from the PromotedActionCategories property index 3.';
            }
            group(Category_Report)
            {
                Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
            }
        }
    }

    trigger OnInit()
    var
        FeaturePriceCalculation: Codeunit "Feature - Price Calculation";
    begin
        OnBeforeOnInit();
        FeaturePriceCalculation.FailIfFeatureDisabled();
    end;

    trigger OnNewRecord(BelowxRec: Boolean)
    begin
        Rec.SetNewRecord(true);
        Rec.TransferFields(TempWorksheetPriceListLine);
        Rec.Validate("Asset Type", xRec."Asset Type");
        Rec."Line No." := 0;
    end;

    trigger OnOpenPage()
    var
        PriceListLine: Record "Price List Line";
        ServerSetting: Codeunit "Server Setting";
    begin
        OnBeforeOpenPage(TempWorksheetPriceListHeader, TempWorksheetPriceListLine, UpdateMultiplePriceLists);

        UseCustomLookup := PriceListLine.UseCustomizedLookup();
        IsSaaSExcelAddinEnabled := ServerSetting.GetIsSaasExcelAddinEnabled();
        CopyLinesEnabled := PriceListManagement.VerifySourceGroupInLines();
        InitSourceGroup();
        UpdateSourceType();
        SetRecFilters();
    end;

    trigger OnAfterGetRecord()
    begin
        UpdateSourceType();
        SetFieldsStyle();
    end;

    trigger OnAfterGetCurrRecord()
    begin
        UpdateSourceType();
        SetEditableFields();
        LineExists := Rec."Price List Code" <> '';
    end;

    var
        CurrPriceListHeader: Record "Price List Header";
        TempWorksheetPriceListHeader: Record "Price List Header" temporary;
        TempWorksheetPriceListLine: Record "Price List Line" temporary;
        PriceListManagement: Codeunit "Price List Management";
        IsSaaSExcelAddinEnabled: Boolean;
        DefaultPriceListCode: Code[20];
        DefaultPriceListCodeLbl: Text;
        Defaults: Text;
        DefinePriceListCodeErr: Label 'Define the default price list.';
        DefinePriceListCodeLbl: Label 'Define the price list...';
        UpdateMultiplePriceLists: Boolean;
        DefaultsLbl: Label '%1 = %2; ', Locked = true;
        CopyLinesEnabled: Boolean;

    protected var
        CustomerSourceType: Enum "Sales Price Source Type";
        VendorSourceType: Enum "Purchase Price Source Type";
        JobSourceType: Enum "Job Price Source Type";
        PriceType: Enum "Price Type";
        SourceGroup: Enum "Price Source Group";
        AllowEditingActivePrice: Boolean;
        JobSourceGroup: Boolean;
        AllowUpdatingDefaults: Boolean;
        AmountTypeIsEditable: Boolean;
        AmountTypeIsVisible: Boolean;
        AssetTypeEditable: Boolean;
        DiscountEditable: Boolean;
        DiscountVisible: Boolean;
        ItemAsset: Boolean;
        ItemAssetVisible: Boolean;
        VariantCodeEditable: Boolean;
        LineExists: Boolean;
        ModifiedLine: Boolean;
        ModifiedUnitPrice: Boolean;
        ModifiedUnitCost: Boolean;
        ModifiedDirectUnitCost: Boolean;
        ParentSourceNoEditable: Boolean;
        ParentSourceEditable: Boolean;
        SourceEditable: Boolean;
        PriceEditable: Boolean;
        PriceLineEditable: Boolean;
        UnitPriceEditable: Boolean;
        ProductTypeEditable: Boolean;
        DateEditable: Boolean;
        LineDiscountEditable: Boolean;
        PriceVisible: Boolean;
        PurchPriceLine: Boolean;
        PurchVisible: Boolean;
        ResourceAsset: Boolean;
        ResourceAssetVisible: Boolean;
        SalesPriceLine: Boolean;
        SalesVisible: Boolean;
        SalesPriceVisible: Boolean;
        PurchPriceVisible: Boolean;
        SourceNoEditable: Boolean;
        SourceTypeEditable: Boolean;
        WorkTypeCodeEditable: Boolean;
        CustomerSourceTypeVisible: Boolean;
        VendorSourceTypeVisible: Boolean;
        AssignToParentNoVisible: Boolean;
        ParentSourceNoVisible: Boolean;
        VariantCodeVisible: Boolean;
        VariantCodeLookupVisible: Boolean;
        UoMLookupVisible: Boolean;
        UoMVisible: Boolean;
        UseCustomLookup: Boolean;

    procedure SetPriceType(NewPriceType: Enum "Price Type")
    begin
        PriceType := NewPriceType;
    end;

    local procedure CalcSourceNoEditable()
    begin
        SourceNoEditable := Rec.IsSourceNoAllowed();
    end;

    local procedure GetDefaults() Result: Text
    begin
        InitDefaultsLine(TempWorksheetPriceListHeader);

        Result := GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Source Type"), Format(TempWorksheetPriceListHeader."Source Type"), true);
        Result += GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Parent Source No."), TempWorksheetPriceListHeader."Parent Source No.", false);
        Result += GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Source No."), TempWorksheetPriceListHeader."Source No.", false);
        Result += GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Currency Code"), TempWorksheetPriceListHeader."Currency Code", false);
        Result += GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Starting Date"), format(TempWorksheetPriceListHeader."Starting Date"), false);
        Result += GetDefaults(TempWorksheetPriceListHeader.FieldCaption("Ending Date"), format(TempWorksheetPriceListHeader."Ending Date"), false);

        OnAfterGetDefaults(Result, TempWorksheetPriceListHeader);
    end;

    local procedure GetDefaults(FldName: Text; FldValue: Text; ShowBlank: Boolean): Text;
    begin
        if ShowBlank or (FldValue <> '') then
            exit(StrSubstNo(DefaultsLbl, FldName, FldValue))
    end;

    local procedure GetDefaultSourceType() DefaultSourceType: Enum "Price Source Type";
    begin
        case SourceGroup of
            SourceGroup::Customer:
                DefaultSourceType := Rec."Source Type"::"All Customers";
            SourceGroup::Vendor:
                DefaultSourceType := Rec."Source Type"::"All Vendors";
            SourceGroup::Job:
                DefaultSourceType := Rec."Source Type"::"All Jobs";
        end;
    end;

    local procedure InitDefaultsLine(TempWorksheetPriceListHeader: Record "Price List Header")
    begin
        TempWorksheetPriceListHeader."Allow Updating Defaults" := false;
        TempWorksheetPriceListLine.CopyFrom(TempWorksheetPriceListHeader);
        TempWorksheetPriceListLine."Amount Type" := TempWorksheetPriceListHeader."Amount Type";
    end;

    local procedure InitPriceType()
    begin
        if PriceType = PriceType::Any then
            PriceType := PriceType::Sale;
    end;

    local procedure InitSourceGroup()
    begin
        CurrPage.SaveRecord();

        InitPriceType();
        if SourceGroup = SourceGroup::All then
            SourceGroup := SourceGroup::Customer;
        case SourceGroup of
            SourceGroup::Customer:
                if PriceType = PriceType::Purchase then
                    SourceGroup := SourceGroup::Vendor;
            SourceGroup::Vendor:
                if PriceType = PriceType::Sale then
                    SourceGroup := SourceGroup::Customer;
        end;
        JobSourceGroup := SourceGroup = SourceGroup::Job;
        SetDefaultPriceListCode();
    end;

    local procedure SetDefaultPriceListCode()
    var
        xDefaultPriceListCode: Code[20];
    begin
        xDefaultPriceListCode := DefaultPriceListCode;
        DefaultPriceListCode := PriceListManagement.GetDefaultPriceListCode(PriceType, SourceGroup, false);
        UpdateDefaults(xDefaultPriceListCode);
        SetPriceListCodeInWorksheetLines();

        if DefaultPriceListCode = '' then
            DefaultPriceListCodeLbl := DefinePriceListCodeLbl
        else
            DefaultPriceListCodeLbl := DefaultPriceListCode;
        AllowEditingActivePrice := PriceListManagement.IsAllowedEditingActivePrice(PriceType);
    end;

    local procedure SetEditableFields()
    var
        PriceSource: Record "Price Source";
    begin
        if Rec."Price List Code" = '' then
            AllowUpdatingDefaults := true
        else
            if Rec."Price List Code" <> CurrPriceListHeader.Code then begin
                AllowUpdatingDefaults := true;
                if CurrPriceListHeader.Get(Rec."Price List Code") then
                    AllowUpdatingDefaults := CurrPriceListHeader."Allow Updating Defaults";
            end;

        PriceSource."Source Type" := Rec."Source Type";
        ParentSourceNoEditable := PriceSource.IsParentSourceAllowed();
        AmountTypeIsEditable := PriceLineEditable and (Rec."Asset Type" <> Rec."Asset Type"::"Item Discount Group");
        ItemAsset := Rec.IsAssetItem();
        ResourceAsset := Rec.IsAssetResource();
        PriceLineEditable := Rec.IsEditable();
        CalcSourceNoEditable();
        SetFieldsStyle();
    end;

    local procedure SetFieldsStyle()
    begin
        ModifiedUnitPrice := Rec."Existing Unit Price" <> Rec."Unit Price";
        ModifiedDirectUnitCost := Rec."Existing Direct Unit Cost" <> Rec."Direct Unit Cost";
        ModifiedUnitCost := Rec."Existing Unit Cost" <> Rec."Unit Cost";
        ModifiedLine := ModifiedUnitPrice or ModifiedDirectUnitCost or ModifiedUnitCost;
        SalesPriceLine := Rec."Price Type" = Rec."Price Type"::Sale;
        PurchPriceLine := Rec."Price Type" = Rec."Price Type"::Purchase;
        PriceEditable := Rec."Amount Type" in [Rec."Amount Type"::Any, Rec."Amount Type"::Price];
        DiscountEditable := Rec."Amount Type" in [Rec."Amount Type"::Any, Rec."Amount Type"::Discount];
        VariantCodeEditable := PriceLineEditable and ItemAsset;
        SourceEditable := PriceLineEditable and SourceNoEditable and AllowUpdatingDefaults;
        ParentSourceEditable := PriceLineEditable and ParentSourceNoEditable and AllowUpdatingDefaults;
        UnitPriceEditable := PriceLineEditable and PriceEditable;
        LineDiscountEditable := PriceLineEditable and DiscountEditable;
        DateEditable := PriceLineEditable and AllowUpdatingDefaults;
        ProductTypeEditable := PriceLineEditable and AssetTypeEditable;
        WorkTypeCodeEditable := PriceLineEditable and ResourceAsset;
    end;

    local procedure SetFilters()
    begin
        Rec.FilterGroup(2);
        Rec.SetRange("Price Type", PriceType);
        Rec.SetRange("Source Group", SourceGroup);
        Rec.FilterGroup(0);
    end;

    local procedure SetPriceListCodeInWorksheetLines()
    var
        PriceWorksheetLine: Record "Price Worksheet Line";
        NewPriceWorksheetLine: Record "Price Worksheet Line";
    begin
        if DefaultPriceListCode = '' then
            exit;
        PriceWorksheetLine.SetRange("Price Type", PriceType);
        PriceWorksheetLine.SetRange("Source Group", SourceGroup);
        PriceWorksheetLine.SetRange("Price List Code", '');
        if PriceWorksheetLine.FindSet(true) then
            repeat
                PriceWorksheetLine.Delete(true);
                NewPriceWorksheetLine := PriceWorksheetLine;
                NewPriceWorksheetLine."Price List Code" := DefaultPriceListCode;
                NewPriceWorksheetLine."Line No." := 0;
                NewPriceWorksheetLine.Insert(true);
            until PriceWorksheetLine.Next() = 0;
    end;

    local procedure SetRecFilters()
    begin
        SetFilters();
        SetVisibleFields();

        CurrPage.Update(false);
    end;

    local procedure SetVisibleFields()
    begin
        SalesVisible := PriceType = PriceType::Sale;
        PurchVisible := PriceType = PriceType::Purchase;

        AmountTypeIsVisible := true;//AmountTypeFilter = AmountTypeFilter::Any;
        PriceVisible := true;//AmountTypeFilter in [AmountTypeFilter::Any, AmountTypeFilter::Price];
        DiscountVisible := true;//AmountTypeFilter in [AmountTypeFilter::Any, AmountTypeFilter::Discount];

        ItemAssetVisible := true;//(PriceAsset."Asset Type" = "Price Asset Type"::" ") or PriceListLine.IsAssetItem();
        ResourceAssetVisible := true;//(PriceAsset."Asset Type" = "Price Asset Type"::" ") or PriceListLine.IsAssetResource();

        SourceTypeEditable := true;//PriceSource."Source Type" = PriceSource."Source Type"::All;
        AssetTypeEditable := true;//PriceAsset."Asset Type" = PriceAsset."Asset Type"::" ";

        SalesPriceVisible := PriceVisible and SalesVisible;
        PurchPriceVisible := PriceVisible and PurchVisible;
        CustomerSourceTypeVisible := SourceGroup = SourceGroup::Customer;
        VendorSourceTypeVisible := SourceGroup = SourceGroup::Vendor;
        ParentSourceNoVisible := JobSourceGroup and UseCustomLookup;
        AssignToParentNoVisible := JobSourceGroup and not UseCustomLookup;
        VariantCodeVisible := ItemAssetVisible and UseCustomLookup;
        VariantCodeLookupVisible := ItemAssetVisible and not UseCustomLookup;
        UoMVisible := (ItemAssetVisible or ResourceAssetVisible) and UseCustomLookup;
        UoMLookupVisible := (ItemAssetVisible or ResourceAssetVisible) and not UseCustomLookup;
    end;

    procedure SetDefaults(PriceListHeader: Record "Price List Header")
    begin
        TempWorksheetPriceListHeader := PriceListHeader;
        Defaults := GetDefaults();
    end;

    local procedure ShowPriceListFilters()
    var
        PriceListFilters: Page "Price List Filters";
    begin
        PriceListFilters.Set(TempWorksheetPriceListHeader);
        PriceListFilters.LookupMode(true);
        if PriceListFilters.RunModal() = Action::LookupOK then begin
            PriceListFilters.GetRecord(TempWorksheetPriceListHeader);
            Defaults := GetDefaults();
            CurrPage.Update(false);
        end;
    end;

    local procedure UpdateDefaults(xDefaultPriceListCode: Code[20])
    var
        PriceListHeader: Record "Price List Header";
    begin
        if DefaultPriceListCode = '' then begin
            Clear(TempWorksheetPriceListHeader);
            TempWorksheetPriceListHeader."Price Type" := PriceType;
            TempWorksheetPriceListHeader."Source Group" := SourceGroup;
            TempWorksheetPriceListHeader.Validate("Source Type", GetDefaultSourceType());
        end else
            if xDefaultPriceListCode <> DefaultPriceListCode then
                if PriceListHeader.Get(DefaultPriceListCode) then begin
                    TempWorksheetPriceListHeader := PriceListHeader;
                    TempWorksheetPriceListHeader.Status := "Price Status"::Draft;
                end;
        Defaults := GetDefaults();
    end;

    local procedure UpdateSourceType()
    begin
        case SourceGroup of
            SourceGroup::Customer:
                CustomerSourceType := "Sales Price Source Type".FromInteger(Rec."Source Type".AsInteger());
            SourceGroup::Vendor:
                VendorSourceType := "Purchase Price Source Type".FromInteger(Rec."Source Type".AsInteger());
            SourceGroup::Job:
                JobSourceType := "Job Price Source Type".FromInteger(Rec."Source Type".AsInteger());
        end;
        CalcSourceNoEditable();
    end;

    local procedure ValidateSourceType(SourceType: Integer)
    begin
        Rec.Validate("Source Type", SourceType);
        CalcSourceNoEditable();
        CurrPage.SaveRecord();
        CurrPage.Update();
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterGetDefaults(var Result: Text; TempWorksheetPriceListHeader: Record "Price List Header")
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOnInit()
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnBeforeOpenPage(var TempWorksheetPriceListHeader: Record "Price List Header" temporary; var TempWorksheetPriceListLine: Record "Price List Line" temporary; var UpdateMultiplePriceLists: Boolean)
    begin
    end;
}