diff --git a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al
index b4a916fb7b..32a14f1cf0 100644
--- a/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al
+++ b/Apps/W1/Shopify/app/src/Order handling/Codeunits/ShpfyProcessOrder.Codeunit.al
@@ -57,7 +57,7 @@ codeunit 30166 "Shpfy Process Order"
///
/// Parameter of type Record "Sales Header".
/// Parameter of type Record "Shopify Order Header".
- local procedure CreateHeaderFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header")
+ internal procedure CreateHeaderFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header")
var
ShopifyTaxArea: Record "Shpfy Tax Area";
DocLinkToBCDoc: Record "Shpfy Doc. Link To Doc.";
@@ -184,7 +184,7 @@ codeunit 30166 "Shpfy Process Order"
///
/// Parameter of type Record "Sales Header".
/// Parameter of type Record "Shopify Order Header".
- local procedure CreateLinesFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header")
+ internal procedure CreateLinesFromShopifyOrder(var SalesHeader: Record "Sales Header"; ShopifyOrderHeader: Record "Shpfy Order Header")
var
Item: Record Item;
SalesLine: Record "Sales Line";
@@ -432,6 +432,11 @@ codeunit 30166 "Shpfy Process Order"
SalesHeader.Delete(true);
end;
+ internal procedure SetShopifyShop(Shop: Record "Shpfy Shop")
+ begin
+ ShopifyShop := Shop;
+ end;
+
[EventSubscriber(ObjectType::Codeunit, Codeunit::"Sales-Post", 'OnInsertShipmentHeaderOnAfterTransferfieldsToSalesShptHeader', '', false, false)]
local procedure TransferShopifyOrderNoToShipmentHeader(SalesHeader: Record "Sales Header"; var SalesShptHeader: Record "Sales Shipment Header")
begin
diff --git a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al
index 59a182ba4b..31726db87f 100644
--- a/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al
+++ b/Apps/W1/Shopify/test/Base/ShpfyInitializeTest.Codeunit.al
@@ -25,7 +25,6 @@ codeunit 139561 "Shpfy Initialize Test"
internal procedure CreateShop(): Record "Shpfy Shop"
var
- GLAccount: Record "G/L Account";
RefundGLAccount: Record "G/L Account";
Shop: Record "Shpfy Shop";
VATPostingSetup: Record "VAT Posting Setup";
@@ -43,8 +42,6 @@ codeunit 139561 "Shpfy Initialize Test"
exit(Shop);
Code := Any.AlphabeticText(MaxStrLen(Code));
- GLAccount.SetRange("Direct Posting", true);
- GLAccount.FindLast();
LibraryERM.CreateVATPostingSetupWithAccounts(VATPostingSetup,
VATPostingSetup."VAT Calculation Type"::"Normal VAT", LibraryRandom.RandDecInDecimalRange(10, 25, 0));
@@ -65,7 +62,7 @@ codeunit 139561 "Shpfy Initialize Test"
CreateVATPostingSetup(PostingGroupCode, PostingGroupCode);
CreateVATPostingSetup(PostingGroupCode, '');
CreateVATPostingSetup(PostingGroupCode, RefundGLAccount."VAT Prod. Posting Group");
- Shop."Shipping Charges Account" := GLAccount."No.";
+ Shop."Shipping Charges Account" := CreateShippingChargesGLAcc(VATPostingSetup, GenPostingType, PostingGroupCode);
Shop."Customer Posting Group" := PostingGroupCode;
Shop."Gen. Bus. Posting Group" := PostingGroupCode;
Shop."VAT Bus. Posting Group" := PostingGroupCode;
@@ -353,7 +350,7 @@ codeunit 139561 "Shpfy Initialize Test"
LibraryAssert.IsTrue(Values[1] = ShopifyAccessToken, 'invalid access token');
end;
- local procedure CreateVATPostingSetup(BusinessPostingGroup: Code[20]; ProductPostingGroup: Code[20])
+ internal procedure CreateVATPostingSetup(BusinessPostingGroup: Code[20]; ProductPostingGroup: Code[20])
var
GeneralPostingSetup: Record "General Posting Setup";
VatPostingSetup: Record "VAT Posting Setup";
@@ -376,4 +373,17 @@ codeunit 139561 "Shpfy Initialize Test"
end;
end;
+ local procedure CreateShippingChargesGLAcc(var VATPostingSetup: Record "VAT Posting Setup"; GenPostingType: Enum "General Posting Type"; PostingGroupCode: Code[20]): Code[20]
+ var
+ ShippingChargesGLAccount: Record "G/L Account";
+ begin
+ ShippingChargesGLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, GenPostingType::Sale));
+ ShippingChargesGLAccount."Direct Posting" := true;
+ ShippingChargesGLAccount.Modify(false);
+
+ CreateVATPostingSetup(PostingGroupCode, ShippingChargesGLAccount."VAT Prod. Posting Group");
+
+ exit(ShippingChargesGLAccount."No.");
+ end;
+
}
diff --git a/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al
new file mode 100644
index 0000000000..ee10494c3c
--- /dev/null
+++ b/Apps/W1/Shopify/test/Shipping/ShpfyShippingChargesTest.Codeunit.al
@@ -0,0 +1,453 @@
+codeunit 139546 "Shpfy Shipping Charges Test"
+{
+ Subtype = Test;
+ TestPermissions = Disabled;
+
+ var
+ ShipmentMethod: Record "Shipment Method";
+ ShippingAgent: Record "Shipping Agent";
+ ShippingAgentServices: Record "Shipping Agent Services";
+ Shop: Record "Shpfy Shop";
+ LibraryInventory: Codeunit "Library - Inventory";
+ LibraryRandom: Codeunit "Library - Random";
+ LibraryAssert: Codeunit "Library Assert";
+ CommunicationMgt: Codeunit "Shpfy Communication Mgt.";
+ ShpfyInitializeTest: Codeunit "Shpfy Initialize Test";
+ OrdersAPISubscriber: Codeunit "Shpfy Orders API Subscriber";
+ IsInitialized: Boolean;
+
+ trigger OnRun()
+ begin
+ IsInitialized := false;
+ end;
+
+ #region Test Methods
+ [Test]
+ procedure UnitTestValidateShopifyOrderShippingAgentServiceMapping()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ Item: Record Item;
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ OrderMapping: Codeunit "Shpfy Order Mapping";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Creating a random Shopify order and try to map shipping agent and service data from the Shopify shipment method mapping.
+ Initialize();
+
+ // [GIVEN] Shopify Shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] Shopify order is imported
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ Item := ShpfyInitializeTest.GetDummyItem();
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::Item,
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ Item."No.",
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order mapping is done
+ OrderMapping.DoMapping(OrderHeader);
+
+ // [THEN] Order header is mapped with the correct shipping agent and service code
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", OrderHeader."Shipping Agent Code", 'Shipping Agent Code must be correct');
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", OrderHeader."Shipping Agent Service Code", 'Shipping Agent Service Code must be correct');
+ end;
+
+ [Test]
+ procedure UnitTestValidateSalesOrderShippingAgentServiceMapping()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ Item: Record Item;
+ SalesHeader: Record "Sales Header";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ ProcessOrder: Codeunit "Shpfy Process Order";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Creating Sales document from a Shopify order and try to map shipping agent and service data.
+ Initialize();
+
+ // [GIVEN] Shopify shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] Shopify order is imported
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ Item := ShpfyInitializeTest.GetDummyItem();
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::Item,
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ Item."No.",
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order is processed
+ ProcessOrder.Run(OrderHeader);
+
+ // [THEN] Sales document with correct shipping agent and service code is created.
+ AssertSalesHeaderValues(OrderHeader, SalesHeader, ShpfyShipmentMethodMapping);
+ end;
+
+ [Test]
+ procedure UnitTestMapShippingChargesForEmptyType()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ ProcessOrder: Codeunit "Shpfy Process Order";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is empty.
+ Initialize();
+
+ // [GIVEN] Shopify Shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] Shopify order is imported
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::" ",
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ LibraryRandom.RandText(20),
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order is processed
+ ProcessOrder.Run(OrderHeader);
+
+ // [THEN] Sales line is created with the correct shipping charges account information
+ AssertSalesLineValues(
+ OrderShippingCharges,
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::"G/L Account",
+ Shop."Shipping Charges Account"
+ );
+ end;
+
+ [Test]
+ procedure UnitTestMapShippingChargesForItemType()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ Item: Record Item;
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ ProcessOrder: Codeunit "Shpfy Process Order";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an item.
+ Initialize();
+
+ // [GIVEN] Shopify Shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] Shopify order is imported
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ Item := ShpfyInitializeTest.GetDummyItem();
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::Item,
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ Item."No.",
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order is processed
+ ProcessOrder.Run(OrderHeader);
+
+ // [THEN] Sales line is created with the correct shipping charges account information
+ AssertSalesLineValues(
+ OrderShippingCharges,
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::Item,
+ ShpfyShipmentMethodMapping."Shipping Charges No."
+ );
+ end;
+
+ [Test]
+ procedure UnitTestMapShippingChargesForGLType()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ GLAccount: Record "G/L Account";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ProcessOrder: Codeunit "Shpfy Process Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an gl account.
+ Initialize();
+
+ // [GIVEN] Shopify Shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] ShpfyImportOrder.ImportOrder
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ CreateGLAccount(GLAccount);
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::"G/L Account",
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ GLAccount."No.",
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order is processed
+ ProcessOrder.Run(OrderHeader);
+
+ // [THEN] Sales line is created with the correct shipping charges account information
+ AssertSalesLineValues(
+ OrderShippingCharges,
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::"G/L Account",
+ ShpfyShipmentMethodMapping."Shipping Charges No."
+ );
+ end;
+
+ [Test]
+ procedure UnitTestMapShippingChargesForItemChargeType()
+ var
+ OrderHeader: Record "Shpfy Order Header";
+ ItemCharge: Record "Item Charge";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ RefundGLAccount: Record "G/L Account";
+ ImportOrder: Codeunit "Shpfy Import Order";
+ ProcessOrder: Codeunit "Shpfy Process Order";
+ ShippingChargesType: Enum "Sales Line Type";
+ begin
+ // [SCENARIO] Create sales line from a Shopify order and try to map shipping charges account information when type is an item charge.
+ Initialize();
+
+ // [GIVEN] Shopify Shop
+ Shop := CommunicationMgt.GetShopRecord();
+
+ // [GIVEN] ShpfyImportOrder.ImportOrder
+ BindSubscription(OrdersAPISubscriber);
+ ImportOrder.SetShop(Shop.Code);
+ ImportShopifyOrder(Shop, OrderHeader, ImportOrder, false);
+ UnbindSubscription(OrdersAPISubscriber);
+
+ // [GIVEN] Order shipping charges are created for the Shopify order
+ CreateOrderShippingCharges(OrderShippingCharges, OrderHeader."Shopify Order Id");
+
+ // [GIVEN] Created Item Charge
+ RefundGLAccount.Get(Shop."Refund Account");
+ LibraryInventory.CreateItemCharge(ItemCharge);
+ ItemCharge.Validate("VAT Prod. Posting Group", RefundGLAccount."VAT Prod. Posting Group");
+ ItemCharge.Modify(true);
+
+ // [GIVEN] Created shopify shipment method mapping from the shipping charges
+ CreateShopifyShipmentMethodMapping(
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::"Charge (Item)",
+ ShipmentMethod.Code,
+ ShippingAgent.Code,
+ ShippingAgentServices.Code,
+ ItemCharge."No.",
+ OrderShippingCharges.Title
+ );
+
+ // [WHEN] Order is processed
+ ProcessOrder.Run(OrderHeader);
+
+ // [THEN] Sales line is created with the correct shipping charges account information
+ AssertSalesLineValues(
+ OrderShippingCharges,
+ ShpfyShipmentMethodMapping,
+ ShippingChargesType::"Charge (Item)",
+ ShpfyShipmentMethodMapping."Shipping Charges No."
+ );
+ end;
+ #endregion
+
+ #region Local Procedures
+ local procedure Initialize()
+ var
+ ShippingTime: DateFormula;
+ begin
+ if IsInitialized then
+ exit;
+
+ Codeunit.Run(Codeunit::"Shpfy Initialize Test");
+
+ Evaluate(ShippingTime, '<1W>');
+ CreateShipmentMethod(ShipmentMethod);
+ LibraryInventory.CreateShippingAgent(ShippingAgent);
+ LibraryInventory.CreateShippingAgentService(ShippingAgentServices, ShippingAgent.Code, ShippingTime);
+
+ Commit();
+
+ IsInitialized := true;
+ end;
+
+ local procedure CreateShopifyShipmentMethodMapping(
+ var ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ ShippingChargesType: Enum "Sales Line Type";
+ ShipmentMethodCode: Code[10];
+ ShippingAgentCode: Code[10];
+ ShippingAgentServiceCode: Code[10];
+ ShippingChargesNo: Code[20];
+ Name: Text[50]
+ )
+ begin
+ ShpfyShipmentMethodMapping.Init();
+ ShpfyShipmentMethodMapping."Shop Code" := Shop.Code;
+ ShpfyShipmentMethodMapping.Name := Name;
+ ShpfyShipmentMethodMapping."Shipment Method Code" := ShipmentMethodCode;
+ ShpfyShipmentMethodMapping."Shipping Charges Type" := ShippingChargesType;
+ ShpfyShipmentMethodMapping."Shipping Charges No." := ShippingChargesNo;
+ ShpfyShipmentMethodMapping."Shipping Agent Code" := ShippingAgentCode;
+ ShpfyShipmentMethodMapping."Shipping Agent Service Code" := ShippingAgentServiceCode;
+ ShpfyShipmentMethodMapping.Insert(true);
+ end;
+
+ local procedure CreateShipmentMethod(ShipmentMethod: Record "Shipment Method")
+ var
+ LibraryUtility: Codeunit "Library - Utility";
+ begin
+ ShipmentMethod.Init();
+ ShipmentMethod.Code := CopyStr(LibraryUtility.GenerateRandomText(MaxStrLen(ShipmentMethod.Code)), 1, MaxStrLen(ShipmentMethod.Code));
+ ShipmentMethod.Insert(true);
+ end;
+
+ local procedure ImportShopifyOrder(var Shop: Record "Shpfy Shop"; var OrderHeader: Record "Shpfy Order Header"; var OrdersToImport: Record "Shpfy Orders to Import"; var ImportOrder: Codeunit "Shpfy Import Order"; var JShopifyOrder: JsonObject; var JShopifyLineItems: JsonArray)
+ var
+ begin
+ ImportOrder.ImportCreateAndUpdateOrderHeaderFromMock(Shop.Code, OrdersToImport.Id, JShopifyOrder);
+ ImportOrder.ImportCreateAndUpdateOrderLinesFromMock(OrdersToImport.Id, JShopifyLineItems);
+ Commit();
+ OrderHeader.Get(OrdersToImport.Id);
+ end;
+
+ local procedure ImportShopifyOrder(var Shop: Record "Shpfy Shop"; var OrderHeader: Record "Shpfy Order Header"; var ImportOrder: Codeunit "Shpfy Import Order"; B2B: Boolean)
+ var
+ OrdersToImport: Record "Shpfy Orders to Import";
+ OrderHandlingHelper: Codeunit "Shpfy Order Handling Helper";
+ JShopifyLineItems: JsonArray;
+ JShopifyOrder: JsonObject;
+ begin
+ JShopifyOrder := OrderHandlingHelper.CreateShopifyOrderAsJson(Shop, OrdersToImport, JShopifyLineItems, B2B);
+ ImportShopifyOrder(Shop, OrderHeader, OrdersToImport, ImportOrder, JShopifyOrder, JShopifyLineItems);
+ end;
+
+ local procedure CreateOrderShippingCharges(var OrderShippingCharges: Record "Shpfy Order Shipping Charges"; ShopifyOrderId: BigInteger)
+ begin
+ OrderShippingCharges.Init();
+ OrderShippingCharges."Shopify Shipping Line Id" := LibraryRandom.RandInt(100000);
+ OrderShippingCharges."Shopify Order Id" := ShopifyOrderId;
+ OrderShippingCharges.Title := LibraryRandom.RandText(50);
+ OrderShippingCharges.Amount := LibraryRandom.RandDec(10, 0);
+ OrderShippingCharges.Insert(true);
+ end;
+
+ local procedure CreateGLAccount(var GLAccount: Record "G/L Account")
+ var
+ VATPostingSetup: Record "VAT Posting Setup";
+ LibraryERM: Codeunit "Library - ERM";
+ begin
+ LibraryERM.CreateVATPostingSetupWithAccounts(VATPostingSetup,
+ VATPostingSetup."VAT Calculation Type"::"Normal VAT", LibraryRandom.RandDecInDecimalRange(10, 25, 0));
+ GLAccount.Get(LibraryERM.CreateGLAccountWithVATPostingSetup(VATPostingSetup, Enum::"General Posting Type"::Sale));
+ GLAccount."Direct Posting" := true;
+
+ ShpfyInitializeTest.CreateVATPostingSetup(Shop."VAT Bus. Posting Group", GLAccount."VAT Prod. Posting Group");
+
+ GLAccount.Modify(false);
+ end;
+
+ local procedure AssertSalesLineValues(
+ OrderShippingCharges: Record "Shpfy Order Shipping Charges";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping";
+ SalesLineType: Enum "Sales Line Type";
+ ExpectedChargesAccountNo: Code[20]
+ )
+ var
+ SalesHeader: Record "Sales Header";
+ SalesLine: Record "Sales Line";
+ begin
+ SalesHeader.SetRange("Shpfy Order Id", OrderShippingCharges."Shopify Order Id");
+ LibraryAssert.IsTrue(SalesHeader.FindLast(), 'Sales document is not created from Shopify order');
+
+ SalesLine.SetRange("Document Type", SalesHeader."Document Type");
+ SalesLine.SetRange("Document No.", SalesHeader."No.");
+ SalesLine.SetRange(Type, SalesLineType);
+ SalesLine.SetRange(Description, OrderShippingCharges.Title);
+
+ LibraryAssert.IsTrue(SalesLine.FindLast(), 'Sales line is not created from Shopify order');
+ LibraryAssert.AreEqual(ExpectedChargesAccountNo, SalesLine."No.", 'Shipping Charges Account is not as expected');
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", SalesLine."Shipping Agent Code", 'Shipping Agent Code is not as expected');
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", SalesLine."Shipping Agent Service Code", 'Shipping Agent Service Code is not as expected');
+ end;
+
+ local procedure AssertSalesHeaderValues(
+ OrderHeader: Record "Shpfy Order Header";
+ SalesHeader: Record "Sales Header";
+ ShpfyShipmentMethodMapping: Record "Shpfy Shipment Method Mapping"
+ )
+ begin
+ SalesHeader.SetRange("Shpfy Order Id", OrderHeader."Shopify Order Id");
+ LibraryAssert.IsTrue(SalesHeader.FindLast(), 'Sales document is not created from Shopify order');
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Code", SalesHeader."Shipping Agent Code", 'Shipping Agent Code must be the same as in the shipment method mapping.');
+ LibraryAssert.AreEqual(ShpfyShipmentMethodMapping."Shipping Agent Service Code", SalesHeader."Shipping Agent Service Code", 'Shipping Agent Service Code must be the same as in the shipment method mapping.');
+ end;
+ #endregion
+}
\ No newline at end of file