Skip to content
Open
Original file line number Diff line number Diff line change
Expand Up @@ -80,9 +80,22 @@ page 283 "Recurring General Journal"
IsDimensionBalanceLine();
end;
}
field("Recurring Frequency"; Rec."Recurring Frequency")
field("Recurring Frequency"; RecurringFrequency)
{
ApplicationArea = Suite;
Caption = 'Recurring Frequency';
ToolTip = 'Specifies a recurring frequency if the Recurring field of the General Journal Template table indicates the journal is recurring.';

trigger OnValidate()
var
RecurringFrequencyDateFormula: DateFormula;
begin
if RecurringFrequency <> '' then
if not Evaluate(RecurringFrequencyDateFormula, RecurringFrequency) then
Error(InvalidRecurringFrequencyErr, RecurringFrequency);
Rec.Validate("Recurring Frequency", RecurringFrequencyDateFormula);
SetRecurringFrequency();
end;
}
field("Posting Date"; Rec."Posting Date")
{
Expand Down Expand Up @@ -858,6 +871,7 @@ page 283 "Recurring General Journal"
trigger OnAfterGetRecord()
begin
Rec.ShowShortcutDimCode(ShortcutDimCode);
SetRecurringFrequency();
end;

trigger OnInit()
Expand All @@ -874,6 +888,7 @@ page 283 "Recurring General Journal"
UpdateBalance();
Rec.SetUpNewLine(xRec, Balance, BelowxRec);
Clear(ShortcutDimCode);
SetRecurringFrequency();
end;

trigger OnInsertRecord(BelowxRec: Boolean): Boolean
Expand Down Expand Up @@ -918,6 +933,8 @@ page 283 "Recurring General Journal"
JournalErrorsMgt: Codeunit "Journal Errors Mgt.";
BackgroundErrorHandlingMgt: Codeunit "Background Error Handling Mgt.";
ChangeExchangeRate: Page "Change Exchange Rate";
RecurringFrequency: Text;
InvalidRecurringFrequencyErr: Label 'The recurring frequency %1 is not a valid date formula.', Comment = '%1 = the entered recurring frequency value';
Balance: Decimal;
TotalBalance: Decimal;
NumberOfRecords: Integer;
Expand Down Expand Up @@ -965,6 +982,11 @@ page 283 "Recurring General Journal"
NumberOfRecords := Rec.Count();
end;

local procedure SetRecurringFrequency()
begin
RecurringFrequency := Format(Rec."Recurring Frequency");
end;

local procedure SelectJournalWithError()
var
JnlSelected: Boolean;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ codeunit 134920 "ERM General Journal UT"
GenJnlManagement: Codeunit GenJnlManagement;
LibraryDimension: Codeunit "Library - Dimension";
LibraryVariableStorageCounter: Codeunit "Library - Variable Storage";
IsInitialized: Boolean;
DocNoFilterErr: Label 'The document numbers cannot be renumbered while there is an active filter on the Document No. field.';
WrongJobQueueStatus: Label 'Journal line cannot be modified because it has been scheduled for posting.';
WrongFieldVisibilityErr: Label 'Wrong field visiblity';
Expand All @@ -36,6 +35,17 @@ codeunit 134920 "ERM General Journal UT"
VATAmountLCYErr: Label 'Invalid VAT Amount LCY';
GenJouranlLinePostedMsg: Label 'The journal lines were successfully posted.';
NoSeriesLineStartDateErr: Label 'Starting Date not updated.';
ValidRecurringFrequencyTok: Label '1M', Locked = true;
InvalidRecurringFrequencyTok: Label 'ABC', Locked = true;
InvalidRecurringFrequencyErr: Label 'The recurring frequency %1 is not a valid date formula.', Comment = '%1 = the entered recurring frequency value';
RecurringFrequencyNotValidErr: Label 'The test recurring frequency must be a valid date formula.';
GenJournalLineNotFoundErr: Label 'The general journal line was not found.';
RecurringFrequencyNotDisplayedErr: Label 'Recurring Frequency should be displayed as the formatted date formula.';
RecurringFrequencyNotPersistedErr: Label 'The entered recurring frequency was not persisted.';
RecurringFrequencyNotClearedErr: Label 'The recurring frequency should be cleared.';
YearlyRecurringFrequencyTok: Label '1Y', Locked = true;
RecurringFrequencyNotLocalizedErr: Label 'The recurring frequency should be displayed using the localized date formula tokens.';
IsInitialized: Boolean;

[Test]
[Scope('OnPrem')]
Expand Down Expand Up @@ -6114,6 +6124,170 @@ codeunit 134920 "ERM General Journal UT"
TestPageGeneralJournal.Close();
end;

[Test]
[Scope('OnPrem')]
procedure RecurringFrequencyDisplaysFormattedText()
var
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLine: Record "Gen. Journal Line";
RecurringFrequency: DateFormula;
RecurringGeneralJournal: TestPage "Recurring General Journal";
begin
// [SCENARIO] The Recurring Frequency field shows the formatted (localized) date formula that Edit in Excel exports.
Initialize();

// [GIVEN] A recurring journal line with Recurring Frequency 1M
CreateRecurringGeneralJournalLine(GenJournalLine, GenJournalTemplate, GenJournalBatch);
Assert.IsTrue(Evaluate(RecurringFrequency, ValidRecurringFrequencyTok), RecurringFrequencyNotValidErr);
GenJournalLine.Validate("Recurring Frequency", RecurringFrequency);
GenJournalLine.Modify(true);

// [WHEN] The Recurring General Journal page is opened on the line
RecurringGeneralJournal.Trap();
Page.Run(Page::"Recurring General Journal", GenJournalLine);

// [THEN] The field displays the formatted date formula
Assert.AreEqual(Format(RecurringFrequency), RecurringGeneralJournal."Recurring Frequency".Value, RecurringFrequencyNotDisplayedErr);
RecurringGeneralJournal.Close();
end;

[Test]
[Scope('OnPrem')]
procedure RecurringFrequencyAcceptsValidDateFormula()
var
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLine: Record "Gen. Journal Line";
ExpectedRecurringFrequency: DateFormula;
RecurringGeneralJournal: TestPage "Recurring General Journal";
begin
// [SCENARIO] Entering a valid date formula text persists it as a DateFormula on the journal line.
Initialize();
Assert.IsTrue(Evaluate(ExpectedRecurringFrequency, ValidRecurringFrequencyTok), RecurringFrequencyNotValidErr);

// [GIVEN] A recurring journal line open on the Recurring General Journal page
CreateRecurringGeneralJournalLine(GenJournalLine, GenJournalTemplate, GenJournalBatch);
RecurringGeneralJournal.Trap();
Page.Run(Page::"Recurring General Journal", GenJournalLine);

// [WHEN] A valid recurring frequency is entered
RecurringGeneralJournal."Recurring Frequency".SetValue(ValidRecurringFrequencyTok);
RecurringGeneralJournal.Close();

// [THEN] The date formula is persisted on the line
Assert.IsTrue(GenJournalLine.Get(GenJournalLine."Journal Template Name", GenJournalLine."Journal Batch Name", GenJournalLine."Line No."), GenJournalLineNotFoundErr);
Assert.AreEqual(ExpectedRecurringFrequency, GenJournalLine."Recurring Frequency", RecurringFrequencyNotPersistedErr);
end;

[Test]
[Scope('OnPrem')]
procedure EmptyRecurringFrequencyClearsValue()
var
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLine: Record "Gen. Journal Line";
RecurringFrequency: DateFormula;
RecurringGeneralJournal: TestPage "Recurring General Journal";
begin
// [SCENARIO] Clearing the Recurring Frequency field empties the date formula without error.
Initialize();

// [GIVEN] A recurring journal line with Recurring Frequency 1M open on the page
CreateRecurringGeneralJournalLine(GenJournalLine, GenJournalTemplate, GenJournalBatch);
Assert.IsTrue(Evaluate(RecurringFrequency, ValidRecurringFrequencyTok), RecurringFrequencyNotValidErr);
GenJournalLine.Validate("Recurring Frequency", RecurringFrequency);
GenJournalLine.Modify(true);
RecurringGeneralJournal.Trap();
Page.Run(Page::"Recurring General Journal", GenJournalLine);

// [WHEN] The recurring frequency is cleared
RecurringGeneralJournal."Recurring Frequency".SetValue('');
RecurringGeneralJournal.Close();

// [THEN] The recurring frequency on the line is empty
Assert.IsTrue(GenJournalLine.Get(GenJournalLine."Journal Template Name", GenJournalLine."Journal Batch Name", GenJournalLine."Line No."), GenJournalLineNotFoundErr);
Assert.AreEqual('', Format(GenJournalLine."Recurring Frequency"), RecurringFrequencyNotClearedErr);
end;

[Test]
[Scope('OnPrem')]
procedure InvalidRecurringFrequencyRaisesError()
var
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLine: Record "Gen. Journal Line";
RecurringGeneralJournal: TestPage "Recurring General Journal";
begin
// [SCENARIO] Entering an invalid date formula text raises a descriptive error.
Initialize();

// [GIVEN] A recurring journal line open on the Recurring General Journal page
CreateRecurringGeneralJournalLine(GenJournalLine, GenJournalTemplate, GenJournalBatch);
RecurringGeneralJournal.Trap();
Page.Run(Page::"Recurring General Journal", GenJournalLine);

// [WHEN] An invalid recurring frequency is entered
asserterror RecurringGeneralJournal."Recurring Frequency".SetValue(InvalidRecurringFrequencyTok);

// [THEN] A date formula validation error is raised
Assert.ExpectedError(StrSubstNo(InvalidRecurringFrequencyErr, InvalidRecurringFrequencyTok));
end;

[Test]
[Scope('OnPrem')]
procedure RecurringFrequencyDisplaysLocalizedGermanDateFormula()
var
GenJournalTemplate: Record "Gen. Journal Template";
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLine: Record "Gen. Journal Line";
RecurringFrequency: DateFormula;
RecurringGeneralJournal: TestPage "Recurring General Journal";
PreviousGlobalLanguage: Integer;
InvariantRecurringFrequency: Text;
LocalizedRecurringFrequency: Text;
ExpectedLocalizedRecurringFrequency: Text;
begin
// [SCENARIO 646602] In a German session the Recurring Frequency field exposes the localized date formula token (1J for a year) that Edit in Excel exports, not the invariant token (1Y).
Initialize();

// [GIVEN] A recurring journal line with a yearly Recurring Frequency stored while the session is English (invariant tokens)
CreateRecurringGeneralJournalLine(GenJournalLine, GenJournalTemplate, GenJournalBatch);
Assert.IsTrue(Evaluate(RecurringFrequency, YearlyRecurringFrequencyTok), RecurringFrequencyNotValidErr);
GenJournalLine.Validate("Recurring Frequency", RecurringFrequency);
GenJournalLine.Modify(true);
InvariantRecurringFrequency := Format(GenJournalLine."Recurring Frequency");

// [GIVEN] The session language is German (DEU)
PreviousGlobalLanguage := GlobalLanguage();
GlobalLanguage(1031);

// [WHEN] The Recurring General Journal page is opened on the line
RecurringGeneralJournal.Trap();
Page.Run(Page::"Recurring General Journal", GenJournalLine);
LocalizedRecurringFrequency := RecurringGeneralJournal."Recurring Frequency".Value;
RecurringGeneralJournal.Close();

// [THEN] The field shows the German localized date formula (1J), matching Format() in the German session and differing from the invariant token (1Y)
ExpectedLocalizedRecurringFrequency := Format(GenJournalLine."Recurring Frequency");
GlobalLanguage(PreviousGlobalLanguage);
Assert.AreEqual(ExpectedLocalizedRecurringFrequency, LocalizedRecurringFrequency, RecurringFrequencyNotLocalizedErr);
Assert.AreNotEqual(InvariantRecurringFrequency, LocalizedRecurringFrequency, RecurringFrequencyNotLocalizedErr);
end;

local procedure CreateRecurringGeneralJournalLine(var GenJournalLine: Record "Gen. Journal Line"; var GenJournalTemplate: Record "Gen. Journal Template"; var GenJournalBatch: Record "Gen. Journal Batch")
begin
LibraryERM.CreateGenJournalTemplate(GenJournalTemplate);
GenJournalTemplate.Validate(Type, GenJournalTemplate.Type::General);
GenJournalTemplate.Modify(true);
LibraryERM.CreateGenJournalBatch(GenJournalBatch, GenJournalTemplate.Name);
LibraryERM.CreateGeneralJnlLine(
GenJournalLine, GenJournalTemplate.Name, GenJournalBatch.Name, GenJournalLine."Document Type"::" ",
GenJournalLine."Account Type"::"G/L Account", LibraryERM.CreateGLAccountNo(), 0);
GenJournalLine.Validate("Document No.", LibraryUtility.GenerateGUID());
GenJournalLine.Modify(true);
end;

local procedure Initialize()
begin
LibrarySetupStorage.Restore();
Expand Down
Loading
Loading