Codeunit 5979 Service-Post and Send

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

Events, 4

Versions171819202122232425262728

Source29

Source in 29

src/Layers/W1/BaseApp/Service/Posting/ServicePostandSend.Codeunit.al124 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.Posting;

using Microsoft.Foundation.Reporting;
using Microsoft.Sales.Customer;
using Microsoft.Service.Document;

codeunit 5979 "Service-Post and Send"
{
    TableNo = "Service Header";

    trigger OnRun()
    begin
        ServiceHeader.Copy(Rec);
        Code();
        Rec := ServiceHeader;
    end;

    var
        ServiceHeader: Record "Service Header";
        NotSupportedDocumentTypeErr: Label 'Document type %1 is not supported.', Comment = '%1=Document Type e.g. Invoice';

    local procedure "Code"()
    var
        TempDocumentSendingProfile: Record "Document Sending Profile" temporary;
        ServicePost: Codeunit "Service-Post";
    begin
        OnBeforeCode(ServiceHeader);

        case ServiceHeader."Document Type" of
            ServiceHeader."Document Type"::Invoice,
              ServiceHeader."Document Type"::"Credit Memo":
                if not ConfirmPostAndSend(ServiceHeader, TempDocumentSendingProfile) then
                    exit;
            else
                Error(NotSupportedDocumentTypeErr, ServiceHeader."Document Type");
        end;

        TempDocumentSendingProfile.CheckElectronicSendingEnabled();
        ValidateElectronicFormats(TempDocumentSendingProfile);

        CODEUNIT.Run(CODEUNIT::"Service-Post", ServiceHeader);

        OnAfterPostAndBeforeSend(ServiceHeader);
        Commit();

        ServicePost.SendPostedDocumentRecord(ServiceHeader, TempDocumentSendingProfile);

        OnAfterCode(ServiceHeader);
    end;

    local procedure ConfirmPostAndSend(ServiceHeader: Record "Service Header"; var TempDocumentSendingProfile: Record "Document Sending Profile" temporary): Boolean
    var
        Customer: Record Customer;
        DocumentSendingProfile: Record "Document Sending Profile";
        IsHandled: Boolean;
    begin
        Customer.Get(ServiceHeader."Bill-to Customer No.");
        IsHandled := false;
        OnConfirmPostAndSendOnBeforeGetDocumentSendingProfile(ServiceHeader, Customer, DocumentSendingProfile, IsHandled);
        if not IsHandled then
            if not DocumentSendingProfile.Get(Customer."Document Sending Profile") then
                DocumentSendingProfile.GetDefault(DocumentSendingProfile);

        Commit();
        TempDocumentSendingProfile.Copy(DocumentSendingProfile);
        TempDocumentSendingProfile.SetDocumentUsage(ServiceHeader);
        TempDocumentSendingProfile.Insert();
        if PAGE.RunModal(PAGE::"Post and Send Confirmation", TempDocumentSendingProfile) <> ACTION::Yes then
            exit(false);

        exit(true);
    end;

    local procedure ValidateElectronicFormats(DocumentSendingProfile: Record "Document Sending Profile")
    var
        ElectronicDocumentFormat: Record "Electronic Document Format";
        ServElectrDocFormat: Codeunit "Serv. Electr. Doc. Format";
    begin
        if (DocumentSendingProfile."E-Mail" <> DocumentSendingProfile."E-Mail"::No) and
           (DocumentSendingProfile."E-Mail Attachment" <> DocumentSendingProfile."E-Mail Attachment"::PDF)
        then begin
            ElectronicDocumentFormat.ValidateElectronicFormat(DocumentSendingProfile."E-Mail Format");
            ServElectrDocFormat.ValidateElectronicServiceDocument(ServiceHeader, DocumentSendingProfile."E-Mail Format");
        end;

        if (DocumentSendingProfile.Disk <> DocumentSendingProfile.Disk::No) and
           (DocumentSendingProfile.Disk <> DocumentSendingProfile.Disk::PDF)
        then begin
            ElectronicDocumentFormat.ValidateElectronicFormat(DocumentSendingProfile."Disk Format");
            ServElectrDocFormat.ValidateElectronicServiceDocument(ServiceHeader, DocumentSendingProfile."Disk Format");
        end;

        if DocumentSendingProfile."Electronic Document" <> DocumentSendingProfile."Electronic Document"::No then begin
            ElectronicDocumentFormat.ValidateElectronicFormat(DocumentSendingProfile."Electronic Format");
            ServElectrDocFormat.ValidateElectronicServiceDocument(ServiceHeader, DocumentSendingProfile."Electronic Format");
        end;
    end;

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

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

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

    [IntegrationEvent(false, false)]
    local procedure OnConfirmPostAndSendOnBeforeGetDocumentSendingProfile(ServiceHeader: Record "Service Header"; Customer: Record Customer; var DocumentSendingProfile: Record "Document Sending Profile"; var IsHandled: Boolean)
    begin
    end;
}