Page 7005 Price List Line Review
- App
- Base Application
- Namespace
- Microsoft.Pricing.PriceList
- Versions
- 17-28
- Source table
- 7001
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Pricing/PriceList/PriceListLineReview.Page.al627 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.Source;
using Microsoft.Purchases.Pricing;
using Microsoft.Sales.Pricing;
page 7005 "Price List Line Review"
{
Caption = 'Price List Lines';
InsertAllowed = false;
DeleteAllowed = false;
LinksAllowed = false;
PageType = List;
RefreshOnActivate = true;
SourceTable = "Price List Line";
DataCaptionExpression = DataCaptionExpr;
layout
{
area(content)
{
repeater(Control1)
{
ShowCaption = false;
field("Price List Code"; Rec."Price List Code")
{
ApplicationArea = All;
Editable = false;
trigger OnDrillDown()
begin
PriceUXManagement.EditPriceList(Rec."Price List Code");
end;
}
field(PriceListDescription; GetPriceListDescription())
{
ApplicationArea = All;
Editable = false;
Caption = 'Price List Description';
ToolTip = 'Specifies the description of the price list.';
}
field(Status; Rec.Status)
{
ApplicationArea = All;
Editable = false;
Style = Attention;
StyleExpr = LineToVerify;
}
field("Source Type"; Rec."Source Type")
{
Caption = 'Assign-to Type';
ApplicationArea = All;
Editable = false;
Visible = not HideSourceControls;
ToolTip = 'Specifies the type of entity to which the price list is assigned. The options are relevant to the entity you are currently viewing.';
Style = Attention;
StyleExpr = LineToVerify;
}
field("Source No."; Rec."Source No.")
{
Caption = 'Assign-to';
ApplicationArea = All;
Editable = false;
Visible = not HideSourceControls;
Style = Attention;
StyleExpr = LineToVerify;
}
field("Asset Type"; Rec."Asset Type")
{
Caption = 'Product Type';
ApplicationArea = All;
Editable = false;
Visible = not HideProductControls;
Style = Attention;
StyleExpr = LineToVerify;
}
field("Asset No."; Rec."Asset No.")
{
Caption = 'Product No.';
ApplicationArea = All;
Editable = false;
Visible = not HideProductControls;
ShowMandatory = true;
ToolTip = 'Specifies the number of the product.';
Style = Attention;
StyleExpr = LineToVerify;
trigger OnValidate()
begin
SetEditable();
end;
}
field(Description; Rec.Description)
{
ApplicationArea = All;
Editable = PriceEditable;
Visible = not HideProductControls;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Variant Code"; Rec."Variant Code")
{
ApplicationArea = All;
Visible = ItemAsset;
Editable = VariantCodeEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Work Type Code"; Rec."Work Type Code")
{
ApplicationArea = All;
Visible = ResourceAsset;
Editable = WorkTypeCodeEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Unit of Measure Code"; Rec."Unit of Measure Code")
{
ApplicationArea = All;
Enabled = UOMEditable;
Editable = UOMEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Minimum Quantity"; Rec."Minimum Quantity")
{
ApplicationArea = All;
Editable = PriceEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Amount Type"; Rec."Amount Type")
{
ApplicationArea = All;
Importance = Standard;
Visible = AmountTypeIsVisible;
Editable = AmountTypeIsEditable;
trigger OnValidate()
begin
SetMandatoryAmount();
CurrPage.Update(true);
end;
}
field("Currency Code"; Rec."Currency Code")
{
ApplicationArea = All;
Editable = false;
ToolTip = 'Specifies the currency code of the price list.';
}
field("Unit Price"; Rec."Unit Price")
{
ApplicationArea = All;
Editable = UnitPriceEditable;
Enabled = PriceMandatory;
Visible = SalesPriceVisible;
StyleExpr = PriceStyle;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Cost Factor"; Rec."Cost Factor")
{
ApplicationArea = All;
Editable = UnitPriceEditable;
Enabled = PriceMandatory;
Visible = SalesPriceVisible;
StyleExpr = PriceStyle;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field(DirectUnitCost; Rec."Direct Unit Cost")
{
Caption = 'Direct Unit Cost';
ApplicationArea = All;
Editable = UnitPriceEditable;
Enabled = PriceMandatory;
Visible = DirectUnitCostVisible;
StyleExpr = PriceStyle;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Unit Cost"; Rec."Unit Cost")
{
ApplicationArea = All;
Editable = UnitCostEditable;
Enabled = PriceMandatory;
Visible = UnitCostVisible;
StyleExpr = PriceStyle;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Starting Date"; Rec."Starting Date")
{
ApplicationArea = All;
Editable = false;
}
field("Ending Date"; Rec."Ending Date")
{
ApplicationArea = All;
Editable = false;
}
field("Allow Line Disc."; Rec."Allow Line Disc.")
{
ApplicationArea = All;
Visible = PriceVisible;
Enabled = PriceMandatory;
Editable = AllowDiscEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Line Discount %"; Rec."Line Discount %")
{
AccessByPermission = tabledata "Sales Discount Access" = R;
ApplicationArea = All;
Visible = SalesLineDiscVisible;
Enabled = DiscountMandatory;
Editable = DiscountEditable;
StyleExpr = DiscountStyle;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field(PurchLineDiscountPct; Rec."Line Discount %")
{
AccessByPermission = tabledata "Purchase Discount Access" = R;
ApplicationArea = All;
Visible = PurchLineDiscVisible;
Enabled = DiscountMandatory;
Editable = DiscountEditable;
StyleExpr = DiscountStyle;
ToolTip = 'Specifies the line discount percentage for the product.';
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
field("Allow Invoice Disc."; Rec."Allow Invoice Disc.")
{
ApplicationArea = All;
Visible = SalesPriceVisible;
Enabled = PriceMandatory;
Editable = AllowDiscEditable;
trigger OnValidate()
begin
CurrPage.Update(true);
end;
}
}
}
}
actions
{
area(Navigation)
{
action(OpenPriceList)
{
ApplicationArea = All;
Caption = 'Open Price List';
Image = EditLines;
Visible = LineExists;
ToolTip = 'View or edit the price list.';
trigger OnAction()
begin
PriceUXManagement.EditPriceList(Rec."Price List Code");
end;
}
action(VerifyLines)
{
ApplicationArea = Basic, Suite;
Ellipsis = true;
Image = CheckDuplicates;
Caption = 'Verify Lines';
ToolTip = 'Checks data consistency in the new and modified price list lines. Finds the duplicate price lines and suggests the resolution of the line conflicts.';
trigger OnAction()
var
PriceListLine: Record "Price List Line";
PriceListManagement: Codeunit "Price List Management";
begin
PriceListLine.Copy(Rec);
PriceListManagement.ActivateDraftLines(PriceListLine);
end;
}
action(SalesPriceLists)
{
ApplicationArea = All;
Caption = 'Sales Price Lists';
Image = Sales;
Visible = IsSalesPrice;
ToolTip = 'View the list of all sales price lists.';
trigger OnAction()
begin
Page.Run(Page::"Sales Price Lists");
end;
}
action(SalesJobPriceLists)
{
ApplicationArea = All;
Caption = 'Sales Project Price Lists';
Image = Sales;
Visible = IsSalesPrice;
ToolTip = 'View the list of all sales project price lists.';
trigger OnAction()
begin
Page.Run(Page::"Sales Job Price Lists");
end;
}
action(PurchPriceLists)
{
ApplicationArea = All;
Caption = 'Purchase Price Lists';
Image = Purchase;
Visible = IsPurchPrice;
ToolTip = 'View the list of all purchase price lists.';
trigger OnAction()
begin
Page.Run(Page::"Purchase Price Lists");
end;
}
action(PurchJobPriceLists)
{
ApplicationArea = All;
Caption = 'Purchase Project Price Lists';
Image = Purchase;
Visible = IsPurchPrice;
ToolTip = 'View the list of all purchase project price lists.';
trigger OnAction()
begin
Page.Run(Page::"Purchase Job Price Lists");
end;
}
}
area(Promoted)
{
group(Category_Process)
{
Caption = 'Process';
actionref(OpenPriceList_Promoted; OpenPriceList)
{
}
actionref(VerifyLines_Promoted; VerifyLines)
{
}
actionref(SalesPriceLists_Promoted; SalesPriceLists)
{
}
actionref(SalesJobPriceLists_Promoted; SalesJobPriceLists)
{
}
actionref(PurchPriceLists_Promoted; PurchPriceLists)
{
}
actionref(PurchJobPriceLists_Promoted; PurchJobPriceLists)
{
}
}
}
}
trigger OnAfterGetRecord()
begin
LineExists := false;
LineToVerify := Rec.IsLineToVerify();
SetMandatoryAmount();
SetEditable();
end;
trigger OnAfterGetCurrRecord()
begin
LineExists := Rec."Price List Code" <> '';
LineToVerify := Rec.IsLineToVerify();
SetMandatoryAmount();
SetEditable();
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean;
var
PriceListManagement: Codeunit "Price List Management";
IsHandled: Boolean;
Result: Boolean;
begin
IsHandled := false;
OnBeforeOnQueryClosePage(Rec, Result, IsHandled);
if IsHandled then
exit(Result);
if HasDraftLines() then begin
PriceListManagement.SendVerifyLinesNotification();
exit(false);
end;
exit(true)
end;
var
DataCaptionSourceAssetTok: Label '%1 %2 - %3 %4 %5', Locked = true, Comment = '%1-%5 - Source Type, Source No., Product Type, Product No, Description';
DataCaptionAssetTok: Label '%1 %2 %3', Locked = true, Comment = '%1 %2 %3 - Product Type, Product No, Description';
protected var
PriceListHeader: Record "Price List Header";
PriceUXManagement: Codeunit "Price UX Management";
AmountEditable: Boolean;
UnitPriceEditable: Boolean;
UnitCostEditable: Boolean;
DiscountEditable: Boolean;
AllowDiscEditable: Boolean;
UOMEditable: Boolean;
ItemAsset: Boolean;
VariantCodeEditable: Boolean;
ResourceAsset: Boolean;
WorkTypeCodeEditable: Boolean;
DiscountMandatory: Boolean;
DiscountStyle: Text;
DiscountVisible: Boolean;
PriceMandatory: Boolean;
PriceStyle: Text;
PriceVisible: Boolean;
IsSalesPrice: Boolean;
IsPurchPrice: Boolean;
DirectUnitCostVisible: Boolean;
UnitCostVisible: Boolean;
SalesPriceVisible: Boolean;
PurchLineDiscVisible: Boolean;
SalesLineDiscVisible: Boolean;
PriceEditable: Boolean;
AmountTypeIsVisible: Boolean;
AmountTypeIsEditable: Boolean;
LineExists: Boolean;
LineToVerify: Boolean;
DataCaptionExpr: Text;
PriceType: Enum "Price Type";
ViewAmountType: Enum "Price Amount Type";
HideProductControls: Boolean;
HideSourceControls: Boolean;
local procedure GetStyle(Mandatory: Boolean): Text;
begin
if LineToVerify and Mandatory then
exit('Attention');
if Mandatory then
exit('Strong');
exit('Subordinate');
end;
local procedure HasDraftLines(): Boolean;
var
PriceListLine: Record "Price List Line";
begin
PriceListLine.Copy(Rec);
PriceListLine.SetRange(Status, "Price Status"::Draft);
if PriceListLine.FindSet() then
repeat
if PriceListLine.IsHeaderActive() then
exit(true);
until PriceListLine.Next() = 0;
exit(false);
end;
procedure Set(PriceAssetList: Codeunit "Price Asset List"; NewPriceType: Enum "Price Type"; NewAmountType: Enum "Price Amount Type")
var
PriceSource: Record "Price Source";
begin
PriceType := NewPriceType;
ViewAmountType := NewAmountType;
PriceSource."Price Type" := PriceType;
PriceUXManagement.SetPriceListLineFilters(Rec, PriceSource, PriceAssetList, ViewAmountType);
SetDataCaptionExpr(PriceAssetList);
UpdateColumnVisibility();
end;
procedure Set(PriceSource: Record "Price Source"; PriceAssetList: Codeunit "Price Asset List"; NewAmountType: Enum "Price Amount Type")
begin
PriceType := PriceSource."Price Type";
ViewAmountType := NewAmountType;
PriceUXManagement.SetPriceListLineFilters(Rec, PriceSource, PriceAssetList, ViewAmountType);
SetDataCaptionExpr(PriceSource, PriceAssetList);
UpdateColumnVisibility();
end;
procedure Set(PriceSourceList: Codeunit "Price Source List"; NewAmountType: Enum "Price Amount Type")
begin
PriceType := PriceSourceList.GetPriceType();
ViewAmountType := NewAmountType;
PriceUXManagement.SetPriceListLineFilters(Rec, PriceSourceList, ViewAmountType);
SetDataCaptionExpr(PriceSourceList);
UpdateColumnVisibility();
end;
local procedure SetDataCaptionExpr(PriceAssetList: Codeunit "Price Asset List")
var
TempPriceAsset: Record "Price Asset" temporary;
FirstEntryNo: Integer;
begin
if PriceAssetList.GetList(TempPriceAsset) then begin
FirstEntryNo := TempPriceAsset."Entry No.";
if TempPriceAsset.FindLast() then begin
TempPriceAsset.ValidateAssetNo();
DataCaptionExpr :=
StrSubstNo(DataCaptionAssetTok,
TempPriceAsset."Asset Type", TempPriceAsset."Asset No.", TempPriceAsset.Description);
HideProductControls := FirstEntryNo = TempPriceAsset."Entry No.";
end;
end;
end;
local procedure SetDataCaptionExpr(PriceSource: Record "Price Source"; PriceAssetList: Codeunit "Price Asset List")
var
TempPriceAsset: Record "Price Asset" temporary;
FirstEntryNo: Integer;
begin
if PriceSource."Source No." <> '' then
if PriceAssetList.GetList(TempPriceAsset) then begin
FirstEntryNo := TempPriceAsset."Entry No.";
if TempPriceAsset.FindLast() then begin
TempPriceAsset.ValidateAssetNo();
DataCaptionExpr :=
StrSubstNo(DataCaptionSourceAssetTok,
PriceSource."Source Type", PriceSource."Source No.",
TempPriceAsset."Asset Type", TempPriceAsset."Asset No.", TempPriceAsset.Description);
HideProductControls := FirstEntryNo = TempPriceAsset."Entry No.";
HideSourceControls := true;
end;
end;
end;
local procedure SetDataCaptionExpr(PriceSourceList: Codeunit "Price Source List")
var
TempPriceSource: Record "Price Source" temporary;
FirstEntryNo: Integer;
begin
if PriceSourceList.GetList(TempPriceSource) then begin
FirstEntryNo := TempPriceSource."Entry No.";
if TempPriceSource.FindLast() then begin
DataCaptionExpr :=
StrSubstNo(DataCaptionAssetTok,
TempPriceSource."Source Type", TempPriceSource."Source No.", TempPriceSource.Description);
HideSourceControls := FirstEntryNo = TempPriceSource."Entry No.";
HideProductControls := false;
end;
end;
end;
local procedure SetEditable()
begin
PriceEditable := Rec.IsEditable();
AmountEditable := Rec.IsAmountSupported();
UOMEditable := Rec.IsUOMSupported() and PriceEditable;
ItemAsset := Rec.IsAssetItem();
ResourceAsset := Rec.IsAssetResource();
AmountTypeIsEditable := (Rec."Asset Type" <> Rec."Asset Type"::"Item Discount Group") and PriceEditable;
UnitPriceEditable := AmountEditable and PriceEditable;
UnitCostEditable := UnitPriceEditable and ResourceAsset;
DiscountEditable := DiscountMandatory and PriceEditable;
AllowDiscEditable := PriceMandatory and PriceEditable;
VariantCodeEditable := ItemAsset and PriceEditable;
WorkTypeCodeEditable := ResourceAsset and PriceEditable;
end;
local procedure SetMandatoryAmount()
begin
DiscountMandatory := Rec.IsAmountMandatory(Rec."Amount Type"::Discount);
DiscountStyle := GetStyle(DiscountMandatory);
PriceMandatory := Rec.IsAmountMandatory(Rec."Amount Type"::Price);
PriceStyle := GetStyle(PriceMandatory);
end;
local procedure UpdateColumnVisibility()
begin
AmountTypeIsVisible := ViewAmountType = ViewAmountType::Any;
DiscountVisible := ViewAmountType in [ViewAmountType::Any, ViewAmountType::Discount];
PriceVisible := ViewAmountType in [ViewAmountType::Any, ViewAmountType::Price];
ResourceAsset := Rec.IsAssetResource();
IsSalesPrice := PriceType = PriceType::Sale;
IsPurchPrice := PriceType = PriceType::Purchase;
SalesPriceVisible := PriceVisible and IsSalesPrice;
DirectUnitCostVisible := PriceVisible and IsPurchPrice;
UnitCostVisible := DirectUnitCostVisible and ResourceAsset;
SalesLineDiscVisible := DiscountVisible and IsSalesPrice;
PurchLineDiscVisible := DiscountVisible and IsPurchPrice;
end;
local procedure GetPriceListDescription(): Text
begin
if Rec."Price List Code" = '' then
exit('');
if Rec."Price List Code" <> PriceListHeader.Code then
if not PriceListHeader.Get(Rec."Price List Code") then
exit('');
exit(PriceListHeader.Description);
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeOnQueryClosePage(var PriceListLine: Record "Price List Line"; var Result: Boolean; var IsHandled: Boolean)
begin
end;
}