Report 6004 Batch Post Service Invoices

App
Base Application
Namespace
Microsoft.Service.Document
Versions
17-28

Procedures, 1Events, 3

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Service/Document/BatchPostServiceInvoices.Report.al203 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.Service.Document;

using Microsoft.Sales.Setup;
using Microsoft.Service.Posting;
using System.Environment;

report 6004 "Batch Post Service Invoices"
{
    Caption = 'Batch Post Service Invoices';
    ProcessingOnly = true;

    dataset
    {
        dataitem("Service Header"; "Service Header")
        {
            DataItemTableView = sorting("Document Type", "No.") where("Document Type" = const(Invoice));
            RequestFilterFields = "No.", Status, Priority;

            trigger OnAfterGetRecord()
            begin
                if CalcInvDisc then
                    CalculateInvoiceDiscount();

                Counter := Counter + 1;
                Window.Update(1, "No.");
                Window.Update(2, Round(Counter / CounterTotal * 10000, 1));
                Clear(ServPost);
                ServPost.SetPostingDate(ReplacePostingDate, ReplaceDocumentDate, PostingDateReq);
                ServPost.SetPostingOptions(true, false, true); // ship, consume, invoice
                if ServPost.Run("Service Header") then begin
                    CounterOK := CounterOK + 1;
                    if MarkedOnly then
                        Mark(false);
                end;
            end;

            trigger OnPostDataItem()
            begin
                Window.Close();
                Message(Text002, CounterOK, CounterTotal);
            end;

            trigger OnPreDataItem()
            var
                ServPostingSelectionMgt: Codeunit "Serv. Posting Selection Mgt.";
            begin
                if ReplacePostingDate and (PostingDateReq = 0D) then
                    Error(Text000);

                ServPostingSelectionMgt.CheckUserCanInvoiceService();
                CounterTotal := Count;
                Window.Open(Text001);
            end;
        }
    }

    requestpage
    {
        SaveValues = true;

        layout
        {
            area(content)
            {
                group(Options)
                {
                    Caption = 'Options';
                    field(PostingDate; PostingDateReq)
                    {
                        ApplicationArea = Service;
                        Caption = 'Posting Date';
                        ToolTip = 'Specifies the date that the program uses as the document or posting date if you select the Replace Posting Date check box or the Replace Document Date check box or both check boxes.';
                    }
                    field(ReplacePostingDate; ReplacePostingDate)
                    {
                        ApplicationArea = Service;
                        Caption = 'Replace Posting Date';
                        ToolTip = 'Specifies if you want to replace the posting date of the service invoices with the date that you entered in the Posting Date field.';

                        trigger OnValidate()
                        begin
                            if ReplacePostingDate then
                                Message(Text003);

                            OnAfterValidateReplacePostingDate("Service Header", ReplacePostingDate);
                        end;
                    }
                    field(ReplaceDocumentDate; ReplaceDocumentDate)
                    {
                        ApplicationArea = Service;
                        Caption = 'Replace Document Date';
                        ToolTip = 'Specifies if you want to replace the document date of the service invoices with the date in the Posting Date field.';
                    }
                    field(CalcInvDisc; CalcInvDisc)
                    {
                        ApplicationArea = Service;
                        Caption = 'Calc. Inv. Discount';
                        ToolTip = 'Specifies if you want the invoice discount amount to be automatically calculated on the invoices before posting.';

                        trigger OnValidate()
                        begin
                            SalesSetup.Get();
                            SalesSetup.TestField("Calc. Inv. Discount", false);
                        end;
                    }
                }
            }
        }

        actions
        {
        }

        trigger OnOpenPage()
        var
            ClientTypeManagement: Codeunit "Client Type Management";
        begin
            if ClientTypeManagement.GetCurrentClientType() = ClientType::Background then
                exit;
            SalesSetup.Get();
            CalcInvDisc := SalesSetup."Calc. Inv. Discount";
            ReplacePostingDate := false;
            ReplaceDocumentDate := false;
        end;
    }

    labels
    {
    }

    trigger OnPostReport()
    begin
        OnAfterPostReport("Service Header");
    end;

    trigger OnPreReport()
    begin
        OnBeforePreReport();
    end;

    var
        ServLine: Record "Service Line";
        SalesSetup: Record "Sales & Receivables Setup";
        ServCalcDisc: Codeunit "Service-Calc. Discount";
        ServPost: Codeunit "Service-Post";
        Window: Dialog;
        PostingDateReq: Date;
        CounterTotal: Integer;
        Counter: Integer;
        CounterOK: Integer;
        ReplacePostingDate: Boolean;
        ReplaceDocumentDate: Boolean;
        CalcInvDisc: Boolean;

#pragma warning disable AA0074
        Text000: Label 'Enter the posting date.';
#pragma warning disable AA0470
        Text001: Label 'Posting invoices   #1########## @2@@@@@@@@@@@@@';
        Text002: Label '%1 invoices out of a total of %2 have now been posted.';
#pragma warning restore AA0470
        Text003: Label 'The exchange rate associated with the new posting date on the service header will not apply to the service lines.';
#pragma warning restore AA0074

    local procedure CalculateInvoiceDiscount()
    begin
        ServLine.Reset();
        ServLine.SetRange("Document Type", "Service Header"."Document Type");
        ServLine.SetRange("Document No.", "Service Header"."No.");
        if ServLine.FindFirst() then
            if ServCalcDisc.Run(ServLine) then begin
                "Service Header".Get("Service Header"."Document Type", "Service Header"."No.");
                Commit();
            end;
    end;

    procedure InitializeRequest(PostingDateReqFrom: Date; ReplacePostingDateFrom: Boolean; ReplaceDocumentDateFrom: Boolean; CalcInvDiscFrom: Boolean)
    begin
        PostingDateReq := PostingDateReqFrom;
        ReplacePostingDate := ReplacePostingDateFrom;
        ReplaceDocumentDate := ReplaceDocumentDateFrom;
        CalcInvDisc := CalcInvDiscFrom;
    end;

    [IntegrationEvent(true, false)]
    local procedure OnAfterPostReport(var ServiceHeader: Record "Service Header")
    begin
    end;

    [IntegrationEvent(true, false)]
    local procedure OnBeforePreReport()
    begin
    end;

    [IntegrationEvent(false, false)]
    local procedure OnAfterValidateReplacePostingDate(var ServiceHeader: Record "Service Header"; ReplacePostingDate: Boolean)
    begin
    end;
}