Codeunit 5702 Dist. Integration
- App
- Base Application
- Namespace
- Microsoft.Inventory
- Versions
- 17-28
Procedures, 8Events, 26Obsolete, 15
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/Inventory/DistIntegration.Codeunit.al294 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.Inventory;
using Microsoft.Foundation.ExtendedText;
using Microsoft.Inventory.Item;
using Microsoft.Inventory.Item.Catalog;
using Microsoft.Purchases.Document;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Document;
using Microsoft.Utilities;
codeunit 5702 "Dist. Integration"
{
trigger OnRun()
begin
end;
var
SalesLine: Record "Sales Line";
PurchLine: Record "Purchase Line";
ItemReference: Record "Item Reference";
ItemsNotFoundErr: Label 'There are no items with cross reference %1.', Comment = '%1=Cross-Reference No.';
#pragma warning disable AA0074
Text001: Label 'The Quantity per Unit of Measure %1 has changed from %2 to %3 since the sales order was created. Adjust the quantity on the sales order or the unit of measure.', Comment = '%1=Unit of Measure Code,%2=Qty. per Unit of Measure in Sales Line,%3=Qty. per Unit of Measure in Item Unit of Measure';
#pragma warning restore AA0074
procedure GetSpecialOrders(var PurchHeader: Record "Purchase Header")
var
SalesHeader: Record "Sales Header";
ItemUnitOfMeasure: Record "Item Unit of Measure";
Vendor: Record Vendor;
NextLineNo: Integer;
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeGetSpecialOrders(PurchHeader, IsHandled);
if IsHandled then
exit;
PurchHeader.TestField("Document Type", PurchHeader."Document Type"::Order);
IsHandled := false;
OnGetSpecialOrdersOnBeforeSelectSalesHeader(PurchHeader, SalesHeader, IsHandled);
if not IsHandled then begin
SalesHeader.SetCurrentKey("Document Type", "Sell-to Customer No.");
SalesHeader.SetRange("Document Type", SalesHeader."Document Type"::Order);
SalesHeader.SetRange("Sell-to Customer No.", PurchHeader."Sell-to Customer No.");
if (PAGE.RunModal(PAGE::"Sales List", SalesHeader) <> ACTION::LookupOK) or
(SalesHeader."No." = '')
then
exit;
end;
PurchHeader.LockTable();
OnGetSpecialOrdersOnBeforeTestSalesHeader(SalesHeader);
SalesHeader.TestField("Document Type", SalesHeader."Document Type"::Order);
PurchHeader.TestField(PurchHeader."Sell-to Customer No.", SalesHeader."Sell-to Customer No.");
CheckShipToCode(PurchHeader, SalesHeader);
CheckAddSpecialOrderToAddress(PurchHeader, SalesHeader);
if Vendor.Get(PurchHeader."Buy-from Vendor No.") then
PurchHeader.Validate(PurchHeader."Shipment Method Code", Vendor."Shipment Method Code");
PurchLine.LockTable();
SalesLine.LockTable();
PurchLine.SetRange("Document Type", PurchLine."Document Type"::Order);
PurchLine.SetRange("Document No.", PurchHeader."No.");
if PurchLine.FindLast() then
NextLineNo := PurchLine."Line No." + 10000
else
NextLineNo := 10000;
SalesLine.Reset();
SalesLine.SetRange("Document Type", SalesLine."Document Type"::Order);
SalesLine.SetRange("Document No.", SalesHeader."No.");
SalesLine.SetRange("Special Order", true);
SalesLine.SetFilter("Outstanding Quantity", '<>0');
SalesLine.SetRange(Type, SalesLine.Type::Item);
SalesLine.SetFilter("No.", '<>%1', '');
SalesLine.SetRange("Special Order Purch. Line No.", 0);
OnGetSpecialOrdersOnAfterSalesLineSetFilters(SalesLine, SalesHeader, PurchHeader);
if SalesLine.FindSet() then
repeat
IsHandled := false;
OnGetSpecialOrdersOnBeforeTestSalesLine(SalesLine, PurchHeader, IsHandled);
if not IsHandled then
if (SalesLine.Type = SalesLine.Type::Item) and
ItemUnitOfMeasure.Get(SalesLine."No.", SalesLine."Unit of Measure Code")
then
if SalesLine."Qty. per Unit of Measure" <> ItemUnitOfMeasure."Qty. per Unit of Measure" then
Error(Text001,
SalesLine."Unit of Measure Code", SalesLine."Qty. per Unit of Measure",
ItemUnitOfMeasure."Qty. per Unit of Measure");
ProcessSalesLine(SalesLine, PurchLine, NextLineNo, PurchHeader);
until SalesLine.Next() = 0
else
Error(ItemsNotFoundErr, SalesHeader."No.");
OnGetSpecialOrdersOnBeforeModifyPurchaseHeader(PurchHeader, SalesHeader);
PurchHeader.Modify();
// Only version check
SalesHeader.Modify(); // Only version check
end;
local procedure CheckShipToCode(var PurchHeader: Record "Purchase Header"; SalesHeader: Record "Sales Header")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckShipToCode(PurchHeader, SalesHeader, IsHandled);
if IsHandled then
exit;
if PurchHeader."Ship-to Code" <> '' then
PurchHeader.TestField("Ship-to Code", SalesHeader."Ship-to Code");
end;
local procedure CheckAddSpecialOrderToAddress(var PurchHeader: Record "Purchase Header"; SalesHeader: Record "Sales Header")
var
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeCheckAddSpecialOrderToAddress(PurchHeader, SalesHeader, IsHandled);
if IsHandled then
exit;
if PurchHeader.SpecialOrderExists(SalesHeader) then begin
PurchHeader.Validate("Location Code", SalesHeader."Location Code");
PurchHeader.AddSpecialOrderToAddress(SalesHeader, true);
end;
end;
local procedure ProcessSalesLine(var SalesLine: Record "Sales Line"; var PurchLine: Record "Purchase Line"; var NextLineNo: Integer; PurchHeader: Record "Purchase Header")
var
PurchLine2: Record "Purchase Line";
CopyDocMgt: Codeunit "Copy Document Mgt.";
TransferExtendedText: Codeunit "Transfer Extended Text";
IsHandled: Boolean;
begin
IsHandled := false;
OnBeforeProcessSalesLine(SalesLine, IsHandled);
if IsHandled then
exit;
PurchLine.Init();
PurchLine."Document Type" := PurchLine."Document Type"::Order;
PurchLine."Document No." := PurchHeader."No.";
PurchLine."Line No." := NextLineNo;
CopyDocMgt.TransfldsFromSalesToPurchLine(SalesLine, PurchLine);
PurchLine.GetItemTranslation();
PurchLine."Special Order" := true;
PurchLine."Purchasing Code" := SalesLine."Purchasing Code";
PurchLine."Special Order Sales No." := SalesLine."Document No.";
PurchLine."Special Order Sales Line No." := SalesLine."Line No.";
OnBeforeInsertPurchLine(PurchLine, SalesLine);
PurchLine.Insert();
OnAfterInsertPurchLine(PurchLine, SalesLine, NextLineNo);
NextLineNo := NextLineNo + 10000;
SalesLine."Unit Cost (LCY)" := PurchLine."Unit Cost (LCY)";
SalesLine.Validate("Unit Cost (LCY)");
SalesLine."Special Order Purchase No." := PurchLine."Document No.";
SalesLine."Special Order Purch. Line No." := PurchLine."Line No.";
OnBeforeSalesLineModify(SalesLine, PurchLine);
SalesLine.Modify();
OnAfterSalesLineModify(SalesLine, PurchLine);
if TransferExtendedText.PurchCheckIfAnyExtText(PurchLine, false) then begin
TransferExtendedText.InsertPurchExtText(PurchLine);
PurchLine2.SetRange("Document Type", PurchHeader."Document Type");
PurchLine2.SetRange("Document No.", PurchHeader."No.");
if PurchLine2.FindLast() then
NextLineNo := PurchLine2."Line No.";
NextLineNo := NextLineNo + 10000;
end;
OnGetSpecialOrdersOnAfterTransferExtendedText(SalesLine, PurchHeader, NextLineNo);
end;
[EventSubscriber(ObjectType::Table, Database::Item, 'OnAfterDeleteRelatedData', '', false, false)]
local procedure ItemOnAfterDeleteRelatedData(Item: Record Item)
begin
if Item.IsTemporary() then
exit;
ItemReference.SetRange("Item No.", Item."No.");
ItemReference.DeleteAll();
end;
[EventSubscriber(ObjectType::Table, Database::Customer, 'OnAfterDeleteEvent', '', false, false)]
local procedure CustomerOnAfterDelete(var Rec: Record Customer)
begin
if Rec.IsTemporary() then
exit;
ItemReference.SetCurrentKey("Reference Type", "Reference Type No.");
ItemReference.SetRange("Reference Type", ItemReference."Reference Type"::Customer);
ItemReference.SetRange("Reference Type No.", Rec."No.");
ItemReference.DeleteAll();
end;
[EventSubscriber(ObjectType::Table, Database::Vendor, 'OnAfterDeleteEvent', '', false, false)]
local procedure VendorOnAfterDelete(var Rec: Record Vendor)
begin
if Rec.IsTemporary() then
exit;
ItemReference.SetCurrentKey("Reference Type", "Reference Type No.");
ItemReference.SetRange("Reference Type", ItemReference."Reference Type"::Vendor);
ItemReference.SetRange("Reference Type No.", Rec."No.");
ItemReference.DeleteAll();
end;
[IntegrationEvent(false, false)]
local procedure OnAfterInsertPurchLine(var PurchaseLine: Record "Purchase Line"; SalesLine: Record "Sales Line"; var NextLineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnAfterSalesLineModify(var SalesLine: Record "Sales Line"; PurchaseLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckShipToCode(var PurchaseHeader: Record "Purchase Header"; SalesHeader: Record "Sales Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeCheckAddSpecialOrderToAddress(var PurchaseHeader: Record "Purchase Header"; SalesHeader: Record "Sales Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeGetSpecialOrders(PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeInsertPurchLine(var PurchaseLine: Record "Purchase Line"; SalesLine: Record "Sales Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeSalesLineModify(var SalesLine: Record "Sales Line"; PurchaseLine: Record "Purchase Line")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnAfterSalesLineSetFilters(var SalesLine: Record "Sales Line"; SalesHeader: Record "Sales Header"; var PurchHeader: Record "Purchase Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnAfterTransferExtendedText(SalesLine: Record "Sales Line"; PurchaseHeader: Record "Purchase Header"; var NextLineNo: Integer)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnBeforeSelectSalesHeader(var PurchaseHeader: Record "Purchase Header"; var SalesHeader: Record "Sales Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnBeforeTestSalesHeader(SalesHeader: Record "Sales Header")
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnBeforeTestSalesLine(SalesLine: Record "Sales Line"; PurchaseHeader: Record "Purchase Header"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnBeforeProcessSalesLine(var SalesLine: Record "Sales Line"; var IsHandled: Boolean)
begin
end;
[IntegrationEvent(false, false)]
local procedure OnGetSpecialOrdersOnBeforeModifyPurchaseHeader(var PurchaseHeader: Record "Purchase Header"; var SalesHeader: Record "Sales Header")
begin
end;
}