magento2: Unable to Create Order with Grand Total = $0.00 in Magento Admin

Preconditions (*)

  1. Magento Version 2.3.4-p2
  2. Vertex is Enabled, configured, and tested to be working (Stores -> Configuration -> Sales -> Tax -> Vertex Settings)
  3. Simple product is created with price > $0.00
  4. A customer account exists
  5. The customer account has a saved address in a state that charges tax (ie. Minnesota, USA)

Steps to reproduce (*)

  1. In the Magento Admin, navigate to Sales -> Orders
  2. Click Create New Order
  3. Select an existing customer who has a saved address in a taxed state (ie. Minnesota, USA)
  4. Click Add Products
  5. Check the Select checkbox for a product and click the Add Selected Product(s) to Order button
  6. Check the Custom Price* check box for the added product
  7. Enter 0.00 in the Custom Price text box
  8. Click the Update Items and Quantities button

Expected result (*)

  1. image
  2. image
  3. No error message
  4. No tax applied on the order

Actual result (*)

  1. image
  2. An error response is thrown in the messages area
  3. Error thrown in var/log/system.log: [2020-06-17 16:32:58] main.CRITICAL: Exception message: Notice: Undefined index: product_and_shipping in /path/to/mage/install/vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php on line 782 Trace: <pre>#1 Magento\Tax\Model\Sales\Total\Quote\CommonTaxCollector->convertAppliedTaxes() called at [vendor/magento/module-tax/Model/Sales/Total/Quote/CommonTaxCollector.php:652] #2 Magento\Tax\Model\Sales\Total\Quote\CommonTaxCollector->processAppliedTaxes() called at [vendor/magento/module-tax/Model/Sales/Total/Quote/Tax.php:133] #3 Magento\Tax\Model\Sales\Total\Quote\Tax->collect() called at [vendor/magento/module-quote/Model/Quote/TotalsCollector.php:274] #4 Magento\Quote\Model\Quote\TotalsCollector->collectAddressTotals() called at [vendor/magento/module-quote/Model/Quote/TotalsCollector.php:148] #5 Magento\Quote\Model\Quote\TotalsCollector->collect() called at [vendor/magento/module-quote/Model/Quote.php:1995] #6 Magento\Quote\Model\Quote->collectTotals() called at [vendor/magento/module-sales/Model/AdminOrder/Create.php:459] #7 Magento\Sales\Model\AdminOrder\Create->saveQuote() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/Create.php:283] #8 Magento\Sales\Controller\Adminhtml\Order\Create->_processActionData() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/Create.php:142] #9 Magento\Sales\Controller\Adminhtml\Order\Create->_processData() called at [vendor/magento/module-sales/Controller/Adminhtml/Order/Create/LoadBlock.php:58] #10 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock->execute() called at [vendor/magento/framework/App/Action/Action.php:108] #11 Magento\Framework\App\Action\Action->dispatch() called at [vendor/magento/module-backend/App/AbstractAction.php:231] #12 Magento\Backend\App\AbstractAction->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58] #13 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138] #14 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/module-backend/App/Action/Plugin/Authentication.php:143] #15 Magento\Backend\App\Action\Plugin\Authentication->aroundDispatch() called at [vendor/magento/framework/Interception/Interceptor.php:135] #16 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153] #17 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock\Interceptor->___callPlugins() called at [generated/code/Magento/Sales/Controller/Adminhtml/Order/Create/LoadBlock/Interceptor.php:26] #18 Magento\Sales\Controller\Adminhtml\Order\Create\LoadBlock\Interceptor->dispatch() called at [vendor/magento/framework/App/FrontController.php:168] #19 Magento\Framework\App\FrontController->processRequest() called at [vendor/magento/framework/App/FrontController.php:101] #20 Magento\Framework\App\FrontController->dispatch() called at [vendor/magento/framework/Interception/Interceptor.php:58] #21 Magento\Framework\App\FrontController\Interceptor->___callParent() called at [vendor/magento/framework/Interception/Interceptor.php:138] #22 Magento\Framework\App\FrontController\Interceptor->Magento\Framework\Interception\{closure}() called at [vendor/magento/framework/Interception/Interceptor.php:153] #23 Magento\Framework\App\FrontController\Interceptor->___callPlugins() called at [generated/code/Magento/Framework/App/FrontController/Interceptor.php:26] #24 Magento\Framework\App\FrontController\Interceptor->dispatch() called at [vendor/magento/framework/App/Http.php:116] #25 Magento\Framework\App\Http->launch() called at [vendor/magento/framework/App/Bootstrap.php:261] #26 Magento\Framework\App\Bootstrap->run() called at [pub/index.php:40] </pre> [] []

Additional information

  • Tested both options of the Summarize Tax By setting - Product and Shipping and Jurisdiction

Stores -> Configuration -> Sales -> Tax -> Vertex Settings -> Summarize Tax by


Please provide Severity assessment for the Issue as Reporter. This information will help during Confirmation and Issue triage processes.

  • 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”.

About this issue

  • Original URL
  • State: closed
  • Created 4 years ago
  • Comments: 16 (8 by maintainers)

Most upvoted comments

Thank you for the support contact info.

I am configured for Custom price if available

mysql> SELECT * FROM core_config_data WHERE path LIKE '%apply_tax_on%';
+-----------+---------+----------+------------------------------+-------+---------------------+
| config_id | scope   | scope_id | path                         | value | updated_at          |
+-----------+---------+----------+------------------------------+-------+---------------------+
|       759 | default |        0 | tax/calculation/apply_tax_on | 0     | 2019-12-19 16:01:56 |
+-----------+---------+----------+------------------------------+-------+---------------------+
1 row in set (0.00 sec)

image