Page 343 Check Credit Limit
- App
- Base Application
- Namespace
- Microsoft.Sales.Customer
- Versions
- 17-28
- Source table
- 18
Procedures, 23Events, 32Obsolete, 10
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Sales/Customer/CheckCreditLimit.Page.al801 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.Customer;
using Microsoft.Finance.Currency;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Sales.Document;
using Microsoft.Sales.Setup;
/// <summary>
/// Displays a confirmation dialog when customer credit limits or overdue balances are exceeded.
/// </summary>
page 343 "Check Credit Limit"
{
Caption = 'Check Credit Limit';
DataCaptionExpression = '';
DeleteAllowed = false;
Editable = true;
InsertAllowed = false;
InstructionalText = 'An action is requested regarding the Credit Limit check.';
LinksAllowed = false;
ModifyAllowed = false;
PageType = ConfirmationDialog;
SourceTable = Customer;
layout
{
area(content)
{
label(Control2)
{
ApplicationArea = Basic, Suite;
CaptionClass = Format(StrSubstNo(Text000, Heading));
MultiLine = true;
ShowCaption = false;
}
field(HideMessage; HideMessage)
{
ApplicationArea = Basic, Suite;
Caption = 'Do not show this message again.';
ToolTip = 'Specifies to no longer show this message when working with this document while the customer is over credit limit';
Visible = HideMessageVisible;
}
part(CreditLimitDetails; "Credit Limit Details")
{
ApplicationArea = Basic, Suite;
SubPageLink = "No." = field("No.");
UpdatePropagation = Both;
}
}
}
actions
{
area(navigation)
{
group("&Customer")
{
Caption = '&Customer';
Image = Customer;
action(Card)
{
ApplicationArea = Basic, Suite;
Caption = 'Card';
Image = EditLines;
RunObject = Page "Customer Card";
RunPageLink = "No." = field("No."),
"Date Filter" = field("Date Filter"),
"Global Dimension 1 Filter" = field("Global Dimension 1 Filter"),
"Global Dimension 2 Filter" = field("Global Dimension 2 Filter");
ShortCutKey = 'Shift+F7';
ToolTip = 'View details for the selected record.';
}
action(Statistics)
{
ApplicationArea = Suite;
Caption = 'Statistics';
Image = Statistics;
RunObject = Page "Customer Statistics";
RunPageLink = "No." = field("No."),
"Date Filter" = field("Date Filter"),
"Global Dimension 1 Filter" = field("Global Dimension 1 Filter"),
"Global Dimension 2 Filter" = field("Global Dimension 2 Filter");
ShortCutKey = 'F7';
ToolTip = 'View statistics for credit limit entries.';
}
}
}
}
trigger OnAfterGetRecord()
begin
CalcCreditLimitLCY();
CalcOverdueBalanceLCY();
SetParametersOnDetails();
end;
trigger OnOpenPage()
begin
Rec.Copy(Cust2);
end;
var
#pragma warning disable AA0074
#pragma warning disable AA0470
Text000: Label '%1 Do you still want to record the amount?';
#pragma warning restore AA0470
#pragma warning restore AA0074
protected var
CurrExchRate: Record "Currency Exchange Rate";
SalesHeader: Record "Sales Header";
SalesLine: Record "Sales Line";
Cust2: Record Customer;
SalesSetup: Record "Sales & Receivables Setup";
CustNo: Code[20];
Heading: Text[250];
SecondHeading: Text[250];
NotificationId: Guid;
DeltaAmount: Decimal;
NewOrderAmountLCY: Decimal;
OldOrderAmountLCY: Decimal;
OrderAmountThisOrderLCY: Decimal;
OrderAmountTotalLCY: Decimal;
CustCreditAmountLCY: Decimal;
ShippedRetRcdNotIndLCY: Decimal;
OutstandingRetOrdersLCY: Decimal;
RcdNotInvdRetOrdersLCY: Decimal;
HideMessage: Boolean;
HideMessageVisible: Boolean;
ExtensionAmountsDic: Dictionary of [Guid, Decimal];
/// <summary>
/// Checks if a credit limit warning should be shown for a general journal line.
/// </summary>
/// <param name="GenJnlLine">The general journal line to check.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
[Scope('OnPrem')]
procedure GenJnlLineShowWarning(GenJnlLine: Record "Gen. Journal Line"): Boolean
var
IsHandled: Boolean;
Result: Boolean;
begin
OnBeforeGenJnlLineShowWarning(GenJnlLine, IsHandled, Result, Rec);
if IsHandled then
exit(Result);
SalesSetup.Get();
if SalesSetup."Credit Warnings" =
SalesSetup."Credit Warnings"::"No Warning"
then
exit(false);
if GenJnlLine."Account Type" = GenJnlLine."Account Type"::Customer then
exit(ShowWarning(GenJnlLine."Account No.", GenJnlLine."Amount (LCY)", 0, true));
exit(ShowWarning(GenJnlLine."Bal. Account No.", -GenJnlLine.Amount, 0, true));
end;
/// <summary>
/// Checks if a credit limit warning should be shown for a general journal line and returns the notification cause.
/// </summary>
/// <param name="GenJnlLine">The general journal line to check.</param>
/// <param name="NotificationContextGuidOut">Returns the GUID identifying the notification cause.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
[Scope('OnPrem')]
procedure GenJnlLineShowWarningAndGetCause(GenJnlLine: Record "Gen. Journal Line"; var NotificationContextGuidOut: Guid): Boolean
var
Result: Boolean;
begin
Result := GenJnlLineShowWarning(GenJnlLine);
NotificationContextGuidOut := NotificationId;
exit(Result);
end;
/// <summary>
/// Checks if a credit limit warning should be shown for a sales header.
/// </summary>
/// <param name="SalesHeader">The sales header to check.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
procedure SalesHeaderShowWarning(SalesHeader: Record "Sales Header") Result: Boolean
var
OldSalesHeader: Record "Sales Header";
AssignDeltaAmount: Boolean;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSalesHeaderShowWarning(SalesHeader, Result, IsHandled, Rec, DeltaAmount);
if IsHandled then
exit(Result);
// Used when additional lines are inserted
SalesSetup.Get();
if SalesSetup."Credit Warnings" =
SalesSetup."Credit Warnings"::"No Warning"
then
exit(false);
CalcSalesHeaderNewOrderAmountLCY(SalesHeader);
if not (SalesHeader."Document Type" in
[SalesHeader."Document Type"::Quote,
SalesHeader."Document Type"::Order,
SalesHeader."Document Type"::"Return Order"])
then
NewOrderAmountLCY := NewOrderAmountLCY + SalesLineAmount(SalesHeader."Document Type", SalesHeader."No.");
OnSalesHeaderShowWarningOnAfterAssingNewOrderAmountLCY(SalesHeader, NewOrderAmountLCY);
OldSalesHeader := SalesHeader;
if OldSalesHeader.Find() then
// If "Bill-To Customer" is the same and Sales Header exists then do not consider amount in credit limit calculation since it's already included in "Outstanding Amount"
// If "Bill-To Customer" was changed the consider amount in credit limit calculation since changes was not yet commited and not included in "Outstanding Amount"
AssignDeltaAmount := OldSalesHeader."Bill-to Customer No." <> SalesHeader."Bill-to Customer No."
else
// If Sales Header is not inserted yet then consider the amount in credit limit calculation
AssignDeltaAmount := true;
if AssignDeltaAmount then
DeltaAmount := NewOrderAmountLCY;
exit(ShowWarning(SalesHeader."Bill-to Customer No.", NewOrderAmountLCY, 0, true));
end;
local procedure CalcSalesHeaderNewOrderAmountLCY(SalesHeader: Record "Sales Header")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcSalesHeaderNewOrderAmountLCY(Rec, SalesHeader, NewOrderAmountLCY, IsHandled);
if IsHandled then
exit;
if SalesHeader."Currency Code" = '' then
NewOrderAmountLCY := SalesHeader."Amount Including VAT"
else
NewOrderAmountLCY :=
Round(
CurrExchRate.ExchangeAmtFCYToLCY(
WorkDate(), SalesHeader."Currency Code",
SalesHeader."Amount Including VAT", SalesHeader."Currency Factor"));
end;
/// <summary>
/// Checks if a credit limit warning should be shown for a sales header and returns the notification cause.
/// </summary>
/// <param name="SalesHeader">The sales header to check.</param>
/// <param name="NotificationContextGuidOut">Returns the GUID identifying the notification cause.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
procedure SalesHeaderShowWarningAndGetCause(SalesHeader: Record "Sales Header"; var NotificationContextGuidOut: Guid): Boolean
var
Result: Boolean;
begin
Result := SalesHeaderShowWarning(SalesHeader);
NotificationContextGuidOut := NotificationId;
exit(Result);
end;
/// <summary>
/// Checks if a credit limit warning should be shown for a sales line.
/// </summary>
/// <param name="SalesLine">The sales line to check.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
procedure SalesLineShowWarning(SalesLine: Record "Sales Line") Result: Boolean
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSalesLineShowWarning(SalesLine, Result, IsHandled, Rec, DeltaAmount);
if IsHandled then
exit(Result);
SalesSetup.Get();
if SalesSetup."Credit Warnings" =
SalesSetup."Credit Warnings"::"No Warning"
then
exit(false);
if (SalesHeader."Document Type" <> SalesLine."Document Type") or
(SalesHeader."No." <> SalesLine."Document No.")
then
SalesHeader.Get(SalesLine."Document Type", SalesLine."Document No.");
CalcSalesLineOrderAmountsLCY(SalesLine);
DeltaAmount := NewOrderAmountLCY - OldOrderAmountLCY;
NewOrderAmountLCY :=
DeltaAmount + SalesLineAmount(SalesLine."Document Type", SalesLine."Document No.");
if SalesHeader."Document Type" = SalesHeader."Document Type"::Quote then
DeltaAmount := NewOrderAmountLCY;
exit(ShowWarning(SalesHeader."Bill-to Customer No.", NewOrderAmountLCY, OldOrderAmountLCY, false))
end;
local procedure CalcSalesLineOrderAmountsLCY(SalesLine: Record "Sales Line")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcSalesLineOrderAmountsLCY(Rec, SalesLine, NewOrderAmountLCY, OldOrderAmountLCY, IsHandled);
if IsHandled then
exit;
NewOrderAmountLCY := SalesLine."Outstanding Amount (LCY)" + SalesLine."Shipped Not Invoiced (LCY)";
if SalesLine.Find() then
OldOrderAmountLCY := SalesLine."Outstanding Amount (LCY)" + SalesLine."Shipped Not Invoiced (LCY)"
else
OldOrderAmountLCY := 0;
end;
/// <summary>
/// Checks if a credit limit warning should be shown for a sales line and returns the notification cause.
/// </summary>
/// <param name="SalesLine">The sales line to check.</param>
/// <param name="NotificationContextGuidOut">Returns the GUID identifying the notification cause.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
[Scope('OnPrem')]
procedure SalesLineShowWarningAndGetCause(SalesLine: Record "Sales Line"; var NotificationContextGuidOut: Guid): Boolean
var
Result: Boolean;
begin
Result := SalesLineShowWarning(SalesLine);
NotificationContextGuidOut := NotificationId;
exit(Result);
end;
local procedure SalesLineAmount(DocType: Enum "Sales Document Type"; DocNo: Code[20]) Result: Decimal
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeSalesLineAmount(Rec, DocType, DocNo, Result, IsHandled);
if IsHandled then
exit(Result);
SalesLine.Reset();
SalesLine.SetRange("Document Type", DocType);
SalesLine.SetRange("Document No.", DocNo);
SalesLine.CalcSums("Outstanding Amount (LCY)", "Shipped Not Invoiced (LCY)");
exit(SalesLine."Outstanding Amount (LCY)" + SalesLine."Shipped Not Invoiced (LCY)");
end;
/// <summary>
/// Evaluates credit limit and overdue balance and determines if a warning should be displayed.
/// </summary>
/// <param name="NewCustNo">The customer number to check.</param>
/// <param name="NewOrderAmountLCY2">The new order amount in local currency.</param>
/// <param name="OldOrderAmountLCY2">The old order amount in local currency.</param>
/// <param name="CheckOverDueBalance">Indicates whether to also check the overdue balance.</param>
/// <returns>True if a warning should be shown, otherwise false.</returns>
procedure ShowWarning(NewCustNo: Code[20]; NewOrderAmountLCY2: Decimal; OldOrderAmountLCY2: Decimal; CheckOverDueBalance: Boolean) Result: Boolean
var
CustCheckCrLimit: Codeunit "Cust-Check Cr. Limit";
ExitValue: Integer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeShowWarning(
Rec, NewOrderAmountLCY, OldOrderAmountLCY, OrderAmountTotalLCY, ShippedRetRcdNotIndLCY, CustCreditAmountLCY, DeltaAmount,
CheckOverDueBalance, Heading, Result, IsHandled, NotificationId, NewCustNo, NewOrderAmountLCY2, OldOrderAmountLCY2, OrderAmountThisOrderLCY);
if IsHandled then
exit(Result);
if NewCustNo = '' then
exit;
CustNo := NewCustNo;
NewOrderAmountLCY := NewOrderAmountLCY2;
OldOrderAmountLCY := OldOrderAmountLCY2;
Rec.Get(CustNo);
Rec.SetRange("No.", Rec."No.");
Cust2.Copy(Rec);
SalesSetup.Get();
if (SalesSetup."Credit Warnings" in
[SalesSetup."Credit Warnings"::"Both Warnings",
SalesSetup."Credit Warnings"::"Credit Limit"]) and
CustCheckCrLimit.IsCreditLimitNotificationEnabled(Rec)
then begin
CalcCreditLimitLCY();
if (CustCreditAmountLCY > Rec."Credit Limit (LCY)") and (Rec."Credit Limit (LCY)" <> 0) then
ExitValue := 1;
OnShowWarningOnAfterCalcCreditLimitLCYExitValue(Rec, CustCreditAmountLCY, ExitValue);
end;
if CheckOverDueBalance and
(SalesSetup."Credit Warnings" in
[SalesSetup."Credit Warnings"::"Both Warnings",
SalesSetup."Credit Warnings"::"Overdue Balance"]) and
CustCheckCrLimit.IsOverdueBalanceNotificationEnabled(Rec)
then begin
CalcOverdueBalanceLCY();
if Rec."Balance Due (LCY)" > 0 then
ExitValue := ExitValue + 2;
OnShowWarningOnAfterCalcDueBalanceExitValue(Rec, ExitValue);
end;
IsHandled := false;
OnShowWarningOnBeforeExitValue(Rec, ExitValue, Result, IsHandled, Heading, SecondHeading, NotificationId);
if IsHandled then
exit(Result);
if ExitValue > 0 then begin
case ExitValue of
1:
begin
Heading := CopyStr(CustCheckCrLimit.GetCreditLimitNotificationMsg(), 1, 250);
NotificationId := CustCheckCrLimit.GetCreditLimitNotificationId();
end;
2:
begin
Heading := CopyStr(CustCheckCrLimit.GetOverdueBalanceNotificationMsg(), 1, 250);
NotificationId := CustCheckCrLimit.GetOverdueBalanceNotificationId();
end;
3:
begin
Heading := CopyStr(CustCheckCrLimit.GetCreditLimitNotificationMsg(), 1, 250);
SecondHeading := CopyStr(CustCheckCrLimit.GetOverdueBalanceNotificationMsg(), 1, 250);
NotificationId := CustCheckCrLimit.GetBothNotificationsId();
end;
end;
exit(true);
end;
end;
local procedure CalcCreditLimitLCY()
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcCreditLimitLCY(
Cust2, OutstandingRetOrdersLCY, RcdNotInvdRetOrdersLCY, NewOrderAmountLCY, OrderAmountTotalLCY, OrderAmountThisOrderLCY,
ShippedRetRcdNotIndLCY, CustCreditAmountLCY, CustNo, ExtensionAmountsDic, IsHandled, DeltaAmount, Rec);
if not IsHandled then begin
if Rec.GetFilter("Date Filter") = '' then
Rec.SetFilter("Date Filter", '..%1', WorkDate());
Rec.CalcFields("Balance (LCY)", "Shipped Not Invoiced (LCY)");
CalcReturnAmounts(OutstandingRetOrdersLCY, RcdNotInvdRetOrdersLCY);
OrderAmountTotalLCY := CalcTotalOutstandingAmt() - OutstandingRetOrdersLCY + DeltaAmount;
ShippedRetRcdNotIndLCY := Rec."Shipped Not Invoiced (LCY)" - RcdNotInvdRetOrdersLCY;
if Rec."No." = CustNo then
OrderAmountThisOrderLCY := NewOrderAmountLCY
else
OrderAmountThisOrderLCY := 0;
CustCreditAmountLCY :=
Rec."Balance (LCY)" + Rec."Shipped Not Invoiced (LCY)" - RcdNotInvdRetOrdersLCY +
OrderAmountTotalLCY - Rec.GetInvoicedPrepmtAmountLCY();
OnCalcCreditLimitLCYOnAfterCalcAmounts(Rec, ShippedRetRcdNotIndLCY, CustCreditAmountLCY);
end;
OnAfterCalcCreditLimitLCYProcedure(Rec, CustCreditAmountLCY, ExtensionAmountsDic);
end;
local procedure CalcOverdueBalanceLCY()
begin
if Rec.GetFilter("Date Filter") = '' then
Rec.SetFilter("Date Filter", '..%1', WorkDate());
OnCalcOverdueBalanceLCYAfterSetFilter(Rec);
Rec.CalcFields("Balance Due (LCY)");
OnAfterCalcOverdueBalanceLCY(Rec);
end;
local procedure CalcReturnAmounts(var OutstandingRetOrdersLCY2: Decimal; var RcdNotInvdRetOrdersLCY2: Decimal)
begin
SalesLine.Reset();
SalesLine.SetCurrentKey("Document Type", "Bill-to Customer No.", "Currency Code");
SalesLine.SetRange("Document Type", SalesLine."Document Type"::"Return Order");
SalesLine.SetRange("Bill-to Customer No.", Rec."No.");
SalesLine.CalcSums("Outstanding Amount (LCY)", "Return Rcd. Not Invd. (LCY)");
OutstandingRetOrdersLCY2 := SalesLine."Outstanding Amount (LCY)";
RcdNotInvdRetOrdersLCY2 := SalesLine."Return Rcd. Not Invd. (LCY)";
end;
local procedure CalcTotalOutstandingAmt() Result: Decimal
var
SalesLine: Record "Sales Line";
SalesOutstandingAmountFromShipment: Decimal;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCalcTotalOutstandingAmt(Rec, IsHandled, Result);
if IsHandled then
exit(Result);
Rec.CalcFields("Outstanding Invoices (LCY)", "Outstanding Orders (LCY)");
SalesOutstandingAmountFromShipment := SalesLine.OutstandingInvoiceAmountFromShipment(Rec."No.");
Result := Rec."Outstanding Orders (LCY)" + Rec."Outstanding Invoices (LCY)" - SalesOutstandingAmountFromShipment;
OnAfterCalcTotalOutstandingAmt(Rec, Result);
end;
/// <summary>
/// Sets the visibility of the hide message checkbox.
/// </summary>
/// <param name="HideMsgVisible">True to show the hide message checkbox, otherwise false.</param>
procedure SetHideMessageVisible(HideMsgVisible: Boolean)
begin
HideMessageVisible := HideMsgVisible;
end;
/// <summary>
/// Sets the hide message state for the credit limit dialog.
/// </summary>
/// <param name="HideMsg">True to hide future messages, otherwise false.</param>
procedure SetHideMessage(HideMsg: Boolean)
begin
HideMessage := HideMsg;
end;
/// <summary>
/// Gets whether the user has opted to hide the credit limit message.
/// </summary>
/// <returns>True if the user chose to hide the message, otherwise false.</returns>
procedure GetHideMessage(): Boolean
begin
exit(HideMessage);
end;
/// <summary>
/// Gets the primary heading text for the credit limit notification.
/// </summary>
/// <returns>The heading text for the notification.</returns>
procedure GetHeading(): Text[250]
begin
exit(Heading);
end;
/// <summary>
/// Gets the secondary heading text for the overdue balance notification.
/// </summary>
/// <returns>The secondary heading text for the notification.</returns>
procedure GetSecondHeading(): Text[250]
begin
exit(SecondHeading);
end;
/// <summary>
/// Gets the notification identifier for the current credit limit or overdue balance warning.
/// </summary>
/// <returns>The GUID identifier for the notification.</returns>
procedure GetNotificationId(): Guid
begin
exit(NotificationId);
end;
/// <summary>
/// Populates the credit limit notification with data from the current customer record.
/// </summary>
/// <param name="CreditLimitNotification">The notification object to populate with data.</param>
procedure PopulateDataOnNotification(CreditLimitNotification: Notification)
begin
CurrPage.CreditLimitDetails.PAGE.SetCustomerNumber(Rec."No.");
SetParametersOnDetails();
CurrPage.CreditLimitDetails.PAGE.PopulateDataOnNotification(CreditLimitNotification);
end;
local procedure SetParametersOnDetails()
begin
CurrPage.CreditLimitDetails.PAGE.SetOrderAmountTotalLCY(OrderAmountTotalLCY);
CurrPage.CreditLimitDetails.PAGE.SetShippedRetRcdNotIndLCY(ShippedRetRcdNotIndLCY);
CurrPage.CreditLimitDetails.PAGE.SetOrderAmountThisOrderLCY(OrderAmountThisOrderLCY);
CurrPage.CreditLimitDetails.PAGE.SetCustCreditAmountLCY(CustCreditAmountLCY);
CurrPage.CreditLimitDetails.Page.SetExtensionAmounts(ExtensionAmountsDic);
end;
/// <summary>
/// Raised before calculating the total outstanding amount for the customer.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="IsHandled">Set to true to skip the default calculation.</param>
/// <param name="Result">Set to the result to override the calculation.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcTotalOutstandingAmt(var Customer: Record Customer; var IsHandled: Boolean; var Result: Decimal)
begin
end;
/// <summary>
/// Raised before calculating the credit limit amounts in local currency.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="OutstandingRetOrdersLCY">The outstanding return orders amount in local currency.</param>
/// <param name="RcdNotInvdRetOrdersLCY">The received not invoiced return orders amount in local currency.</param>
/// <param name="NewOrderAmountLCY">The new order amount in local currency.</param>
/// <param name="OrderAmountTotalLCY">The total order amount in local currency.</param>
/// <param name="OrderAmountThisOrderLCY">The amount for this order in local currency.</param>
/// <param name="ShippedRetRcdNotIndLCY">The shipped/returned received not invoiced amount in local currency.</param>
/// <param name="CustCreditAmountLCY">The customer credit amount in local currency.</param>
/// <param name="CustNo">The customer number.</param>
/// <param name="ExtensionAmountsDic">Dictionary of extension amounts by GUID.</param>
/// <param name="IsHandled">Set to true to skip the default calculation.</param>
/// <param name="DeltaAmount">The delta amount for the calculation.</param>
/// <param name="CustomerRec">The customer record reference.</param>
[IntegrationEvent(true, false)]
local procedure OnBeforeCalcCreditLimitLCY(var Customer: Record Customer; var OutstandingRetOrdersLCY: Decimal; var RcdNotInvdRetOrdersLCY: Decimal; var NewOrderAmountLCY: Decimal; var OrderAmountTotalLCY: Decimal; var OrderAmountThisOrderLCY: Decimal; var ShippedRetRcdNotIndLCY: Decimal; var CustCreditAmountLCY: Decimal; var CustNo: Code[20]; var ExtensionAmountsDic: Dictionary of [Guid, Decimal]; var IsHandled: Boolean; DeltaAmount: Decimal; var CustomerRec: Record Customer)
begin
end;
/// <summary>
/// Raised before calculating the new order amount in local currency for a sales header.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="SalesHeader">The sales header to calculate the amount for.</param>
/// <param name="NewOrderAmountLCY">The new order amount in local currency to override.</param>
/// <param name="IsHandled">Set to true to skip the default calculation.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcSalesHeaderNewOrderAmountLCY(var Customer: Record Customer; SalesHeader: Record "Sales Header"; var NewOrderAmountLCY: Decimal; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Raised before calculating the order amounts in local currency for a sales line.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="SalesLine">The sales line to calculate the amounts for.</param>
/// <param name="NewOrderAmountLCY">The new order amount in local currency to override.</param>
/// <param name="OldOrderAmountLCY">The old order amount in local currency to override.</param>
/// <param name="IsHandled">Set to true to skip the default calculation.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeCalcSalesLineOrderAmountsLCY(var Customer: Record Customer; SalesLine: Record "Sales Line"; var NewOrderAmountLCY: Decimal; var OldOrderAmountLCY: Decimal; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Raised before showing the credit limit warning for a general journal line.
/// </summary>
/// <param name="GenJournalLine">The general journal line to check.</param>
/// <param name="IsHandled">Set to true to skip the default warning logic.</param>
/// <param name="Result">Set to the result to override the warning.</param>
/// <param name="Customer">The customer record.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeGenJnlLineShowWarning(GenJournalLine: Record "Gen. Journal Line"; var IsHandled: Boolean; var Result: Boolean; var Customer: Record Customer);
begin
end;
/// <summary>
/// Raised before showing the credit limit warning for a sales header.
/// </summary>
/// <param name="SalesHeader">The sales header to check.</param>
/// <param name="Result">Set to the result to override the warning.</param>
/// <param name="IsHandled">Set to true to skip the default warning logic.</param>
/// <param name="Customer">The customer record.</param>
/// <param name="DeltaAmount">The delta amount for the calculation.</param>
[IntegrationEvent(true, false)]
local procedure OnBeforeSalesHeaderShowWarning(var SalesHeader: Record "Sales Header"; var Result: Boolean; var IsHandled: Boolean; var Customer: Record Customer; var DeltaAmount: Decimal);
begin
end;
/// <summary>
/// Raised before showing the credit limit warning for a sales line.
/// </summary>
/// <param name="SalesLine">The sales line to check.</param>
/// <param name="Result">Set to the result to override the warning.</param>
/// <param name="IsHandled">Set to true to skip the default warning logic.</param>
/// <param name="Customer">The customer record.</param>
/// <param name="DeltaAmount">The delta amount for the calculation.</param>
[IntegrationEvent(true, false)]
local procedure OnBeforeSalesLineShowWarning(var SalesLine: Record "Sales Line"; var Result: Boolean; var IsHandled: Boolean; var Customer: Record Customer; var DeltaAmount: Decimal);
begin
end;
/// <summary>
/// Raised before calculating the sales line amount.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="DocType">The document type.</param>
/// <param name="DocNo">The document number.</param>
/// <param name="Result">Set to the result to override the calculation.</param>
/// <param name="IsHandled">Set to true to skip the default calculation.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeSalesLineAmount(var Customer: Record Customer; DocType: Enum "Sales Document Type"; DocNo: Code[20]; var Result: Decimal; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Raised before showing the credit limit warning dialog.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="NewOrderAmountLCY">The new order amount in local currency.</param>
/// <param name="OldOrderAmountLCY">The old order amount in local currency.</param>
/// <param name="OrderAmountTotalLCY">The total order amount in local currency.</param>
/// <param name="ShippedRetRcdNotIndLCY">The shipped/returned received not invoiced amount in local currency.</param>
/// <param name="CustCreditAmountLCY">The customer credit amount in local currency.</param>
/// <param name="DeltaAmount">The delta amount for the calculation.</param>
/// <param name="CheckOverDueBalance">Indicates whether to check overdue balance.</param>
/// <param name="Heading">The heading text for the warning.</param>
/// <param name="Result">Set to the result to override the warning.</param>
/// <param name="IsHandled">Set to true to skip the default warning logic.</param>
/// <param name="NotificationId">The notification identifier.</param>
/// <param name="NewCustNo">The customer number.</param>
/// <param name="NewOrderAmountLCY2">The new order amount in local currency (alternative).</param>
/// <param name="OldOrderAmountLCY2">The old order amount in local currency (alternative).</param>
/// <param name="OrderAmountThisOrderLCY">The amount for this order in local currency.</param>
[IntegrationEvent(false, false)]
local procedure OnBeforeShowWarning(var Customer: Record Customer; var NewOrderAmountLCY: Decimal; OldOrderAmountLCY: Decimal; OrderAmountTotalLCY: Decimal; ShippedRetRcdNotIndLCY: Decimal; CustCreditAmountLCY: Decimal; DeltaAmount: Decimal; CheckOverDueBalance: Boolean; var Heading: Text[250]; var Result: Boolean; var IsHandled: Boolean; var NotificationId: Guid; var NewCustNo: Code[20]; NewOrderAmountLCY2: Decimal; OldOrderAmountLCY2: Decimal; OrderAmountThisOrderLCY: Decimal);
begin
end;
/// <summary>
/// Raised after setting the date filter when calculating the overdue balance.
/// </summary>
/// <param name="Customer">The customer record with the date filter applied.</param>
[IntegrationEvent(false, false)]
local procedure OnCalcOverdueBalanceLCYAfterSetFilter(var Customer: Record Customer);
begin
end;
/// <summary>
/// Raised after calculating the credit limit and determining the exit value.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="CustCreditAmountLCY">The customer credit amount in local currency.</param>
/// <param name="ExitValue">The exit value indicating the warning type.</param>
[IntegrationEvent(false, false)]
local procedure OnShowWarningOnAfterCalcCreditLimitLCYExitValue(var Customer: Record Customer; var CustCreditAmountLCY: Decimal; var ExitValue: Integer)
begin
end;
/// <summary>
/// Raised after calculating the due balance and determining the exit value.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="ExitValue">The exit value indicating the warning type.</param>
[IntegrationEvent(true, false)]
local procedure OnShowWarningOnAfterCalcDueBalanceExitValue(var Customer: Record Customer; var ExitValue: Integer)
begin
end;
/// <summary>
/// Raised before returning the exit value from ShowWarning.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="ExitValue">The calculated exit value.</param>
/// <param name="Result">Set to the result to override the return value.</param>
/// <param name="IsHandled">Set to true to skip the default return logic.</param>
/// <param name="Heading">The heading text to modify.</param>
/// <param name="SecondHeading">The secondary heading text to modify.</param>
/// <param name="NotificationID">The notification identifier to modify.</param>
[IntegrationEvent(true, false)]
local procedure OnShowWarningOnBeforeExitValue(var Customer: Record Customer; ExitValue: Integer; var Result: Boolean; var IsHandled: Boolean; var Heading: Text[250]; var SecondHeading: Text[250]; var NotificationID: Guid)
begin
end;
/// <summary>
/// Raised after calculating the overdue balance in local currency.
/// </summary>
/// <param name="Customer">The customer record with calculated overdue balance.</param>
[IntegrationEvent(true, false)]
local procedure OnAfterCalcOverdueBalanceLCY(var Customer: Record Customer)
begin
end;
/// <summary>
/// Raised after calculating the total outstanding amount.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="Result">The calculated result that can be modified.</param>
[IntegrationEvent(false, false)]
local procedure OnAfterCalcTotalOutstandingAmt(var Customer: Record Customer; var Result: Decimal)
begin
end;
/// <summary>
/// Raised after the credit limit calculation procedure completes.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="CustCreditAmountLCY">The calculated customer credit amount in local currency.</param>
/// <param name="ExtensionAmountsDic">Dictionary for extension amounts by GUID.</param>
[IntegrationEvent(true, false)]
local procedure OnAfterCalcCreditLimitLCYProcedure(var Customer: Record Customer; var CustCreditAmountLCY: Decimal; var ExtensionAmountsDic: Dictionary of [Guid, Decimal])
begin
end;
/// <summary>
/// Raised after assigning the new order amount for a sales header warning.
/// </summary>
/// <param name="SalesHeader">The sales header being processed.</param>
/// <param name="NewOrderAmountLCY">The new order amount that can be modified.</param>
[IntegrationEvent(false, false)]
local procedure OnSalesHeaderShowWarningOnAfterAssingNewOrderAmountLCY(var SalesHeader: Record "Sales Header"; var NewOrderAmountLCY: Decimal);
begin
end;
/// <summary>
/// Raised after calculating amounts during credit limit calculation.
/// </summary>
/// <param name="Customer">The customer record.</param>
/// <param name="ShippedRetRcdNotIndLCY">The shipped/returned received not invoiced amount.</param>
/// <param name="CustCreditAmountLCY">The customer credit amount in local currency.</param>
[IntegrationEvent(false, false)]
local procedure OnCalcCreditLimitLCYOnAfterCalcAmounts(var Customer: Record Customer; var ShippedRetRcdNotIndLCY: Decimal; var CustCreditAmountLCY: Decimal)
begin
end;
}