Skip to content

Commit

Permalink
[*] Invoice : Display shipping and wrapping breakdown by rate in case…
Browse files Browse the repository at this point in the history
… of summed taxes
  • Loading branch information
djfm committed Feb 25, 2015
1 parent 40d02bc commit 2d02b90
Show file tree
Hide file tree
Showing 3 changed files with 112 additions and 10 deletions.
4 changes: 4 additions & 0 deletions classes/order/Order.php
Original file line number Diff line number Diff line change
Expand Up @@ -1200,7 +1200,11 @@ public function setInvoice($use_existing_payment = false)
if (Configuration::get('PS_INVOICE'))
$this->setLastInvoiceNumber($order_invoice->id, $this->id_shop);

$wrapping_tax_manager = TaxManagerFactory::getManager($address, (int)Configuration::get('PS_GIFT_WRAPPING_TAX_RULES_GROUP'));
$wrapping_tax_calculator = $wrapping_tax_manager->getTaxCalculator();

$order_invoice->saveCarrierTaxCalculator($tax_calculator->getTaxesAmount($order_invoice->total_shipping_tax_excl));
$order_invoice->saveWrappingTaxCalculator($wrapping_tax_calculator->getTaxesAmount($order_invoice->total_wrapping_tax_excl));

// Update order_carrier
$id_order_carrier = Db::getInstance()->getValue('
Expand Down
99 changes: 89 additions & 10 deletions classes/order/OrderInvoice.php
Original file line number Diff line number Diff line change
Expand Up @@ -391,23 +391,51 @@ public function getProductTaxesBreakdown($order = null)
*/
public function getShippingTaxesBreakdown($order)
{
$taxes_breakdown = array();
// No shipping breakdown if no shipping!
if ($this->total_shipping_tax_excl == 0)
return array();

// No shipping breakdown if it's free!
foreach ($order->getCartRules() as $cart_rule)
if ($cart_rule['free_shipping'])
return $taxes_breakdown;
return array();

$shipping_tax_amount = $this->total_shipping_tax_incl - $this->total_shipping_tax_excl;

if ($shipping_tax_amount > 0)
$taxes_breakdown[] = array(
'rate' => $order->carrier_tax_rate,
'total_amount' => $shipping_tax_amount,
'total_tax_excl' => $this->total_shipping_tax_excl
if (Configuration::get('PS_INVOICE_TAXES_BREAKDOWN'))
{
$shipping_breakdown = Db::getInstance()->executeS(
'SELECT '.(float)$this->total_shipping_tax_excl.' as total_tax_excl, t.rate, oit.amount as total_amount
FROM `'._DB_PREFIX_.'tax` t
INNER JOIN `'._DB_PREFIX_.'order_invoice_tax` oit ON oit.id_tax = t.id_tax
WHERE oit.type = "shipping" AND oit.id_order_invoice = '.(int)$this->id
);

return $taxes_breakdown;
$sum_of_split_taxes = 0;
foreach ($shipping_breakdown as &$row)
{
$row['total_amount'] = Tools::ps_round($row['total_amount'], _PS_PRICE_COMPUTE_PRECISION_, $this->getOrder()->round_mode);
$sum_of_split_taxes += $row['total_amount'];
}
unset($row);

$delta = $shipping_tax_amount - $sum_of_split_taxes;

if ($delta != 0)
Tools::spreadAmount($delta, _PS_PRICE_COMPUTE_PRECISION_, $shipping_breakdown, 'total_amount');
}
else
{
$shipping_breakdown = array(
array(
'total_tax_excl' => $this->total_shipping_tax_excl,
'rate' => $order->carrier_tax_rate,
'total_amount' => $shipping_tax_amount
)
);
}

return $shipping_breakdown;
}

/**
Expand All @@ -419,8 +447,45 @@ public function getShippingTaxesBreakdown($order)
*/
public function getWrappingTaxesBreakdown()
{
$taxes_breakdown = array();
return $taxes_breakdown;
if ($this->total_wrapping_tax_excl == 0)
return array();

$wrapping_tax_amount = $this->total_wrapping_tax_incl - $this->total_wrapping_tax_excl;

$wrapping_breakdown = Db::getInstance()->executeS(
'SELECT '.(float)$this->total_wrapping_tax_incl.' as total_tax_excl, t.rate, oit.amount as total_amount
FROM `'._DB_PREFIX_.'tax` t
INNER JOIN `'._DB_PREFIX_.'order_invoice_tax` oit ON oit.id_tax = t.id_tax
WHERE oit.type = "wrapping" AND oit.id_order_invoice = '.(int)$this->id
);

$sum_of_split_taxes = 0;
$total_tax_rate = 0;
foreach ($wrapping_breakdown as &$row)
{
$row['total_amount'] = Tools::ps_round($row['total_amount'], _PS_PRICE_COMPUTE_PRECISION_, $this->getOrder()->round_mode);
$sum_of_split_taxes += $row['total_amount'];
$total_tax_rate += (float)$row['rate'];
}
unset($row);

$delta = $wrapping_tax_amount - $sum_of_split_taxes;

if ($delta != 0)
Tools::spreadAmount($delta, _PS_PRICE_COMPUTE_PRECISION_, $wrapping_breakdown, 'total_amount');

if (!Configuration::get('PS_INVOICE_TAXES_BREAKDOWN'))
{
$wrapping_breakdown = array(
array(
'total_tax_excl' => $this->total_wrapping_tax_excl,
'rate' => $total_tax_rate,
'total_amount' => $wrapping_tax_amount
)
);
}

return $wrapping_breakdown;
}

/**
Expand Down Expand Up @@ -734,4 +799,18 @@ public function saveCarrierTaxCalculator(array $taxes_amount)

return $is_correct;
}

public function saveWrappingTaxCalculator(array $taxes_amount)
{
$is_correct = true;
foreach ($taxes_amount as $id_tax => $amount)
{
$sql = 'INSERT INTO `'._DB_PREFIX_.'order_invoice_tax` (`id_order_invoice`, `type`, `id_tax`, `amount`)
VALUES ('.(int)$this->id.', \'wrapping\', '.(int)$id_tax.', '.(float)$amount.')';

$is_correct &= Db::getInstance()->execute($sql);
}

return $is_correct;
}
}
19 changes: 19 additions & 0 deletions pdf/invoice.tax-tab.tpl
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,25 @@
{/foreach}
{/if}

{if isset($wrapping_tax_breakdown)}
{$smarty.capture.separator_row}
{foreach $wrapping_tax_breakdown as $wrapping_tax_infos}
<tr style="line-height:6px;background-color:{cycle values='#FFF,#DDD'};">
<td style="width: {if !$use_one_after_another_method}30%{else}60%{/if}">
{if !isset($pdf_wrapping_tax_written)}
{l s='Wrapping' pdf='true'}
{assign var=pdf_wrapping_tax_written value=1}
{/if}
</td>
<td style="width: 20%; text-align: right;">{$wrapping_tax_infos.rate} %</td>
{if !$use_one_after_another_method}
<td style="width: 30%; text-align: right;">{if isset($is_order_slip) && $is_order_slip}- {/if}{displayPrice currency=$order->id_currency price=$wrapping_tax_infos.total_tax_excl}</td>
{/if}
<td style="width: 20%; text-align: right;">{if isset($is_order_slip) && $is_order_slip}- {/if}{displayPrice currency=$order->id_currency price=$wrapping_tax_infos.total_amount}</td>
</tr>
{/foreach}
{/if}

</table>
{/if}
</td>
Expand Down

0 comments on commit 2d02b90

Please sign in to comment.