diff --git a/Apps/US/HybridGP_US/app/src/PageExt/GPCompanyMigSettingsExt.PageExt.al b/Apps/US/HybridGP_US/app/src/PageExt/GPCompanyMigSettingsExt.PageExt.al new file mode 100644 index 0000000000..41963fe177 --- /dev/null +++ b/Apps/US/HybridGP_US/app/src/PageExt/GPCompanyMigSettingsExt.PageExt.al @@ -0,0 +1,24 @@ +namespace Microsoft.DataMigration.GP; + +pageextension 41104 "GP Company Mig. Settings Ext" extends "GP Company Migration Settings" +{ + layout + { + addlast(General) + { + field("Migrate Vendor 1099"; Rec."Migrate Vendor 1099") + { + Caption = 'Migrate Vendor 1099'; + ToolTip = 'Specify whether to Migrate Vendor 1099 data.'; + ApplicationArea = All; + } + + field("1099 Tax Year"; Rec."1099 Tax Year") + { + Caption = '1099 Tax Year'; + ToolTip = 'Specify the 1099 tax year to migrate.'; + ApplicationArea = All; + } + } + } +} \ No newline at end of file diff --git a/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerMigrator.codeunit.al b/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerMigrator.codeunit.al index 7625ae54ff..b6974a57d8 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerMigrator.codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/Customers/GPCustomerMigrator.codeunit.al @@ -106,7 +106,7 @@ codeunit 4018 "GP Customer Migrator" Sender.CreateGeneralJournalLine( CopyStr(CustomerBatchNameTxt, 1, 7), - CopyStr(MigrationGPCustTrans.GLDocNo, 1, 20), + CopyStr(MigrationGPCustTrans.DOCNUMBR, 1, 20), CopyStr(MigrationGPCustomer.CUSTNAME, 1, 50), MigrationGPCustTrans.DOCDATE, 0D, @@ -126,7 +126,6 @@ codeunit 4018 "GP Customer Migrator" Sender.CreatePaymentTermsIfNeeded(Copystr(MigrationGPCustTrans.PYMTRMID, 1, 10), MigrationGPCustTrans.PYMTRMID, PaymentTermsFormula); end; Sender.SetGeneralJournalLinePaymentTerms(CopyStr(MigrationGPCustTrans.PYMTRMID, 1, 10)); - Sender.SetGeneralJournalLineExternalDocumentNo(CopyStr(MigrationGPCustTrans.DOCNUMBR.Trim(), 1, 35)); until MigrationGPCustTrans.Next() = 0; MigrationGPCustTrans.Reset(); @@ -138,7 +137,7 @@ codeunit 4018 "GP Customer Migrator" Sender.CreateGeneralJournalLine( CopyStr(CustomerBatchNameTxt, 1, 7), - CopyStr(MigrationGPCustTrans.GLDocNo, 1, 20), + CopyStr(MigrationGPCustTrans.DOCNUMBR, 1, 20), CopyStr(MigrationGPCustomer.CUSTNAME, 1, 50), MigrationGPCustTrans.DOCDATE, MigrationGPCustTrans.DOCDATE, @@ -155,7 +154,6 @@ codeunit 4018 "GP Customer Migrator" Sender.CreatePaymentTermsIfNeeded(Copystr(MigrationGPCustTrans.PYMTRMID, 1, 10), MigrationGPCustTrans.PYMTRMID, PaymentTermsFormula); end; Sender.SetGeneralJournalLinePaymentTerms(CopyStr(MigrationGPCustTrans.PYMTRMID, 1, 10)); - Sender.SetGeneralJournalLineExternalDocumentNo(CopyStr(MigrationGPCustTrans.DOCNUMBR.Trim(), 1, 35)); until MigrationGPCustTrans.Next() = 0; MigrationGPCustTrans.Reset(); @@ -167,7 +165,7 @@ codeunit 4018 "GP Customer Migrator" Sender.CreateGeneralJournalLine( CopyStr(CustomerBatchNameTxt, 1, 7), - CopyStr(MigrationGPCustTrans.GLDocNo, 1, 20), + CopyStr(MigrationGPCustTrans.DOCNUMBR, 1, 20), CopyStr(MigrationGPCustomer.CUSTNAME, 1, 50), MigrationGPCustTrans.DOCDATE, 0D, @@ -186,7 +184,6 @@ codeunit 4018 "GP Customer Migrator" Sender.CreatePaymentTermsIfNeeded(Copystr(MigrationGPCustTrans.PYMTRMID, 1, 10), MigrationGPCustTrans.PYMTRMID, PaymentTermsFormula); end; Sender.SetGeneralJournalLinePaymentTerms(CopyStr(MigrationGPCustTrans.PYMTRMID, 1, 10)); - Sender.SetGeneralJournalLineExternalDocumentNo(CopyStr(MigrationGPCustTrans.DOCNUMBR.Trim(), 1, 35)); until MigrationGPCustTrans.Next() = 0; end; #pragma warning restore AA0207 diff --git a/Apps/W1/HybridGP/app/src/Migration/GPTables/GPPopulateCombinedTables.Codeunit.al b/Apps/W1/HybridGP/app/src/Migration/GPTables/GPPopulateCombinedTables.Codeunit.al index 7da4abd475..be96885d3c 100644 --- a/Apps/W1/HybridGP/app/src/Migration/GPTables/GPPopulateCombinedTables.Codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/GPTables/GPPopulateCombinedTables.Codeunit.al @@ -612,6 +612,7 @@ codeunit 40125 "GP Populate Combined Tables" GPVendorTransactions.VENDORID := GPPM20000.VENDORID.Trim(); GPVendorTransactions.DOCNUMBR := GPPM20000.DOCNUMBR.Trim(); GPVendorTransactions.PYMTRMID := GPPM20000.PYMTRMID.Trim(); + GPVendorTransactions.VCHRNMBR := GPPM20000.VCHRNMBR.Trim(); #pragma warning restore AA0139 GPVendorTransactions.DOCDATE := GPPM20000.DOCDATE; diff --git a/Apps/W1/HybridGP/app/src/Migration/Items/GPIV40400.Table.al b/Apps/W1/HybridGP/app/src/Migration/Items/GPIV40400.Table.al index 3c36acfdd4..0165d6cd2b 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Items/GPIV40400.Table.al +++ b/Apps/W1/HybridGP/app/src/Migration/Items/GPIV40400.Table.al @@ -19,6 +19,62 @@ table 40117 "GP IV40400" { DataClassification = CustomerContent; } + field(28; IVIVOFIX; Integer) + { + DataClassification = CustomerContent; + } + field(29; IVCOGSIX; Integer) + { + DataClassification = CustomerContent; + } + field(30; IVSLSIDX; Integer) + { + DataClassification = CustomerContent; + } + field(31; IVSLDSIX; Integer) + { + DataClassification = CustomerContent; + } + field(32; IVSLRNIX; Integer) + { + DataClassification = CustomerContent; + } + field(33; IVINUSIX; Integer) + { + DataClassification = CustomerContent; + } + field(34; IVINSVIX; Integer) + { + DataClassification = CustomerContent; + } + field(35; IVDMGIDX; Integer) + { + DataClassification = CustomerContent; + } + field(36; IVVARIDX; Integer) + { + DataClassification = CustomerContent; + } + field(37; DPSHPIDX; Integer) + { + DataClassification = CustomerContent; + } + field(38; PURPVIDX; Integer) + { + DataClassification = CustomerContent; + } + field(39; UPPVIDX; Integer) + { + DataClassification = CustomerContent; + } + field(40; IVRETIDX; Integer) + { + DataClassification = CustomerContent; + } + field(41; ASMVRIDX; Integer) + { + DataClassification = CustomerContent; + } } keys { diff --git a/Apps/W1/HybridGP/app/src/Migration/Items/GPItemMigrator.codeunit.al b/Apps/W1/HybridGP/app/src/Migration/Items/GPItemMigrator.codeunit.al index c77c7455db..ca60d1df05 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Items/GPItemMigrator.codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/Items/GPItemMigrator.codeunit.al @@ -3,6 +3,8 @@ namespace Microsoft.DataMigration.GP; using System.Integration; using Microsoft.Inventory.Item; using Microsoft.Inventory.Journal; +using Microsoft.Finance.GeneralLedger.Account; +using Microsoft.Finance.GeneralLedger.Setup; using Microsoft.Inventory.Tracking; using Microsoft.Inventory.BOM; @@ -15,7 +17,6 @@ codeunit 4019 "GP Item Migrator" DefaultPostingGroupCodeTxt: Label 'GP', Locked = true; DefaultPostingGroupDescriptionTxt: Label 'Migrated from GP', Locked = true; InventoryAccountTok: Label 'InventoryAccount', Locked = true; - DefaultAccountNumber: Text[20]; ItemTypeOption: Option Inventory,Service; CostingMethodOption: Option FIFO,LIFO,Specific,Average,Standard; SimpleInvJnlNameTxt: Label 'DEFAULT', Comment = 'The default name of the item journal', Locked = true; @@ -27,18 +28,36 @@ codeunit 4019 "GP Item Migrator" [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItem', '', true, true)] local procedure OnMigrateItem(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId) begin - MigrateItem(Sender, RecordIdToMigrate); + if RecordIdToMigrate.TableNo() <> Database::"GP Item" then + exit; + + MigrateItemImp(Sender, RecordIdToMigrate); end; - procedure MigrateItem(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId) + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItemPostingGroups', '', true, true)] + local procedure OnMigrateItemPostingGroups(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + begin + if RecordIdToMigrate.TableNo() <> Database::"GP Item" then + exit; + + MigrateItemPostingGroupsImp(Sender, RecordIdToMigrate, ChartOfAccountsMigrated); + end; + + [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateInventoryTransactions', '', true, true)] + local procedure OnMigrateInventoryTransactions(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + begin + if RecordIdToMigrate.TableNo() <> Database::"GP Item" then + exit; + + MigrateInventoryTransactionsImp(Sender, RecordIdToMigrate, ChartOfAccountsMigrated); + end; + + internal procedure MigrateItemImp(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId) var GPItem: Record "GP Item"; DataMigrationErrorLogging: Codeunit "Data Migration Error Logging"; HelperFunctions: Codeunit "Helper Functions"; begin - if RecordIdToMigrate.TableNo() <> Database::"GP Item" then - exit; - DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(RecordIdToMigrate)); if not GPItem.Get(RecordIdToMigrate) then exit; @@ -48,7 +67,32 @@ codeunit 4019 "GP Item Migrator" exit; end; - MigrateItemDetails(GPItem, Sender); + MigrateItemDetailsImp(GPItem, Sender); + end; + + internal procedure MigrateItemPostingGroupsImp(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + var + GPItem: Record "GP Item"; + ItemNo: Code[20]; + begin + if not ChartOfAccountsMigrated then + exit; + + if not GPCompanyAdditionalSettings.GetGLModuleEnabled() then + exit; + + if not GPItem.Get(RecordIdToMigrate) then + exit; + + ItemNo := CopyStr(GPItem.No, 1, MaxStrLen(ItemNo)); + if not Sender.DoesItemExist(ItemNo) then + exit; + + CreateDefaultInventoryPostingGroup(Sender); + MigrateItemInventoryPostingGroupImp(GPItem, Sender); + MigrateItemGeneralPostingGroupImp(GPItem, Sender); + + Sender.ModifyItem(true); end; local procedure DecrementMigratedCount() @@ -59,9 +103,7 @@ codeunit 4019 "GP Item Migrator" DataMigrationStatusFacade.IncrementMigratedRecordCount(HelperFunctions.GetMigrationTypeTxt(), Database::Item, -1); end; -#pragma warning disable AS0078 - procedure MigrateItemDetails(var GPItem: Record "GP Item"; ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") -#pragma warning restore AS0078 + local procedure MigrateItemDetailsImp(var GPItem: Record "GP Item"; ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") var DataMigrationErrorLogging: Codeunit "Data Migration Error Logging"; begin @@ -76,47 +118,18 @@ codeunit 4019 "GP Item Migrator" ItemDataMigrationFacade.SetStandardCost(GPItem.StandardCost); ItemDataMigrationFacade.SetCostingMethod(GetCostingMethod(GPItem)); ItemDataMigrationFacade.SetBaseUnitOfMeasure(GPItem.BaseUnitOfMeasure); - - if GPCompanyAdditionalSettings.GetGLModuleEnabled() then - ItemDataMigrationFacade.SetGeneralProductPostingGroup(CopyStr(DefaultPostingGroupCodeTxt, 1, 20)); - ItemDataMigrationFacade.SetNetWeight(GPItem.ShipWeight); ItemDataMigrationFacade.SetSearchDescription(GPItem.SearchDescription); ItemDataMigrationFacade.SetPurchUnitOfMeasure(GPItem.PurchUnitOfMeasure); ItemDataMigrationFacade.SetItemTrackingCode(GPItem.ItemTrackingCode); - ItemDataMigrationFacade.ModifyItem(true); - end; - - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateItemPostingGroups', '', true, true)] - local procedure OnMigrateItemPostingGroups(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) - begin - MigrateItemPostingGroups(Sender, RecordIdToMigrate, ChartOfAccountsMigrated); - end; - procedure MigrateItemPostingGroups(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) - var - GPItem: Record "GP Item"; - begin - if not ChartOfAccountsMigrated then - exit; - - if RecordIdToMigrate.TableNo() <> Database::"GP Item" then - exit; - - if not GPCompanyAdditionalSettings.GetGLModuleEnabled() then - exit; - - if GPItem.Get(RecordIdToMigrate) then - MigrateItemInventoryPostingGroup(GPItem, Sender); - end; + if GPCompanyAdditionalSettings.GetGLModuleEnabled() then + ItemDataMigrationFacade.SetGeneralProductPostingGroup(CopyStr(DefaultPostingGroupCodeTxt, 1, 20)); - [EventSubscriber(ObjectType::Codeunit, Codeunit::"Item Data Migration Facade", 'OnMigrateInventoryTransactions', '', true, true)] - local procedure OnMigrateInventoryTransactions(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) - begin - MigrateInventoryTransactions(Sender, RecordIdToMigrate, ChartOfAccountsMigrated); + ItemDataMigrationFacade.ModifyItem(true); end; - procedure MigrateInventoryTransactions(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + internal procedure MigrateInventoryTransactionsImp(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) var Item: Record Item; ItemJnlLine: Record "Item Journal Line"; @@ -131,9 +144,6 @@ codeunit 4019 "GP Item Migrator" if not ChartOfAccountsMigrated then exit; - if RecordIdToMigrate.TableNo() <> Database::"GP Item" then - exit; - if not GPCompanyAdditionalSettings.GetGLModuleEnabled() then exit; @@ -230,19 +240,16 @@ codeunit 4019 "GP Item Migrator" Error(ErrorText); end; - procedure MigrateItemInventoryPostingGroup(GPItem: Record "GP Item"; var Sender: Codeunit "Item Data Migration Facade") + local procedure MigrateItemInventoryPostingGroupImp(var GPItem: Record "GP Item"; var Sender: Codeunit "Item Data Migration Facade") var - Item: Record Item; GPIV00101: Record "GP IV00101"; - ItemClassId: Text[11]; + ItemClassId: Code[20]; begin - if not Sender.DoesItemExist(CopyStr(GPItem.No, 1, MaxStrLen(Item."No."))) then - exit; - if not GPItem.ShouldSetPostingGroup() then exit; - MigrateItemClassesIfNeeded(GPItem, Sender); + CreateInventoryPostingGroup(GPItem, Sender); + if GPCompanyAdditionalSettings.GetMigrateItemClasses() then if GPIV00101.Get(GPItem.No) then ItemClassId := CopyStr(GPIV00101.ITMCLSCD.Trim(), 1, MaxStrLen(ItemClassId)); @@ -250,9 +257,24 @@ codeunit 4019 "GP Item Migrator" if (ItemClassId <> '') then Sender.SetInventoryPostingGroup(ItemClassId) else - Sender.SetInventoryPostingGroup(CopyStr(DefaultPostingGroupCodeTxt, 1, 20)); + Sender.SetInventoryPostingGroup(CopyStr(DefaultPostingGroupCodeTxt, 1, MaxStrLen(ItemClassId))); + end; - Sender.ModifyItem(true); + local procedure MigrateItemGeneralPostingGroupImp(var GPItem: Record "GP Item"; var Sender: Codeunit "Item Data Migration Facade") + var + GPIV00101: Record "GP IV00101"; + ItemClassId: Code[20]; + begin + CreateGenProductPostingGroup(GPItem, Sender); + + if GPCompanyAdditionalSettings.GetMigrateItemClasses() then + if GPIV00101.Get(GPItem.No) then + ItemClassId := CopyStr(GPIV00101.ITMCLSCD.TrimEnd(), 1, MaxStrLen(ItemClassId)); + + if (ItemClassId <> '') then + Sender.SetGeneralProductPostingGroup(ItemClassId) + else + Sender.SetGeneralProductPostingGroup(CopyStr(DefaultPostingGroupCodeTxt, 1, MaxStrLen(ItemClassId))); end; local procedure GetCurrentBatchState() @@ -425,44 +447,38 @@ codeunit 4019 "GP Item Migrator" end; end; - procedure MigrateItemClassesIfNeeded(var GPItem: Record "GP Item"; var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") - var - HelperFunctions: Codeunit "Helper Functions"; - begin - if DefaultAccountNumber = '' then - DefaultAccountNumber := HelperFunctions.GetPostingAccountNumber(InventoryAccountTok); - - MigrateDefaultPostingGroupIfNeeded(ItemDataMigrationFacade); - MigrateGPPostingGroupIfNeeded(GPItem, ItemDataMigrationFacade); - end; - - local procedure MigrateDefaultPostingGroupIfNeeded(var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") + local procedure CreateDefaultInventoryPostingGroup(var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") var InventoryPostingGroup: Record "Inventory Posting Group"; InventoryPostingSetup: Record "Inventory Posting Setup"; GPItemLocation: Record "GP Item Location"; DataMigrationErrorLogging: Codeunit "Data Migration Error Logging"; + HelperFunctions: Codeunit "Helper Functions"; PostingGroupCode: Code[20]; + PostingGroupDescription: Text[50]; + DefaultAccountNumber: Code[20]; begin + if InventoryPostingGroup.Get(DefaultPostingGroupCodeTxt) then + exit; + PostingGroupCode := CopyStr(DefaultPostingGroupCodeTxt, 1, MaxStrLen(PostingGroupCode)); - if not InventoryPostingGroup.Get(PostingGroupCode) then begin -#pragma warning disable AA0139 - ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, CopyStr(DefaultPostingGroupDescriptionTxt, 1, MaxStrLen(InventoryPostingGroup.Description)), ''); -#pragma warning restore AA0139 - ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, '', DefaultAccountNumber); - - if GPItemLocation.FindSet() then - repeat -#pragma warning disable AA0139 - DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(GPItemLocation.RecordId)); - ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, CopyStr(DefaultPostingGroupDescriptionTxt, 1, MaxStrLen(InventoryPostingGroup.Description)), CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code"))); -#pragma warning restore AA0139 - ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code")), DefaultAccountNumber); - until GPItemLocation.Next() = 0; - end; + DefaultAccountNumber := HelperFunctions.GetPostingAccountNumber(InventoryAccountTok); + PostingGroupDescription := CopyStr(DefaultPostingGroupDescriptionTxt, 1, MaxStrLen(PostingGroupDescription)); + + ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, PostingGroupDescription, ''); + ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, '', DefaultAccountNumber); + + if not GPItemLocation.FindSet() then + exit; + + repeat + DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(GPItemLocation.RecordId)); + ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, PostingGroupDescription, CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code"))); + ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code")), DefaultAccountNumber); + until GPItemLocation.Next() = 0; end; - local procedure MigrateGPPostingGroupIfNeeded(var GPItem: Record "GP Item"; var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") + local procedure CreateInventoryPostingGroup(var GPItem: Record "GP Item"; var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") var InventoryPostingGroup: Record "Inventory Posting Group"; InventoryPostingSetup: Record "Inventory Posting Setup"; @@ -472,6 +488,7 @@ codeunit 4019 "GP Item Migrator" HelperFunctions: Codeunit "Helper Functions"; DataMigrationErrorLogging: Codeunit "Data Migration Error Logging"; PostingGroupCode: Code[20]; + PostingGroupDescription: Text[50]; AccountNumber: Code[20]; begin if not GPCompanyAdditionalSettings.GetMigrateItemClasses() then @@ -483,10 +500,7 @@ codeunit 4019 "GP Item Migrator" if not GPIV00101.Get(GPItem.No) then exit; -#pragma warning disable AA0139 - PostingGroupCode := GPIV00101.ITMCLSCD.Trim(); -#pragma warning restore AA0139 - + PostingGroupCode := CopyStr(GPIV00101.ITMCLSCD.TrimEnd(), 1, MaxStrLen(PostingGroupCode)); if PostingGroupCode = '' then exit; @@ -496,22 +510,146 @@ codeunit 4019 "GP Item Migrator" if not GPIV40400.Get(PostingGroupCode) then exit; - AccountNumber := DefaultAccountNumber; + AccountNumber := HelperFunctions.GetPostingAccountNumber(InventoryAccountTok); if GPIV40400.IVIVINDX > 0 then AccountNumber := HelperFunctions.GetGPAccountNumberByIndex(GPIV40400.IVIVINDX); - ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, GPIV40400.ITMCLSDC, ''); + PostingGroupDescription := CopyStr(GPIV40400.ITMCLSDC.TrimEnd(), 1, MaxStrLen(PostingGroupDescription)); + + ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, PostingGroupDescription, ''); ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, '', AccountNumber); if GPItemLocation.FindSet() then repeat DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(GPItemLocation.RecordId)); - ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, GPIV40400.ITMCLSDC, CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code"))); - ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, CopyStr(GPItemLocation.LOCNCODE, 1, MaxStrLen(InventoryPostingSetup."Location Code")), AccountNumber); + ItemDataMigrationFacade.CreateInventoryPostingSetupIfNeeded(PostingGroupCode, PostingGroupDescription, CopyStr(GPItemLocation.LOCNCODE.TrimEnd(), 1, MaxStrLen(InventoryPostingSetup."Location Code"))); + ItemDataMigrationFacade.SetInventoryPostingSetupInventoryAccount(PostingGroupCode, CopyStr(GPItemLocation.LOCNCODE.TrimEnd(), 1, MaxStrLen(InventoryPostingSetup."Location Code")), AccountNumber); until GPItemLocation.Next() = 0; end; + local procedure CreateGenProductPostingGroup(var GPItem: Record "GP Item"; var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") + var + GenProductPostingGroup: Record "Gen. Product Posting Group"; + GPIV00101: Record "GP IV00101"; + GPIV40400: Record "GP IV40400"; + PostingGroupCode: Code[20]; + PostingGroupDescription: Text[50]; + begin + if not GPCompanyAdditionalSettings.GetMigrateItemClasses() then + exit; + + if not GPIV00101.Get(GPItem.No) then + exit; + + PostingGroupCode := CopyStr(GPIV00101.ITMCLSCD.TrimEnd(), 1, MaxStrLen(PostingGroupCode)); + if PostingGroupCode = '' then + exit; + + if not GPIV40400.Get(PostingGroupCode) then + exit; + + PostingGroupDescription := CopyStr(GPIV40400.ITMCLSDC.TrimEnd(), 1, MaxStrLen(PostingGroupDescription)); + + if GenProductPostingGroup.Get(PostingGroupCode) then + exit; + + // Create two versions of the General Posting Setup. One with GP as the Gen. Bus. Posting Group and the other as blank + CreateGeneralPostingSetup(ItemDataMigrationFacade, GPIV40400, PostingGroupCode, PostingGroupDescription, ''); + CreateGeneralPostingSetup(ItemDataMigrationFacade, GPIV40400, PostingGroupCode, PostingGroupDescription, 'GP'); + end; + + local procedure CreateGeneralPostingSetup(var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade"; var GPIV40400: Record "GP IV40400"; PostingGroupCode: Code[20]; GeneralProdPostingGroupDescription: Text[50]; GeneralBusPostingGroupCode: Code[20]) + var + GeneralPostingSetup: Record "General Posting Setup"; + AccountNumber: Code[20]; + begin + if ItemDataMigrationFacade.CreateGeneralProductPostingSetupIfNeeded(PostingGroupCode, GeneralProdPostingGroupDescription, GeneralBusPostingGroupCode) then + if GeneralPostingSetup.Get(GeneralBusPostingGroupCode, PostingGroupCode) then begin + if CanAddGenProductPostingAccount(GPIV40400.IVSLSIDX, AccountNumber, '') then + GeneralPostingSetup.Validate("Sales Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPIV40400.IVSLDSIX, AccountNumber, '') then + GeneralPostingSetup.Validate("Sales Line Disc. Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPIV40400.IVIVINDX, AccountNumber, '') then + GeneralPostingSetup.Validate("Purch. Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPIV40400.IVCOGSIX, AccountNumber, '') then + GeneralPostingSetup.Validate("COGS Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPIV40400.IVIVINDX, AccountNumber, '') then + GeneralPostingSetup.Validate("Direct Cost Applied Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPIV40400.PURPVIDX, AccountNumber, '') then + GeneralPostingSetup.Validate("Purchase Variance Account", AccountNumber); + + ApplyGenPostingSetupCommonAccounts(GeneralPostingSetup); + + GeneralPostingSetup.Modify(true); + end; + end; + + local procedure ApplyGenPostingSetupCommonAccounts(var GeneralPostingSetup: Record "General Posting Setup") + var + GPPostingAccounts: Record "GP Posting Accounts"; + HelperFunctions: Codeunit "Helper Functions"; + AccountNumber: Code[20]; + DefaultAccountNumber: Code[20]; + begin + if GPPostingAccounts.FindFirst() then begin + DefaultAccountNumber := HelperFunctions.GetPostingAccountNumber(InventoryAccountTok); + + if CanAddGenProductPostingAccount(GPPostingAccounts.InventoryAdjmtAccountIdx, AccountNumber, DefaultAccountNumber) then + GeneralPostingSetup.Validate("Inventory Adjmt. Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPPostingAccounts.SalesInvDiscAccountIdx, AccountNumber, '') then + GeneralPostingSetup.Validate("Sales Inv. Disc. Account", AccountNumber); + + if CanAddGenProductPostingAccount(GPPostingAccounts.SalesPmtDiscDebitAccountIdx, AccountNumber, '') then begin + EnsureGLSetupAdjustforPaymentDiscTrue(); + GeneralPostingSetup.Validate("Sales Pmt. Disc. Debit Acc.", AccountNumber); + end; + + if CanAddGenProductPostingAccount(GPPostingAccounts.PurchPmtDiscDebitAccIdx, AccountNumber, '') then begin + EnsureGLSetupAdjustforPaymentDiscTrue(); + GeneralPostingSetup.Validate("Purch. Pmt. Disc. Debit Acc.", AccountNumber); + end; + end; + end; + + local procedure EnsureGLSetupAdjustforPaymentDiscTrue() + var + GLSetup: Record "General Ledger Setup"; + begin + if not GLSetup.Get() then + exit; + + if GLSetup."Adjust for Payment Disc." then + exit; + + GLSetup.Validate("VAT Tolerance %", 0); + GLSetup.Validate("Pmt. Disc. Excl. VAT", false); + GLSetup.Validate("Adjust for Payment Disc.", true); + GLSetup.Modify(true); + end; + + local procedure CanAddGenProductPostingAccount(GPAccountIdx: Integer; var AccountNumber: Code[20]; DefaultAccountNo: Code[20]): Boolean + var + GLAccount: Record "G/L Account"; + HelperFunctions: Codeunit "Helper Functions"; + begin + AccountNumber := DefaultAccountNo; + + if GPAccountIdx < 1 then + exit; + + if (GLAccount.Get(HelperFunctions.GetGPAccountNumberByIndex(GPAccountIdx))) then + AccountNumber := GLAccount."No."; + + exit(AccountNumber <> ''); + end; + internal procedure MigrateKitItems() var GPItem: Record "GP Item"; @@ -582,6 +720,45 @@ codeunit 4019 "GP Item Migrator" end; end; + internal procedure CreateItemCategories() + var + Item: Record Item; + begin + if not Item.FindSet() then + exit; + + repeat + CreateItemCategoryImp(Item); + until Item.Next() = 0; + end; + + internal procedure CreateItemCategoryImp(var Item: Record Item) + var + ItemCategory: Record "Item Category"; + GPIV00101: Record "GP IV00101"; + GPIV40400: Record "GP IV40400"; + ItemClass: Code[20]; + begin + if not GPIV00101.Get(Item."No.") then + exit; + + ItemClass := CopyStr(GPIV00101.ITMCLSCD.TrimEnd(), 1, MaxStrLen(ItemClass)); + if ItemClass = '' then + exit; + + if not GPIV40400.Get(ItemClass) then + exit; + + if not ItemCategory.Get(ItemClass) then begin + ItemCategory.Validate(Code, ItemClass); + ItemCategory.Validate(Description, CopyStr(GPIV40400.ITMCLSDC.TrimEnd(), 1, MaxStrLen(ItemCategory.Description))); + ItemCategory.Insert(true); + end; + + Item.Validate("Item Category Code", ItemClass); + Item.Modify(true); + end; + local procedure GetMaxBatchLineCount(): Integer var IsHandled: Boolean; @@ -602,4 +779,35 @@ codeunit 4019 "GP Item Migrator" local procedure OnBeforeGetMaxItemBatchLineCount(var IsHandled: Boolean; var NewMaxLineCount: Integer) begin end; +#if not CLEAN28 + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateItem(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId) + begin + end; + + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateItemDetails(var GPItem: Record "GP Item"; ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") + begin + end; + + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateItemPostingGroups(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + begin + end; + + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateInventoryTransactions(var Sender: Codeunit "Item Data Migration Facade"; RecordIdToMigrate: RecordId; ChartOfAccountsMigrated: Boolean) + begin + end; + + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateItemInventoryPostingGroup(GPItem: Record "GP Item"; var Sender: Codeunit "Item Data Migration Facade") + begin + end; + + [Obsolete('Should not call this procedure directly.', '28.0')] + procedure MigrateItemClassesIfNeeded(var GPItem: Record "GP Item"; var ItemDataMigrationFacade: Codeunit "Item Data Migration Facade") + begin + end; +#endif } \ No newline at end of file diff --git a/Apps/W1/HybridGP/app/src/Migration/Support/HelperFunctions.codeunit.al b/Apps/W1/HybridGP/app/src/Migration/Support/HelperFunctions.codeunit.al index 3dbb740e4d..f39e6ee911 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Support/HelperFunctions.codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/Support/HelperFunctions.codeunit.al @@ -561,6 +561,13 @@ codeunit 4037 "Helper Functions" GPItemMigrator.MigrateKitItems(); end; + local procedure CreateItemCategories() + var + GPItemMigrator: Codeunit "GP Item Migrator"; + begin + GPItemMigrator.CreateItemCategories(); + end; + procedure CreateSetupRecordsIfNeeded() var CompanyInformation: Record "Company Information"; @@ -2112,6 +2119,8 @@ codeunit 4037 "Helper Functions" if GPCompanyAdditionalSettings.GetMigrateKitItems() then CreateKitItems(); + CreateItemCategories(); + exit(GPConfiguration.IsAllPostMigrationDataCreated()); end; @@ -2277,9 +2286,17 @@ codeunit 4037 "Helper Functions" internal procedure RunPreMigrationCleanup() var Dimension: Record Dimension; + GeneralPostingSetup: Record "General Posting Setup"; + GenProductPostingGroup: Record "Gen. Product Posting Group"; begin if not Dimension.IsEmpty() then Dimension.DeleteAll(true); + + if not GeneralPostingSetup.IsEmpty() then + GeneralPostingSetup.DeleteAll(true); + + if not GenProductPostingGroup.IsEmpty() then + GenProductPostingGroup.DeleteAll(true); end; internal procedure CreateDimSet(ACTNUMBR_1: Code[20]; ACTNUMBR_2: Code[20]; ACTNUMBR_3: Code[20]; ACTNUMBR_4: Code[20]; ACTNUMBR_5: Code[20]; ACTNUMBR_6: Code[20]; ACTNUMBR_7: Code[20]; ACTNUMBR_8: Code[20]): Integer diff --git a/Apps/W1/HybridGP/app/src/Migration/Support/PurchaseOrders/GPPOMigrator.codeunit.al b/Apps/W1/HybridGP/app/src/Migration/Support/PurchaseOrders/GPPOMigrator.codeunit.al index c6aed34ed5..b51f022b47 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Support/PurchaseOrders/GPPOMigrator.codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/Support/PurchaseOrders/GPPOMigrator.codeunit.al @@ -82,7 +82,6 @@ codeunit 40108 "GP PO Migrator" PurchaseHeader."Shipment Method Code" := CopyStr(GPPOP10100.SHIPMTHD, 1, MaxStrLen(PurchaseHeader."Shipment Method Code")); PurchaseHeader.Validate("Prices Including VAT", false); PurchaseHeader.Validate("Vendor Invoice No.", GPPOP10100.PONUMBER); - PurchaseHeader.Validate("Gen. Bus. Posting Group", GPCodeTxt); UpdateShipToAddress(GPPOP10100, CountryCode, PurchaseHeader); @@ -278,7 +277,6 @@ codeunit 40108 "GP PO Migrator" PurchaseLine."Line No." := LineNo; PurchaseLine."Buy-from Vendor No." := GPPOP10110.VENDORID; PurchaseLine.Type := PurchaseLineType::Item; - PurchaseLine.Validate("Gen. Bus. Posting Group", GPCodeTxt); PurchaseLine.Validate("Gen. Prod. Posting Group", GPCodeTxt); PurchaseLine."Unit of Measure" := UnitOfMeasure; PurchaseLine."Unit of Measure Code" := UnitOfMeasure; diff --git a/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorMigrator.codeunit.al b/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorMigrator.codeunit.al index 2afa80fd10..e33212906d 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorMigrator.codeunit.al +++ b/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorMigrator.codeunit.al @@ -129,7 +129,7 @@ codeunit 4022 "GP Vendor Migrator" DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(RecordIdToMigrate)); Sender.CreateGeneralJournalLine( CopyStr(VendorBatchNameTxt, 1, 7), - CopyStr(GPVendorTransactions.GLDocNo, 1, 20), + CopyStr(GPVendorTransactions.VCHRNMBR, 1, 20), CopyStr(GPVendor.VENDNAME, 1, 50), GPVendorTransactions.DOCDATE, 0D, @@ -157,7 +157,7 @@ codeunit 4022 "GP Vendor Migrator" DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(RecordIdToMigrate)); Sender.CreateGeneralJournalLine( CopyStr(VendorBatchNameTxt, 1, 7), - CopyStr(GPVendorTransactions.GLDocNo, 1, 20), + CopyStr(GPVendorTransactions.VCHRNMBR, 1, 20), CopyStr(GPVendor.VENDNAME, 1, 50), GPVendorTransactions.DOCDATE, 0D, @@ -184,7 +184,7 @@ codeunit 4022 "GP Vendor Migrator" DataMigrationErrorLogging.SetLastRecordUnderProcessing(Format(RecordIdToMigrate)); Sender.CreateGeneralJournalLine( CopyStr(VendorBatchNameTxt, 1, 7), - CopyStr(GPVendorTransactions.GLDocNo, 1, 20), + CopyStr(GPVendorTransactions.VCHRNMBR, 1, 20), CopyStr(GPVendor.VENDNAME, 1, 50), GPVendorTransactions.DOCDATE, 0D, diff --git a/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorTransactions.table.al b/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorTransactions.table.al index a23c255610..c8ea7ed10e 100644 --- a/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorTransactions.table.al +++ b/Apps/W1/HybridGP/app/src/Migration/Vendors/GPVendorTransactions.table.al @@ -62,6 +62,11 @@ table 4097 "GP Vendor Transactions" Caption = 'Payment Terms ID'; DataClassification = CustomerContent; } + field(12; VCHRNMBR; Text[22]) + { + Caption = 'Voucher Number'; + DataClassification = CustomerContent; + } } keys diff --git a/Apps/W1/HybridGP/test/src/GPDataMigrationTests.codeunit.al b/Apps/W1/HybridGP/test/src/GPDataMigrationTests.codeunit.al index 86ec2e4533..5ed89b1d2f 100644 --- a/Apps/W1/HybridGP/test/src/GPDataMigrationTests.codeunit.al +++ b/Apps/W1/HybridGP/test/src/GPDataMigrationTests.codeunit.al @@ -224,6 +224,7 @@ codeunit 139664 "GP Data Migration Tests" GenJournalLine.SetRange("Account No.", '!WOW!'); Assert.IsTrue(GenJournalLine.FindFirst(), 'Could not locate Gen. Journal Line.'); Assert.AreEqual('ARTEST987', GenJournalLine."Bal. Account No.", 'Incorrect Bal. Account No. on Gen. Journal Line. !WOW!'); + Assert.AreEqual('CUSTINV02', GenJournalLine."Document No.", 'Incorrect Document No. on Gen. Journal Line. !WOW!'); // [THEN] The default account will be set for the Bal. Account No. where class has no account configured Clear(GenJournalLine); @@ -231,6 +232,7 @@ codeunit 139664 "GP Data Migration Tests" GenJournalLine.SetRange("Account No.", '#1'); Assert.IsTrue(GenJournalLine.FindFirst(), 'Could not locate Gen. Journal Line.'); Assert.AreEqual(HelperFunctions.GetPostingAccountNumber('ReceivablesAccount'), GenJournalLine."Bal. Account No.", 'Incorrect Bal. Account No. on Gen. Journal Line. #1'); + Assert.AreEqual('CUSTINV01', GenJournalLine."Document No.", 'Incorrect Document No. on Gen. Journal Line. #1'); // [WHEN] Customer addresses are migrated // [THEN] Email addresses are included with the addresses when they are valid @@ -741,6 +743,7 @@ codeunit 139664 "GP Data Migration Tests" GenJournalLine.SetRange("Account No.", 'V3130'); Assert.IsTrue(GenJournalLine.FindFirst(), 'Could not locate Gen. Journal Line.'); Assert.AreEqual(HelperFunctions.GetPostingAccountNumber('PayablesAccount'), GenJournalLine."Bal. Account No.", 'Incorrect Bal. Account No. on Gen. Journal Line.'); + Assert.AreEqual('VENDINV01_VCH', GenJournalLine."Document No.", 'Document number is incorrect for Vendor V3130.'); // [WHEN] Vendor addresses are migrated // [THEN] Email addresses are included with the addresses when they are valid @@ -3467,7 +3470,7 @@ codeunit 139664 "GP Data Migration Tests" Clear(GPCustomerTransactions); GPCustomerTransactions.Id := '1'; GPCustomerTransactions.CUSTNMBR := '#1'; - GPCustomerTransactions.DOCNUMBR := '1'; + GPCustomerTransactions.DOCNUMBR := 'CUSTINV01'; GPCustomerTransactions.GLDocNo := '1'; GPCustomerTransactions.DOCDATE := DMY2Date(11, 8, 2022); GPCustomerTransactions.CURTRXAM := 1; @@ -3478,7 +3481,7 @@ codeunit 139664 "GP Data Migration Tests" Clear(GPCustomerTransactions); GPCustomerTransactions.Id := '2'; GPCustomerTransactions.CUSTNMBR := '!WOW!'; - GPCustomerTransactions.DOCNUMBR := '2'; + GPCustomerTransactions.DOCNUMBR := 'CUSTINV02'; GPCustomerTransactions.GLDocNo := '2'; GPCustomerTransactions.DOCDATE := DMY2Date(11, 8, 2022); GPCustomerTransactions.CURTRXAM := 2; @@ -5081,7 +5084,8 @@ codeunit 139664 "GP Data Migration Tests" Clear(GPVendorTransactions); GPVendorTransactions.Id := '1'; GPVendorTransactions.VENDORID := 'V3130'; - GPVendorTransactions.DOCNUMBR := '1'; + GPVendorTransactions.DOCNUMBR := 'VENDINV01'; + GPVendorTransactions.VCHRNMBR := 'VENDINV01_VCH'; GPVendorTransactions.GLDocNo := '1'; GPVendorTransactions.DOCDATE := DMY2Date(11, 8, 2022); GPVendorTransactions.CURTRXAM := 1; @@ -5092,7 +5096,8 @@ codeunit 139664 "GP Data Migration Tests" Clear(GPVendorTransactions); GPVendorTransactions.Id := '2'; GPVendorTransactions.VENDORID := '1160'; - GPVendorTransactions.DOCNUMBR := '2'; + GPVendorTransactions.DOCNUMBR := 'VENDINV02'; + GPVendorTransactions.VCHRNMBR := 'VENDINV02_VCH'; GPVendorTransactions.GLDocNo := '2'; GPVendorTransactions.DOCDATE := DMY2Date(11, 8, 2022); GPVendorTransactions.CURTRXAM := 2; diff --git a/Apps/W1/HybridGP/test/src/GPItemTests.codeunit.al b/Apps/W1/HybridGP/test/src/GPItemTests.codeunit.al index c41b879c74..5bfc2605c2 100644 --- a/Apps/W1/HybridGP/test/src/GPItemTests.codeunit.al +++ b/Apps/W1/HybridGP/test/src/GPItemTests.codeunit.al @@ -31,6 +31,8 @@ codeunit 139662 "GP Item Tests" var GPItem: Record "GP Item"; Item: Record "Item"; + ItemCategory: Record "Item Category"; + GeneralPostingSetup: Record "General Posting Setup"; HelperFunctions: Codeunit "Helper Functions"; begin // [SCENARIO] Items are migrated from GP @@ -41,6 +43,7 @@ codeunit 139662 "GP Item Tests" GPCompanyAdditionalSettings.GetSingleInstance(); GPCompanyAdditionalSettings.Validate("Migrate Inventory Module", true); GPCompanyAdditionalSettings.Validate("Migrate Inactive Items", true); + GPCompanyAdditionalSettings.Validate("Migrate Item Classes", true); GPCompanyAdditionalSettings.Validate("Migrate Discontinued Items", true); GPCompanyAdditionalSettings.Validate("Migrate Kit Items", false); GPCompanyAdditionalSettings.Modify(); @@ -77,6 +80,7 @@ codeunit 139662 "GP Item Tests" Assert.AreEqual(GPItem.ShortName, Item."Description 2", 'Description2 not set.'); Assert.AreEqual(GPItem.SearchDescription, Item."Search Description", 'Search Description not set.'); Assert.AreEqual(GPItem.PurchUnitOfMeasure, Item."Purch. Unit of Measure", 'Purch. Unit of Measure not set.'); + Assert.AreEqual(ItemClassesIdTest1Tok, Item."Item Category Code", 'Item category code is incorrect.'); GPItem.Get(ItemNoStepLadderTok); Item.Get(GPItem.No); @@ -90,6 +94,33 @@ codeunit 139662 "GP Item Tests" Assert.AreEqual(GPItem.ShortName, Item."Description 2", 'Description2 not set.'); Assert.AreEqual(GPItem.SearchDescription, Item."Search Description", 'Search Description not set.'); Assert.AreEqual(GPItem.PurchUnitOfMeasure, Item."Purch. Unit of Measure", 'Purch. Unit of Measure not set.'); + Assert.AreEqual(ItemClassIdTest2Tok, Item."Item Category Code", 'Item category code is incorrect.'); + + Assert.RecordCount(ItemCategory, 2); + + Assert.IsTrue(GeneralPostingSetup.Get('GP', 'TEST-1'), 'Missing GeneralPostingSetup for TEST-1 class.'); + Assert.AreEqual('1', GeneralPostingSetup."Purch. Account", 'Purch. Account is incorrect.'); + Assert.AreEqual('1', GeneralPostingSetup."Direct Cost Applied Account", 'Direct Cost Applied Account is incorrect.'); + Assert.AreEqual('1', GeneralPostingSetup."Purch. Pmt. Disc. Debit Acc.", 'Purch. Pmt. Disc. Debit Acc. is incorrect.'); + Assert.AreEqual('2', GeneralPostingSetup."Sales Account", 'Sales Account is incorrect.'); + Assert.AreEqual('2', GeneralPostingSetup."Sales Inv. Disc. Account", 'Sales Inv. Disc. Account is incorrect.'); + Assert.AreEqual('2', GeneralPostingSetup."Sales Pmt. Disc. Debit Acc.", 'Sales Pmt. Disc. Debit Acc. is incorrect.'); + Assert.AreEqual('3', GeneralPostingSetup."Sales Line Disc. Account", 'Sales Line Disc. Account is incorrect.'); + Assert.AreEqual('4', GeneralPostingSetup."COGS Account", 'COGS Account is incorrect.'); + Assert.AreEqual('5', GeneralPostingSetup."Purchase Variance Account", 'Purchase Variance Account is incorrect.'); + Assert.AreEqual('6', GeneralPostingSetup."Inventory Adjmt. Account", 'Inventory Adjmt. Account is incorrect.'); + + Assert.IsTrue(GeneralPostingSetup.Get('GP', 'TEST-2'), 'Missing GeneralPostingSetup for TEST-2 class.'); + Assert.AreEqual('', GeneralPostingSetup."Purch. Account", 'Purch. Account is incorrect.'); + Assert.AreEqual('', GeneralPostingSetup."Direct Cost Applied Account", 'Direct Cost Applied Account is incorrect.'); + Assert.AreEqual('1', GeneralPostingSetup."Purch. Pmt. Disc. Debit Acc.", 'Purch. Pmt. Disc. Debit Acc. is incorrect.'); + Assert.AreEqual('', GeneralPostingSetup."Sales Account", 'Sales Account is incorrect.'); + Assert.AreEqual('2', GeneralPostingSetup."Sales Inv. Disc. Account", 'Sales Inv. Disc. Account is incorrect.'); + Assert.AreEqual('2', GeneralPostingSetup."Sales Pmt. Disc. Debit Acc.", 'Sales Pmt. Disc. Debit Acc. is incorrect.'); + Assert.AreEqual('', GeneralPostingSetup."Sales Line Disc. Account", 'Sales Line Disc. Account is incorrect.'); + Assert.AreEqual('', GeneralPostingSetup."COGS Account", 'COGS Account is incorrect.'); + Assert.AreEqual('', GeneralPostingSetup."Purchase Variance Account", 'Purchase Variance Account is incorrect.'); + Assert.AreEqual('6', GeneralPostingSetup."Inventory Adjmt. Account", 'Inventory Adjmt. Account is incorrect.'); end; [Test] @@ -189,7 +220,7 @@ codeunit 139662 "GP Item Tests" GPTestHelperFunctions.InitializeMigration(); Assert.RecordCount(GPIV00101, 8); - Assert.RecordCount(GPIV40400, 2); + Assert.RecordCount(GPIV40400, 3); Assert.IsTrue(GPIV00101.Get(ItemNoSashBrshTok), 'Could not locate item.'); Assert.AreEqual(ItemClassesIdTest1Tok, GPIV00101.ITMCLSCD, 'Incorrect class Id'); @@ -398,12 +429,15 @@ codeunit 139662 "GP Item Tests" GPIV00101: Record "GP IV00101"; GPIV40400: Record "GP IV40400"; InventorySetup: Record "Inventory Setup"; + ItemCategory: Record "Item Category"; + GPPostingAccounts: Record "GP Posting Accounts"; begin Clear(ItemDataMigrationFacade); Clear(GPItemMigrator); GPItem.DeleteAll(); Item.DeleteAll(); + ItemCategory.DeleteAll(); GPIV00101.DeleteAll(); GPIV40400.DeleteAll(); DataMigrationEntity.DeleteAll(); @@ -420,6 +454,20 @@ codeunit 139662 "GP Item Tests" InventorySetup."Item Nos." := 'ITEM'; InventorySetup.Modify(true); end; + + if not GPPostingAccounts.Get() then begin + GPPostingAccounts.PayablesAccount := '1'; + GPPostingAccounts.PurchAccount := '1'; + GPPostingAccounts.ReceivablesAccount := '2'; + GPPostingAccounts.SalesAccount := '2'; + GPPostingAccounts.SalesAccountIdx := 2; + GPPostingAccounts.PurchAccountIdx := 1; + GPPostingAccounts.InventoryAdjmtAccountIdx := 6; + GPPostingAccounts.SalesInvDiscAccountIdx := 2; + GPPostingAccounts.SalesPmtDiscDebitAccountIdx := 2; + GPPostingAccounts.PurchPmtDiscDebitAccIdx := 1; + GPPostingAccounts.Insert(); + end; end; local procedure Migrate(GPItem: Record "GP Item") @@ -427,8 +475,8 @@ codeunit 139662 "GP Item Tests" if not GPTestHelperFunctions.MigrationConfiguredForTable(Database::Item) then exit; - GPItemMigrator.MigrateItem(ItemDataMigrationFacade, GPItem.RecordId()); - GPItemMigrator.MigrateItemInventoryPostingGroup(GPItem, ItemDataMigrationFacade); + GPItemMigrator.MigrateItemImp(ItemDataMigrationFacade, GPItem.RecordId()); + GPItemMigrator.MigrateItemPostingGroupsImp(ItemDataMigrationFacade, GPItem.RecordId(), true); end; local procedure CreateStagingTableEntries(var GPItem: Record "GP Item") @@ -633,55 +681,121 @@ codeunit 139662 "GP Item Tests" GPIV00101: Record "GP IV00101"; GPIV40400: Record "GP IV40400"; begin - GPAccount.Init(); + Clear(GPAccount); GPAccount.AcctNum := '1'; GPAccount.AcctIndex := 1; GPAccount.Name := 'Account 1'; GPAccount.Active := true; GPAccount.Insert(); - GLAccount.Init(); + Clear(GLAccount); GLAccount.Validate("No.", GPAccount.AcctNum); GLAccount.Validate(Name, GPAccount.Name); GLAccount.Validate("Account Type", "G/L Account Type"::Posting); GLAccount.Insert(); - GPAccount.Init(); + Clear(GPAccount); GPAccount.AcctNum := '2'; GPAccount.AcctIndex := 2; GPAccount.Name := 'Account 2'; GPAccount.Active := true; GPAccount.Insert(); - GLAccount.Init(); + Clear(GLAccount); + GLAccount.Validate("No.", GPAccount.AcctNum); + GLAccount.Validate(Name, GPAccount.Name); + GLAccount.Validate("Account Type", "G/L Account Type"::Posting); + GLAccount.Insert(); + + Clear(GPAccount); + GPAccount.AcctNum := '3'; + GPAccount.AcctIndex := 3; + GPAccount.Name := 'Account 3'; + GPAccount.Active := true; + GPAccount.Insert(); + + Clear(GLAccount); GLAccount.Validate("No.", GPAccount.AcctNum); GLAccount.Validate(Name, GPAccount.Name); GLAccount.Validate("Account Type", "G/L Account Type"::Posting); GLAccount.Insert(); - GPIV40400.Init(); + Clear(GPAccount); + GPAccount.AcctNum := '4'; + GPAccount.AcctIndex := 4; + GPAccount.Name := 'Account 4'; + GPAccount.Active := true; + GPAccount.Insert(); + + Clear(GLAccount); + GLAccount.Validate("No.", GPAccount.AcctNum); + GLAccount.Validate(Name, GPAccount.Name); + GLAccount.Validate("Account Type", "G/L Account Type"::Posting); + GLAccount.Insert(); + + Clear(GPAccount); + GPAccount.AcctNum := '5'; + GPAccount.AcctIndex := 5; + GPAccount.Name := 'Account 5'; + GPAccount.Active := true; + GPAccount.Insert(); + + Clear(GLAccount); + GLAccount.Validate("No.", GPAccount.AcctNum); + GLAccount.Validate(Name, GPAccount.Name); + GLAccount.Validate("Account Type", "G/L Account Type"::Posting); + GLAccount.Insert(); + + Clear(GPAccount); + GPAccount.AcctNum := '6'; + GPAccount.AcctIndex := 6; + GPAccount.Name := 'Account 6'; + GPAccount.Active := true; + GPAccount.Insert(); + + Clear(GLAccount); + GLAccount.Validate("No.", GPAccount.AcctNum); + GLAccount.Validate(Name, GPAccount.Name); + GLAccount.Validate("Account Type", "G/L Account Type"::Posting); + GLAccount.Insert(); + + Clear(GPIV40400); GPIV40400.ITMCLSCD := ItemClassesIdTest1Tok; GPIV40400.ITMCLSDC := 'Test class 1'; GPIV40400.IVIVINDX := 1; + GPIV40400.IVSLSIDX := 2; + GPIV40400.IVSLDSIX := 3; + GPIV40400.IVCOGSIX := 4; + GPIV40400.PURPVIDX := 5; GPIV40400.Insert(); - GPIV40400.Init(); + Clear(GPIV40400); GPIV40400.ITMCLSCD := ItemClassIdTest2Tok; GPIV40400.ITMCLSDC := 'Test class 2'; GPIV40400.IVIVINDX := 0; + GPIV40400.IVSLSIDX := 0; + GPIV40400.IVSLDSIX := 0; + GPIV40400.IVCOGSIX := 0; + GPIV40400.PURPVIDX := 0; + GPIV40400.Insert(); + + Clear(GPIV40400); + GPIV40400.ITMCLSCD := 'IGNORE'; + GPIV40400.ITMCLSDC := 'Will not migrate'; + GPIV40400.IVIVINDX := 0; GPIV40400.Insert(); - GPIV00101.Init(); + Clear(GPIV00101); GPIV00101.ITEMNMBR := ItemNoSashBrshTok; GPIV00101.ITMCLSCD := ItemClassesIdTest1Tok; GPIV00101.Insert(); - GPIV00101.Init(); + Clear(GPIV00101); GPIV00101.ITEMNMBR := ItemNo12345ITEMNUMBERTok; GPIV00101.ITMCLSCD := ItemClassesIdTest1Tok; GPIV00101.Insert(); - GPIV00101.Init(); + Clear(GPIV00101); GPIV00101.ITEMNMBR := ItemNoStepLadderTok; GPIV00101.ITMCLSCD := ItemClassIdTest2Tok; GPIV00101.Insert(); diff --git a/Apps/W1/HybridGP/test/src/GPItemTransactionTests.codeunit.al b/Apps/W1/HybridGP/test/src/GPItemTransactionTests.codeunit.al index a099284df6..3cb6ca3675 100644 --- a/Apps/W1/HybridGP/test/src/GPItemTransactionTests.codeunit.al +++ b/Apps/W1/HybridGP/test/src/GPItemTransactionTests.codeunit.al @@ -30,6 +30,7 @@ codeunit 139665 "GP Item Transaction Tests" Item: Record "Item"; ItemLedgerEntry: Record "Item Ledger Entry"; GPCompanyAdditionalSettings: Record "GP Company Additional Settings"; + GPMigrationWarning: Record "GP Migration Warnings"; HelperFunctions: Codeunit "Helper Functions"; begin // [SCENARIO] Items are migrated from GP @@ -51,6 +52,7 @@ codeunit 139665 "GP Item Transaction Tests" GPTestHelperFunctions.CreateConfigurationSettings(); GPCompanyAdditionalSettings.GetSingleInstance(); GPCompanyAdditionalSettings.Validate("Migrate Inventory Module", true); + GPCompanyAdditionalSettings.Validate("Migrate GL Module", true); GPCompanyAdditionalSettings.Validate("Migrate Only Inventory Master", false); GPCompanyAdditionalSettings.Modify(); @@ -65,6 +67,8 @@ codeunit 139665 "GP Item Transaction Tests" HelperFunctions.PostGLTransactions(); + Assert.RecordCount(GPMigrationWarning, 0); + // [THEN] A Item is created for all staging table entries Assert.RecordCount(Item, GPItem.Count()); @@ -235,6 +239,7 @@ codeunit 139665 "GP Item Transaction Tests" ItemJournalBatch: Record "Item Journal Batch"; ItemJournalLine: Record "Item Journal Line"; InventorySetup: Record "Inventory Setup"; + GPMigrationWarning: Record "GP Migration Warnings"; begin GPItem.DeleteAll(); GPItemTransaction.DeleteAll(); @@ -253,6 +258,7 @@ codeunit 139665 "GP Item Transaction Tests" GeneralPostingSetup.DeleteAll(); ItemJournalLine.DeleteAll(); ItemJournalBatch.DeleteAll(); + GPMigrationWarning.DeleteAll(); if not InventorySetup.Get() then InventorySetup.Insert(true); @@ -270,9 +276,9 @@ codeunit 139665 "GP Item Transaction Tests" if not GPTestHelperFunctions.MigrationConfiguredForTable(Database::Item) then exit; - GPItemMigrator.MigrateItem(ItemDataMigrationFacade, GPItem.RecordId()); - GPItemMigrator.MigrateItemPostingGroups(ItemDataMigrationFacade, GPItem.RecordId(), true); - GPItemMigrator.MigrateInventoryTransactions(ItemDataMigrationFacade, GPItem.RecordId(), true); + GPItemMigrator.MigrateItemImp(ItemDataMigrationFacade, GPItem.RecordId()); + GPItemMigrator.MigrateItemPostingGroupsImp(ItemDataMigrationFacade, GPItem.RecordId(), true); + GPItemMigrator.MigrateInventoryTransactionsImp(ItemDataMigrationFacade, GPItem.RecordId(), true); end; local procedure CreateLocations()