Table 1053 Line Fee Note on Report Hist., source in 29
Source29
src/Layers/W1/BaseApp/Sales/Reminder/LineFeeNoteonReportHist.Table.al213 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.Reminder;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Receivables;
using System.Globalization;
/// <summary>
/// Stores history of line fee notes that have been printed on reminder reports for customer ledger entries.
/// </summary>
table 1053 "Line Fee Note on Report Hist."
{
Caption = 'Line Fee Note on Report Hist.';
Permissions = TableData "Line Fee Note on Report Hist." = rimd,
tabledata "Reminder Attachment Text" = R,
tabledata "Reminder Terms" = R;
DataClassification = CustomerContent;
fields
{
/// <summary>
/// Specifies the customer ledger entry number for which this line fee note was generated.
/// </summary>
field(1; "Cust. Ledger Entry No"; Integer)
{
Caption = 'Cust. Ledger Entry No';
Editable = false;
TableRelation = "Cust. Ledger Entry"."Entry No." where("Entry No." = field("Cust. Ledger Entry No"));
}
/// <summary>
/// Specifies the due date at which this line fee note applies.
/// </summary>
field(2; "Due Date"; Date)
{
Caption = 'Due Date';
Editable = false;
}
/// <summary>
/// Specifies the language code used for this translated line fee note.
/// </summary>
field(3; "Language Code"; Code[10])
{
Caption = 'Language Code';
Editable = false;
NotBlank = true;
TableRelation = Language;
}
/// <summary>
/// Specifies the reminder terms code for which this line fee note was generated.
/// </summary>
field(4; "Reminder Terms Code"; Code[10])
{
Caption = 'Reminder Terms Code';
}
/// <summary>
/// Specifies the reminder level at which this line fee note applies.
/// </summary>
field(5; "Reminder Level No"; Integer)
{
Caption = 'Reminder Level No';
}
/// <summary>
/// Contains the formatted line fee note text that appeared on the reminder report.
/// </summary>
field(6; ReportText; Text[200])
{
Caption = 'ReportText';
Editable = false;
NotBlank = true;
}
}
keys
{
key(Key1; "Cust. Ledger Entry No", "Due Date", "Language Code", "Reminder Terms Code", "Reminder Level No")
{
Clustered = true;
}
}
fieldgroups
{
}
local procedure GetLineFeeNoteOnReport(CustLedgerEntry: Record "Cust. Ledger Entry"; ReminderLevel: Record "Reminder Level"; LineFeeNoteOnReport: Text[150]; DueDate: Date): Text[200]
var
GeneralLedgerSetup: Record "General Ledger Setup";
AdditionalFeePerLine: Decimal;
CurrencyCode: Code[10];
MarginalPerc: Decimal;
begin
CustLedgerEntry.CalcFields("Original Amount");
AdditionalFeePerLine :=
ReminderLevel.GetAdditionalFee(
CustLedgerEntry."Original Amount", CustLedgerEntry."Currency Code", true, CustLedgerEntry."Posting Date");
if AdditionalFeePerLine = 0 then
exit;
if CustLedgerEntry."Currency Code" = '' then begin
GeneralLedgerSetup.Get();
CurrencyCode := GeneralLedgerSetup."LCY Code";
end else
CurrencyCode := CustLedgerEntry."Currency Code";
if CustLedgerEntry."Original Amount" > 0 then
MarginalPerc := Round(AdditionalFeePerLine * 100 / CustLedgerEntry."Original Amount", 0.01);
exit(StrSubstNo(LineFeeNoteOnReport, Format(Round(AdditionalFeePerLine, 0.01), 0, 9), CurrencyCode, DueDate, Format(MarginalPerc, 0, 9)));
end;
local procedure InsertRec(ReminderLevel: Record "Reminder Level"; CustLedgerEntryNo: Integer; DueDate: Date; LanguageCode: Code[10]; LineFeeNoteOnReport: Text[200])
var
LineFeeNoteOnReportHist: Record "Line Fee Note on Report Hist.";
begin
if LineFeeNoteOnReport <> '' then begin
if LineFeeNoteOnReportHist.Get(
CustLedgerEntryNo, DueDate, LanguageCode, ReminderLevel."Reminder Terms Code", ReminderLevel."No.")
then
exit;
LineFeeNoteOnReportHist.Init();
LineFeeNoteOnReportHist."Cust. Ledger Entry No" := CustLedgerEntryNo;
LineFeeNoteOnReportHist."Due Date" := DueDate;
LineFeeNoteOnReportHist."Language Code" := LanguageCode;
LineFeeNoteOnReportHist."Reminder Terms Code" := ReminderLevel."Reminder Terms Code";
LineFeeNoteOnReportHist."Reminder Level No" := ReminderLevel."No.";
LineFeeNoteOnReportHist.ReportText := LineFeeNoteOnReport;
LineFeeNoteOnReportHist.Insert(true);
end;
end;
local procedure InsertAttachmentLineFeeNotesOnReport(CustLedgerEntry: Record "Cust. Ledger Entry"; ReminderTerms: Record "Reminder Terms"; ReminderLevel: Record "Reminder Level"; DueDate: Date)
var
ReminderAttachmentText: Record "Reminder Attachment Text";
ReminderLevelAttachmentText: Record "Reminder Attachment Text";
LineFeeNoteOnReport: Text[200];
begin
if not IsNullGuid(ReminderLevel."Reminder Attachment Text") then begin
ReminderAttachmentText.SetRange(Id, ReminderLevel."Reminder Attachment Text");
if ReminderAttachmentText.FindSet() then
repeat
if ReminderAttachmentText."Inline Fee Description" <> '' then begin
LineFeeNoteOnReport :=
GetLineFeeNoteOnReport(CustLedgerEntry, ReminderLevel, ReminderAttachmentText."Inline Fee Description", DueDate);
InsertRec(ReminderLevel,
CustLedgerEntry."Entry No.",
DueDate,
ReminderAttachmentText."Language Code",
LineFeeNoteOnReport);
end;
until ReminderAttachmentText.Next() = 0;
end;
if IsNullGuid(ReminderTerms."Reminder Attachment Text") then
exit;
ReminderAttachmentText.Reset();
ReminderAttachmentText.SetRange(Id, ReminderTerms."Reminder Attachment Text");
ReminderAttachmentText.SetFilter("Inline Fee Description", '<>%1', '');
if ReminderAttachmentText.FindSet() then
repeat
if IsNullGuid(ReminderLevel."Reminder Attachment Text") or
not ReminderLevelAttachmentText.Get(
ReminderLevel."Reminder Attachment Text", ReminderAttachmentText."Language Code")
then begin
LineFeeNoteOnReport :=
GetLineFeeNoteOnReport(CustLedgerEntry, ReminderLevel, ReminderAttachmentText."Inline Fee Description", DueDate);
InsertRec(ReminderLevel,
CustLedgerEntry."Entry No.",
DueDate,
ReminderAttachmentText."Language Code",
LineFeeNoteOnReport);
end;
until ReminderAttachmentText.Next() = 0;
end;
/// <summary>
/// Saves the line fee note history for the specified customer ledger entry based on reminder terms.
/// </summary>
/// <param name="CustLedgerEntry">The customer ledger entry to save line fee history for.</param>
procedure Save(CustLedgerEntry: Record "Cust. Ledger Entry")
var
Customer: Record Customer;
ReminderTerms: Record "Reminder Terms";
ReminderLevel: Record "Reminder Level";
DueDate: Date;
begin
if not Customer.Get(CustLedgerEntry."Customer No.") then
exit;
if Customer."Reminder Terms Code" = '' then
exit;
ReminderTerms.Get(Customer."Reminder Terms Code");
if not ReminderTerms."Post Add. Fee per Line" then
exit;
ReminderLevel.SetRange("Reminder Terms Code", ReminderTerms.Code);
if ReminderLevel.FindSet() then begin
DueDate := CalcDate(ReminderLevel."Grace Period", CustLedgerEntry."Due Date");
InsertAttachmentLineFeeNotesOnReport(CustLedgerEntry, ReminderTerms, ReminderLevel, DueDate);
while ReminderLevel.Next() <> 0 do begin
DueDate := CalcDate(ReminderLevel."Grace Period", DueDate);
InsertAttachmentLineFeeNotesOnReport(CustLedgerEntry, ReminderTerms, ReminderLevel, DueDate);
end;
end;
end;
}