Codeunit 1797 Data Migration Facade Helper
- App
- Base Application
- Namespace
- System.Integration
- Versions
- 17-28
Versions171819202122232425262728
Source29
Source in 29
src/Layers/W1/BaseApp/System/DataMigration/DataMigrationFacadeHelper.Codeunit.al431 lines, Copyright (c) Microsoft Corporation. MIT
namespace System.Integration;
using Microsoft.Bank.BankAccount;
using Microsoft.CRM.BusinessRelation;
using Microsoft.CRM.Contact;
using Microsoft.CRM.Setup;
using Microsoft.CRM.Team;
using Microsoft.Finance.Dimension;
using Microsoft.Finance.GeneralLedger.Journal;
using Microsoft.Finance.GeneralLedger.Setup;
using Microsoft.Finance.SalesTax;
using Microsoft.Foundation.Address;
using Microsoft.Foundation.AuditCodes;
using Microsoft.Foundation.PaymentTerms;
using Microsoft.Foundation.Shipping;
using Microsoft.Inventory.Intrastat;
using Microsoft.Purchases.Vendor;
using Microsoft.Sales.Customer;
using Microsoft.Sales.Pricing;
using System.Globalization;
codeunit 1797 "Data Migration Facade Helper"
{
SingleInstance = true;
trigger OnRun()
begin
end;
var
DataMigrationFacadeHelper: Codeunit "Data Migration Facade Helper";
procedure CreateShipmentMethodIfNeeded(CodeToSet: Code[10]; DescriptionToSet: Text[50]): Code[10]
var
ShipmentMethod: Record "Shipment Method";
begin
if ShipmentMethod.Get(CodeToSet) then
exit(CodeToSet);
ShipmentMethod.Validate(Code, CodeToSet);
ShipmentMethod.Validate(Description, DescriptionToSet);
ShipmentMethod.Insert(true);
exit(ShipmentMethod.Code);
end;
procedure CreateSalespersonPurchaserIfNeeded(CodeToSet: Code[20]; NameToSet: Text[50]; PhoneNoToSet: Text[30]; EmailToSet: Text[80]): Code[20]
var
SalespersonPurchaser: Record "Salesperson/Purchaser";
begin
if SalespersonPurchaser.Get(CodeToSet) then
exit(CodeToSet);
SalespersonPurchaser.Init();
SalespersonPurchaser.Validate(Code, CodeToSet);
SalespersonPurchaser.Validate(Name, NameToSet);
SalespersonPurchaser.Validate("Phone No.", PhoneNoToSet);
SalespersonPurchaser.Validate("E-Mail", EmailToSet);
SalespersonPurchaser.Validate("Search E-Mail", EmailToSet);
SalespersonPurchaser.Insert(true);
exit(SalespersonPurchaser.Code);
end;
procedure CreateCustomerPriceGroupIfNeeded(CodeToSet: Code[10]; DescriptionToSet: Text[50]; PriceIncludesVatToSet: Boolean): Code[10]
var
CustomerPriceGroup: Record "Customer Price Group";
begin
if CustomerPriceGroup.Get(CodeToSet) then
exit(CodeToSet);
CustomerPriceGroup.Init();
CustomerPriceGroup.Validate(Code, CodeToSet);
CustomerPriceGroup.Validate(Description, DescriptionToSet);
CustomerPriceGroup.Validate("Price Includes VAT", PriceIncludesVatToSet);
CustomerPriceGroup.Insert(true);
exit(CustomerPriceGroup.Code);
end;
procedure CreatePaymentTermsIfNeeded(CodeToSet: Code[10]; DescriptionToSet: Text[50]; DueDateCalculationToSet: DateFormula): Code[10]
var
PaymentTerms: Record "Payment Terms";
begin
if PaymentTerms.Get(CodeToSet) then
exit(CodeToSet);
PaymentTerms.Init();
PaymentTerms.Validate(Code, CodeToSet);
PaymentTerms.Validate(Description, DescriptionToSet);
PaymentTerms.Validate("Due Date Calculation", DueDateCalculationToSet);
PaymentTerms.Insert(true);
exit(PaymentTerms.Code);
end;
procedure CreateTerritoryIfNeeded(CodeToSet: Code[10]; Name: Text[50]): Code[10]
var
Territory: Record Territory;
begin
if Territory.Get(CodeToSet) then
exit(CodeToSet);
Territory.Init();
Territory.Validate(Code, CodeToSet);
Territory.Validate(Name, Name);
Territory.Insert(true);
exit(Territory.Code);
end;
procedure CreateTaxAreaIfNeeded(CodeToSet: Code[20]; Description: Text[50]): Code[20]
var
TaxArea: Record "Tax Area";
begin
if TaxArea.Get(CodeToSet) then
exit(CodeToSet);
TaxArea.Init();
TaxArea.Validate(Code, CodeToSet);
TaxArea.Validate(Description, Description);
TaxArea.Insert(true);
exit(TaxArea.Code);
end;
procedure CreatePaymentMethodIfNeeded(CodeToSet: Code[10]; DescriptionToSet: Text[50]): Code[10]
var
PaymentMethod: Record "Payment Method";
begin
if PaymentMethod.Get(CodeToSet) then
exit(CodeToSet);
PaymentMethod.Init();
PaymentMethod.Validate(Code, CodeToSet);
PaymentMethod.Validate(Description, DescriptionToSet);
PaymentMethod.Insert(true);
exit(PaymentMethod.Code);
end;
procedure DoesPostCodeExist(CodeToSearch: Code[20]; CityToSearch: Text[30]): Boolean
var
PostCode: Record "Post Code";
begin
exit(PostCode.Get(CodeToSearch, CityToSearch));
end;
procedure CreatePostCodeIfNeeded(CodeToSet: Code[20]; CityToSet: Text[30]; CountyToSet: Text[30]; CountryRegionCodeToSet: Code[10]): Boolean
var
PostCode: Record "Post Code";
begin
PostCode.SetRange(Code, CodeToSet);
PostCode.SetRange("Search City", UpperCase(CityToSet));
if PostCode.FindFirst() then
exit(false);
PostCode.Init();
PostCode.Validate(Code, CodeToSet);
PostCode.Validate(City, CityToSet);
PostCode.Validate(County, CountyToSet);
PostCode.Validate("Country/Region Code", CountryRegionCodeToSet);
PostCode.Insert(true);
exit(true);
end;
procedure CreateCountryIfNeeded(CodeToSet: Code[10]; NameToSet: Text[50]; AddressFormatToSet: Option "Post Code+City","City+Post Code","City+County+Post Code","Blank Line+Post Code+City"; ContactAddressFormatToSet: Option First,"After Company Name",Last): Code[10]
var
CountryRegion: Record "Country/Region";
begin
if CountryRegion.Get(CodeToSet) then
exit(CountryRegion.Code);
CountryRegion.Init();
CountryRegion.Validate(Code, CodeToSet);
CountryRegion.Validate(Name, NameToSet);
CountryRegion.Validate("Address Format", AddressFormatToSet);
CountryRegion.Validate("Contact Address Format", ContactAddressFormatToSet);
CountryRegion.Insert(true);
exit(CountryRegion.Code);
end;
procedure SearchCountry(CodeToSearch: Code[10]; NameToSearch: Text[50]; EUCountryRegionCodeToSearch: Code[10]; IntrastatCodeToSet: Code[10]; var CodeToGet: Code[10]): Boolean
var
CountryRegion: Record "Country/Region";
begin
if CodeToSearch <> '' then
CountryRegion.SetRange(Code, CodeToSearch);
if NameToSearch <> '' then
CountryRegion.SetRange(Name, NameToSearch);
if EUCountryRegionCodeToSearch <> '' then
CountryRegion.SetRange("EU Country/Region Code", EUCountryRegionCodeToSearch);
if IntrastatCodeToSet <> '' then
CountryRegion.SetRange("Intrastat Code", IntrastatCodeToSet);
if CountryRegion.FindFirst() then begin
CodeToGet := CountryRegion.Code;
exit(true);
end;
end;
procedure SearchLanguage(AbbreviatedNameToSearch: Code[3]; var CodeToGet: Code[10]): Boolean
var
WindowsLanguageSearch: Record "Windows Language";
Language: Codeunit Language;
begin
WindowsLanguageSearch.SetRange("Abbreviated Name", AbbreviatedNameToSearch);
if WindowsLanguageSearch.FindFirst() then begin
CodeToGet := Language.GetLanguageCode(WindowsLanguageSearch."Language ID");
if CodeToGet <> '' then
exit(true);
end;
end;
procedure FixIfLcyCode(CurrencyCode: Code[10]): Code[10]
var
GeneralLedgerSetup: Record "General Ledger Setup";
begin
GeneralLedgerSetup.FindFirst();
if CurrencyCode = GeneralLedgerSetup."LCY Code" then
exit('');
exit(CurrencyCode);
end;
procedure CreateGeneralJournalBatchIfNeeded(GeneralJournalBatchCode: Code[10]; NoSeriesCode: Code[20]; PostingNoSeriesCode: Code[20])
var
GenJournalBatch: Record "Gen. Journal Batch";
TemplateName: Code[10];
begin
TemplateName := CreateGeneralJournalTemplateIfNeeded(GeneralJournalBatchCode);
GenJournalBatch.SetRange("Journal Template Name", TemplateName);
GenJournalBatch.SetRange(Name, GeneralJournalBatchCode);
GenJournalBatch.SetRange("No. Series", NoSeriesCode);
GenJournalBatch.SetRange("Posting No. Series", PostingNoSeriesCode);
if not GenJournalBatch.FindFirst() then begin
GenJournalBatch.Init();
GenJournalBatch.Validate("Journal Template Name", TemplateName);
GenJournalBatch.SetupNewBatch();
GenJournalBatch.Validate(Name, GeneralJournalBatchCode);
GenJournalBatch.Validate(Description, GeneralJournalBatchCode);
GenJournalBatch."No. Series" := NoSeriesCode;
GenJournalBatch."Posting No. Series" := PostingNoSeriesCode;
GenJournalBatch.Insert(true);
end;
end;
local procedure CreateGeneralJournalTemplateIfNeeded(GeneralJournalBatchCode: Code[10]): Code[10]
var
GenJournalTemplate: Record "Gen. Journal Template";
begin
GenJournalTemplate.SetRange(Type, GenJournalTemplate.Type::General);
GenJournalTemplate.SetRange(Recurring, false);
if not GenJournalTemplate.FindFirst() then begin
GenJournalTemplate.Init();
GenJournalTemplate.Validate(Name, GeneralJournalBatchCode);
GenJournalTemplate.Validate(Type, GenJournalTemplate.Type::General);
GenJournalTemplate.Validate(Recurring, false);
GenJournalTemplate.Insert(true);
end;
exit(GenJournalTemplate.Name);
end;
procedure CreateGeneralJournalLine(var GenJournalLine: Record "Gen. Journal Line"; GeneralJournalBatchCode: Code[10]; DocumentNo: Code[20]; Description: Text[50]; AccountType: Enum "Gen. Journal Account Type"; AccountNo: Code[20]; PostingDate: Date; DueDate: Date; Amount: Decimal; AmountLCY: Decimal; Currency: Code[10]; BalancingAccount: Code[20])
var
GenJournalBatch: Record "Gen. Journal Batch";
GenJournalLineCurrent: Record "Gen. Journal Line";
GenJournalTemplate: Record "Gen. Journal Template";
LineNum: Integer;
begin
GenJournalBatch.Get(CreateGeneralJournalTemplateIfNeeded(GeneralJournalBatchCode), GeneralJournalBatchCode);
GenJournalLineCurrent.SetRange("Journal Template Name", GenJournalBatch."Journal Template Name");
GenJournalLineCurrent.SetRange("Journal Batch Name", GenJournalBatch.Name);
if GenJournalLineCurrent.FindLast() then
LineNum := GenJournalLineCurrent."Line No." + 10000
else
LineNum := 10000;
GenJournalTemplate.Get(GenJournalBatch."Journal Template Name");
GenJournalLine.Init();
GenJournalLine.SetHideValidation(true);
GenJournalLine.Validate("Source Code", GenJournalTemplate."Source Code");
GenJournalLine.Validate("Journal Template Name", GenJournalBatch."Journal Template Name");
GenJournalLine.Validate("Journal Batch Name", GenJournalBatch.Name);
GenJournalLine.Validate("Line No.", LineNum);
GenJournalLine.Validate("Account Type", AccountType);
GenJournalLine.Validate("Document No.", DocumentNo);
GenJournalLine.Validate("Account No.", AccountNo);
GenJournalLine.Validate(Description, Description);
GenJournalLine.Validate("Document Date", PostingDate);
GenJournalLine.Validate("Posting Date", PostingDate);
GenJournalLine.Validate("Due Date", DueDate);
GenJournalLine.Validate(Amount, Amount);
GenJournalLine.Validate("Amount (LCY)", AmountLCY);
GenJournalLine.Validate("Currency Code", DataMigrationFacadeHelper.FixIfLcyCode(Currency));
GenJournalLine.Validate("Bal. Account Type", GenJournalLine."Bal. Account Type"::"G/L Account");
GenJournalLine.Validate("Bal. Account No.", BalancingAccount);
GenJournalLine.Validate("Bal. Gen. Posting Type", GenJournalLine."Bal. Gen. Posting Type"::" ");
GenJournalLine.Validate("Bal. Gen. Bus. Posting Group", '');
GenJournalLine.Validate("Bal. Gen. Prod. Posting Group", '');
GenJournalLine.Validate("Bal. VAT Prod. Posting Group", '');
GenJournalLine.Validate("Bal. VAT Bus. Posting Group", '');
GenJournalLine.Insert(true);
end;
procedure GetOrCreateDimension(DimensionCode: Code[20]; DimensionDescription: Text[50]; var Dimension: Record Dimension)
begin
if Dimension.Get(DimensionCode) then
exit;
Dimension.Init();
Dimension.Validate(Code, DimensionCode);
Dimension.Validate(Description, DimensionDescription);
Dimension.Insert(true);
end;
procedure GetOrCreateDimensionValue(DimensionCode: Code[20]; DimensionValueCode: Code[20]; DimensionValueName: Text[50]; var DimensionValue: Record "Dimension Value")
begin
if DimensionValue.Get(DimensionCode, DimensionValueCode) then
exit;
DimensionValue.Init();
DimensionValue.Validate("Dimension Code", DimensionCode);
DimensionValue.Validate(Code, DimensionValueCode);
DimensionValue.Validate(Name, DimensionValueName);
DimensionValue.Insert(true);
end;
procedure CreateOnlyDefaultDimensionIfNeeded(DimensionCode: Code[20]; DimensionValueCode: Code[20]; TableId: Integer; EntityNo: Code[20])
var
DefaultDimension: Record "Default Dimension";
begin
if DefaultDimension.Get(TableId, EntityNo, DimensionCode) then
exit;
DefaultDimension.Init();
DefaultDimension.Validate("Dimension Code", DimensionCode);
DefaultDimension.Validate("Dimension Value Code", DimensionValueCode);
DefaultDimension.Validate("Table ID", TableId);
DefaultDimension.Validate("No.", EntityNo);
DefaultDimension.Insert(true);
end;
procedure CreateDimensionSetId(OldDimensionSetId: Integer; DimensionCode: Code[20]; DimensionDescription: Text[50]; DimensionValueCode: Code[20]; DimensionValueName: Text[50]): Integer
var
Dimension: Record Dimension;
DimensionValue: Record "Dimension Value";
DimensionSetEntry: Record "Dimension Set Entry";
TempDimensionSetEntry: Record "Dimension Set Entry" temporary;
DimensionManagement: Codeunit DimensionManagement;
begin
if (DimensionCode = '') or (DimensionValueCode = '') then
exit(OldDimensionSetId);
GetOrCreateDimension(DimensionCode, DimensionDescription, Dimension);
GetOrCreateDimensionValue(DimensionCode, DimensionValueCode, DimensionValueName, DimensionValue);
DimensionSetEntry.SetRange("Dimension Set ID", OldDimensionSetId);
DimensionSetEntry.SetFilter("Dimension Code", '<>%1', DimensionCode);
if DimensionSetEntry.FindSet() then
repeat
TempDimensionSetEntry.TransferFields(DimensionSetEntry);
TempDimensionSetEntry.Insert(true);
until DimensionSetEntry.Next() = 0;
TempDimensionSetEntry.Init();
TempDimensionSetEntry.Validate("Dimension Set ID", OldDimensionSetId);
TempDimensionSetEntry.Validate("Dimension Code", DimensionCode);
TempDimensionSetEntry.Validate("Dimension Value Code", DimensionValueCode);
TempDimensionSetEntry.Insert(true);
exit(DimensionManagement.GetDimensionSetID(TempDimensionSetEntry));
end;
procedure CreateSourceCodeIfNeeded(SourceCodeCode: Code[10]): Code[10]
var
SourceCode: Record "Source Code";
begin
if SourceCode.Get(SourceCodeCode) then
exit(SourceCode."Code");
SourceCode.Init();
SourceCode.Validate("Code", SourceCodeCode);
SourceCode.Insert(true);
exit(SourceCode."Code");
end;
procedure SetAlternativeContact(NameToSet: Text[50]; AddressToSet: Text[50]; Address2ToSet: Text[50]; PostCodeToSet: Code[20]; CityToSet: Text[30]; CountryToSet: Code[10]; EmailToset: Text[80]; PhoneNoToSet: Text[30]; FaxToSet: Text[30]; MobileNoToSet: Text[30]; LinkToTable: Integer; EntityNo: Code[20])
var
Contact: Record Contact;
ContactBusinessRelation: Record "Contact Business Relation";
MarketingSetup: Record "Marketing Setup";
begin
if not MarketingSetup.Get() then
exit;
if LinkToTable = DATABASE::Vendor then begin
ContactBusinessRelation.SetRange("Business Relation Code", MarketingSetup."Bus. Rel. Code for Vendors");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Vendor);
ContactBusinessRelation.SetRange("No.", EntityNo);
if not ContactBusinessRelation.FindFirst() then
exit;
end else
if LinkToTable = DATABASE::Customer then begin
ContactBusinessRelation.SetRange("Business Relation Code", MarketingSetup."Bus. Rel. Code for Customers");
ContactBusinessRelation.SetRange("Link to Table", ContactBusinessRelation."Link to Table"::Customer);
ContactBusinessRelation.SetRange("No.", EntityNo);
if not ContactBusinessRelation.FindFirst() then
exit;
end else
exit;
Contact.Init();
Contact.Validate(Name, NameToSet);
Contact.Validate(Address, AddressToSet);
Contact.Validate("Address 2", Address2ToSet);
Contact.Validate("Country/Region Code", CountryToSet);
Contact.Validate("Post Code", PostCodeToSet);
Contact.Validate(City, CityToSet);
Contact.Validate("E-Mail", EmailToset);
Contact.Validate("Phone No.", PhoneNoToSet);
Contact.Validate("Fax No.", FaxToSet);
Contact.Validate("Mobile Phone No.", MobileNoToSet);
Contact.Validate(Type, Contact.Type::Person);
Contact.Validate("Company No.", ContactBusinessRelation."Contact No.");
ContactBusinessRelation.CalcFields("Contact Name");
Contact.Validate("Company Name", ContactBusinessRelation."Contact Name");
Contact.Insert(true);
end;
}