Page 404 Check Preview, source in 29
Source29
src/Layers/W1/BaseApp/Bank/Check/CheckPreview.Page.al357 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.Bank.Check;
using Microsoft.Bank.BankAccount;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Foundation.Address;
using Microsoft.Foundation.Company;
using Microsoft.HumanResources.Employee;
using Microsoft.Purchases.Remittance;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
/// <summary>
/// Provides formatted preview of check layout and content before final printing.
/// Displays payer information, payee details, and check amounts in standard check format.
/// </summary>
/// <remarks>
/// Source Table: Gen. Journal Line. Integrates with company information and address formatting.
/// Shows complete check preview including routing numbers, amounts, and remittance details.
/// </remarks>
page 404 "Check Preview"
{
Caption = 'Check Preview';
DataCaptionExpression = Rec."Document No." + ' ' + CheckToAddr[1];
Editable = false;
LinksAllowed = false;
PageType = Card;
SourceTable = "Gen. Journal Line";
layout
{
area(content)
{
group(Payer)
{
Caption = 'Payer';
field("CompanyAddr[1]"; CompanyAddr[1])
{
ApplicationArea = Basic, Suite;
Caption = 'Company Name';
ToolTip = 'Specifies the company name that will appear on the check.';
}
field("CompanyAddr[2]"; CompanyAddr[2])
{
ApplicationArea = Basic, Suite;
Caption = 'Company Address';
ToolTip = 'Specifies the company address that will appear on the check.';
}
field("CompanyAddr[3]"; CompanyAddr[3])
{
ApplicationArea = Basic, Suite;
Caption = 'Company Address 2';
ToolTip = 'Specifies the extended company address that will appear on the check.';
}
field("CompanyAddr[4]"; CompanyAddr[4])
{
ApplicationArea = Basic, Suite;
Caption = 'Company Post Code/City';
ToolTip = 'Specifies the company post code and city that will appear on the check.';
}
field("Document No."; Rec."Document No.")
{
ApplicationArea = Basic, Suite;
ToolTip = 'Specifies a document number for the journal line.';
}
field(CheckStatusText; CheckStatusText)
{
ApplicationArea = Basic, Suite;
Caption = 'Status';
ToolTip = 'Specifies if the check is printed.';
}
}
group(Amount)
{
Caption = 'Amount';
group(Control30)
{
ShowCaption = false;
label(AmountText)
{
ApplicationArea = Basic, Suite;
CaptionClass = Format(NumberText[1]);
Caption = 'Amount Text';
ToolTip = 'Specifies the amount in letters that will appear on the check.';
}
label("Amount Text 2")
{
ApplicationArea = Basic, Suite;
CaptionClass = Format(NumberText[2]);
Caption = 'Amount Text 2';
ToolTip = 'Specifies an additional part of the amount in letters that will appear on the check.';
}
}
}
group(Payee)
{
Caption = 'Payee';
fixed(Control1902115401)
{
ShowCaption = false;
group("Pay to the order of")
{
Caption = 'Pay to the order of';
field("CheckToAddr[1]"; CheckToAddr[1])
{
ApplicationArea = Basic, Suite;
Caption = 'Pay-to Name';
ToolTip = 'Specifies the name of the payee that will appear on the check.';
}
field("CheckToAddr[2]"; CheckToAddr[2])
{
ApplicationArea = Basic, Suite;
Caption = 'Pay-to Address';
ToolTip = 'Specifies the address of the payee that will appear on the check.';
}
field("CheckToAddr[3]"; CheckToAddr[3])
{
ApplicationArea = Basic, Suite;
Caption = 'Pay-to Address 2';
ToolTip = 'Specifies the extended address of the payee that will appear on the check.';
}
field("CheckToAddr[4]"; CheckToAddr[4])
{
ApplicationArea = Basic, Suite;
Caption = 'Pay-to Post Code/City';
ToolTip = 'Specifies the post code and city of the payee that will appear on the check.';
}
}
group(Date)
{
Caption = 'Date';
field("Posting Date"; Rec."Posting Date")
{
ApplicationArea = Basic, Suite;
ToolTip = 'Specifies the posting date for the entry.';
}
field(Text002; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field(Placeholder2; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field(Placeholder3; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
}
group(Control1900724401)
{
Caption = 'Amount';
field(CheckAmount; CheckAmount)
{
ApplicationArea = Basic, Suite;
AutoFormatExpression = Rec."Currency Code";
AutoFormatType = 1;
ShowCaption = false;
ToolTip = 'Specifies the amount that will appear on the check.';
}
field(Placeholder4; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field(Placeholder5; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
field(Placeholder6; PlaceholderLbl)
{
ApplicationArea = Basic, Suite;
Visible = false;
}
}
}
}
}
}
actions
{
}
trigger OnAfterGetRecord()
begin
CalcCheck();
end;
trigger OnOpenPage()
begin
CompanyInfo.Get();
FormatAddr.Company(CompanyAddr, CompanyInfo);
end;
var
GenJnlLine: Record "Gen. Journal Line";
Cust: Record Customer;
Vend: Record Vendor;
BankAcc: Record "Bank Account";
CompanyInfo: Record "Company Information";
Employee: Record Employee;
CheckReport: Report Check;
FormatAddr: Codeunit "Format Address";
CheckToAddr: array[8] of Text[100];
CompanyAddr: array[8] of Text[100];
NumberText: array[2] of Text[80];
CheckStatusText: Text[30];
CheckAmount: Decimal;
PrintedCheckLbl: Label 'Printed Check';
NotPrintedCheckLbl: Label 'Not Printed Check';
PlaceholderLbl: Label 'Placeholder';
local procedure CalcCheck()
begin
if Rec."Check Printed" then begin
GenJnlLine.Reset();
GenJnlLine.SetCurrentKey("Journal Template Name", "Journal Batch Name", "Posting Date", "Document No.");
GenJnlLine.SetRange("Journal Template Name", Rec."Journal Template Name");
GenJnlLine.SetRange("Journal Batch Name", Rec."Journal Batch Name");
GenJnlLine.SetRange("Posting Date", Rec."Posting Date");
GenJnlLine.SetRange("Document No.", Rec."Document No.");
if Rec."Bal. Account No." = '' then
GenJnlLine.SetRange("Bank Payment Type", GenJnlLine."Bank Payment Type"::" ")
else
GenJnlLine.SetRange("Bank Payment Type", GenJnlLine."Bank Payment Type"::"Computer Check");
GenJnlLine.SetRange("Check Printed", true);
CheckStatusText := PrintedCheckLbl;
end else begin
GenJnlLine.Reset();
GenJnlLine.SetCurrentKey("Journal Template Name", "Journal Batch Name", "Posting Date", "Document No.");
GenJnlLine.SetRange("Journal Template Name", Rec."Journal Template Name");
GenJnlLine.SetRange("Journal Batch Name", Rec."Journal Batch Name");
GenJnlLine.SetRange("Posting Date", Rec."Posting Date");
GenJnlLine.SetRange("Document No.", Rec."Document No.");
GenJnlLine.SetRange("Account Type", Rec."Account Type");
GenJnlLine.SetRange("Account No.", Rec."Account No.");
GenJnlLine.SetRange("Bal. Account Type", Rec."Bal. Account Type");
GenJnlLine.SetRange("Bal. Account No.", Rec."Bal. Account No.");
GenJnlLine.SetRange("Bank Payment Type", Rec."Bank Payment Type");
CheckStatusText := NotPrintedCheckLbl;
end;
CheckAmount := 0;
if GenJnlLine.Find('-') then
repeat
CheckAmount := CheckAmount + GenJnlLine.Amount;
until GenJnlLine.Next() = 0;
if CheckAmount < 0 then
CheckAmount := 0;
FormatTextFieldsForCheck();
end;
local procedure FormatTextFieldsForCheck()
var
RemitAddress: Record "Remit Address";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeFormatTextFieldsForCheck(CheckToAddr, CheckAmount, GenJnlLine, Cust, BankAcc, Employee, Vend, Rec, IsHandled);
if IsHandled then
exit;
CheckReport.InitTextVariable();
CheckReport.FormatNoText(NumberText, CheckAmount, GenJnlLine."Currency Code");
case GenJnlLine."Account Type" of
GenJnlLine."Account Type"::"G/L Account":
begin
Clear(CheckToAddr);
CheckToAddr[1] := GenJnlLine.Description;
end;
GenJnlLine."Account Type"::Customer:
begin
Cust.Get(GenJnlLine."Account No.");
Cust.Contact := '';
FormatAddr.Customer(CheckToAddr, Cust);
end;
#pragma warning disable AA0005
GenJnlLine."Account Type"::Vendor:
begin
if GenJnlLine."Remit-to Code" = '' then begin
Vend.Get(GenJnlLine."Account No.");
Vend.Contact := '';
FormatAddr.Vendor(CheckToAddr, Vend);
end
else begin
Vend.Get(GenJnlLine."Account No.");
RemitAddress.Get(GenJnlLine."Remit-to Code", GenJnlLine."Account No.");
FormatAddr.VendorRemitToAddress(RemitAddress, CheckToAddr);
end;
end;
#pragma warning restore AA0005
GenJnlLine."Account Type"::"Bank Account":
begin
BankAcc.Get(GenJnlLine."Account No.");
BankAcc.Contact := '';
FormatAddr.BankAcc(CheckToAddr, BankAcc);
end;
GenJnlLine."Account Type"::"Fixed Asset":
GenJnlLine.FieldError("Account Type");
GenJnlLine."Account Type"::Employee:
begin
Employee.Get(GenJnlLine."Account No.");
FormatAddr.Employee(CheckToAddr, Employee);
end;
end;
OnAfterFormatTextFieldsForCheck(CheckToAddr);
end;
/// <summary>
/// Integration event raised before formatting text fields for check display.
/// Enables custom formatting logic or field population before standard check formatting.
/// </summary>
/// <param name="CheckToAddr">Array of address text fields for the check</param>
/// <param name="CheckAmount">Amount value for the check</param>
/// <param name="GenJournalLine">General journal line associated with the check</param>
/// <param name="Customer">Customer record when balance account type is Customer</param>
/// <param name="BankAccount">Bank account record for the check</param>
/// <param name="Employee">Employee record when balance account type is Employee</param>
/// <param name="Vendor">Vendor record when balance account type is Vendor</param>
/// <param name="Rec">Current record context for the check preview</param>
/// <param name="IsHandled">Set to true to skip standard text field formatting</param>
/// <remarks>
/// Raised from FormatTextFieldsForCheck procedure before standard check text formatting.
/// </remarks>
[IntegrationEvent(false, false)]
local procedure OnBeforeFormatTextFieldsForCheck(var CheckToAddr: array[8] of Text[100]; CheckAmount: Decimal; var GenJournalLine: Record "Gen. Journal Line"; var Customer: Record Customer; var BankAccount: Record "Bank Account"; var Employee: Record Employee; var Vendor: Record Vendor; Rec: Record "Gen. Journal Line"; var IsHandled: Boolean)
begin
end;
/// <summary>
/// Integration event raised after formatting text fields for check display.
/// Enables custom modifications to formatted check text fields.
/// </summary>
/// <param name="CheckToAddr">Array of formatted address text fields for the check</param>
/// <remarks>
/// Raised from FormatTextFieldsForCheck procedure after standard check text formatting.
/// </remarks>
[IntegrationEvent(true, false)]
local procedure OnAfterFormatTextFieldsForCheck(var CheckToAddr: array[8] of Text[100])
begin
end;
}