[-] BO: Fix ecotax product backoffice management && rounding issue
git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@17804 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
+39
-25
@@ -1415,32 +1415,46 @@ class CartCore extends ObjectModel
|
||||
}
|
||||
else
|
||||
{
|
||||
$price = Product::getPriceStatic(
|
||||
(int)$product['id_product'],
|
||||
true,
|
||||
(int)$product['id_product_attribute'],
|
||||
2,
|
||||
null,
|
||||
false,
|
||||
true,
|
||||
$product['cart_quantity'],
|
||||
false,
|
||||
((int)$this->id_customer ? (int)$this->id_customer : null),
|
||||
(int)$this->id,
|
||||
((int)$address_id ? (int)$address_id : null),
|
||||
$null,
|
||||
true,
|
||||
true,
|
||||
$virtual_context
|
||||
);
|
||||
if ($with_taxes)
|
||||
$price = Product::getPriceStatic(
|
||||
(int)$product['id_product'],
|
||||
true,
|
||||
(int)$product['id_product_attribute'],
|
||||
2,
|
||||
null,
|
||||
false,
|
||||
true,
|
||||
$product['cart_quantity'],
|
||||
false,
|
||||
((int)$this->id_customer ? (int)$this->id_customer : null),
|
||||
(int)$this->id,
|
||||
((int)$address_id ? (int)$address_id : null),
|
||||
$null,
|
||||
true,
|
||||
true,
|
||||
$virtual_context
|
||||
);
|
||||
else
|
||||
$price = Product::getPriceStatic(
|
||||
(int)$product['id_product'],
|
||||
false,
|
||||
(int)$product['id_product_attribute'],
|
||||
2,
|
||||
null,
|
||||
false,
|
||||
true,
|
||||
$product['cart_quantity'],
|
||||
false,
|
||||
((int)$this->id_customer ? (int)$this->id_customer : null),
|
||||
(int)$this->id,
|
||||
((int)$address_id ? (int)$address_id : null),
|
||||
$null,
|
||||
true,
|
||||
true,
|
||||
$virtual_context
|
||||
);
|
||||
|
||||
$total_price = Tools::ps_round($price, 2) * (int)$product['cart_quantity'];
|
||||
|
||||
if (!$with_taxes)
|
||||
{
|
||||
$product_tax_rate = (float)Tax::getProductTaxRate((int)$product['id_product'], (int)$address_id, $virtual_context);
|
||||
$total_price = Tools::ps_round($total_price / (1 + ($product_tax_rate / 100)), 2);
|
||||
}
|
||||
$total_price = Tools::ps_round($price * (int)$product['cart_quantity'], 2);
|
||||
}
|
||||
$order_total += $total_price;
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ class OrderInvoiceCore extends ObjectModel
|
||||
{
|
||||
// sum by order details in order to retrieve real taxes rate
|
||||
$taxes_infos = Db::getInstance()->executeS('
|
||||
SELECT odt.`id_order_detail`, t.`rate` AS `name`, SUM(od.`total_price_tax_excl`) AS total_price_tax_excl, SUM(t.`rate`) AS rate, SUM(`total_amount`) AS `total_amount`, od.`ecotax`, od.`ecotax_tax_rate`
|
||||
SELECT odt.`id_order_detail`, t.`rate` AS `name`, SUM(od.`total_price_tax_excl`) AS total_price_tax_excl, SUM(t.`rate`) AS rate, SUM(`total_amount`) AS `total_amount`, od.`ecotax`, od.`ecotax_tax_rate`, od.`product_quantity`
|
||||
FROM `'._DB_PREFIX_.'order_detail_tax` odt
|
||||
LEFT JOIN `'._DB_PREFIX_.'tax` t ON (t.`id_tax` = odt.`id_tax`)
|
||||
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = odt.`id_order_detail`)
|
||||
@@ -324,9 +324,9 @@ class OrderInvoiceCore extends ObjectModel
|
||||
|
||||
$ratio = $tax_infos['total_price_tax_excl'] / $this->total_products;
|
||||
$order_reduction_amount = $this->total_discount_tax_excl * $ratio;
|
||||
$tmp_tax_infos[$tax_infos['rate']]['total_amount'] += ($tax_infos['total_amount'] - Tools::ps_round($tax_infos['ecotax'] * $tax_infos['ecotax_tax_rate'] / 100, 2));
|
||||
$tmp_tax_infos[$tax_infos['rate']]['total_amount'] += ($tax_infos['total_amount'] - Tools::ps_round($tax_infos['ecotax'] * $tax_infos['product_quantity'] * $tax_infos['ecotax_tax_rate'] / 100, 2));
|
||||
$tmp_tax_infos[$tax_infos['rate']]['name'] = $tax_infos['name'];
|
||||
$tmp_tax_infos[$tax_infos['rate']]['total_price_tax_excl'] += ($tax_infos['total_price_tax_excl'] - $order_reduction_amount - $tax_infos['ecotax']);
|
||||
$tmp_tax_infos[$tax_infos['rate']]['total_price_tax_excl'] += $tax_infos['total_price_tax_excl'] - $order_reduction_amount - Tools::ps_round($tax_infos['ecotax'] * $tax_infos['product_quantity'], 2);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -381,7 +381,7 @@ class OrderInvoiceCore extends ObjectModel
|
||||
public function getEcoTaxTaxesBreakdown()
|
||||
{
|
||||
$res = Db::getInstance()->executeS('
|
||||
SELECT `ecotax_tax_rate` as `rate`, SUM(`ecotax`) as `ecotax_tax_excl`, SUM(`ecotax`) as `ecotax_tax_incl`
|
||||
SELECT `ecotax_tax_rate` as `rate`, SUM(`ecotax`) as `ecotax_tax_excl`, SUM(`ecotax`) as `ecotax_tax_incl`, `product_quantity`
|
||||
FROM `'._DB_PREFIX_.'order_detail`
|
||||
WHERE `id_order` = '.(int)$this->id_order.'
|
||||
AND `id_order_invoice` = '.(int)$this->id.'
|
||||
@@ -390,8 +390,10 @@ class OrderInvoiceCore extends ObjectModel
|
||||
|
||||
if ($res)
|
||||
foreach ($res as &$row)
|
||||
$row['ecotax_tax_incl'] = Tools::ps_round($row['ecotax_tax_excl'] + ($row['ecotax_tax_excl'] * $row['rate'] / 100), 2);
|
||||
|
||||
{
|
||||
$row['ecotax_tax_incl'] = Tools::ps_round(($row['ecotax_tax_excl'] * $row['product_quantity']) + ($row['ecotax_tax_excl'] * $row['product_quantity'] * $row['rate'] / 100), 2);
|
||||
$row['ecotax_tax_excl'] = Tools::ps_round($row['ecotax_tax_excl'] * $row['product_quantity'], 2);
|
||||
}
|
||||
return $res;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user