diff --git a/vendor/magento/module-sales/Model/Order/Webapi/ChangeOutputArray.php b/vendor/magento/module-sales/Model/Order/Webapi/ChangeOutputArray.php index 38728d88ff4..9fd47a43d4d 100644 --- a/vendor/magento/module-sales/Model/Order/Webapi/ChangeOutputArray.php +++ b/vendor/magento/module-sales/Model/Order/Webapi/ChangeOutputArray.php @@ -49,15 +49,30 @@ class ChangeOutputArray OrderItemInterface $dataObject, array $result ): array { - $result[OrderItemInterface::ROW_TOTAL] = $this->priceRenderer->getTotalAmount($dataObject); - $result[OrderItemInterface::BASE_ROW_TOTAL] = $this->priceRenderer->getBaseTotalAmount($dataObject); - $result[OrderItemInterface::ROW_TOTAL_INCL_TAX] = $this->defaultRenderer->getTotalAmount($dataObject); - $result[OrderItemInterface::BASE_ROW_TOTAL_INCL_TAX] = $dataObject->getBaseRowTotal() + $result[OrderItemInterface::ROW_TOTAL] = $this->round($this->priceRenderer->getTotalAmount($dataObject)); + $result[OrderItemInterface::BASE_ROW_TOTAL] = $this->round( + $this->priceRenderer->getBaseTotalAmount($dataObject) + ); + $result[OrderItemInterface::ROW_TOTAL_INCL_TAX] = $this->round( + $this->defaultRenderer->getTotalAmount($dataObject) + ); + $result[OrderItemInterface::BASE_ROW_TOTAL_INCL_TAX] = $this->round($dataObject->getBaseRowTotal() + $dataObject->getBaseTaxAmount() + $dataObject->getBaseDiscountTaxCompensationAmount() + $dataObject->getBaseWeeeTaxAppliedAmount() - - $dataObject->getBaseDiscountAmount(); + - $dataObject->getBaseDiscountAmount()); return $result; } + + /** + * Remove negative values from row totals + * + * @param float $value + * @return float + */ + private function round(float $value): float + { + return (float) max($value, 0); + } }