Как проверить налоговые правила на странице счета-фактуры в Prestashop 1.6

StackOverflow https://stackoverflow.com//questions/24042397

Вопрос

Я хочу проверить налоговые правила для каждого товара на странице счета-фактуры.

Существует ли какая - либо переменная, которая хранит налоговые правила, такие как 8% или 18% ?

Это было бы что-то вроде этого

{if $order_invoice->tax_rule == "18%"}
    ...
{/if}
Это было полезно?

Решение

Проверьте правильную переменную

Вы не найдете этих данных в $order_invoice.Если вы хотите получить налоговые правила для каждого продукта, вам нужно будет проверить $order_detail var.Выдержка из invoice.tpl :

<!-- PRODUCTS -->
{foreach $order_details as $order_detail}
{cycle values='#FFF,#DDD' assign=bgcolor}
<tr style="line-height:6px;background-color:{$bgcolor};">
    <!-- Here we've got one line, for one product -->
    <!-- This product's datas are stored in $order_detail -->
</tr>

Вы можете найти налоговую ставку в $order_detail.tax_rate.К сожалению, это всегда возвращается 0.000.

ДА...Эти данные не заполнены...печальный день...


Создать OrderDetail переопределение

Создайте OrderDetail.php файл в override/classes/order/ папка, содержащая этот код :

class OrderDetail extends OrderDetailCore
{

    /**
     * Get order products
     *
     * @return array Products with price, quantity (with taxe and without)
     */
    public function getProducts($products = false, $selectedProducts = false, $selectedQty = false)
    {
        if (!$products)
            $products = $this->getProductsDetail();

        $order = new Order($this->id_order);
        $customized_datas = Product::getAllCustomizedDatas($order->id_cart);

        $resultArray = array();
        foreach ($products as $row)
        {
            // Retrieve tax rate
            $product = new Product($row['product_id']);
            $row['tax_rate'] = $product->getTaxesRate();

            // Change qty if selected
            if ($selectedQty)
            {
                $row['product_quantity'] = 0;
                foreach ($selectedProducts as $key => $id_product)
                    if ($row['id_order_detail'] == $id_product)
                        $row['product_quantity'] = (int)($selectedQty[$key]);
                if (!$row['product_quantity'])
                    continue;
            }

            $this->setProductImageInformations($row);
            $this->setProductCurrentStock($row);
            $this->setProductCustomizedDatas($row, $customized_datas);

            // Add information for virtual product
            if ($row['download_hash'] && !empty($row['download_hash']))
            {
                $row['filename'] = ProductDownload::getFilenameFromIdProduct((int)$row['product_id']);
                // Get the display filename
                $row['display_filename'] = ProductDownload::getFilenameFromFilename($row['filename']);
            }

            $row['id_address_delivery'] = $order->id_address_delivery;

            /* Stock product */
            $resultArray[(int)$row['id_order_detail']] = $row;
        }

        if ($customized_datas)
            Product::addCustomizationPrice($resultArray, $customized_datas);

        return $resultArray;
    }

}

Это переопределение позволяет нам редактировать tax_rate ценность.
Я просто добавил эти две строки в getProducts() функция :

foreach ($products as $row)
{
    // Retrieve tax rate
    $product = new Product($row['product_id']);
    $row['tax_rate'] = $product->getTaxesRate();

    // ...
}

Создать OrderInvoice переопределение

Создайте OrderInvoice.php файл в override/classes/order/ папка.
Этот класс будет содержать тот же код как и наше предыдущее переопределение.Просто измените первые строки :

<?php

class OrderInvoice extends OrderInvoiceCore
{
    // Copy/Paste the same code
}

И теперь вы можете отобразить ставку налога для каждого продукта, используя {$order_detail.tax_rate} !!

(Бонус) Отредактируйте свой шаблон

Давайте изменим этот шаблон (здесь : pdf/invoice.tpl) чтобы добавить столбец "Налоговое правило" :

<tr style="line-height:4px;">
    <!-- Remove 10% from the first column header width -->
    <td style="text-align: left; background-color: #4D4D4D; color: #FFF; padding-left: 10px; font-weight: bold; width: {if !$tax_excluded_display}25%{else}35%{/if}">{l s='Product / Reference' pdf='true'}</td>
    ...
    <!-- Add our new column header, 10% width -->
    <td style="background-color: #4D4D4D; color: #FFF; text-align: right; font-weight: bold; width: 10%; white-space: nowrap;">{l s='Tax rate' pdf='true'}</td>
    ...
</tr>
<!-- PRODUCTS -->
{foreach $order_details as $order_detail}
{cycle values='#FFF,#DDD' assign=bgcolor}
<tr style="line-height:6px;background-color:{$bgcolor};">
    <!-- Remove 10% from the first column width -->
    <td style="text-align: left; width: {if !$tax_excluded_display}25%{else}35%{/if}">{$order_detail.product_name}{if isset($order_detail.product_reference) && !empty($order_detail.product_reference)} ({l s='Reference:' pdf='true'} {$order_detail.product_reference}){/if}</td>
    ...
    <!-- Add our new column, 10% width -->
    <td style="text-align: right; width: 10%; white-space: nowrap;">
        {$order_detail.tax_rate}
    </td>
    ...
</tr>

Другие советы

Я думаю, что правильный способ - переопределить функцию getPriducts () в ordinvoice.php

foreach ($products as $row)
{
...
$sql = "SELECT tax.rate FROM ps_tax as tax join `ps_order_detail_tax` on ps_order_detail_tax.id_tax = tax.id_tax WHERE ps_order_detail_tax.id_order_detail = " .(int)$row['id_order_detail'] ;
$result = Db::getInstance()->executeS($sql);
$tmp = $result[0];
if (isset($tmp['rate'])){
            $row['tax_rate_product'] = $tmp['rate'];
}
else { //No Tax
$row['tax_rate_product'] = "0.000";
}
...
}
.

и значение скорости использования в .tpl

...
<td style="text-alig: right; width: 15%">{$order_detail.tax_rate_product}</td>
...
.

Не забудьте удалить кэш / Class_index.php

Может быть, у вас есть правило налога на продукту в зависимости от адреса отгрузки.Попробуйте

foreach ($products as $row)
.

{

...

// Retrieve tax rate

$product = new Product($row['product_id']);
$row['tax_rate'] = $product->getTaxesRate(new Address((int)$order->id_address_delivery))
 ...
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top