Table 502 Reminder Attachment Text, source in 29

Source29

src/Layers/W1/BaseApp/Sales/Reminder/TermsAndLevels/ReminderAttachmentText.Table.al282 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.Reminder;

using System.Globalization;

/// <summary>
/// Stores language-specific text configurations for reminder PDF attachment documents by source type.
/// </summary>
table 502 "Reminder Attachment Text"
{
    Caption = 'Reminder Attachment Text';
    DataCaptionFields = "Language Code", "Source Type", "File Name";
    LookupPageID = "Reminder Attachment Text";

    fields
    {
        /// <summary>
        /// Specifies the unique identifier for this attachment text configuration.
        /// </summary>
        field(1; Id; Guid)
        {
            Caption = 'ID';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Specifies the language code for this attachment text configuration.
        /// </summary>
        field(2; "Language Code"; Code[10])
        {
            Caption = 'Language Code';
            ToolTip = 'Specifies the language code of the beginning and ending lines.';
            NotBlank = true;
            TableRelation = Language;
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Specifies whether this text is linked to reminder terms or a specific reminder level.
        /// </summary>
        field(3; "Source Type"; Enum "Reminder Text Source Type")
        {
            Caption = 'Source Type';
            DataClassification = SystemMetadata;
        }
        /// <summary>
        /// Specifies the file name for the generated reminder PDF attachment.
        /// </summary>
        field(4; "File Name"; Text[100])
        {
            Caption = 'File Name';
            ToolTip = 'Specifies the file name of the attachment.';
            DataClassification = CustomerContent;
        }
#if not CLEANSCHEMA29
        /// <summary>
        /// Contains the text that appears at the beginning of the reminder attachment.
        /// </summary>
        field(5; "Beginning Line"; Text[100])
        {
            Caption = 'Beginning Line';
            DataClassification = CustomerContent;
#if not CLEAN27
            ObsoleteReason = 'To support the use of multiple lines, this field will be replaced by the Reminder Attachment Text Line table.';
            ObsoleteState = Pending;
#pragma warning disable AS0074
            ObsoleteTag = '27.0';
#pragma warning restore AS0074
#else
            ObsoleteReason = 'To support the use of multiple lines, this is replaced by Reminder Attachment Text Line table.';
            ObsoleteState = Removed;
            ObsoleteTag = '29.0';
#endif
        }
#endif
        /// <summary>
        /// Specifies the description text for inline fees shown on the reminder attachment.
        /// </summary>
        field(6; "Inline Fee Description"; Text[100])
        {
            Caption = 'Inline Fee Description';
            ToolTip = 'Specifies the description line that will appear in the attachment along side the fee.';
            DataClassification = CustomerContent;
        }
#if not CLEANSCHEMA29
        /// <summary>
        /// Contains the text that appears at the end of the reminder attachment.
        /// </summary>
        field(7; "Ending Line"; Text[100])
        {
            Caption = 'Ending Line';
            DataClassification = CustomerContent;
#if not CLEAN27
            ObsoleteReason = 'To support the use of multiple lines, this field will be replaced by the Reminder Attachment Text Line table.';
            ObsoleteState = Pending;
#pragma warning disable AS0074
            ObsoleteTag = '27.0';
#pragma warning restore AS0074
#else
            ObsoleteReason = 'To support the use of multiple lines, this is replaced by Reminder Attachment Text Line table.';
            ObsoleteState = Removed;
            ObsoleteTag = '29.0';
#endif
        }
#endif
        /// <summary>
        /// Indicates whether beginning text lines exist for this attachment configuration.
        /// </summary>
        field(10; "Beginning Lines"; Boolean)
        {
            CalcFormula = exist("Reminder Attachment Text Line"
                                where(Id = field(Id),
                                      "Language Code" = field("Language Code"),
                                      Position = const("Beginning Line")));
            Caption = 'Beginning Line';
            ToolTip = 'Shows if there are beginning lines for the current language.';
            Editable = false;
            FieldClass = FlowField;
        }
        /// <summary>
        /// Indicates whether ending text lines exist for this attachment configuration.
        /// </summary>
        field(11; "Ending Lines"; Boolean)
        {
            CalcFormula = exist("Reminder Attachment Text Line"
                                where(Id = field(Id),
                                      "Language Code" = field("Language Code"),
                                      Position = const("Ending Line")));
            Caption = 'Ending Line';
            ToolTip = 'Shows if there are ending lines for the current language.';
            Editable = false;
            FieldClass = FlowField;
        }
    }

    keys
    {
        key(Key1; Id, "Language Code")
        {
            Clustered = true;
        }
    }

    trigger OnInsert()
    begin
        if IsNullGuid(Rec.Id) then
            Error(MissingIDErr);

        if Rec."Language Code" = '' then
            Error(MissingLanguageCodeErr);
    end;

    trigger OnDelete()
    var
        ReminderAttachmentText: Record "Reminder Attachment Text";
        ReminderTerms: Record "Reminder Terms";
        ReminderLevel: Record "Reminder Level";
        OnlyOneLanguage: Boolean;
        EmptyGuid: Guid;
    begin
        DeleteReminderAttachmentTextLines(Rec);
        ReminderAttachmentText.SetRange(Id, Rec.Id);
        OnlyOneLanguage := ReminderAttachmentText.Count() <= 1;

        if not OnlyOneLanguage then
            exit;

        case Rec."Source Type" of
            "Reminder Text Source Type"::"Reminder Term":
                begin
                    ReminderTerms.SetRange("Reminder Attachment Text", Rec.Id);
                    ReminderTerms.FindFirst();
                    ReminderTerms."Reminder Attachment Text" := EmptyGuid;
                    ReminderTerms.Modify(true);
                end;
            "Reminder Text Source Type"::"Reminder Level":
                begin
                    ReminderLevel.SetRange("Reminder Attachment Text", Rec.Id);
                    ReminderLevel.FindFirst();
                    ReminderLevel."Reminder Attachment Text" := EmptyGuid;
                    ReminderLevel.Modify(true);
                end;
        end;
    end;

    var
        DefaultFileNameLbl: Label 'Reminder';
        MissingIDErr: Label 'A reminder attachment text cannot be created without an ID.';
        MissingLanguageCodeErr: Label 'A reminder attachment text cannot be created without a language code.';
        AlreadyExistsSelectedLanguageErr: Label 'There is already a reminder attachment text for the selected language %1. Remove the existing personalization before setting the default communication for that language.', Comment = '%1 = Language Code';

    /// <summary>
    /// Creates a new reminder attachment text record for the user's language with default content.
    /// </summary>
    /// <param name="SelectedId">The ID of the reminder attachment text group.</param>
    /// <param name="SourceType">The source type (Reminder Term or Reminder Level).</param>
    procedure SetDefaultContentForNewLanguage(SelectedId: Guid; SourceType: Enum "Reminder Text Source Type")
    var
        Language: Codeunit Language;
    begin
        SetDefaultContentForNewLanguage(SelectedId, Language.GetUserLanguageCode(), SourceType);
    end;

    /// <summary>
    /// Creates a new reminder attachment text record for the specified language with default content.
    /// </summary>
    /// <param name="SelectedId">The ID of the reminder attachment text group.</param>
    /// <param name="LanguageCode">The language code for the new record.</param>
    /// <param name="SourceType">The source type (Reminder Term or Reminder Level).</param>
    procedure SetDefaultContentForNewLanguage(SelectedId: Guid; LanguageCode: Code[10]; SourceType: Enum "Reminder Text Source Type")
    var
        EmptyGuid: Guid;
    begin
        SetDefaultContentForNewLanguage(SelectedId, LanguageCode, SourceType, EmptyGuid);
    end;

    /// <summary>
    /// Creates a new reminder attachment text record for the specified language and links it to the source record.
    /// </summary>
    /// <param name="SelectedId">The ID of the reminder attachment text group.</param>
    /// <param name="LanguageCode">The language code for the new record.</param>
    /// <param name="SourceType">The source type (Reminder Term or Reminder Level).</param>
    /// <param name="SelectedSystemId">The system ID of the source record to link to.</param>
    procedure SetDefaultContentForNewLanguage(SelectedId: Guid; LanguageCode: Code[10]; SourceType: Enum "Reminder Text Source Type"; SelectedSystemId: Guid)
    var
        ExistingReminderAttachmentText: Record "Reminder Attachment Text";
        ReminderAttachmentText: Record "Reminder Attachment Text";
        ReminderTerms: Record "Reminder Terms";
        ReminderLevel: Record "Reminder Level";
        Language: Codeunit Language;
        CurrentGlobalLanguage: Integer;
    begin
        if ExistingReminderAttachmentText.Get(SelectedId, LanguageCode) then
            Error(AlreadyExistsSelectedLanguageErr, LanguageCode);

        CurrentGlobalLanguage := GlobalLanguage();
        GlobalLanguage(Language.GetLanguageId(LanguageCode));
        ReminderAttachmentText.Id := SelectedId;
        ReminderAttachmentText."Language Code" := LanguageCode;
        ReminderAttachmentText."File Name" := DefaultFileNameLbl;
        ReminderAttachmentText."Source Type" := SourceType;
        ReminderAttachmentText.Insert(true);
        GlobalLanguage(CurrentGlobalLanguage);

        if IsNullGuid(SelectedSystemId) then
            exit;

        case SourceType of
            "Reminder Text Source Type"::"Reminder Term":
                begin
                    ReminderTerms.SetRange(SystemId, SelectedSystemId);
                    if ReminderTerms.FindFirst() then begin
                        ReminderTerms."Reminder Attachment Text" := SelectedId;
                        ReminderTerms.Modify(true);
                    end;
                end;
            "Reminder Text Source Type"::"Reminder Level":
                begin
                    ReminderLevel.SetRange(SystemId, SelectedSystemId);
                    if ReminderLevel.FindFirst() then begin
                        ReminderLevel."Reminder Attachment Text" := SelectedId;
                        ReminderLevel.Modify(true);
                    end;
                end;
        end;
    end;

    internal procedure DeleteReminderAttachmentTextLines(ReminderAttachmentText: Record "Reminder Attachment Text")
    var
        ReminderAttachmentTextLine: Record "Reminder Attachment Text Line";
    begin
        ReminderAttachmentTextLine.SetRange(Id, ReminderAttachmentText.Id);
        ReminderAttachmentTextLine.SetRange("Language Code", ReminderAttachmentText."Language Code");
        if ReminderAttachmentTextLine.IsEmpty() then
            exit;

        ReminderAttachmentTextLine.DeleteAll();
    end;
}