Page 7 Customer Price Groups
- App
- Base Application
- Namespace
- Microsoft.Sales.Pricing
- Versions
- 17-28
- Source table
- 6
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Sales/Pricing/CustomerPriceGroups.Page.al322 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.Sales.Pricing;
using Microsoft.Integration.Dataverse;
using Microsoft.Pricing.Calculation;
using Microsoft.Pricing.PriceList;
using Microsoft.Pricing.Source;
using System.Text;
/// <summary>
/// Displays and manages customer price groups used to assign shared pricing rules to multiple customers.
/// </summary>
page 7 "Customer Price Groups"
{
ApplicationArea = Basic, Suite;
Caption = 'Customer Price Groups';
PageType = List;
SourceTable = "Customer Price Group";
UsageCategory = Administration;
layout
{
area(content)
{
repeater(Control1)
{
ShowCaption = false;
field("Code"; Rec.Code)
{
ApplicationArea = Basic, Suite;
}
field(Description; Rec.Description)
{
ApplicationArea = Basic, Suite;
}
field("Price Calculation Method"; Rec."Price Calculation Method")
{
Visible = ExtendedPriceEnabled;
ApplicationArea = Basic, Suite;
}
field("Allow Line Disc."; Rec."Allow Line Disc.")
{
ApplicationArea = Basic, Suite;
}
field("Allow Invoice Disc."; Rec."Allow Invoice Disc.")
{
ApplicationArea = Basic, Suite;
}
field("Price Includes VAT"; Rec."Price Includes VAT")
{
ApplicationArea = Basic, Suite;
}
field("VAT Bus. Posting Gr. (Price)"; Rec."VAT Bus. Posting Gr. (Price)")
{
ApplicationArea = Basic, Suite;
ToolTip = 'Specifies the VAT business posting group that determines the default VAT percentage to add to sales prices for customers in this group.';
}
field("Coupled to Dataverse"; Rec."Coupled to Dataverse")
{
ApplicationArea = All;
Visible = CRMIntegrationEnabled;
}
}
}
area(factboxes)
{
systempart(Control1900383207; Links)
{
ApplicationArea = RecordLinks;
Visible = false;
}
systempart(Control1905767507; Notes)
{
ApplicationArea = Notes;
Visible = false;
}
}
}
actions
{
area(navigation)
{
group("Cust. &Price Group")
{
Caption = 'Cust. &Price Group';
action(SalesPrices)
{
ApplicationArea = Basic, Suite;
Caption = 'Sales &Prices';
Image = SalesPrices;
Visible = not ExtendedPriceEnabled;
ToolTip = 'Define how to set up sales price agreements. These sales prices can be for individual customers, for a group of customers, for all customers, or for a campaign.';
trigger OnAction()
var
SalesPrice: Record "Sales Price";
begin
SalesPrice.SetCurrentKey("Sales Type", "Sales Code");
SalesPrice.SetRange("Sales Type", SalesPrice."Sales Type"::"Customer Price Group");
SalesPrice.SetRange("Sales Code", Rec.Code);
Page.Run(Page::"Sales Prices", SalesPrice);
end;
}
action(PriceLists)
{
AccessByPermission = TableData "Sales Price Access" = R;
ApplicationArea = Basic, Suite;
Caption = 'Sales Price Lists';
Image = Price;
Visible = ExtendedPriceEnabled;
ToolTip = 'View or set up sales price lists with prices for products that you sell to customers that belong to the customer price group.';
trigger OnAction()
var
PriceUXManagement: Codeunit "Price UX Management";
begin
PriceUXManagement.ShowPriceLists(Rec);
end;
}
action(PriceLines)
{
AccessByPermission = TableData "Sales Price Access" = R;
ApplicationArea = Basic, Suite;
Caption = 'Sales Prices';
Image = Price;
Visible = ExtendedPriceEnabled;
ToolTip = 'View or set up sales prices for products that you sell to customers that belong to the customer price group.';
trigger OnAction()
var
PriceSource: Record "Price Source";
PriceUXManagement: Codeunit "Price UX Management";
begin
Rec.ToPriceSource(PriceSource);
PriceUXManagement.ShowPriceListLines(PriceSource, "Price Amount Type"::Price);
end;
}
}
group(ActionGroupCRM)
{
Caption = 'Dynamics 365 Sales';
Visible = CRMIntegrationEnabled and not ExtendedPriceEnabled;
action(CRMGoToPricelevel)
{
ApplicationArea = Suite;
Caption = 'Pricelevel';
Image = CoupledItem;
ToolTip = 'View price information introduced through synchronization with Dynamics 365 Sales.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.ShowCRMEntityFromRecordID(Rec.RecordId);
end;
}
action(CRMSynchronizeNow)
{
AccessByPermission = TableData "CRM Integration Record" = IM;
ApplicationArea = Suite;
Caption = 'Synchronize';
Image = Refresh;
ToolTip = 'Send updated data to Dynamics 365 Sales.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.UpdateOneNow(Rec.RecordId);
end;
}
group(Coupling)
{
Caption = 'Coupling', Comment = 'Coupling is a noun';
Image = LinkAccount;
ToolTip = 'Create, change, or delete a coupling between the Business Central record and a Dynamics 365 Sales record.';
action(ManageCRMCoupling)
{
AccessByPermission = TableData "CRM Integration Record" = IM;
ApplicationArea = Suite;
Caption = 'Set Up Coupling';
Image = LinkAccount;
ToolTip = 'Create or modify the coupling to a Dynamics 365 Sales product.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.DefineCoupling(Rec.RecordId);
end;
}
action(DeleteCRMCoupling)
{
AccessByPermission = TableData "CRM Integration Record" = D;
ApplicationArea = Suite;
Caption = 'Delete Coupling';
Enabled = CRMIsCoupledToRecord;
Image = UnLinkAccount;
ToolTip = 'Delete the coupling to a Dynamics 365 Sales product.';
trigger OnAction()
var
CustomerPriceGroup: Record "Customer Price Group";
CRMCouplingManagement: Codeunit "CRM Coupling Management";
RecRef: RecordRef;
begin
CurrPage.SetSelectionFilter(CustomerPriceGroup);
RecRef.GetTable(CustomerPriceGroup);
CRMCouplingManagement.RemoveCoupling(RecRef);
end;
}
}
action(ShowLog)
{
ApplicationArea = Suite;
Caption = 'Synchronization Log';
Image = Log;
ToolTip = 'View integration synchronization jobs for the customer price group table.';
trigger OnAction()
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
begin
CRMIntegrationManagement.ShowLog(Rec.RecordId);
end;
}
}
}
area(Promoted)
{
group(Category_Customer_Price_Group)
{
Caption = 'Customer Price Group';
actionref(SalesPrices_Promoted; SalesPrices)
{
}
actionref(PriceLists_Promoted; PriceLists)
{
}
actionref(PriceLines_Promoted; PriceLines)
{
}
}
group(Category_Category4)
{
Caption = 'Navigate', Comment = 'Generated from the PromotedActionCategories property index 3.';
}
group(Category_Report)
{
Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
}
group(Category_Synchronize)
{
Caption = 'Synchronize';
Visible = CRMIntegrationEnabled and not ExtendedPriceEnabled;
group(Category_Coupling)
{
Caption = 'Coupling';
ShowAs = SplitButton;
actionref(ManageCRMCoupling_Promoted; ManageCRMCoupling)
{
}
actionref(DeleteCRMCoupling_Promoted; DeleteCRMCoupling)
{
}
}
actionref(CRMSynchronizeNow_Promoted; CRMSynchronizeNow)
{
}
actionref(ShowLog_Promoted; ShowLog)
{
}
actionref(CRMGoToPricelevel_Promoted; CRMGoToPricelevel)
{
}
}
}
}
trigger OnAfterGetCurrRecord()
begin
CRMIsCoupledToRecord := CRMIntegrationEnabled;
if CRMIsCoupledToRecord then
CRMIsCoupledToRecord := CRMCouplingManagement.IsRecordCoupledToCRM(Rec.RecordId);
end;
trigger OnOpenPage()
begin
CRMIntegrationEnabled := CRMIntegrationManagement.IsCRMIntegrationEnabled();
ExtendedPriceEnabled := PriceCalculationMgt.IsExtendedPriceCalculationEnabled();
end;
var
CRMIntegrationManagement: Codeunit "CRM Integration Management";
CRMCouplingManagement: Codeunit "CRM Coupling Management";
PriceCalculationMgt: Codeunit "Price Calculation Mgt.";
CRMIntegrationEnabled: Boolean;
CRMIsCoupledToRecord: Boolean;
ExtendedPriceEnabled: Boolean;
/// <summary>
/// Gets a filter string for the selected customer price groups on the page.
/// </summary>
/// <returns>A filter string representing the selected customer price groups.</returns>
procedure GetSelectionFilter(): Text
var
CustPriceGr: Record "Customer Price Group";
SelectionFilterManagement: Codeunit SelectionFilterManagement;
begin
CurrPage.SetSelectionFilter(CustPriceGr);
exit(SelectionFilterManagement.GetSelectionFilterForCustomerPriceGroup(CustPriceGr));
end;
}