From 7d25703124fe78b063be41a9f7e6d13a6177d969 Mon Sep 17 00:00:00 2001 From: Onat Buyukakkus <55088871+onbuyuka@users.noreply.github.com> Date: Wed, 25 Mar 2026 16:31:50 +0100 Subject: [PATCH 1/3] [Shopify] Fix UX issues from new features review - Update refund error message to mention "return order" alongside "credit memo" - Fix "Process Returns As" caption capitalization - Rename "Auto Create/Release Sales Orders" to "Sales Documents" with updated tooltips - Add number series validation when enabling "Use Shopify Order No." - Reorder fields in Order Synchronization section, make Currency Handling visible by default - Move "Use Shopify Order No." to Additional section on Shopify Order page - Move all field tooltips from Shop Card page to Shop table Fixes AB#626752 Co-Authored-By: Claude Opus 4.6 (1M context) --- .../App/src/Base/Pages/ShpfyShopCard.Page.al | 144 +++++------------- .../App/src/Base/Tables/ShpfyShop.Table.al | 100 ++++++++++-- .../Codeunits/ShpfyRefundsAPI.Codeunit.al | 2 +- .../Order handling/Pages/ShpfyOrder.Page.al | 11 +- .../ShpfyOrderRefundTest.Codeunit.al | 2 +- 5 files changed, 141 insertions(+), 118 deletions(-) diff --git a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al index fced256934..bf5d5fc59c 100644 --- a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al +++ b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al @@ -5,6 +5,8 @@ namespace Microsoft.Integration.Shopify; +using Microsoft.Foundation.NoSeries; +using Microsoft.Sales.Setup; using System.DateTime; using System.Telemetry; @@ -32,7 +34,6 @@ page 30101 "Shpfy Shop Card" { ApplicationArea = All; ShowMandatory = true; - ToolTip = 'Specifies a code to identify this Shopify Shop.'; AboutTitle = 'Name your shop'; AboutText = 'Give your shop a name that will make it easy to find in Business Central. For example, a name might reflect what a shop sells, such as Furniture or Coffee, or the country or region it serves.'; } @@ -41,7 +42,6 @@ page 30101 "Shpfy Shop Card" ApplicationArea = All; ShowMandatory = true; Importance = Promoted; - ToolTip = 'Specifies the URL of the Shopify Admin you are connecting to. Use the format: "https://{store ID}.myshopify.com". You can build the URL by combining the store ID from the admin URL, e.g., "admin.shopify.com/store/{store ID}" and ".myshopify.com". Simply copy the URL from the Shopify Admin, and the connector will convert it to the required format. Ensure you copy the URL from the Shopify Admin, not the online store, as the online store may display a redirect URL.'; AboutTitle = 'Get people to your shop'; AboutText = 'Provide the URL that people will use to access your shop. For example, *https://myshop.myshopify.com*.'; @@ -56,7 +56,6 @@ page 30101 "Shpfy Shop Card" ApplicationArea = All; ShowMandatory = true; Importance = Promoted; - ToolTip = 'Specifies if the service is enabled.'; AboutTitle = 'Ready to connect the shop'; AboutText = 'We just need the shop name and URL to connect it to Shopify. When you have checked all shop settings, enable the connection here.'; @@ -86,32 +85,26 @@ page 30101 "Shpfy Shop Card" { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies the currency of the Shopify Shop. Enter a currency code only if your online shop uses a different currency than the local currency (LCY). The specified currency must have exchange rates configured. If your online shop uses the same currency as Business Central, leave the field empty.'; } field(LanguageCode; Rec."Language Code") { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies the language of the Shopify Shop.'; } field(LoggingMode; Rec."Logging Mode") { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies whether the log is activated.'; } field(AllowBackgroudSyncs; Rec."Allow Background Syncs") { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies whether synchronization runs in the background. When enabled, you can continue working while large data sets synchronize. Disable for demos or troubleshooting to see real-time progress and receive detailed error messages.'; } field("Allow Outgoing Requests"; Rec."Allow Outgoing Requests") { ApplicationArea = All; Importance = Additional; - Caption = 'Allow Data Sync to Shopify'; - ToolTip = 'Specifies whether syncing data to Shopify is enabled.'; } field("Shopify Admin API Version"; ApiVersion) { @@ -139,107 +132,88 @@ page 30101 "Shpfy Shop Card" field(SyncItem; Rec."Sync Item") { ApplicationArea = All; - ToolTip = 'Specifies in which direction items are synchronized.'; Importance = Promoted; } field(AutoCreateUnknownItems; Rec."Auto Create Unknown Items") { ApplicationArea = All; - ToolTip = 'Specifies if unknown items are automatically created in D365BC when synchronizing from Shopify.'; } field(ShopifyCanUpdateItems; Rec."Shopify Can Update Items") { ApplicationArea = All; - ToolTip = 'Specifies whether Shopify can update items when synchronizing from Shopify.'; } field(CanUpdateShopifyProducts; Rec."Can Update Shopify Products") { ApplicationArea = All; - ToolTip = 'Specifies whether D365BC can update products when synchronizing to Shopify.'; Editable = Rec."Sync Item" = rec."Sync Item"::"To Shopify"; } field(ItemTemplCode; Rec."Item Templ. Code") { ApplicationArea = All; ShowMandatory = true; - ToolTip = 'Specifies which item template to use when creating unknown items.'; Editable = Rec."Auto Create Unknown Items"; } field(SyncItemImages; Rec."Sync Item Images") { ApplicationArea = All; - ToolTip = 'Specifies whether you want to synchronize item images and in which direction.'; } field(SyncItemExtendedText; Rec."Sync Item Extended Text") { ApplicationArea = All; - ToolTip = 'Specifies whether you want to synchronize extended texts to Shopify.'; } field(SyncItemMarketingText; Rec."Sync Item Marketing Text") { ApplicationArea = All; - ToolTip = 'Specifies whether you want to synchronize marketing texts to Shopify.'; } field(SyncItemAttributes; Rec."Sync Item Attributes") { ApplicationArea = All; - ToolTip = 'Specifies whether you want to synchronize item attributes to Shopify.'; } field(UOMAsVariant; Rec."UoM as Variant") { ApplicationArea = All; - ToolTip = 'Specifies if you want to have the different unit of measures as an variant in Shopify.'; Visible = false; } field(OptionNameForUOM; Rec."Option Name for UoM") { ApplicationArea = All; - ToolTip = 'Specifies the variant option name for the unit of measure.'; Visible = false; } field(VariantPrefix; Rec."Variant Prefix") { ApplicationArea = All; - ToolTip = 'Specifies the prefix for variants. The variants you have defined in Shopify are created in Business Central based on an increasing number.'; Editable = (Rec."SKU Mapping" = Rec."SKU Mapping"::"Variant Code") or (Rec."SKU Mapping" = Rec."SKU Mapping"::"Item No. + Variant Code"); } field(SKUType; Rec."SKU Mapping") { ApplicationArea = All; - ToolTip = 'Specifies if and based on what you want to create variants in D365BC.'; Importance = Promoted; } field(SKUFieldSeparator; Rec."SKU Field Separator") { ApplicationArea = All; - ToolTip = 'Specifies a field separator for the SKU if you use "Item. No + Variant Code" to create a variant.'; Editable = Rec."SKU Mapping" = Rec."SKU Mapping"::"Item No. + Variant Code"; } field(InventoryTracket; Rec."Inventory Tracked") { ApplicationArea = All; - ToolTip = 'Specifies if you want to manage your inventory in Shopify based on D365BC.'; } field(DefaultInventoryPolicy; Rec."Default Inventory Policy") { ApplicationArea = All; - ToolTip = 'Specifies if you want to prevent negative inventory. With "continue" the inventory can go negative, with "Deny" you want to prevent negative inventory.'; } field(CreateProductStatusValue; Rec."Status for Created Products") { ApplicationArea = All; - ToolTip = 'Specifies the status of a product in Shopify when an item is create in Shopify via the sync.'; } field(RemoveProductAction; Rec."Action for Removed Products") { ApplicationArea = All; - ToolTip = 'Specifies the status of a product in Shopify via the sync when an item is blocked or removed from the Shopify Product in Business Central.'; } #if not CLEAN26 field("Items Mapped to Products"; Rec."Items Mapped to Products") { ApplicationArea = All; - ToolTip = 'Specifies if only the items that are mapped to Shopify products/Shopify variants are synchronized from Posted Sales Invoices to Shopify.'; Visible = false; ObsoleteReason = 'This setting is not used.'; ObsoleteState = Pending; @@ -250,12 +224,10 @@ page 30101 "Shpfy Shop Card" { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies the weight unit of the Shopify Shop.'; } field("Product Metafields To Shopify"; Rec."Product Metafields To Shopify") { ApplicationArea = All; - ToolTip = 'Specifies whether product/variant metafields are synchronized to Shopify.'; } } group(PriceSynchronization) @@ -264,68 +236,57 @@ page 30101 "Shpfy Shop Card" field(CustomerPriceGroup; Rec."Customer Price Group") { ApplicationArea = All; - ToolTip = 'Specifies which Customer Price Group is used to calculate the prices in Shopify.'; Importance = Promoted; } field(CustomerDiscountGroup; Rec."Customer Discount Group") { ApplicationArea = All; - ToolTip = 'Specifies which Customer Discount Group is used to calculate the prices in Shopify.'; Importance = Promoted; } field("Prices Including VAT"; Rec."Prices Including VAT") { ApplicationArea = All; - ToolTip = 'Specifies if the prices calculate for Shopify are Including VAT.'; Importance = Additional; } field("Allow Line Disc."; Rec."Allow Line Disc.") { ApplicationArea = All; - ToolTip = 'Specifies if line discount is allowed while calculating prices for Shopify.'; Importance = Additional; } field("Gen. Bus. Posting Group"; Rec."Gen. Bus. Posting Group") { ApplicationArea = All; - ToolTip = 'Specifies which Gen. Bus. Posting Group is used to calculate the prices in Shopify.'; Importance = Additional; } field("VAT Bus. Posting Group"; Rec."VAT Bus. Posting Group") { ApplicationArea = All; - ToolTip = 'Specifies which VAT. Bus. Posting Group is used to calculate the prices in Shopify.'; Importance = Additional; Editable = Rec."Prices Including VAT"; } field("Customer Posting Group"; Rec."Customer Posting Group") { ApplicationArea = All; - ToolTip = 'Specifies which Customer Posting Group is used to calculate the prices in Shopify.'; Visible = false; } field("VAT Country/Region Code"; Rec."VAT Country/Region Code") { ApplicationArea = All; - ToolTip = 'Specifies which VAT Country/Region Code is used to calculate the prices in Shopify.'; Visible = false; } field("Tax Area Code"; Rec."Tax Area Code") { ApplicationArea = All; - ToolTip = 'Specifies which Tax Area Code is used to calculate the prices in Shopify.'; Visible = false; } field("Tax Liable"; Rec."Tax Liable") { ApplicationArea = All; - ToolTip = 'Specifies if Tax Liable is used to calculate the prices in Shopify.'; Visible = false; } field("Sync Prices"; Rec."Sync Prices") { ApplicationArea = All; - ToolTip = 'Specifies if prices are synchronized to Shopify with product sync.'; } } group(CustomerSync) @@ -336,67 +297,54 @@ page 30101 "Shpfy Shop Card" field(CustomerImportFromShopify; Rec."Customer Import From Shopify") { ApplicationArea = All; - ToolTip = 'Specifies how Shopify customers are synced to Business Central. If you choose none and there exists no mapping for that customer, the default customer will be used if exists.'; Importance = Promoted; } field(CustomerMappingType; Rec."Customer Mapping Type") { ApplicationArea = All; - ToolTip = 'Specifies how to map customers.'; } field(AutoCreateUnknownCustomers; Rec."Auto Create Unknown Customers") { ApplicationArea = All; - ToolTip = 'Specifies if unknown customers are automatically created in D365BC when synchronizing from Shopify.'; } field(CustomerTemplCode; Rec."Customer Templ. Code") { - Caption = 'Customer/Company Template Code'; - ToolTip = 'Specifies which customer template to use when creating unknown customers.'; ShowMandatory = true; ApplicationArea = All; } field(DefaultCustomer; Rec."Default Customer No.") { ApplicationArea = All; - ToolTip = 'Specifies the default customer when not creating a customer for each webshop user.'; Importance = Promoted; } field(ShopifyCanUpdateCustomer; Rec."Shopify Can Update Customer") { ApplicationArea = All; - ToolTip = 'Specifies whether Shopify can update customers when synchronizing from Shopify.'; } field(CanUpdateShopifyCustomer; Rec."Can Update Shopify Customer") { ApplicationArea = All; - ToolTip = 'Specifies whether D365BC can update customers when synchronizing to Shopify.'; } field(NameSource; Rec."Name Source") { ApplicationArea = All; - ToolTip = 'Specifies how to synchronize the name of the customer. If the value is empty then the value of Name 2 is taken, and Name 2 will be empty.'; } field(Name2Source; Rec."Name 2 Source") { ApplicationArea = All; - ToolTip = 'Specifies how to synchronize Name 2 of the customer.'; } field(ContactSource; Rec."Contact Source") { ApplicationArea = All; - ToolTip = 'Specifies how to synchronize the contact of the customer.'; } field(CountySource; Rec."County Source") { ApplicationArea = All; - ToolTip = 'Specifies how to synchronize the county of the customer/company.'; } field("Customer Metafields To Shopify"; Rec."Customer Metafields To Shopify") { ApplicationArea = All; - ToolTip = 'Specifies whether customer metafields are synchronized to Shopify.'; } } group("B2B Company Synchronization") @@ -405,53 +353,43 @@ page 30101 "Shpfy Shop Card" field("Company Import From Shopify"; Rec."Company Import From Shopify") { ApplicationArea = All; - ToolTip = 'Specifies how Shopify companies are synced to Business Central.'; Importance = Promoted; } field("Company Mapping Type"; Rec."Company Mapping Type") { ApplicationArea = All; - ToolTip = 'Specifies how to map companies.'; } field("Shpfy Comp. Tax Id Mapping"; Rec."Shpfy Comp. Tax Id Mapping") { ApplicationArea = All; - ToolTip = 'Specifies how to map Shopify Tax Id with Business Central.'; } field("Auto Create Unknown Companies"; Rec."Auto Create Unknown Companies") { ApplicationArea = All; - ToolTip = 'Specifies if unknown companies are automatically created in D365BC when synchronizing from Shopify.'; } field("Default Company No."; Rec."Default Company No.") { ApplicationArea = All; - ToolTip = 'Specifies the default customer when not creating a company for each B2B company.'; } field("Shopify Can Update Companies"; Rec."Shopify Can Update Companies") { ApplicationArea = All; - ToolTip = 'Specifies whether Shopify can update companies when synchronizing from Shopify.'; } field("Can Update Shopify Companies"; Rec."Can Update Shopify Companies") { ApplicationArea = All; - ToolTip = 'Specifies whether D365BC can update companies when synchronizing to Shopify.'; } field("Default Customer Permission"; Rec."Default Contact Permission") { ApplicationArea = All; - ToolTip = 'Specifies the default customer permission for new companies.'; } field("Auto Create Catalog"; Rec."Auto Create Catalog") { ApplicationArea = All; - ToolTip = 'Specifies whether a catalog is automatically created for new companies.'; } field("Company Metafields To Shopify"; Rec."Company Metafields To Shopify") { ApplicationArea = All; - ToolTip = 'Specifies whether company metafields are synchronized to Shopify.'; } } group(OrderProcessing) @@ -463,93 +401,102 @@ page 30101 "Shpfy Shop Card" { ApplicationArea = All; Editable = Rec.Enabled; - Caption = 'Auto Sync Orders'; - ToolTip = 'Specifies whether to automatically synchronize orders when they’re created in Shopify. Shopify will notify Business Central that orders are ready. Business Central will schedule the Sync Orders from Shopify job on the Job Queue Entries page. The user account of the person who turns on this toggle will be used to run the job. That user must have permission to create background tasks in the job queue.'; } field(SyncOrderJobQueueUser; Rec."Order Created Webhook User") { ApplicationArea = All; - Caption = 'Sync Order Job Queue User'; - ToolTip = 'Specifies the user who will run the Sync Orders from Shopify job on the Job Queue Entries page. This is the user who turned on the Auto Import Orders from Shopify toggle.'; } field(ShippingCostAccount; Rec."Shipping Charges Account") { ApplicationArea = All; ShowMandatory = true; - ToolTip = 'Specifies the G/L Account for posting the shipping cost.'; Importance = Promoted; } field(SoldGiftCardAccount; Rec."Sold Gift Card Account") { ApplicationArea = All; - ToolTip = 'Specifies the G/L Account for to post the sold gift card amounts.'; } field(TipAccount; Rec."Tip Account") { ApplicationArea = All; - ToolTip = 'Specifies the G/L Account for post the received tip amount.'; } field(CashRoundingsAccount; Rec."Cash Roundings Account") { ApplicationArea = All; - ToolTip = 'Specifies the general ledger account to use when you post cash rounding differences from Shopify POS transactions.'; - } - field(ShopifyOrderNoOnDocLine; Rec."Shopify Order No. on Doc. Line") - { - ApplicationArea = All; - ToolTip = 'Specifies whether the Shopify Order No. is shown in the document line.'; } field(AutoCreateOrders; Rec."Auto Create Orders") { - Caption = 'Auto Create Sales Orders'; ApplicationArea = All; - ToolTip = 'Specifies whether orders may be created automatically.'; } - field(AutoReleaseSalesOrders; Rec."Auto Release Sales Orders") + field("Create Invoices From Orders"; Rec."Create Invoices From Orders") { - Caption = 'Auto Release Sales Orders'; ApplicationArea = All; - ToolTip = 'Specifies if a Sales Order should be releases after creation'; } - field(TaxAreaSource; Rec."Tax Area Priority") + field(UseShopifyOrderNo; Rec."Use Shopify Order No.") { ApplicationArea = All; - ToolTip = 'Specifies the tax area source and the sequence to be followed.'; + + trigger OnValidate() + var + SalesReceivablesSetup: Record "Sales & Receivables Setup"; + NoSeries: Record "No. Series"; + ManualNosNotEnabledQst: Label 'The number series %1 does not have Manual Nos. enabled. Do you want to continue?', Comment = '%1 = No. Series Code'; + begin + if not Rec."Use Shopify Order No." then + exit; + + SalesReceivablesSetup.Get(); + + if NoSeries.Get(SalesReceivablesSetup."Order Nos.") then + if not NoSeries."Manual Nos." then + if Confirm(ManualNosNotEnabledQst, false, SalesReceivablesSetup."Order Nos.") then + exit + else begin + Rec."Use Shopify Order No." := false; + exit; + end; + + if Rec."Create Invoices From Orders" then + if NoSeries.Get(SalesReceivablesSetup."Invoice Nos.") then + if not NoSeries."Manual Nos." then + if not Confirm(ManualNosNotEnabledQst, false, SalesReceivablesSetup."Invoice Nos.") then begin + Rec."Use Shopify Order No." := false; + exit; + end; + end; } - field(SendShippingConfirmation; Rec."Send Shipping Confirmation") + field(ShopifyOrderNoOnDocLine; Rec."Shopify Order No. on Doc. Line") { ApplicationArea = All; - ToolTip = 'Specifies whether the customer is notified when the shipment is synchronized to Shopify.'; } field("Order Attributes To Shopify"; Rec."Order Attributes To Shopify") { ApplicationArea = All; - ToolTip = 'Specifies if Business Central document no. is synchronized to Shopify as order attribute.'; Enabled = Rec."Allow Outgoing Requests" or Rec."Order Attributes To Shopify"; } - field("Create Invoices From Orders"; Rec."Create Invoices From Orders") + field(TaxAreaSource; Rec."Tax Area Priority") { ApplicationArea = All; } - field(UseShopifyOrderNo; Rec."Use Shopify Order No.") + field("Currency Handling"; Rec."Currency Handling") + { + ApplicationArea = All; + } + field(AutoReleaseSalesOrders; Rec."Auto Release Sales Orders") { ApplicationArea = All; } field(ArchiveProcessOrders; Rec."Archive Processed Orders") { ApplicationArea = All; - ToolTip = 'Specifies whether Shopify orders are automatically archived when they are paid, fulfilled, and have associated sales documents with all lines shipped.'; } - field("Posted Invoice Sync"; Rec."Posted Invoice Sync") + field(SendShippingConfirmation; Rec."Send Shipping Confirmation") { ApplicationArea = All; - ToolTip = 'Specifies whether the posted sales invoices can be synchronized to Shopify.'; } - field("Currency Handling"; Rec."Currency Handling") + field("Posted Invoice Sync"; Rec."Posted Invoice Sync") { ApplicationArea = All; - ToolTip = 'Specifies which currency is used in Shopify orders processing. Using presentment currency may cause differences between amounts in LCY after posting documents.'; - Importance = Additional; } } group(ReturnsAndRefunds) @@ -560,8 +507,6 @@ page 30101 "Shpfy Shop Card" field("Return and Refund Process"; Rec."Return and Refund Process") { ApplicationArea = All; - Caption = 'Process Type'; - ToolTip = 'Specifies how returns and refunds from Shopify are handles in Business Central. The import process is always done within the import of a Shopify order.'; Importance = Promoted; trigger OnValidate() @@ -577,8 +522,6 @@ page 30101 "Shpfy Shop Card" field("Return Location Priority"; Rec."Return Location Priority") { ApplicationArea = All; - Caption = 'Return Location Priority'; - ToolTip = 'Specifies the priority of the return location.'; } field("Process Returns As"; Rec."Process Returns As") { @@ -587,7 +530,6 @@ page 30101 "Shpfy Shop Card" field("Location Code of Returns"; Rec."Return Location") { ApplicationArea = All; - ToolTip = 'Specifies location code for returned goods.'; trigger OnValidate() begin @@ -598,7 +540,6 @@ page 30101 "Shpfy Shop Card" field("G/L Account Instead of Item"; Rec."Refund Acc. non-restock Items") { ApplicationArea = All; - ToolTip = 'Specifies a G/L Account No. for goods where you don''t want to have an inventory correction.'; trigger OnValidate() begin @@ -608,7 +549,6 @@ page 30101 "Shpfy Shop Card" field("G/L Account for Amt. diff."; Rec."Refund Account") { ApplicationArea = All; - ToolTip = 'Specifies a G/L Account No. for the difference in the total refunded amount and the total amount of the items.'; trigger OnValidate() begin diff --git a/src/Apps/W1/Shopify/App/src/Base/Tables/ShpfyShop.Table.al b/src/Apps/W1/Shopify/App/src/Base/Tables/ShpfyShop.Table.al index 94933786f4..358d62d4d3 100644 --- a/src/Apps/W1/Shopify/App/src/Base/Tables/ShpfyShop.Table.al +++ b/src/Apps/W1/Shopify/App/src/Base/Tables/ShpfyShop.Table.al @@ -40,12 +40,14 @@ table 30102 "Shpfy Shop" field(1; "Code"; Code[20]) { Caption = 'Code'; + ToolTip = 'Specifies a code to identify this Shopify Shop.'; DataClassification = SystemMetadata; NotBlank = true; } field(2; "Shopify URL"; Text[250]) { Caption = 'Shopify Admin URL'; + ToolTip = 'Specifies the URL of the Shopify Admin you are connecting to. Use the format: "https://{store ID}.myshopify.com". You can build the URL by combining the store ID from the admin URL, e.g., "admin.shopify.com/store/{store ID}" and ".myshopify.com". Simply copy the URL from the Shopify Admin, and the connector will convert it to the required format. Ensure you copy the URL from the Shopify Admin, not the online store, as the online store may display a redirect URL.'; Access = Internal; DataClassification = SystemMetadata; ExtendedDatatype = URL; @@ -64,6 +66,7 @@ table 30102 "Shpfy Shop" field(3; Enabled; Boolean) { Caption = 'Enabled'; + ToolTip = 'Specifies if the service is enabled.'; trigger OnValidate() var @@ -97,6 +100,7 @@ table 30102 "Shpfy Shop" field(6; "Customer Price Group"; Code[10]) { Caption = 'Customer Price Group'; + ToolTip = 'Specifies which Customer Price Group is used to calculate the prices in Shopify.'; DataClassification = SystemMetadata; TableRelation = "Customer Price Group"; ValidateTableRelation = true; @@ -104,6 +108,7 @@ table 30102 "Shpfy Shop" field(7; "Customer Discount Group"; Code[20]) { Caption = 'Customer Discount Group'; + ToolTip = 'Specifies which Customer Discount Group is used to calculate the prices in Shopify.'; DataClassification = SystemMetadata; TableRelation = "Customer Discount Group"; ValidateTableRelation = true; @@ -111,6 +116,7 @@ table 30102 "Shpfy Shop" field(8; "Shipping Charges Account"; Code[20]) { Caption = 'Shipping Charges Account'; + ToolTip = 'Specifies the G/L Account for posting the shipping cost.'; DataClassification = SystemMetadata; TableRelation = "G/L Account"."No."; ValidateTableRelation = true; @@ -126,6 +132,7 @@ table 30102 "Shpfy Shop" field(9; "Language Code"; Code[10]) { Caption = 'Language Code'; + ToolTip = 'Specifies the language of the Shopify Shop.'; DataClassification = SystemMetadata; TableRelation = Language; ValidateTableRelation = true; @@ -133,6 +140,7 @@ table 30102 "Shpfy Shop" field(10; "Sync Item"; Option) { Caption = 'Sync Item'; + ToolTip = 'Specifies in which direction items are synchronized.'; DataClassification = SystemMetadata; OptionCaption = ' ,To Shopify,From Shopify'; OptionMembers = " ","To Shopify","From Shopify"; @@ -152,6 +160,7 @@ table 30102 "Shpfy Shop" field(12; "Sync Item Images"; Option) { Caption = 'Sync Item Images'; + ToolTip = 'Specifies whether you want to synchronize item images and in which direction.'; DataClassification = SystemMetadata; OptionCaption = 'Disabled,To Shopify,From Shopify'; OptionMembers = " ","To Shopify","From Shopify"; @@ -159,21 +168,25 @@ table 30102 "Shpfy Shop" field(13; "Sync Item Extended Text"; boolean) { Caption = 'Sync Item Extended Text'; + ToolTip = 'Specifies whether you want to synchronize extended texts to Shopify.'; DataClassification = SystemMetadata; } field(14; "Sync Item Attributes"; boolean) { Caption = 'Sync Item Attributes'; + ToolTip = 'Specifies whether you want to synchronize item attributes to Shopify.'; DataClassification = SystemMetadata; } field(15; "Sync Item Marketing Text"; Boolean) { Caption = 'Sync Item Marketing Text'; + ToolTip = 'Specifies whether you want to synchronize marketing texts to Shopify.'; DataClassification = SystemMetadata; } field(21; "Auto Create Orders"; Boolean) { - Caption = 'Auto Create Orders'; + Caption = 'Auto Create Sales Documents'; + ToolTip = 'Specifies whether sales documents, such as orders and invoices, will be created automatically after import.'; DataClassification = SystemMetadata; trigger OnValidate() var @@ -192,11 +205,13 @@ table 30102 "Shpfy Shop" field(22; "Auto Create Unknown Items"; Boolean) { Caption = 'Auto Create Unknown Items'; + ToolTip = 'Specifies if unknown items are automatically created in Business Central when synchronizing from Shopify.'; DataClassification = SystemMetadata; } field(23; "Auto Create Unknown Customers"; Boolean) { Caption = 'Auto Create Unknown Customers'; + ToolTip = 'Specifies if unknown customers are automatically created in Business Central when synchronizing from Shopify.'; DataClassification = SystemMetadata; } #if not CLEANSCHEMA25 @@ -221,11 +236,13 @@ table 30102 "Shpfy Shop" field(27; "Shopify Order No. on Doc. Line"; Boolean) { Caption = 'Shopify Order No. on Doc. Line'; + ToolTip = 'Specifies whether the Shopify Order No. is shown in the document line.'; DataClassification = CustomerContent; } field(28; "Customer Import From Shopify"; enum "Shpfy Customer Import Range") { Caption = 'Customer Import from Shopify'; + ToolTip = 'Specifies how Shopify customers are synced to Business Central. If you choose none and there exists no mapping for that customer, the default customer will be used if exists.'; DataClassification = CustomerContent; InitValue = WithOrderImport; } @@ -243,6 +260,7 @@ table 30102 "Shpfy Shop" field(30; "Shopify Can Update Customer"; Boolean) { Caption = 'Shopify Can Update Customers'; + ToolTip = 'Specifies whether Shopify can update customers when synchronizing from Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -255,6 +273,7 @@ table 30102 "Shpfy Shop" field(31; "Can Update Shopify Customer"; Boolean) { Caption = 'Can Update Shopify Customers'; + ToolTip = 'Specifies whether Business Central can update customers when synchronizing to Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -267,18 +286,21 @@ table 30102 "Shpfy Shop" field(32; "Name Source"; enum "Shpfy Name Source") { Caption = 'Name Source'; + ToolTip = 'Specifies how to synchronize the name of the customer. If the value is empty then the value of Name 2 is taken, and Name 2 will be empty.'; DataClassification = CustomerContent; InitValue = CompanyName; } field(33; "Name 2 Source"; enum "Shpfy Name Source") { Caption = 'Name 2 Source'; + ToolTip = 'Specifies how to synchronize Name 2 of the customer.'; DataClassification = CustomerContent; InitValue = FirstAndLastName; } field(34; "Contact Source"; enum "Shpfy Name Source") { Caption = 'Contact Source'; + ToolTip = 'Specifies how to synchronize the contact of the customer.'; DataClassification = CustomerContent; InitValue = FirstAndLastName; ValuesAllowed = FirstAndLastName, LastAndFirstName, None; @@ -286,18 +308,21 @@ table 30102 "Shpfy Shop" field(35; "County Source"; enum "Shpfy County Source") { Caption = 'County Source'; + ToolTip = 'Specifies how to synchronize the county of the customer/company.'; DataClassification = CustomerContent; InitValue = Code; } field(36; "Default Customer No."; Code[20]) { Caption = 'Default Customer No.'; + ToolTip = 'Specifies the default customer when not creating a customer for each webshop user.'; DataClassification = CustomerContent; TableRelation = Customer; } field(37; "UoM as Variant"; Boolean) { Caption = 'UoM as Variant'; + ToolTip = 'Specifies if you want to have the different unit of measures as an variant in Shopify.'; DataClassification = CustomerContent; trigger OnValidate() @@ -312,6 +337,7 @@ table 30102 "Shpfy Shop" field(38; "Option Name for UoM"; Text[50]) { Caption = 'Variant Option Name for UoM'; + ToolTip = 'Specifies the variant option name for the unit of measure.'; DataClassification = CustomerContent; trigger OnValidate() @@ -323,6 +349,7 @@ table 30102 "Shpfy Shop" field(39; "Shopify Can Update Items"; Boolean) { Caption = 'Shopify Can Update Items'; + ToolTip = 'Specifies whether Shopify can update items when synchronizing from Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -335,6 +362,7 @@ table 30102 "Shpfy Shop" field(40; "Can Update Shopify Products"; Boolean) { Caption = 'Can Update Shopify Products'; + ToolTip = 'Specifies whether Business Central can update products when synchronizing to Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -347,29 +375,34 @@ table 30102 "Shpfy Shop" field(41; "Variant Prefix"; Code[5]) { Caption = 'Variant Prefix'; + ToolTip = 'Specifies the prefix for variants. The variants you have defined in Shopify are created in Business Central based on an increasing number.'; DataClassification = CustomerContent; InitValue = 'V_'; } field(42; "Inventory Tracked"; Boolean) { Caption = 'Inventory Tracked'; + ToolTip = 'Specifies if you want to manage your inventory in Shopify based on Business Central.'; DataClassification = CustomerContent; } field(43; "Default Inventory Policy"; Enum "Shpfy Inventory Policy") { Caption = 'Default Inventory Policy'; + ToolTip = 'Specifies if you want to prevent negative inventory. With "continue" the inventory can go negative, with "Deny" you want to prevent negative inventory.'; DataClassification = CustomerContent; InitValue = CONTINUE; } field(44; "Allow Background Syncs"; Boolean) { Caption = 'Run Syncs in Background'; + ToolTip = 'Specifies whether synchronization runs in the background. When enabled, you can continue working while large data sets synchronize. Disable for demos or troubleshooting to see real-time progress and receive detailed error messages.'; DataClassification = CustomerContent; InitValue = true; } field(47; "Tip Account"; Code[20]) { Caption = 'Tip Account'; + ToolTip = 'Specifies the G/L Account for post the received tip amount.'; DataClassification = SystemMetadata; TableRelation = "G/L Account"."No."; ValidateTableRelation = true; @@ -385,6 +418,7 @@ table 30102 "Shpfy Shop" field(48; "Sold Gift Card Account"; Code[20]) { Caption = 'Sold Gift Card Account'; + ToolTip = 'Specifies the G/L Account for to post the sold gift card amounts.'; DataClassification = SystemMetadata; TableRelation = "G/L Account"."No."; ValidateTableRelation = true; @@ -400,21 +434,25 @@ table 30102 "Shpfy Shop" field(49; "Customer Mapping Type"; enum "Shpfy Customer Mapping") { Caption = 'Customer Mapping Type'; + ToolTip = 'Specifies how to map customers.'; DataClassification = CustomerContent; } field(50; "Status for Created Products"; Enum "Shpfy Cr. Prod. Status Value") { Caption = 'Status for Created Products'; + ToolTip = 'Specifies the status of a product in Shopify when an item is create in Shopify via the sync.'; DataClassification = CustomerContent; } field(51; "Action for Removed Products"; Enum "Shpfy Remove Product Action") { Caption = 'Action for Removed Products and Blocked Items'; + ToolTip = 'Specifies the status of a product in Shopify via the sync when an item is blocked or removed from the Shopify Product in Business Central.'; DataClassification = CustomerContent; } field(52; "Currency Code"; Code[10]) { Caption = 'Currency Code'; + ToolTip = 'Specifies the currency of the Shopify Shop. Enter a currency code only if your online shop uses a different currency than the local currency (LCY). The specified currency must have exchange rates configured. If your online shop uses the same currency as Business Central, leave the field empty.'; DataClassification = CustomerContent; TableRelation = Currency.Code; @@ -432,57 +470,67 @@ table 30102 "Shpfy Shop" field(53; "Gen. Bus. Posting Group"; Code[20]) { Caption = 'Gen. Bus. Posting Group'; + ToolTip = 'Specifies which Gen. Bus. Posting Group is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; TableRelation = "Gen. Business Posting Group"; } field(54; "VAT Bus. Posting Group"; Code[20]) { Caption = 'VAT Bus. Posting Group'; + ToolTip = 'Specifies which VAT. Bus. Posting Group is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; TableRelation = "VAT Business Posting Group"; } field(55; "Tax Area Code"; Code[20]) { Caption = 'Tax Area Code'; + ToolTip = 'Specifies which Tax Area Code is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; TableRelation = "Tax Area"; } field(56; "Tax Liable"; Boolean) { Caption = 'Tax Liable'; + ToolTip = 'Specifies if Tax Liable is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; } field(57; "VAT Country/Region Code"; Code[10]) { Caption = 'VAT Country/Region Code'; + ToolTip = 'Specifies which VAT Country/Region Code is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; TableRelation = "Country/Region"; } field(58; "Customer Posting Group"; Code[20]) { Caption = 'Customer Posting Group'; + ToolTip = 'Specifies which Customer Posting Group is used to calculate the prices in Shopify.'; DataClassification = CustomerContent; TableRelation = "Customer Posting Group"; } field(59; "Prices Including VAT"; Boolean) { Caption = 'Prices Including VAT'; + ToolTip = 'Specifies if the prices calculate for Shopify are Including VAT.'; DataClassification = CustomerContent; } field(60; "Auto Release Sales Orders"; Boolean) { - Caption = 'Auto Release Sales Orders'; + Caption = 'Auto Release Sales Documents'; + ToolTip = 'Specifies if a sales document, such as order or invoice, should be released after creation.'; DataClassification = CustomerContent; InitValue = true; } field(61; "Allow Line Disc."; Boolean) { Caption = 'Allow Line Disc.'; + ToolTip = 'Specifies if line discount is allowed while calculating prices for Shopify.'; DataClassification = CustomerContent; } field(62; "Customer Templ. Code"; Code[20]) { - Caption = 'Customer Template Code'; + Caption = 'Customer/Company Template Code'; + ToolTip = 'Specifies which customer template to use when creating unknown customers.'; DataClassification = SystemMetadata; TableRelation = "Customer Templ.".Code; ValidateTableRelation = true; @@ -490,13 +538,15 @@ table 30102 "Shpfy Shop" field(63; "Item Templ. Code"; Code[20]) { Caption = 'Item Template Code'; + ToolTip = 'Specifies which item template to use when creating unknown items.'; DataClassification = SystemMetadata; TableRelation = "Item Templ.".Code; ValidateTableRelation = true; } field(70; "Return and Refund Process"; Enum "Shpfy ReturnRefund ProcessType") { - Caption = 'Return and Refund Process'; + Caption = 'Process Type'; + ToolTip = 'Specifies how returns and refunds from Shopify are handles in Business Central. The import process is always done within the import of a Shopify order.'; DataClassification = CustomerContent; InitValue = "Import Only"; @@ -518,12 +568,14 @@ table 30102 "Shpfy Shop" field(73; "Return Location"; Code[10]) { Caption = 'Default Return Location'; + ToolTip = 'Specifies location code for returned goods.'; DataClassification = CustomerContent; TableRelation = Location where("Use As In-Transit" = const(false)); } field(75; "Refund Acc. non-restock Items"; Code[20]) { Caption = 'Refund Account non-restock Items'; + ToolTip = 'Specifies a G/L Account No. for goods where you don''t want to have an inventory correction.'; DataClassification = CustomerContent; TableRelation = "G/L Account"."No."; @@ -538,6 +590,7 @@ table 30102 "Shpfy Shop" field(76; "Refund Account"; Code[20]) { Caption = 'Refund Account'; + ToolTip = 'Specifies a G/L Account No. for the difference in the total refunded amount and the total amount of the items.'; DataClassification = CustomerContent; TableRelation = "G/L Account"."No."; @@ -554,30 +607,35 @@ table 30102 "Shpfy Shop" #pragma warning restore AS0004 { Caption = 'SKU Mapping'; + ToolTip = 'Specifies if and based on what you want to create variants in Business Central.'; DataClassification = SystemMetadata; } field(105; "SKU Field Separator"; Code[10]) { Caption = 'SKU Field Separator'; + ToolTip = 'Specifies a field separator for the SKU if you use "Item. No + Variant Code" to create a variant.'; DataClassification = SystemMetadata; InitValue = '|'; } field(106; "Tax Area Priority"; Enum "Shpfy Tax By") { Caption = 'Tax Area Priority'; + ToolTip = 'Specifies the tax area source and the sequence to be followed.'; DataClassification = CustomerContent; Description = 'Choose in which order the system try to find the county for the tax area.'; } field(107; "Allow Outgoing Requests"; Boolean) { - Caption = 'Allow Outgoing Requests'; + Caption = 'Allow Data Sync to Shopify'; + ToolTip = 'Specifies whether syncing data to Shopify is enabled.'; DataClassification = SystemMetadata; InitValue = true; } field(108; "Order Created Webhooks"; Boolean) { - Caption = 'Order Created Webhooks'; + Caption = 'Auto Sync Orders'; + ToolTip = 'Specifies whether to automatically synchronize orders when they''re created in Shopify. Shopify will notify Business Central that orders are ready. Business Central will schedule the Sync Orders from Shopify job on the Job Queue Entries page. The user account of the person who turns on this toggle will be used to run the job. That user must have permission to create background tasks in the job queue.'; DataClassification = SystemMetadata; trigger OnValidate() @@ -592,7 +650,8 @@ table 30102 "Shpfy Shop" } field(109; "Order Created Webhook User"; Code[50]) { - Caption = 'Order Created Webhook User'; + Caption = 'Sync Order Job Queue User'; + ToolTip = 'Specifies the user who will run the Sync Orders from Shopify job on the Job Queue Entries page. This is the user who turned on the Auto Import Orders from Shopify toggle.'; DataClassification = EndUserIdentifiableInformation; Editable = false; TableRelation = User."User Name"; @@ -627,6 +686,7 @@ table 30102 "Shpfy Shop" field(113; "Logging Mode"; Enum "Shpfy Logging Mode") { Caption = 'Logging Mode'; + ToolTip = 'Specifies whether the log is activated.'; DataClassification = SystemMetadata; trigger OnValidate() @@ -651,6 +711,7 @@ table 30102 "Shpfy Shop" field(116; "Sync Prices"; Boolean) { Caption = 'Sync Prices with Products'; + ToolTip = 'Specifies if prices are synchronized to Shopify with product sync.'; DataClassification = SystemMetadata; InitValue = true; } @@ -662,6 +723,7 @@ table 30102 "Shpfy Shop" field(118; "Can Update Shopify Companies"; Boolean) { Caption = 'Can Update Shopify Companies'; + ToolTip = 'Specifies whether Business Central can update companies when synchronizing to Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -674,23 +736,27 @@ table 30102 "Shpfy Shop" field(119; "Default Contact Permission"; Enum "Shpfy Default Cont. Permission") { Caption = 'Default Contact Permission'; + ToolTip = 'Specifies the default customer permission for new companies.'; DataClassification = CustomerContent; InitValue = "Ordering Only"; } field(120; "Auto Create Catalog"; Boolean) { Caption = 'Auto Create Catalog'; + ToolTip = 'Specifies whether a catalog is automatically created for new companies.'; DataClassification = CustomerContent; } field(121; "Company Import From Shopify"; Enum "Shpfy Company Import Range") { Caption = 'Company Import from Shopify'; + ToolTip = 'Specifies how Shopify companies are synced to Business Central.'; DataClassification = CustomerContent; InitValue = WithOrderImport; } field(122; "Shopify Can Update Companies"; Boolean) { Caption = 'Shopify Can Update Companies'; + ToolTip = 'Specifies whether Shopify can update companies when synchronizing from Shopify.'; DataClassification = CustomerContent; InitValue = false; @@ -703,23 +769,27 @@ table 30102 "Shpfy Shop" field(123; "Auto Create Unknown Companies"; Boolean) { Caption = 'Auto Create Unknown Companies'; + ToolTip = 'Specifies if unknown companies are automatically created in Business Central when synchronizing from Shopify.'; DataClassification = CustomerContent; } field(124; "Send Shipping Confirmation"; Boolean) { Caption = 'Send Shipping Confirmation'; + ToolTip = 'Specifies whether the customer is notified when the shipment is synchronized to Shopify.'; DataClassification = CustomerContent; InitValue = true; } field(125; "Default Company No."; Code[20]) { Caption = 'Default Company No.'; + ToolTip = 'Specifies the default customer when not creating a company for each B2B company.'; DataClassification = CustomerContent; TableRelation = Customer; } field(126; "Company Mapping Type"; Enum "Shpfy Company Mapping") { Caption = 'Company Mapping Type'; + ToolTip = 'Specifies how to map companies.'; DataClassification = CustomerContent; } #if not CLEANSCHEMA27 @@ -736,55 +806,63 @@ table 30102 "Shpfy Shop" field(128; "Return Location Priority"; Enum "Shpfy Return Location Priority") { Caption = 'Return Location Priority'; + ToolTip = 'Specifies the priority of the return location.'; DataClassification = CustomerContent; } field(129; "Weight Unit"; Enum "Shpfy Weight Unit") { Caption = 'Weight Unit'; + ToolTip = 'Specifies the weight unit of the Shopify Shop.'; DataClassification = CustomerContent; } field(130; "Product Metafields To Shopify"; Boolean) { Caption = 'Sync Product/Variant Metafields to Shopify'; + ToolTip = 'Specifies whether product/variant metafields are synchronized to Shopify.'; DataClassification = SystemMetadata; InitValue = true; } field(131; "Customer Metafields To Shopify"; Boolean) { Caption = 'Sync Customer Metafields'; + ToolTip = 'Specifies whether customer metafields are synchronized to Shopify.'; DataClassification = SystemMetadata; InitValue = true; } field(132; "Company Metafields To Shopify"; Boolean) { Caption = 'Sync Company Metafields'; + ToolTip = 'Specifies whether company metafields are synchronized to Shopify.'; DataClassification = SystemMetadata; InitValue = true; } field(133; "Order Attributes To Shopify"; Boolean) { Caption = 'Sync Business Central Doc. No. as Attribute'; + ToolTip = 'Specifies if Business Central document no. is synchronized to Shopify as order attribute.'; DataClassification = SystemMetadata; InitValue = true; } field(134; "Shpfy Comp. Tax Id Mapping"; Enum "Shpfy Comp. Tax Id Mapping") { Caption = 'Company Tax Id Mapping'; + ToolTip = 'Specifies how to map Shopify Tax Id with Business Central.'; DataClassification = CustomerContent; } field(135; "Currency Handling"; Enum "Shpfy Currency Handling") { Caption = 'Currency Handling'; + ToolTip = 'Specifies which currency is used in Shopify orders processing. Using presentment currency may cause differences between amounts in LCY after posting documents.'; InitValue = "Shop Currency"; } field(136; "Use Shopify Order No."; Boolean) { Caption = 'Use Shopify Order No.'; - ToolTip = 'Specifies whether the Shopify order number is used as the document number on the created Sales Order or Sales Invoice. The number series must have Allow Manual Nos. enabled.'; + ToolTip = 'Specifies whether the Shopify order number is used as the document number on the created Sales Order or Sales Invoice. You can overwrite the selection for the specific Shopify Order.'; } field(137; "Process Returns As"; Enum "Sales Document Type") { - Caption = 'Process Returns As'; + Caption = 'Process Returns as'; ToolTip = 'Specifies what type of document to create when processing returns. Credit Memo creates a sales credit memo. Return Order creates a sales return order.'; DataClassification = CustomerContent; ValuesAllowed = "Credit Memo", "Return Order"; @@ -798,6 +876,7 @@ table 30102 "Shpfy Shop" field(201; "Items Mapped to Products"; Boolean) { Caption = 'Items Must be Mapped to Products'; + ToolTip = 'Specifies if only the items that are mapped to Shopify products/Shopify variants are synchronized from Posted Sales Invoices to Shopify.'; ObsoleteReason = 'This setting is not used'; #if not CLEAN26 ObsoleteState = Pending; @@ -811,15 +890,18 @@ table 30102 "Shpfy Shop" field(202; "Posted Invoice Sync"; Boolean) { Caption = 'Posted Invoice Sync'; + ToolTip = 'Specifies whether the posted sales invoices can be synchronized to Shopify.'; } field(203; "Cash Roundings Account"; Code[20]) { Caption = 'Cash Roundings Account'; + ToolTip = 'Specifies the general ledger account to use when you post cash rounding differences from Shopify POS transactions.'; TableRelation = "G/L Account"."No."; } field(204; "Archive Processed Orders"; Boolean) { Caption = 'Archive Processed Shopify Orders'; + ToolTip = 'Specifies whether Shopify orders are automatically archived when they are paid, fulfilled, and have associated sales documents with all lines shipped.'; InitValue = true; } field(205; "Create Invoices From Orders"; Boolean) diff --git a/src/Apps/W1/Shopify/App/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al b/src/Apps/W1/Shopify/App/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al index 0a8477eafb..297158a246 100644 --- a/src/Apps/W1/Shopify/App/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al +++ b/src/Apps/W1/Shopify/App/src/Order Refunds/Codeunits/ShpfyRefundsAPI.Codeunit.al @@ -11,7 +11,7 @@ codeunit 30228 "Shpfy Refunds API" CommunicationMgt: Codeunit "Shpfy Communication Mgt."; JsonHelper: Codeunit "Shpfy Json Helper"; RefundEnumConvertor: Codeunit "Shpfy Refund Enum Convertor"; - RefundCantCreateCreditMemoErr: Label 'This refund cannot be used to create a credit memo because it has already been considered during order import and reduced the quantity and amounts of the order. Only refunds with a non-zero refunded amount and related to real item returns can be used to create credit memos.'; + RefundCantCreateCreditMemoErr: Label 'This refund cannot be used to create a credit memo or return order because it has already been considered during order import and reduced the quantity and amounts of the order. Only refunds with a non-zero refunded amount and related to real item returns can be used to create credit memos or return orders.'; internal procedure GetRefunds(JRefunds: JsonArray) var diff --git a/src/Apps/W1/Shopify/App/src/Order handling/Pages/ShpfyOrder.Page.al b/src/Apps/W1/Shopify/App/src/Order handling/Pages/ShpfyOrder.Page.al index ac162b0bcf..1a257bea95 100644 --- a/src/Apps/W1/Shopify/App/src/Order handling/Pages/ShpfyOrder.Page.al +++ b/src/Apps/W1/Shopify/App/src/Order handling/Pages/ShpfyOrder.Page.al @@ -95,11 +95,6 @@ page 30113 "Shpfy Order" ApplicationArea = All; ToolTip = 'Specifies the purchase order number that is associated with the Shopify order.'; } - field(UseShopifyOrderNo; Rec."Use Shopify Order No.") - { - ApplicationArea = All; - Editable = not Rec.Processed; - } field(Closed; Rec.Closed) { ApplicationArea = All; @@ -237,6 +232,12 @@ page 30113 "Shpfy Order" Importance = Additional; ToolTip = 'Specifies whether the order has had any edits applied.'; } + field(UseShopifyOrderNo; Rec."Use Shopify Order No.") + { + ApplicationArea = All; + Importance = Additional; + Editable = not Rec.Processed; + } field(Processed; Rec.Processed) { ApplicationArea = All; diff --git a/src/Apps/W1/Shopify/Test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al b/src/Apps/W1/Shopify/Test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al index 2bd55fc73f..e2b4fdd0ab 100644 --- a/src/Apps/W1/Shopify/Test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al +++ b/src/Apps/W1/Shopify/Test/Order Refunds/ShpfyOrderRefundTest.Codeunit.al @@ -170,7 +170,7 @@ codeunit 139611 "Shpfy Order Refund Test" asserterror RefundsAPI.VerifyRefundCanCreateCreditMemo(RefundId4); // [THEN] Only RefundId3 throws an error - LibraryAssert.ExpectedError('This refund cannot be used to create a credit memo because it has already been considered during order import and reduced the quantity and amounts of the order. Only refunds with a non-zero refunded amount and related to real item returns can be used to create credit memos.'); + LibraryAssert.ExpectedError('This refund cannot be used to create a credit memo or return order because it has already been considered during order import and reduced the quantity and amounts of the order. Only refunds with a non-zero refunded amount and related to real item returns can be used to create credit memos or return orders.'); end; [Test] From b108d2b931b76f845bcacb0257b5a80b6225ef00 Mon Sep 17 00:00:00 2001 From: Onat Buyukakkus <55088871+onbuyuka@users.noreply.github.com> Date: Thu, 26 Mar 2026 08:45:56 +0100 Subject: [PATCH 2/3] Remove ToolTips re-added by merge from main ToolTips were moved from the page to the shop table in this branch. The merge from main re-introduced them; drop them along with the unused Microsoft.Foundation.Company using directive. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al index 97f2f95fd0..20186c6c08 100644 --- a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al +++ b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al @@ -5,7 +5,6 @@ namespace Microsoft.Integration.Shopify; -using Microsoft.Foundation.Company; using Microsoft.Foundation.NoSeries; using Microsoft.Sales.Setup; using System.DateTime; @@ -97,13 +96,11 @@ page 30101 "Shpfy Shop Card" { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies whether the log is activated.'; } field(AllowBackgroudSyncs; Rec."Allow Background Syncs") { ApplicationArea = All; Importance = Additional; - ToolTip = 'Specifies whether synchronization runs in the background. When enabled, you can continue working while large data sets synchronize. Disable for demos or troubleshooting to see real-time progress and receive detailed error messages.'; } field("Allow Outgoing Requests"; Rec."Allow Outgoing Requests") { From f88689e3b7f68335b927d01b5978cddf3d4402b3 Mon Sep 17 00:00:00 2001 From: Onat Buyukakkus <55088871+onbuyuka@users.noreply.github.com> Date: Thu, 26 Mar 2026 08:46:54 +0100 Subject: [PATCH 3/3] Restore using Microsoft.Foundation.Company directive Co-Authored-By: Claude Opus 4.6 (1M context) --- src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al index 20186c6c08..dde854320c 100644 --- a/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al +++ b/src/Apps/W1/Shopify/App/src/Base/Pages/ShpfyShopCard.Page.al @@ -5,6 +5,7 @@ namespace Microsoft.Integration.Shopify; +using Microsoft.Foundation.Company; using Microsoft.Foundation.NoSeries; using Microsoft.Sales.Setup; using System.DateTime;