Page 2678 Redistribute Acc. Allocations, source in 29
Source29
src/Layers/W1/BaseApp/Finance/AllocationAccount/RedistributeAccAllocations.Page.al304 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.Finance.AllocationAccount;
/// <summary>
/// Interface for modifying allocation distributions and creating manual overrides for allocation accounts.
/// Enables users to adjust calculated allocation amounts and percentages before posting.
/// </summary>
page 2678 "Redistribute Acc. Allocations"
{
PageType = Worksheet;
SourceTable = "Allocation Line";
Caption = 'Change Allocations';
AutoSplitKey = true;
layout
{
area(Content)
{
group(MainGroup)
{
ShowCaption = false;
field(AmountToAllocate; AmountToAllocate)
{
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Original Amount to Allocate';
ApplicationArea = All;
ToolTip = 'Specifies the amount to be allocated to the Destination Account.';
Editable = false;
}
field(PostingDate; PostingDate)
{
Caption = 'Posting Date';
ApplicationArea = All;
ToolTip = 'Specifies the date on which the allocation is posted.';
Editable = false;
}
field(RemainingAmountToAllocate; DifferenceAmount)
{
AutoFormatType = 1;
AutoFormatExpression = '';
Caption = 'Remaining Amount to Allocate';
ApplicationArea = All;
ToolTip = 'Specifies the remaining amount to be allocated to one of the lines.';
StyleExpr = DifferenceAmountStyle;
Editable = false;
}
field(QuantityToAllocate; QuantityToAllocate)
{
Caption = 'Quantity to Allocate';
ApplicationArea = All;
AutoFormatType = 0;
Visible = QuantityVisible;
ToolTip = 'Specifies the quantity to be allocated to the Destination Account.';
Editable = false;
}
field(QuantityToAllocateDifference; QuantityToAllocateDifference)
{
Caption = 'Remaining Quantity to Allocate';
ApplicationArea = All;
AutoFormatType = 0;
Visible = QuantityVisible;
ToolTip = 'Specifies the remaining quantity to be allocated to one of the lines.';
StyleExpr = DifferenceQuantityStyle;
Editable = false;
}
}
repeater(MainContent)
{
field(DestinationAccountType; Rec."Destination Account Type")
{
Caption = 'Destination Account Type';
ApplicationArea = All;
trigger OnValidate()
begin
UpdateDestinationAccountName();
end;
}
field(DestinationAccountNumber; Rec."Destination Account Number")
{
Caption = 'Destination Account No.';
ApplicationArea = All;
trigger OnValidate()
begin
UpdateDestinationAccountName();
end;
}
field("Destination Account Name"; Rec."Destination Account Name")
{
Caption = 'Destination Account Name';
ApplicationArea = All;
Editable = false;
}
field(Quantity; Rec.Quantity)
{
Caption = 'Quantity';
ApplicationArea = All;
Visible = QuantityVisible;
trigger OnValidate()
begin
CalculateDifference();
end;
}
field(Amount; Rec.Amount)
{
Caption = 'Amount';
Editable = not QuantityVisible;
ApplicationArea = All;
trigger OnValidate()
begin
CalculateDifference();
end;
}
}
}
}
actions
{
area(processing)
{
action(ResetToDefault)
{
ApplicationArea = Basic, Suite;
Caption = 'Reset to Default';
Image = Restore;
#pragma warning disable AA0219
ToolTip = 'Resets the allocation lines to the original allocation.';
#pragma warning restore AA0219
Scope = Page;
trigger OnAction()
begin
Rec.ResetToDefault(Rec, ParentSystemId, ParentTableId);
Rec.Reset();
Modified := false;
if Rec.FindFirst() then;
CurrPage.Update(false);
DifferenceAmount := 0;
DifferenceAmountStyle := '';
end;
}
action(Dimensions)
{
ApplicationArea = Basic, Suite;
Caption = 'Dimensions';
Image = Dimensions;
ShortCutKey = 'Shift+Ctrl+D';
#pragma warning disable AA0219
ToolTip = 'View or edit dimensions, such as area, project, or department, that you can assign to journal lines to distribute costs and analyze transaction history.';
#pragma warning restore AA0219
trigger OnAction()
begin
Rec.ShowDimensions();
if Rec."Dimension Set ID" <> xRec."Dimension Set ID" then begin
Modified := true;
Rec.Modify();
end;
end;
}
}
area(Promoted)
{
group(Category_Process)
{
actionref(ResetToDefault_Promoted; ResetToDefault)
{
}
actionref(Dimensions_Promoted; Dimensions)
{
}
}
}
}
trigger OnOpenPage()
begin
Rec.GetOrGenerateAllocationLines(Rec, ParentSystemId, ParentTableId, AmountToAllocate, PostingDate);
Rec.Reset();
if Rec.FindFirst() then
Rec.SetRange("Allocation Account No.", Rec."Allocation Account No.");
QuantityVisible := Rec.GetQuantityVisible(Rec);
if QuantityVisible then
Rec.GetQuantityDataForRedistributePage(Rec, ParentSystemId, ParentTableId, AmountPerUnit, QuantityToAllocate);
end;
trigger OnAfterGetRecord()
begin
UpdateDestinationAccountName();
end;
trigger OnAfterGetCurrRecord()
begin
CalculateDifference();
UpdateDestinationAccountName();
end;
trigger OnModifyRecord(): Boolean
begin
Modified := true;
exit(true);
end;
trigger OnInsertRecord(BelowxRec: Boolean): Boolean
begin
Modified := true;
exit(true);
end;
trigger OnDeleteRecord(): Boolean
begin
Modified := true;
exit(true);
end;
/// <summary>
/// Sets the parent system ID for linking allocation modifications to the source document.
/// </summary>
/// <param name="NewParentSystemId">System ID of the parent document record</param>
procedure SetParentSystemId(NewParentSystemId: Guid)
begin
ParentSystemId := NewParentSystemId;
end;
/// <summary>
/// Sets the parent table ID for linking allocation modifications to the source document table.
/// </summary>
/// <param name="NewParentTableId">Table ID of the parent document</param>
procedure SetParentTableId(NewParentTableId: Integer)
begin
ParentTableId := NewParentTableId;
end;
trigger OnQueryClosePage(CloseAction: Action): Boolean
begin
if CloseAction in [CloseAction::Cancel, CloseAction::LookupCancel] then
exit(true);
if Modified then
if Confirm(SaveChangesQst) then
Rec.SaveChangesToAllocationLines(Rec, ParentSystemId, ParentTableId, AmountToAllocate);
exit(true);
end;
local procedure CalculateDifference()
var
TotalsAllocationLine: Record "Allocation Line";
begin
TotalsAllocationLine.Copy(Rec, true);
if QuantityVisible then begin
TotalsAllocationLine.CalcSums(Quantity);
QuantityToAllocateDifference := QuantityToAllocate - TotalsAllocationLine.Quantity;
if QuantityToAllocateDifference <> 0 then
DifferenceQuantityStyle := 'Attention'
else
DifferenceQuantityStyle := '';
TotalsAllocationLine.Amount := TotalsAllocationLine.Quantity * AmountPerUnit;
Rec.Amount := Rec.Quantity * AmountPerUnit;
end else
TotalsAllocationLine.CalcSums(Amount);
DifferenceAmount := AmountToAllocate - TotalsAllocationLine.Amount;
if DifferenceAmount <> 0 then
DifferenceAmountStyle := 'Attention'
else
DifferenceAmountStyle := '';
end;
local procedure UpdateDestinationAccountName()
var
AllocAccountDistribution: Record "Alloc. Account Distribution";
begin
Rec."Destination Account Name" := AllocAccountDistribution.LookupDistributionAccountName(Rec."Destination Account Type", Rec."Destination Account Number");
end;
var
DifferenceAmountStyle: Text;
DifferenceQuantityStyle: Text;
DifferenceAmount: Decimal;
AmountToAllocate: Decimal;
QuantityToAllocate: Decimal;
QuantityToAllocateDifference: Decimal;
AmountPerUnit: Decimal;
PostingDate: Date;
ParentSystemId: Guid;
ParentTableId: Integer;
Modified: Boolean;
QuantityVisible: Boolean;
SaveChangesQst: Label 'Do you want to save the changes?';
}