#41266·magento2

[2.4.9] Fixed Product Tax is not added to invoice grand total for configurable variants

Author: DuckThomCreated Sep 15, 2026Updated Sep 18, 2026
LabelsIssue: needs updateReported on 2.4.9

Preconditions and environment

  • Magento version: 2.4.9
  • Area: GraphQL (other areas not tested)
  • Have configurable variants with a Fixed Product Tax

Steps to reproduce

  1. Add an FPT containing configurable variant to the cart
  2. Place the order
  3. Create invoice

Expected result

The FPT amount is added to the invoice's Grand Total

Actual result

Invoice totals:

Image

The FPT amount is listed in the admin panel, but the value is not included in the invoice's Grand Total. Creating a mismatch between the order's Grand Total and Paid Amount, creating a remaining Total Due that has actually been paid by the customer.

Order totals:

Image

As the orders API also returns this Total Due, this is causing a lot of headaches in the finance department of our client as in their system it looks like the customers are all paying too little even though in the PSP (Mollie), the correct amount was paid.

Additional information

It looks like the issue is coming from vendor/magento/module-weee/Model/Total/Invoice/Weee.php. The $orderItem used for all the getters in the foreach on line 70 is the configurable order item line instead of the variant. This causes getWeeeTaxAppliedRowAmount (and other getters) to return 0 since the configurable order item only contains weee_tax_applied_amount. Only the variant contains the other values, such as weee_tax_applied_row_amount and base_weee_tax_applied_row_amnt.

Adding the following code after the if statement on line 74 results in the correct invoice totals, however I cannot say for certain if this does not have any side effects:

php
if ($orderItem->getProductType() === \Magento\ConfigurableProduct\Model\Product\Type\Configurable::TYPE_CODE) {
    $children = $orderItem->getChildrenItems();

    if ($children) {
        $orderItem = reset($children);
    }
}
Image

Release note

No response

Triage and priority

  • Severity: S0 - Affects critical data or functionality and leaves users without workaround.
  • Severity: S1 - Affects critical data or functionality and forces users to employ a workaround.
  • Severity: S2 - Affects non-critical data or functionality and forces users to employ a workaround.
  • Severity: S3 - Affects non-critical data or functionality and does not force users to employ a workaround.
  • Severity: S4 - Affects aesthetics, professional look and feel, “quality” or “usability”.