Report 1395 Cancel Issued Fin.Charge Memos, source in 29

Source29

src/Layers/W1/BaseApp/Sales/FinanceCharge/CancelIssuedFinChargeMemos.Report.al186 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.FinanceCharge;

using Microsoft.Finance.GeneralLedger.Journal;
using System.Utilities;

/// <summary>
/// Provides batch processing to cancel multiple issued finance charge memos with configurable document numbering and posting dates.
/// </summary>
report 1395 "Cancel Issued Fin.Charge Memos"
{
    AdditionalSearchTerms = 'cancel issued fin. charge memo';
    Caption = 'Cancel Issued Fin.Charge Memos';
    ProcessingOnly = true;

    dataset
    {
        dataitem("Issued Fin. Charge Memo Header"; "Issued Fin. Charge Memo Header")
        {

            trigger OnAfterGetRecord()
            var
                TempErrorMessage: Record "Error Message" temporary;
                CancelIssuedFinChargeMemo: Codeunit "Cancel Issued Fin. Charge Memo";
            begin
                CancelIssuedFinChargeMemo.SetParameters(UseSameDocumentNo, UseSamePostingDate, NewPostingDate, NoOfRecords > 1);
                CancelIssuedFinChargeMemo.SetGenJnlBatch(GenJnlBatch);
                if CancelIssuedFinChargeMemo.Run("Issued Fin. Charge Memo Header") then begin
                    if CancelIssuedFinChargeMemo.GetErrorMessages(TempErrorMessage) then
                        AddIssuedFinChargeMemoHeaderToErrorBuffer();
                    Commit();
                end else
                    if NoOfRecords > 1 then begin
                        TempErrorMessage.LogLastError();
                        AddIssuedFinChargeMemoHeaderToErrorBuffer();
                    end else
                        Error(GetLastErrorText);
            end;

            trigger OnPostDataItem()
            begin
                if NoOfRecords > 1 then
                    if not TempIssuedFinChargeMemoHeader.IsEmpty() then
                        AskShowNotCancelledIssuedFinChargeMemos();
            end;

            trigger OnPreDataItem()
            begin
                NoOfRecords := Count;
                if NoOfRecords = 0 then
                    Error(NothingToCancelErr);

                if not UseSamePostingDate and (NewPostingDate = 0D) then
                    Error(SpecifyPostingDateErr);
            end;
        }
    }

    requestpage
    {

        layout
        {
            area(content)
            {
                field(UseSameDocumentNo; UseSameDocumentNo)
                {
                    ApplicationArea = Suite;
                    Caption = 'Use Same Document No.';
                    ToolTip = 'Specifies if you want to use the same document number for corrective ledger entries. If you do not select the check box, then a document number will be assigned from the Canceled Issued Fin. Ch. Memos Nos. number series that is defined on the Sales & Receivables Setup page.';
                }
                field(UseSamePostingDate; UseSamePostingDate)
                {
                    ApplicationArea = Suite;
                    Caption = 'Use Same Posting Date';
                    ToolTip = 'Specifies if you want to use same posting date for corrective ledger entries.';

                    trigger OnValidate()
                    begin
                        if UseSamePostingDate then
                            NewPostingDate := 0D;
                        SetEnabled();
                    end;
                }
                field(NewPostingDate; NewPostingDate)
                {
                    ApplicationArea = Suite;
                    Caption = 'New Posting Date';
                    Enabled = NewPostingDateEnabled;
                    ToolTip = 'Specifies the new posting date for corrective ledger entries.';
                }
                field(JnlTemplateName; GenJnlLineReq."Journal Template Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Journal Template Name';
                    TableRelation = "Gen. Journal Template";
                    ToolTip = 'Specifies the name of the journal template that is used for the posting.';
                    Visible = IsJournalTemplNameVisible;

                    trigger OnValidate()
                    begin
                        GenJnlLineReq."Journal Batch Name" := '';
                    end;
                }
                field(JnlBatchName; GenJnlLineReq."Journal Batch Name")
                {
                    ApplicationArea = Basic, Suite;
                    Caption = 'Journal Batch Name';
                    Lookup = true;
                    ToolTip = 'Specifies the name of the journal batch that is used for the posting.';
                    Visible = IsJournalTemplNameVisible;

                    trigger OnLookup(var Text: Text): Boolean
                    var
                        GenJnlManagement: Codeunit GenJnlManagement;
                    begin
                        GenJnlManagement.SetJnlBatchName(GenJnlLineReq);
                        if GenJnlLineReq."Journal Batch Name" <> '' then
                            GenJnlBatch.Get(GenJnlLineReq."Journal Template Name", GenJnlLineReq."Journal Batch Name");
                    end;

                    trigger OnValidate()
                    begin
                        if GenJnlLineReq."Journal Batch Name" <> '' then begin
                            GenJnlLineReq.TestField("Journal Template Name");
                            GenJnlBatch.Get(GenJnlLineReq."Journal Template Name", GenJnlLineReq."Journal Batch Name");
                        end;
                    end;
                }
            }
        }

        actions
        {
        }

        trigger OnOpenPage()
        begin
            UseSameDocumentNo := true;
            UseSamePostingDate := true;
            SetEnabled();
        end;
    }

    labels
    {
    }

    var
        TempIssuedFinChargeMemoHeader: Record "Issued Fin. Charge Memo Header" temporary;
        GenJnlLineReq: Record "Gen. Journal Line";
        GenJnlBatch: Record "Gen. Journal Batch";
        NoOfRecords: Integer;
        NothingToCancelErr: Label 'There is nothing to cancel.';
        UseSameDocumentNo: Boolean;
        UseSamePostingDate: Boolean;
        NewPostingDate: Date;
        NewPostingDateEnabled: Boolean;
        IsJournalTemplNameVisible: Boolean;
        SpecifyPostingDateErr: Label 'You must specify a posting date.';
        ShowNotCancelledFinChargeMemosQst: Label 'One or more of the selected issued finance charge memos could not be canceled.\\Do you want to see a list of the issued finance charge memos that were not canceled?';

    local procedure SetEnabled()
    begin
        NewPostingDateEnabled := not UseSamePostingDate;
    end;

    local procedure AskShowNotCancelledIssuedFinChargeMemos()
    var
        ConfirmManagement: Codeunit "Confirm Management";
    begin
        if ConfirmManagement.GetResponseOrDefault(ShowNotCancelledFinChargeMemosQst, true) then
            PAGE.RunModal(PAGE::"Issued Fin. Charge Memo List", TempIssuedFinChargeMemoHeader);
    end;

    local procedure AddIssuedFinChargeMemoHeaderToErrorBuffer()
    begin
        TempIssuedFinChargeMemoHeader := "Issued Fin. Charge Memo Header";
        TempIssuedFinChargeMemoHeader.Insert();
    end;
}