Codeunit 6494 Serv. Navigate Mgt.
- App
- Base Application
- Namespace
- Microsoft.Foundation.Navigate
- Versions
- 25-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Service/Foundation/Navigate/ServNavigateMgt.Codeunit.al342 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.Foundation.Navigate;
using Microsoft.Service.Document;
using Microsoft.Service.History;
using Microsoft.Service.Ledger;
codeunit 6494 "Serv. Navigate Mgt."
{
var
[SecurityFiltering(SecurityFilter::Filtered)]
ServShptHeader: Record "Service Shipment Header";
[SecurityFiltering(SecurityFilter::Filtered)]
ServInvHeader: Record "Service Invoice Header";
[SecurityFiltering(SecurityFilter::Filtered)]
ServCrMemoHeader: Record "Service Cr.Memo Header";
[SecurityFiltering(SecurityFilter::Filtered)]
ServLedgerEntry: Record "Service Ledger Entry";
[SecurityFiltering(SecurityFilter::Filtered)]
WarrantyLedgerEntry: Record "Warranty Ledger Entry";
[SecurityFiltering(SecurityFilter::Filtered)]
ServiceHeader: Record Microsoft.Service.Document."Service Header";
PostedServiceInvoiceTxt: Label 'Posted Service Invoice';
PostedServiceCreditMemoTxt: Label 'Posted Service Credit Memo';
PostedServiceShipmentTxt: Label 'Posted Service Shipment';
ServiceOrderTxt: Label 'Service Order';
ServiceInvoiceTxt: Label 'Service Invoice';
ServiceCreditMemoTxt: Label 'Service Credit Memo';
[EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterFindPostedDocuments', '', true, false)]
local procedure OnAfterFindPostedDocuments(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text)
begin
FindServShipmentHeader(DocumentEntry, DocNoFilter, PostingDateFilter);
FindServInvoiceHeader(DocumentEntry, DocNoFilter, PostingDateFilter);
FindServCrMemoHeader(DocumentEntry, DocNoFilter, PostingDateFilter);
end;
local procedure FindServShipmentHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text)
begin
if (DocNoFilter = '') and (PostingDateFilter = '') then
exit;
if ServShptHeader.ReadPermission() then begin
SetServiceShipmentHeaderFilters(DocNoFilter, PostingDateFilter);
DocumentEntry.InsertIntoDocEntry(Database::"Service Shipment Header", PostedServiceShipmentTxt, ServShptHeader.Count);
end;
end;
local procedure FindServInvoiceHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text)
begin
if (DocNoFilter = '') and (PostingDateFilter = '') then
exit;
if ServInvHeader.ReadPermission() then begin
SetServiceInvoiceHeaderFilters(DocNoFilter, PostingDateFilter);
DocumentEntry.InsertIntoDocEntry(Database::"Service Invoice Header", PostedServiceInvoiceTxt, ServInvHeader.Count);
end;
end;
local procedure FindServCrMemoHeader(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text)
begin
if (DocNoFilter = '') and (PostingDateFilter = '') then
exit;
if ServCrMemoHeader.ReadPermission() then begin
SetServiceCrMemoHeaderFilters(DocNoFilter, PostingDateFilter);
DocumentEntry.InsertIntoDocEntry(Database::"Service Cr.Memo Header", PostedServiceCreditMemoTxt, ServCrMemoHeader.Count);
end;
end;
[EventSubscriber(ObjectType::Page, Page::Navigate, 'OnAfterFindLedgerEntries', '', true, false)]
local procedure OnAfterFindLedgerEntries(var DocumentEntry: Record "Document Entry" temporary; DocNoFilter: Text; PostingDateFilter: Text)
begin
FindServEntries(DocumentEntry, DocNoFilter, PostingDateFilter);
end;
local procedure FindServEntries(var DocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text)
begin
if (DocNoFilter = '') and (PostingDateFilter = '') then
exit;
if ServLedgerEntry.ReadPermission() then begin
SetServiceLedgerEntryFilters(DocNoFilter, PostingDateFilter);
DocumentEntry.InsertIntoDocEntry(Database::"Service Ledger Entry", ServLedgerEntry.TableCaption(), ServLedgerEntry.Count);
end;
if WarrantyLedgerEntry.ReadPermission() then begin
SetWarrantyLedgerEntryFilters(DocNoFilter, PostingDateFilter);
DocumentEntry.InsertIntoDocEntry(Database::"Warranty Ledger Entry", WarrantyLedgerEntry.TableCaption(), WarrantyLedgerEntry.Count);
end;
end;
[EventSubscriber(ObjectType::Page, Page::Navigate, 'OnFindRecordsOnAfterSetSource', '', true, false)]
local procedure OnFindRecordsOnAfterSetSource(
var DocumentEntry: Record "Document Entry"; var PostingDate: Date;
var DocType2: Text[100]; var DocNo: Code[20];
var SourceType2: Integer; var SourceNo: Code[20];
var DocNoFilter: Text; var PostingDateFilter: Text;
var IsHandled: Boolean)
begin
if NoOfRecords(DocumentEntry, Database::"Service Ledger Entry") = 1 then begin
SetServiceLedgerEntryFilters(DocNoFilter, PostingDateFilter);
if ServLedgerEntry.FindFirst() then
if ServLedgerEntry.Type = ServLedgerEntry.Type::"Service Contract" then begin
PostingDate := ServLedgerEntry."Posting Date";
DocType2 := Format(ServLedgerEntry."Document Type");
DocNo := ServLedgerEntry."Document No.";
SourceType2 := 2;
SourceNo := ServLedgerEntry."Service Contract No.";
IsHandled := true;
end else begin
PostingDate := ServLedgerEntry."Posting Date";
DocType2 := Format(ServLedgerEntry."Document Type");
DocNo := ServLedgerEntry."Document No.";
SourceType2 := 2;
SourceNo := ServLedgerEntry."Service Order No.";
IsHandled := true;
end;
end;
if NoOfRecords(DocumentEntry, Database::"Warranty Ledger Entry") = 1 then begin
SetWarrantyLedgerEntryFilters(DocNoFilter, PostingDateFilter);
if WarrantyLedgerEntry.FindFirst() then begin
PostingDate := WarrantyLedgerEntry."Posting Date";
DocType2 := '';
DocNo := WarrantyLedgerEntry."Document No.";
SourceType2 := 2;
SourceNo := WarrantyLedgerEntry."Service Order No.";
IsHandled := true;
end;
end;
if NoOfRecords(DocumentEntry, Database::"Service Invoice Header") = 1 then begin
SetServiceInvoiceHeaderFilters(DocNoFilter, PostingDateFilter);
if ServInvHeader.FindFirst() then begin
PostingDate := ServInvHeader."Posting Date";
DocType2 := PostedServiceInvoiceTxt;
DocNo := ServInvHeader."No.";
SourceType2 := 1;
SourceNo := ServInvHeader."Bill-to Customer No.";
IsHandled := true;
end;
end;
if NoOfRecords(DocumentEntry, Database::"Service Cr.Memo Header") = 1 then begin
SetServiceCrMemoHeaderFilters(DocNoFilter, PostingDateFilter);
if ServCrMemoHeader.FindFirst() then begin
PostingDate := ServCrMemoHeader."Posting Date";
DocType2 := PostedServiceCreditMemoTxt;
DocNo := ServCrMemoHeader."No.";
SourceType2 := 1;
SourceNo := ServCrMemoHeader."Bill-to Customer No.";
IsHandled := true;
end;
end;
if NoOfRecords(DocumentEntry, Database::"Service Shipment Header") = 1 then begin
SetServiceShipmentHeaderFilters(DocNoFilter, PostingDateFilter);
if ServShptHeader.FindFirst() then begin
PostingDate := ServShptHeader."Posting Date";
DocType2 := PostedServiceShipmentTxt;
DocNo := ServShptHeader."No.";
SourceType2 := 1;
SourceNo := ServShptHeader."Customer No.";
IsHandled := true;
end;
end;
end;
local procedure NoOfRecords(var DocumentEntry: Record "Document Entry"; TableID: Integer): Integer
var
DocEntryNoOfRecords: Integer;
begin
DocumentEntry.SetRange(DocumentEntry."Table ID", TableID);
if not DocumentEntry.FindFirst() then
DocumentEntry.Init();
DocumentEntry.SetRange(DocumentEntry."Table ID");
DocEntryNoOfRecords := DocumentEntry."No. of Records";
if not DocumentEntry.FindLast() then
DocumentEntry.Init();
exit(DocEntryNoOfRecords);
end;
[EventSubscriber(ObjectType::Page, Page::Navigate, 'OnFindExtRecordsForCustomer', '', true, false)]
local procedure OnFindExtRecordsForCustomer(var DocumentEntry: Record "Document Entry"; ContactNo: Code[20]; ExtDocNo: Text[35])
begin
if ExtDocNo = '' then begin
FindUnpostedServDocs(DocumentEntry, "Service Document Type"::Order, ServiceOrderTxt, ContactNo);
FindUnpostedServDocs(DocumentEntry, "Service Document Type"::Invoice, ServiceInvoiceTxt, ContactNo);
FindUnpostedServDocs(DocumentEntry, "Service Document Type"::"Credit Memo", ServiceCreditMemoTxt, ContactNo);
end;
if ServShptHeader.ReadPermission() then
if ExtDocNo = '' then begin
ServShptHeader.Reset();
ServShptHeader.SetCurrentKey("Customer No.");
ServShptHeader.SetFilter("Customer No.", ContactNo);
DocumentEntry.InsertIntoDocEntry(Database::"Service Shipment Header", PostedServiceShipmentTxt, ServShptHeader.Count);
end;
if ServInvHeader.ReadPermission() then
if ExtDocNo = '' then begin
ServInvHeader.Reset();
ServInvHeader.SetCurrentKey("Customer No.");
ServInvHeader.SetFilter("Customer No.", ContactNo);
DocumentEntry.InsertIntoDocEntry(Database::"Service Invoice Header", PostedServiceInvoiceTxt, ServInvHeader.Count);
end;
if ServCrMemoHeader.ReadPermission() then
if ExtDocNo = '' then begin
ServCrMemoHeader.Reset();
ServCrMemoHeader.SetCurrentKey("Customer No.");
ServCrMemoHeader.SetFilter("Customer No.", ContactNo);
DocumentEntry.InsertIntoDocEntry(Database::"Service Cr.Memo Header", PostedServiceCreditMemoTxt, ServCrMemoHeader.Count);
end;
end;
local procedure FindUnpostedServDocs(var DocumentEntry: Record "Document Entry"; DocType: Enum "Service Document Type"; DocTableName: Text[100]; CustomerNo: Code[20])
begin
if CustomerNo = '' then
exit;
ServiceHeader."SecurityFiltering"(SECURITYFILTER::Filtered);
if not ServiceHeader.ReadPermission() then
exit;
SetServiceHeaderFilters(DocType, CustomerNo);
DocumentEntry.InsertIntoDocEntry(Database::"Service Header", DocType, DocTableName, ServiceHeader.Count());
end;
[EventSubscriber(ObjectType::Page, Page::Navigate, 'OnBeforeShowRecords', '', true, false)]
local procedure OnBeforeShowRecords(var TempDocumentEntry: Record "Document Entry"; DocNoFilter: Text; PostingDateFilter: Text; var IsHandled: Boolean; ContactNo: Code[250])
begin
case TempDocumentEntry."Table ID" of
Database::"Service Header":
ShowServiceHeaderRecords(TempDocumentEntry, ContactNo);
Database::"Service Invoice Header":
begin
SetServiceInvoiceHeaderFilters(DocNoFilter, PostingDateFilter);
if TempDocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Posted Service Invoice", ServInvHeader)
else
PAGE.Run(0, ServInvHeader);
end;
Database::"Service Cr.Memo Header":
begin
SetServiceCrMemoHeaderFilters(DocNoFilter, PostingDateFilter);
if TempDocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Posted Service Credit Memo", ServCrMemoHeader)
else
PAGE.Run(0, ServCrMemoHeader);
end;
Database::"Service Shipment Header":
begin
SetServiceShipmentHeaderFilters(DocNoFilter, PostingDateFilter);
if TempDocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Posted Service Shipment", ServShptHeader)
else
PAGE.Run(0, ServShptHeader);
end;
Database::"Service Ledger Entry":
begin
SetServiceLedgerEntryFilters(DocNoFilter, PostingDateFilter);
PAGE.Run(0, ServLedgerEntry);
end;
Database::"Warranty Ledger Entry":
begin
SetWarrantyLedgerEntryFilters(DocNoFilter, PostingDateFilter);
PAGE.Run(0, WarrantyLedgerEntry);
end;
end;
end;
local procedure ShowServiceHeaderRecords(var DocumentEntry: Record "Document Entry"; CustomerNo: Code[250])
begin
DocumentEntry.TestField("Table ID", Database::"Service Header");
case DocumentEntry."Document Type" of
DocumentEntry."Document Type"::Order:
begin
SetServiceHeaderFilters(DocumentEntry."Document Type", CustomerNo);
if DocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Service Order", ServiceHeader)
else
PAGE.Run(0, ServiceHeader);
end;
DocumentEntry."Document Type"::Invoice:
begin
SetServiceHeaderFilters(DocumentEntry."Document Type", CustomerNo);
if DocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Service Invoice", ServiceHeader)
else
PAGE.Run(0, ServiceHeader);
end;
DocumentEntry."Document Type"::"Credit Memo":
begin
SetServiceHeaderFilters(DocumentEntry."Document Type", CustomerNo);
if DocumentEntry."No. of Records" = 1 then
PAGE.Run(PAGE::"Service Credit Memo", ServiceHeader)
else
PAGE.Run(0, ServiceHeader);
end;
end;
end;
local procedure SetServiceShipmentHeaderFilters(DocNoFilter: Text; PostingDateFilter: Text)
begin
ServShptHeader.Reset();
ServShptHeader.SetFilter("No.", DocNoFilter);
ServShptHeader.SetFilter("Posting Date", PostingDateFilter);
end;
local procedure SetServiceInvoiceHeaderFilters(DocNoFilter: Text; PostingDateFilter: Text)
begin
ServInvHeader.Reset();
ServInvHeader.SetFilter("No.", DocNoFilter);
ServInvHeader.SetFilter("Posting Date", PostingDateFilter);
end;
local procedure SetServiceCrMemoHeaderFilters(DocNoFilter: Text; PostingDateFilter: Text)
begin
ServCrMemoHeader.Reset();
ServCrMemoHeader.SetFilter("No.", DocNoFilter);
ServCrMemoHeader.SetFilter("Posting Date", PostingDateFilter);
end;
local procedure SetServiceLedgerEntryFilters(DocNoFilter: Text; PostingDateFilter: Text)
begin
ServLedgerEntry.Reset();
ServLedgerEntry.SetCurrentKey("Document No.", "Posting Date");
ServLedgerEntry.SetFilter("Document No.", DocNoFilter);
ServLedgerEntry.SetFilter("Posting Date", PostingDateFilter);
end;
local procedure SetWarrantyLedgerEntryFilters(DocNoFilter: Text; PostingDateFilter: Text)
begin
WarrantyLedgerEntry.Reset();
WarrantyLedgerEntry.SetCurrentKey("Document No.", "Posting Date");
WarrantyLedgerEntry.SetFilter("Document No.", DocNoFilter);
WarrantyLedgerEntry.SetFilter("Posting Date", PostingDateFilter);
end;
local procedure SetServiceHeaderFilters(DocType: Enum "Service Document Type"; CustomerNo: Code[250])
begin
ServiceHeader.Reset();
ServiceHeader.SetCurrentKey("Customer No.");
ServiceHeader.SetFilter("Customer No.", CustomerNo);
ServiceHeader.SetRange("Document Type", DocType);
end;
}