Page 241 Business Unit Card

App
Base Application
Namespace
Microsoft.Finance.Consolidation
Versions
17-28
Source table
220

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Finance/Consolidation/BusinessUnitCard.Page.al355 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.Consolidation;

using System.Environment;
using System.Telemetry;

/// <summary>
/// Provides comprehensive business unit configuration interface for consolidation setup and management.
/// Supports both database and API-based consolidation configurations with validation and testing capabilities.
/// </summary>
/// <remarks>
/// Primary user interface for configuring business units including currency settings, exchange rate accounts,
/// data import methods, and API endpoint configurations. Integrates validation and connection testing functionality.
/// </remarks>
page 241 "Business Unit Card"
{
    Caption = 'Business Unit Card';
    PageType = Card;
    SourceTable = "Business Unit";
    RefreshOnActivate = true;

    layout
    {
        area(content)
        {
            group(General)
            {
                Caption = 'General';
                field("Code"; Rec.Code)
                {
                    ApplicationArea = Suite;
                    ToolTip = 'Specifies the identifier for the business unit in the consolidated company.';
                }
                field(Name; Rec.Name)
                {
                    ApplicationArea = Suite;
                }
                field("Currency Code"; Rec."Currency Code")
                {
                    ApplicationArea = Suite;
                }
                field("Currency Exchange Rate Table"; Rec."Currency Exchange Rate Table")
                {
                    ApplicationArea = Suite;
                }
                field(Consolidate; Rec.Consolidate)
                {
                    ApplicationArea = Suite;
                }
                field("Consolidation %"; Rec."Consolidation %")
                {
                    ApplicationArea = Suite;
                }
                field("Starting Date"; Rec."Starting Date")
                {
                    ApplicationArea = Suite;
                }
                field("Ending Date"; Rec."Ending Date")
                {
                    ApplicationArea = Suite;
                }
                field("Data Source"; Rec."Data Source")
                {
                    ApplicationArea = Suite;
                }
                field("Last Run"; Rec."Last Run")
                {
                    ApplicationArea = Suite;
                }
            }
            group("Data import")
            {
                field("Default Data Import Method"; Rec."Default Data Import Method")
                {
                    ApplicationArea = Suite;
                    Visible = IsSaaS;

                    trigger OnValidate()
                    begin
                        Clear(Rec."Company Name");
                        Clear(Rec."BC API URL");
                        Clear(Rec."AAD Tenant ID");
                        Clear(Rec."External Company Id");
                        Clear(Rec."External Company Name");
                        UpdateAPISettingsVisible();
                    end;
                }
                group("DB Settings")
                {
                    ShowCaption = false;
                    Visible = not APISettingsVisible;
                    field("Company Name"; Rec."Company Name")
                    {
                        ApplicationArea = Suite;
                        ShowMandatory = true;
                    }
                }
                group("API Settings")
                {
                    ShowCaption = false;
                    Visible = APISettingsVisible;
                    field("BC API URL"; Rec."BC API URL")
                    {
                        Caption = 'API''s Endpoint';
                        ApplicationArea = Suite;
                        ShowMandatory = true;

                        trigger OnValidate()
                        var
                            ImportConsolidationFromAPI: Codeunit "Import Consolidation from API";
                        begin
                            if Rec."BC API URL" = '' then begin
                                Clear(Rec."AAD Tenant ID");
                                Clear(Rec."External Company Id");
                                Clear(Rec."External Company Name");
                                exit;
                            end;
                            if not ImportConsolidationFromAPI.ValidateBCUrl(Rec."BC API URL") then
                                Error(UrlOfBCInstanceInvalidErr);
                            Rec."AAD Tenant ID" := CopyStr(ImportConsolidationFromAPI.GetAADTenantIdFromBCUrl(Rec."BC API URL"), 1, MaxStrLen(Rec."AAD Tenant ID"));
                            ImportConsolidationFromAPI.SelectCompanyForBusinessUnit(Rec);
                        end;
                    }
                    field("BC Company Name"; Rec."External Company Name")
                    {
                        ApplicationArea = Suite;
                        Editable = false;
                    }
                    field("Log Requests"; Rec."Log Requests")
                    {
                        ApplicationArea = Suite;
                        Visible = false;
                    }
                }
                field("File Format"; Rec."File Format")
                {
                    ApplicationArea = Suite;
                }
            }
            group("G/L Accounts")
            {
                Caption = 'G/L Accounts';
                field("Exch. Rate Gains Acc."; Rec."Exch. Rate Gains Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Exch. Rate Losses Acc."; Rec."Exch. Rate Losses Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Comp. Exch. Rate Gains Acc."; Rec."Comp. Exch. Rate Gains Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Comp. Exch. Rate Losses Acc."; Rec."Comp. Exch. Rate Losses Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Equity Exch. Rate Gains Acc."; Rec."Equity Exch. Rate Gains Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Equity Exch. Rate Losses Acc."; Rec."Equity Exch. Rate Losses Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Residual Account"; Rec."Residual Account")
                {
                    ApplicationArea = Suite;
                }
                field("Minority Exch. Rate Gains Acc."; Rec."Minority Exch. Rate Gains Acc.")
                {
                    ApplicationArea = Suite;
                }
                field("Minority Exch. Rate Losses Acc"; Rec."Minority Exch. Rate Losses Acc")
                {
                    ApplicationArea = Suite;
                }
            }
        }
        area(factboxes)
        {
            systempart(Control1900383207; Links)
            {
                ApplicationArea = RecordLinks;
                Visible = false;
            }
            systempart(Control1905767507; Notes)
            {
                ApplicationArea = Notes;
                Visible = false;
            }
        }
    }

    actions
    {
        area(navigation)
        {
            action(ConfigureExchangeRates)
            {
                ApplicationArea = Suite;
                Caption = 'Exchange Rates';
                ToolTip = 'Edit the currency exchange rates used for this business unit in the next consolidation process.';
                Image = Currencies;
                trigger OnAction()
                var
                    ConsolidationCurrency: Codeunit "Consolidation Currency";
                begin
                    ConsolidationCurrency.ConfigureBusinessUnitCurrencies(Rec);
                    Rec.Modify();
                end;
            }
            group("&Reports")
            {
                Caption = '&Reports';
                Image = "Report";
                action(Eliminations)
                {
                    ApplicationArea = Suite;
                    Caption = 'Eliminations';
                    Ellipsis = true;
                    Image = "Report";
                    RunObject = Report "G/L Consolidation Eliminations";
                    ToolTip = 'View or edit elimination entries to remove transactions that are recorded across more than one company or remove entries involving intercompany transactions.';
                }
                action("Trial B&alance")
                {
                    ApplicationArea = Suite;
                    Caption = 'Trial B&alance';
                    Ellipsis = true;
                    Image = "Report";
                    RunObject = Report "Consolidated Trial Balance";
                    ToolTip = 'View general ledger balances and activities.';
                }
                action("Trial &Balance (4)")
                {
                    ApplicationArea = Suite;
                    Caption = 'Trial &Balance (4)';
                    Ellipsis = true;
                    Image = "Report";
                    RunObject = Report "Consolidated Trial Balance (4)";
                    ToolTip = 'View detailed general ledger balances.';
                }
            }
        }
        area(processing)
        {
            group("F&unctions")
            {
                Caption = 'F&unctions';
                Image = "Action";
                action("Test Database")
                {
                    ApplicationArea = Suite;
                    Caption = 'Test Database (same environment)';
                    Ellipsis = true;
                    Image = TestDatabase;
                    ToolTip = 'Preview the consolidation, without transferring data.';

                    trigger OnAction()
                    begin
                        if Rec."Default Data Import Method" <> Rec."Default Data Import Method"::Database then
                            if not Confirm(ConfirmRunInAPIBusinessUnitMsg) then
                                exit;
                        Report.Run(Report::"Consolidation - Test Database");
                    end;

                }
                action("T&est File")
                {
                    ApplicationArea = Suite;
                    Caption = 'T&est File';
                    Ellipsis = true;
                    Image = TestFile;
                    RunObject = Report "Consolidation - Test File";
                    ToolTip = 'Preview the consolidation in a file, without transferring data.';
                }
                separator(Action54)
                {
                }
                action("Run Consolidation")
                {
                    ApplicationArea = Suite;
                    Caption = 'Run Consolidation (same environment)';
                    Ellipsis = true;
                    Image = ImportDatabase;
                    ToolTip = 'Run consolidation for business units in the same environment.';

                    trigger OnAction()
                    begin
                        if Rec."Default Data Import Method" <> Rec."Default Data Import Method"::Database then
                            if not Confirm(ConfirmRunInAPIBusinessUnitMsg) then
                                exit;
                        Report.Run(Report::"Import Consolidation from DB");
                    end;
                }
                action("I&mport File")
                {
                    ApplicationArea = Suite;
                    Caption = 'I&mport File';
                    Ellipsis = true;
                    Image = Import;
                    RunObject = Report "Import Consolidation from File";
                    ToolTip = 'Run consolidation for the file that you import.';
                }
                action("Export File")
                {
                    ApplicationArea = Suite;
                    Caption = 'Export File';
                    Image = Export;
                    RunObject = Report "Export Consolidation";
                    ToolTip = 'Export transactions from the business units to a file.';
                }
            }
        }
        area(Promoted)
        {
            actionref(ConfigureExchangeRates_Promoted; ConfigureExchangeRates)
            {
            }
            group(Category_Report)
            {
                Caption = 'Report', Comment = 'Generated from the PromotedActionCategories property index 2.';
            }
        }
    }

    var
        UrlOfBCInstanceInvalidErr: Label 'The URL of the Business Central business unit is invalid. You can get this URL from the page "Consolidation Setup" in the other Business Central environment.';
        ConfirmRunInAPIBusinessUnitMsg: Label 'The current business unit is not set up to import data from another Business Central company in the same environment. Do you want to continue?';
        APISettingsVisible: Boolean;
        IsSaaS: Boolean;

    trigger OnOpenPage()
    var
        EnvironmentInformation: Codeunit "Environment Information";
        FeatureTelemetry: Codeunit "Feature Telemetry";
        ImportConsolidationFromAPI: Codeunit "Import Consolidation from API";
    begin
        FeatureTelemetry.LogUptake('0000KOM', ImportConsolidationFromAPI.GetFeatureTelemetryName(), Enum::"Feature Uptake Status"::Discovered);
        IsSaaS := EnvironmentInformation.IsSaaS();
        UpdateAPISettingsVisible();
    end;

    local procedure UpdateAPISettingsVisible()
    begin
        APISettingsVisible := IsSaaS and (Rec."Default Data Import Method" = Rec."Default Data Import Method"::API);
    end;

}