Page 2588 Dimension Correction

App
Base Application
Namespace
Microsoft.Finance.Dimension.Correction
Versions
18-28
Source table
2582

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Finance/Dimension/Correction/DimensionCorrection.Page.al376 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.Dimension.Correction;

using System.Security.AccessControl;
using System.Utilities;

/// <summary>
/// Main interface for managing dimension correction operations. Provides comprehensive functionality for creating, configuring, and monitoring dimension corrections.
/// </summary>
page 2588 "Dimension Correction"
{
    PageType = ListPlus;
    SourceTable = "Dimension Correction";
    SourceTableView = where(Completed = const(true));
    DataCaptionExpression = Rec.Description;
    Caption = 'Dimension Correction';

    layout
    {
        area(Content)
        {
            group(GroupName)
            {
                Editable = false;
                Caption = 'General';

                field("Entry No."; Rec."Entry No.")
                {
                    ApplicationArea = All;
                    Visible = false;
                    Caption = 'Entry No.';
                    Tooltip = 'Specifies the identifier of the correction.';
                }

                field(Description; Rec.Description)
                {
                    ApplicationArea = All;
                    MultiLine = true;
                    Caption = 'Description';
                    Tooltip = 'Specifies information about the correction. For example, this might provide a reason for the correction.';
                }

                group(StatusGroup)
                {
                    ShowCaption = false;
                    field(Status; Rec.Status)
                    {
                        ApplicationArea = All;
                        Caption = 'Status';
                        Tooltip = 'Specifies the status of the correction.';
                    }

                    group(ErrorMessage)
                    {
                        ShowCaption = false;
                        Visible = Rec.Status = Rec.Status::Failed;

                        field(ErrorMessageText; Rec."Error Message")
                        {
                            ApplicationArea = All;
                            MultiLine = true;
                            Caption = 'Error Message';
                            Tooltip = 'Specifies why the correction failed.';
                        }
                    }

                    group(ValidationStatusGroup)
                    {
                        ShowCaption = false;
                        Visible = ValidationStatusVisible;
                        field(ValidationStatus; ValidationStatusTxt)
                        {
                            ApplicationArea = All;
                            Editable = false;
                            MultiLine = true;
                            Caption = 'Validation Status';
                            Tooltip = 'Specifies the status of the last validation.';
                        }
                    }

                    field(UpdateAnalysisViewsStatus; Rec."Update Analysis Views Status")
                    {
                        ApplicationArea = All;
                        Caption = 'Update Analysis Views Status';
                        Tooltip = 'Specifies the status of update to analysis views.';
                    }

                    group(AnalysisViewsErrorMessage)
                    {
                        ShowCaption = false;
                        Visible = Rec.Status = Rec."Update Analysis Views Status"::Failed;

                        field(AnalysisViewsErrorMessageText; Rec."Update Analysis Views Error")
                        {
                            ApplicationArea = All;
                            MultiLine = true;
                            Caption = 'Update Analysis Views Error';
                            Tooltip = 'Specifies why the data in analysis views could not be updated.';
                        }
                    }
                }
                group(UserInfo)
                {
                    ShowCaption = false;

                    field(LastModifiedAt; Rec.SystemModifiedAt)
                    {
                        ApplicationArea = All;
                        Importance = Additional;
                        Caption = 'Last modified at';
                        Tooltip = 'Specifies the last date and time that the correction was updated.';
                    }

                    field(LastModifiedBy; SystemModifiedByDisplayName)
                    {
                        ApplicationArea = All;
                        Importance = Additional;
                        Editable = false;
                        Caption = 'Last modified by';
                        Tooltip = 'Specifies the last user who changed the entry.';
                    }

                    field(CreatedAt; Rec.SystemCreatedAt)
                    {
                        ApplicationArea = All;
                        Importance = Additional;
                        Caption = 'Created at';
                        Tooltip = 'Specifies the date and time that the correction was created.';
                    }

                    field(CreatedBy; SystemCreatedByDisplayName)
                    {
                        ApplicationArea = All;
                        Editable = false;
                        Importance = Additional;
                        Caption = 'Created by';
                        Tooltip = 'Specifies the user who created the entry.';
                    }
                }
            }

            part(DimensionCorrectionsPage; "Dim Correction Changes Posted")
            {
                ApplicationArea = All;
                Caption = 'Dimension Correction Changes';
                UpdatePropagation = SubPart;
                Editable = false;
                SubPageLink = "Dimension Correction Entry No." = field("Entry No.");
            }

            part(SelectedGLEntries; "Dim Correct Posted Ledg Entr")
            {
                ApplicationArea = All;
                Editable = false;
                Caption = 'Selected Ledger Entries';
                UpdatePropagation = Both;
            }
        }
    }

    actions
    {
        area(Processing)
        {
            action(UndoDimensionCorrection)
            {
                ApplicationArea = All;
                Enabled = UndoAndValidateAreEnabled;
                Image = Undo;
                Caption = 'Undo';
                ToolTip = 'Undo the selected correction. The values of the related entries will be reverted to their previous state.';

                trigger OnAction()
                var
                    DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
                begin
                    if Rec.Status <> Rec.Status::Completed then
                        Error(CanOnlyUndoCompletedCorrectionsErr);

                    if Rec.Status = Rec.Status::"Undo in Process" then
                        Error(JobAlreadyInProgressErr);

                    DimensionCorrectionMgt.VerifyCanStartJob(Rec);
                    DimensionCorrectionMgt.VerifyCanUndoDimensionCorrection(Rec);
                    if DimensionCorrectionMgt.ScheduleUndoJob(Rec) then begin
                        DimensionCorrectionMgt.SetUndoStatusInProgress(Rec);
                        CurrPage.Close();
                    end;
                end;
            }

            action(CopyToDraft)
            {
                ApplicationArea = All;
                Image = CopyToTask;
                Caption = 'Copy to Draft';
                ToolTip = 'Create a draft of the selected dimension correction with the same selection criteria. For example, this is useful for making a correction when you cannot undo.';

                trigger OnAction()
                var
                    NewDimensionCorrection: Record "Dimension Correction";
                    DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
                begin
                    DimensionCorrectionMgt.CopyToDraft(Rec, NewDimensionCorrection);
                    if Confirm(OpenCopiedEntryQst) then begin
                        Page.Run(Page::"Dimension Correction Draft", NewDimensionCorrection);
                        CurrPage.Close();
                    end;
                end;
            }

            action(ValidateCorrection)
            {
                ApplicationArea = All;
                Caption = 'Validate Undo Dimension Correction';
                Image = TestReport;
                Enabled = UndoAndValidateAreEnabled;
                ToolTip = 'Validates the dimension changes.';

                trigger OnAction()
                var
                    DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
                begin
                    if Rec.Status = Rec.Status::"Validaton in Process" then
                        Error(JobAlreadyInProgressErr);

                    if Rec.Status <> Rec.Status::Completed then
                        Error(CanOnlyUndoCompletedCorrectionsErr);

                    DimensionCorrectionMgt.VerifyCanValidateDimensionCorrection(Rec);
                    DimensionCorrectionMgt.VerifyCanStartJob(Rec);
                    if DimensionCorrectionMgt.ScheduleValidationJob(Rec) then begin
                        Message(UndoDimCorrectionValidationJobSuccessfullyScheduledMsg);
                        CurrPage.Close();
                    end;
                end;
            }

            action(ShowErrors)
            {
                ApplicationArea = All;
                Caption = 'Show Errors';
                Image = ErrorLog;
                ToolTip = 'Open the list of validation errors.';
                Enabled = IsErrorActionEnabled;

                trigger OnAction()
                var
                    ErrorMessageManagement: Codeunit "Error Message Management";
                begin
                    ErrorMessageManagement.ShowErrors(Rec."Validation Errors Register ID");
                end;
            }

            group(AnalysisViews)
            {
                Caption = 'Analysis Views';
                Image = AnalysisView;

                action(UpdateAnalysisViews)
                {
                    ApplicationArea = All;
                    Image = AnalysisViewDimension;
                    Caption = 'Update Analysis Views';
                    ToolTip = 'Update the data shown in analysis views to include the results of the correction.';

                    trigger OnAction()
                    var
                        DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
                    begin
                        if Rec."Update Analysis Views Status" <> Rec."Update Analysis Views Status"::"In Process" then
                            DimensionCorrectionMgt.ScheduleUpdateAnalysisViews(Rec)
                        else
                            Error(JobAlreadyInProgressErr);
                    end;
                }

                action(SetAnalysisViewCompleted)
                {
                    ApplicationArea = All;
                    Image = CompleteLine;
                    Caption = 'Set Update Analysis Views Status to Completed';
                    ToolTip = 'Set the status of an analysis view update to Completed. Use this action after you have manually updated analysis views.';

                    trigger OnAction()
                    var
                        DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
                    begin
                        DimensionCorrectionMgt.SetUpdateAnalysisViewsCompleted(Rec);
                    end;
                }
            }
        }
        area(Promoted)
        {
            group(Category_Process)
            {
                Caption = 'Process';

                actionref(UndoDimensionCorrection_Promoted; UndoDimensionCorrection)
                {
                }
                actionref(CopyToDraft_Promoted; CopyToDraft)
                {
                }
                actionref(ValidateCorrection_Promoted; ValidateCorrection)
                {
                }
                actionref(ShowErrors_Promoted; ShowErrors)
                {
                }
                actionref(UpdateAnalysisViews_Promoted; UpdateAnalysisViews)
                {
                }
                actionref(SetAnalysisViewCompleted_Promoted; SetAnalysisViewCompleted)
                {
                }
            }
        }
    }

    trigger OnAfterGetRecord()
    var
        DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
    begin
        DimensionCorrectionMgt.UpdateStatus(Rec);
        DimensionCorrectionMgt.UpdateAnalysisViewStatus(Rec);
    end;

    trigger OnAfterGetCurrRecord()
    var
        DimensionCorrectionMgt: Codeunit "Dimension Correction Mgt";
    begin
        DimensionCorrectionMgt.ShowNotificationUpdateCashFlowAccounting();
        CurrPage.SelectedGLEntries.Page.SetDimensionCorrectionEntryNo(Rec."Entry No.");
        CurrPage.SelectedGLEntries.Page.Update(false);
        Rec.GetValidateDimensionChangesText(ValidationStatusTxt);
        ValidationStatusVisible := (ValidationStatusTxt <> '') and (not (Rec.Status in [Rec.Status::Failed, Rec.Status::"Undo Completed"]));
        IsErrorActionEnabled := ValidationStatusVisible and (not IsNullGuid(Rec."Validation Errors Register ID"));
        UpdateUserDisplayName();
        UndoAndValidateAreEnabled := Rec.Status <> Rec.Status::"Undo Completed";
    end;

    local procedure UpdateUserDisplayName()
    var
        User: Record "User";
    begin
        Clear(SystemCreatedByDisplayName);
        Clear(SystemModifiedByDisplayName);

        if not User.ReadPermission() then
            exit;

        if User.Get(Rec.SystemCreatedBy) then
            SystemCreatedByDisplayName := User."User Name";

        if User.Get(Rec.SystemModifiedBy) then
            SystemModifiedByDisplayName := User."User Name";
    end;

    var
        SystemModifiedByDisplayName: Text;
        SystemCreatedByDisplayName: Text;
        ValidationStatusTxt: Text;
        IsErrorActionEnabled: Boolean;
        ValidationStatusVisible: Boolean;
        UndoAndValidateAreEnabled: Boolean;
        UndoDimCorrectionValidationJobSuccessfullyScheduledMsg: Label 'The Job for validating the undo of dimension correction is scheduled.';
        OpenCopiedEntryQst: Label 'A draft of the dimension correction has been created. Would you like to open the draft entry now?';
        CanOnlyUndoCompletedCorrectionsErr: Label 'You can only undo dimension corrections that are completed.';
        JobAlreadyInProgressErr: Label 'There is a job already in progress.';
}