Product Charges & Fees#
Description#
Available in version 10.11.00, the Product Charges and Fees module allows you to configure additional charges or fees that automatically add to a customer’s basket when they select specific products. These charges or fees are represented as separate products and will display in the basket as “child” items linked to the main product, ensuring clarity for the customer.
Because these items are treated as standard products, they follow the same rules for tax code assignment and returns, ensuring that taxes and refunds are handled accurately without requiring manual adjustments.
Note
Product Charges & Fees will work with the wish list and manage quotes items
Common Use Cases#
This feature is particularly useful in scenarios like:
- Core Charges for Automotive Products: For example, purchasing an automotive battery may include a refundable core charge.
- Environmental Fees: A non-refundable recycling fee may also apply when buying certain products, such as car batteries.
Installation#
To begin using this feature, install the module by navigating to Settings > Modules and searching for Product Charges and Fees. Once installed, a productcharges
item and two fragments, product_display_productcharges
and group_productcharges
, will be created along with several new sections within the admin interface.
productcharges
Item#
The productcharges
item, when initialized, will load all charges linked to the current product residing in l.all_settings:product
and make tokens available for the charge and the linked product. The basic fields of the charge name, description, and price will be available.
product_display_productcharges
fragment#
This fragment has template code that will output productcharges:chargetypes
array items. Specifically the name
and amount
of each Product Charge/Fee that is assigned to the item. (The description will also be available within a tooltip.) This item needs the productcharges
assigned for it to include the productcharges:chargetypes
array. This fragment has been added to the Page: Product Display prod-product_display
template.
group_productcharges
fragment#
This fragment has template code that will output group:children
array items. Specifically the name
and amount
of each Product Charge/Fee that is assigned to the item. (The description will also be available within a tooltip.) This fragment has been added to the following templates within the Shadows framework:
- Page: Basket Contents
bask-basket
- Page: Invoice
invc-order_contents
- Page: Invoice
invc-printer_friendly_content
- Page: Order Status
ords-printer_friendly_content
- Page: Order Status
ords-view_order
- Template:
global-minibasket
- ReadyTheme Content Section: Checkout Basket Summary
Updated Admin Settings#
Catalog > Charges & Fees#
The Charges & Fees section is a batch list that displays all charges or fees set up within the system. Key fields here include Code, Name, Price, and Type.
From this screen, you can create new charges by selecting Add Charge Type.
Each charge has an Edit Charge screen that allows for configuration of pricing, taxability, description, and rules for payment and shipping, along with any tax module-specific rules if applicable. There are three available types including Core, Fee, or Other, these types are primarily for categorization. Additionally, this screen contains Products and Collections tabs for assigning products to the charge.
When assigning products to a charge, you have the option to override the charge price, making the assignment process a two-stage operation rather than a single toggle. Importantly, when a core charge price is overridden for a collection, only products not already assigned to the charge will have the price overwritten. If a product has been assigned to the charge through another collection or a manual assignment, it will be skipped during processing, avoiding duplicate charges. For server efficiency, only one collection can be assigned at a time due to the processing load with large collections. In the batch list, a new column called Overridden Charge Price will display for clarity, alongside the standard product fields.
Catalog > Edit Product#
In the Edit Product section, a new Charges & Fees tab appears for each product, listing all charges assigned to that product. Like in the main Charges & Fees section, assigning charges here is a two-step process, allowing you to override the price of each charge as needed.
Shadows Updates#
Basket Page#
- bask-basket.mvt (Coming Soon)
Product Page#
- prod-product_display.mvt (Coming Soon)
- prod-attributemachine.mvt (Coming Soon)
Invoice Page#
- invc-order_contents.mvt (Coming Soon)
- invc-printer_friendly_content.mvt (Coming Soon)
Order Stats Page#
- ords-view_order.mvt (Coming Soon)
- ords-printer_friendly_content.mvt (Coming Soon)
Global#
- global-header.mvt (Coming Soon)
- global_minibasket.mvt (Coming Soon)
Provisioning#
Provisioning available to add, update, delete, assign, and unassign (also from collections):
<ProductChargeType_Add>
<Type>core,fee,other</Type>
<Code>code</Code>
<Name>name</Name>
<Price>1.11</Price>
<Cost>2.22</Cost>
<Weight>3.33</Weight>
<Description>description</Description>
<Taxable>true|false</Taxable>
</ProductChargeType_Add>
<ProductChargeType_Update charge_code="existing">
<Type>core,fee,other</Type>
<Code>code</Code>
<Name>name</Name>
<Price>1.11</Price>
<Cost>2.22</Cost>
<Weight>3.33</Weight>
<Description>description</Description>
<Taxable>true|false</Taxable>
</ProductChargeType_Update>
<ProductChargeType_Delete charge_code="existing" />
<ProductChargeTypeProduct_Assign charge_code="charge" product_code="existing">
<!-- Optional -->
<OverridePrice>true|false</OverridePrice>
<Price>9.95</Price>
</ProductChargeTypeProduct_Assign>
<ProductChargeTypeProduct_Update charge_code="charge" product_code="existing">
<OverridePrice>false</OverridePrice>
<Price>0.00</Price>
</ProductChargeTypeProduct_Update>
<ProductChargeTypeProduct_Unassign charge_code="charge" product_code="existing" />
<ProductChargeTypeCollection_Assign charge_code="test" collection_code="collection">
<!-- Optional -->
<OverridePrice>true|false</OverridePrice>
<Price>9.95</Price>
</ProductChargeTypeCollection_Assign>
<ProductChargeTypeCollection_Update charge_code="test" collection_code="collection">
<OverridePrice>false</OverridePrice>
<Price>0.00</Price>
</ProductChargeTypeCollection_Update>
<ProductChargeTypeCollection_Unassign charge_code="test" collection_code="collection" />
Additional Notes#
Database Update#
This feature includes a database update which introduces a type
field to enhance product identification and item management. When type
is not specified or left blank, and a matching product exists (i.e., orderitem:product_id
is non-zero), the system will automatically assign a type
of product
. This ensures consistent handling of items linked to product codes.
The following functions now support an optional type
parameter:
BasketItem_Read
OrderItem_Read
QuoteItem_Read
Updated Item Structure#
The item structure has been revised to include additional fields. A new variable, parent_xxx_count
, now tracks the count of parent products, while each item record will include a :parent_id
field to identify parent-child relationships.
The following functions have been updated to incorporate parent_id
:
QuoteItem_Insert
OrderItem_Insert_LowLevel
WishListItem_Insert
BasketItem_Insert_LowLevel