Codeunit 65 Discount Notification Mgt., source in 29
Source29
src/Layers/W1/BaseApp/Utilities/DiscountNotificationMgt.Codeunit.al100 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.Utilities;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Purchases.Setup;
using Microsoft.Sales.Setup;
using System.Environment.Configuration;
codeunit 65 "Discount Notification Mgt."
{
trigger OnRun()
begin
end;
var
MissingDiscountAccountMsg: Label 'G/L accounts for discounts are missing on one or more lines on the General Posting Setup page.';
DetailsTok: Label 'Open the General Posting Setup page.';
procedure NotifyAboutMissingSetup(SetupRecordID: RecordID; GenBusPostingGroup: Code[20]; DiscountPosting: Option "No Discounts","Invoice Discounts","Line Discounts","All Discounts"; ExceptDiscountPosting: Integer): Boolean
begin
exit(NotifyAboutMissingSetups(SetupRecordID, GenBusPostingGroup, '', DiscountPosting, ExceptDiscountPosting));
end;
procedure NotifyAboutMissingSetup(SetupRecordID: RecordID; GenBusPostingGroup: Code[20]; GenProdPostingGroup: Code[20]; DiscountPosting: Option "No Discounts","Invoice Discounts","Line Discounts","All Discounts"; ExceptDiscountPosting: Integer): Boolean
begin
exit(NotifyAboutMissingSetups(SetupRecordID, GenBusPostingGroup, GenProdPostingGroup, DiscountPosting, ExceptDiscountPosting));
end;
local procedure NotifyAboutMissingSetups(SetupRecordID: RecordID; GenBusPostingGroup: Code[20]; GenProdPostingGroup: Code[20]; DiscountPosting: Option "No Discounts","Invoice Discounts","Line Discounts","All Discounts"; ExceptDiscountPosting: Integer): Boolean
var
GeneralPostingSetup: Record "General Posting Setup";
FieldNumber: Integer;
begin
RecallNotification(SetupRecordID);
if DiscountPosting in [DiscountPosting::"No Discounts", ExceptDiscountPosting] then
exit(false);
if FindSetupMissingDiscountAccount(SetupRecordID.TableNo, DiscountPosting, GenBusPostingGroup, GenProdPostingGroup, GeneralPostingSetup, FieldNumber) then begin
SendNotification(SetupRecordID, DiscountPosting, GenBusPostingGroup, GenProdPostingGroup);
exit(true);
end;
end;
local procedure FindSetupMissingDiscountAccount(SetupTableNo: Integer; DiscountPosting: Option; GenBusPostingGroup: Code[20]; GenProdPostingGroup: Code[20]; var GeneralPostingSetup: Record "General Posting Setup"; var FieldNumber: Integer): Boolean
begin
if GenBusPostingGroup <> '' then
GeneralPostingSetup.SetRange("Gen. Bus. Posting Group", GenBusPostingGroup);
if GenProdPostingGroup <> '' then
GeneralPostingSetup.SetRange("Gen. Prod. Posting Group", GenProdPostingGroup);
case SetupTableNo of
DATABASE::"Sales & Receivables Setup":
exit(GeneralPostingSetup.FindSetupMissingSalesDiscountAccount(DiscountPosting, FieldNumber));
DATABASE::"Purchases & Payables Setup":
exit(GeneralPostingSetup.FindSetupMissingPurchDiscountAccount(DiscountPosting, FieldNumber));
end;
end;
procedure RecallNotification(SetupRecordID: RecordID)
var
NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt.";
begin
NotificationLifecycleMgt.RecallNotificationsForRecord(SetupRecordID, false);
end;
local procedure SendNotification(SetupRecordID: RecordID; DiscountPosting: Integer; GenBusPostingGroup: Code[20]; GenProdPostingGroup: Code[20])
var
NotificationLifecycleMgt: Codeunit "Notification Lifecycle Mgt.";
Notification: Notification;
begin
Notification.Message(MissingDiscountAccountMsg);
Notification.SetData('SetupTableNo', Format(SetupRecordID.TableNo));
Notification.SetData('DiscountPosting', Format(DiscountPosting));
Notification.SetData('GenBusPostingGroup', GenBusPostingGroup);
Notification.SetData('GenProdPostingGroup', GenProdPostingGroup);
Notification.AddAction(DetailsTok, CODEUNIT::"Discount Notification Mgt.", 'ShowGenPostingSetupMissingDiscountAccounts');
NotificationLifecycleMgt.SendNotification(Notification, SetupRecordID);
end;
procedure ShowGenPostingSetupMissingDiscountAccounts(Notification: Notification)
var
GeneralPostingSetup: Record "General Posting Setup";
GenBusPostingGroup: Code[20];
GenProdPostingGroup: Code[20];
SetupTableNo: Integer;
FieldNumber: Integer;
DiscountPosting: Option;
begin
Evaluate(SetupTableNo, Notification.GetData('SetupTableNo'));
Evaluate(DiscountPosting, Notification.GetData('DiscountPosting'));
GenBusPostingGroup := CopyStr(Notification.GetData('GenBusPostingGroup'), 1, MaxStrLen(GenBusPostingGroup));
GenProdPostingGroup := CopyStr(Notification.GetData('GenProdPostingGroup'), 1, MaxStrLen(GenProdPostingGroup));
FindSetupMissingDiscountAccount(SetupTableNo, DiscountPosting, GenBusPostingGroup, GenProdPostingGroup, GeneralPostingSetup, FieldNumber);
PAGE.Run(PAGE::"General Posting Setup", GeneralPostingSetup, FieldNumber);
end;
}