Codeunit 345 Sales Line CaptionClass Mgmt, source in 29

Source29

src/Layers/W1/BaseApp/Sales/Document/SalesLineCaptionClassMgmt.Codeunit.al82 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.Sales.Document;

using Microsoft.Sales.Customer;
using System.Reflection;

/// <summary>
/// Manages dynamic field captions for sales lines based on document header settings.
/// </summary>
codeunit 345 "Sales Line CaptionClass Mgmt"
{
    SingleInstance = true;

    trigger OnRun()
    begin
    end;

    var
        GlobalSalesHeader: Record "Sales Header";
        GlobalField: Record "Field";

    /// <summary>
    /// Gets the caption class string for a sales line field based on VAT settings.
    /// </summary>
    /// <param name="SalesLine">The sales line to get the caption for.</param>
    /// <param name="FieldNumber">The field number to get the caption class for.</param>
    /// <returns>The caption class string.</returns>
    procedure GetSalesLineCaptionClass(var SalesLine: Record "Sales Line"; FieldNumber: Integer): Text
    begin
        if (GlobalSalesHeader."Document Type" <> SalesLine."Document Type") or (GlobalSalesHeader."No." <> SalesLine."Document No.") then
            if not GlobalSalesHeader.Get(SalesLine."Document Type", SalesLine."Document No.") then
                Clear(GlobalSalesHeader);
        case FieldNumber of
            SalesLine.FieldNo("No."):
                exit(StrSubstNo('3,%1', GetFieldCaption(DATABASE::"Sales Line", FieldNumber)));
            else begin
                if GlobalSalesHeader."Prices Including VAT" then
                    exit('2,1,' + GetFieldCaption(DATABASE::"Sales Line", FieldNumber));
                exit('2,0,' + GetFieldCaption(DATABASE::"Sales Line", FieldNumber));
            end;
        end;
    end;

    local procedure GetFieldCaption(TableNumber: Integer; FieldNumber: Integer): Text
    begin
        if (GlobalField.TableNo <> TableNumber) or (GlobalField."No." <> FieldNumber) then
            GlobalField.Get(TableNumber, FieldNumber);
        exit(GlobalField."Field Caption");
    end;

    /// <summary>
    /// Sets the cached sales header for caption class calculations.
    /// </summary>
    /// <param name="SalesHeader">The sales header to cache.</param>
    procedure SetCachedSalesHeader(SalesHeader: Record "Sales Header")
    begin
        GlobalSalesHeader := SalesHeader;
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnAfterChangePricesIncludingVAT', '', true, true)]
    local procedure SalesHeaderChangedPricesIncludingVAT(var SalesHeader: Record "Sales Header")
    begin
        GlobalSalesHeader := SalesHeader;
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnAfterSetFieldsBilltoCustomer', '', true, true)]
    local procedure UpdateSalesLineFieldsCaptionOnAfterSetFieldsBilltoCustomer(var SalesHeader: Record "Sales Header"; Customer: Record Customer)
    begin
        GlobalSalesHeader := SalesHeader;
    end;

    [EventSubscriber(ObjectType::Table, Database::"Sales Header", 'OnValidateBilltoCustomerTemplCodeOnBeforeRecreateSalesLines', '', true, true)]
    local procedure UpdateSalesLineFieldsCaptionOnValidateBilltoCustTemplCodeBeforeRecreateSalesLines(var SalesHeader: Record "Sales Header"; CallingFieldNo: Integer)
    begin
        GlobalSalesHeader := SalesHeader;
    end;
}