ЧАВО по созданию документов для заказов

В этой статье собраны самые популярные вопросы, которые появляются у наших пользователей при редактировании кода для документов
Автор Владислав Пономарь
Обновлено 4 дня назад
Важно! Если у вас возникают вопросы, как взаимодействовать с переменными при редактировании документов, вы можете также найти ответы в документации twig. Доступные теги, фильтры и функции описаны в нашем справочнике.

1. Как добавить отображение сегодняшней даты?
{{ "now"|date("d.m.Y") }} - дата в формате: день.месяц.год
{{ "now"|date("d-m-Y H:i") }} - дата в формате: день-месяц-год часы:минуты

2. Как добавить к переменной дату оформления заказа или дата доставки/отправки + n-нное количество дней?
{{ model.created_at|date_modify("+180 day")|date("m.d.Y")}}

3. Как заменить отображение валюты переменной с UAH на грн?

В базовых шаблонах переменные прописаны следующим образом:

{{ product.product_price|format_currency('UAH', locale='uk') }}

Чтобы заменить отображение валюты на «грн», достаточно удалить |format_currency('UAH', locale='uk')  и просто вынести «грн» за фигурные скобки:

{{ product.product_price }} грн

4. Как изменить формат даты оформления заказа с 2022-12-22 12:12:12 на более привычный 22 декабря 2022 г.?

Задаем параметры для создания нужной переменной:

{% set mnths = ['','января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'] %}

После чего в нужном месте прописываем саму переменную:

{{ model.created_at|date("j") }} {{ mnths[model.created_at|date("n")] }} {{ model.created_at|date("Y") }} г.

5. Как изменить формат даты доставки/отправки с 2022-12-22 на более привычный 22.12.2022
{{ model.shipping_date_actual|date("d.m.Y") }}
6. Как подтянуть картинку из прикрепленного файла в заказе?

Этот способ позволяет подтянуть один добавленный последним файл (картинку) из заказа:

{% set files = model.files|split('https://') %}
{% if files|length > 1 %}
    {% set lastFile = files|last %}
    {% if lastFile != '' %}
        <img src="https://{{ lastFile }}" width="40" style="border: 0; background: lightgrey; max-height: 40px;" />
    {% endif %}
{% else %}
    <p>К этому заказу не прикреплены файлы.</p>
{% endif %}

Чтобы вывести все файлы, прикрепленные к заказу, как изображения, используйте код:

{% set files = model.files|split('https://') %}
{% if files|length > 1 %}
    {% for file in files %}
        {% if file != '' %}
            <img src="https://{{ file }}" width="40" style="border: 0; background: lightgrey; max-height: 40px;" />
        {% endif %}
    {% endfor %}
{% else %}
    <p>К этому заказу не прикреплены файлы.</p>
{% endif %}

Если вы добавляете к заказам не только изображения, но и файлы других форматов, отличных от jpg, jpeg, png, svg, webp, то чтобы они игнорировались можно добавить условия. Пример игнорирования форматов .pdf, .dst:

{% set files = model.files|split('https://') %}
{% if files|length > 1 %}
    {% for file in files %}
        {% if file != '' %}
            {% set file_extension = file|split('.')|last|trim|lower %}
            
            {% set is_ignored = false %}
            {% for ext in ['pdf', 'dst'] %} {# 'webp' #}
                {% if file_extension == ext %}
                    {% set is_ignored = true %}
                {% endif %}
            {% endfor %}
            
            {% if not is_ignored %}
                 <img src="https://{{ file }}" width="200" style="border: 0; background: lightgrey; max-height: 500px;" /> 
            {% endif %}
        {% endif %}
    {% endfor %}
{% else %}
    <p>К этому заказу не прикреплено файлов.</p>
{% endif %}

7. Как добавить отображение общей стоимости скидок на товары?

Задаем параметры для создания нужной переменной:

{% set total_discount = 0 %}
{% for key, product in model.products %}
{% if product.product_discount > 0 %}
{% set total_discount = product.product_discount * product.product_quantity + total_discount %}
{% endif %}
{% endfor %}

После чего в нужном месте прописываем саму переменную:

{{(total_discount) |format_currency('UAH', locale='uk')}}

8. Как вывести отображение общей стоимости заказа прописью?
{% set gtc = model.grand_total|round(0, 'floor') %}
{% set gtr = model.grand_total * 100 % 100 %}
{{ (gtc|format_number(style="spellout", locale="uk"))|capitalize }}
{% if gtc % 10 == 1 and gtc % 100 != 11 %}
гривня
{% elseif (gtc % 10 == 2 or gtc % 10 == 3 or gtc % 10 == 4) and (gtc % 100 != 12 or gtc % 100 != 13 or gtc % 100 != 14) %}
гривні
{% else %}
гривень
{% endif %}
{{ gtr|format_number(style="spellout", locale="uk") }}
{% if gtc % 10 == 1 and gtc % 100 != 11 %}
копійка
{% elseif (gtc % 10 == 2 or gtc % 10 == 3 or gtc % 10 == 4) and (gtc % 100 != 12 or gtc % 100 != 13 or gtc % 100 != 14) %}
копійки
{% else %}
копійок
{% endif %}

9. Какую переменную добавить для отображения штрих-кода заказа?
 {{ model.barcode|raw }}

10. Как вывести информацию об оплатах в заказе в документ? 

Чтобы добавить информацию об оплатах в документ, нужно использовать цикл «for». Он позволяет получить список всех оплат, которые есть в заказе, и вывести данные нужных вам переменных.

Пример списка всех оплат в заказе с доступными для вывода переменными:

{% for payment in model.payments %}
    {{ payment.payment_date }} - дата и время платежа
    {{ payment.type }} - тип оплаты
    {{ payment.status }} - статус оплаты
    {{ payment.amount }} - сумма оплаты
    {{ payment.description }} - описание
    {{ payment.fiscal_status }} - статус фискализации
    {{ payment.fiscal_type }} - тип фискализации
    {{ payment.fiscal_url }} - ссылка на фискальний чек
    {{ payment.invoice_url }} -  ссылка на онлайн счет для оплаты
{% endfor %}

Пример вывода всех записей об оплате способом «Банковская карта» в заказе в статусе «Оплачено» с указанием только даты и суммы:

{% for payment in model.payments %}
    {% if payment.type == "Банковская карта" %}
        {% if payment.status == "paid" %}
            Дата и время оплаты: {{ payment.payment_date }}<br>
            Сумма оплаты: {{ payment.amount|format_currency('UAH', locale='uk') }}
        {% endif %}
    {% endif %}
{% endfor %}

11. Как вывести сумму оставшуюся к оплате?

Что бы добавить в печатную форму расчет суммы по формуле:

Остаток к оплате = Сумма за товары - Скидка к заказу + Стоимость доставки - Сумма оплат

Добавьте вот этот код в место, где хотите вывести эту сумму:

{% set paid_amount = 0 %}
{% for payment in model.payments %}
  {% if payment.status == "paid" %}
    {% set paid_amount = paid_amount + payment.amount %}
  {% endif %}
{% endfor %}
Остаток к оплате = {{ (model.total_price - model.discount_amount + model.shipping_price - paid_amount)|format_currency('UAH', locale='uk') }}

12. Как печатать документ только с определенными товарами из заказа?

Чтобы выделить определенные товары, они должны отличаться по какому-либо параметру. Тогда в шаблоне печати по заказу можно настроить вывод только нужных вам товаров.

Вы можете выделить, например, услуги, добавив им свое поле – переключатель. И просто проставить его в товарах, которые как раз являются услугами.

Далее уже в шаблоне печати к услугам нужно добавить проверку, что переключатель активирован. Если он активирован – то только эти товары будут выведены:

{% if product.код-своего-поля and product.код-своего-поля|length %} ... {% endif %} 

Соответственно для другой формы, где не нужно выводить услуги, добавить:

{% if not product.код-своего-поля or product.код-своего-поля|length == 0 %} ... {% endif %}

13. Как вывести копейки для переменных цены или суммы?

Вы можете к переменной добавить форматирование валюты:

{{ product.price_sold|format_currency('UAH', locale='uk') }}

Или форматирование для вывода 2-х знаков после запятой:

{{ product.price_sold|number_format(2, ',', '') }}

14. Как добавить отображение статусов доставки на русском языке?

Переменная {{model.shipping_status}} по умолчанию выводит статусы доставки на английском языке, поэтому чтобы вывести их русские названия, используйте код:

{% if model.shipping_status == 'invoice' %}Создана накладная
{% elseif model.shipping_status == 'transit' %}В пути
{% elseif model.shipping_status == 'pickup' %}Прибыл в отделение
{% elseif model.shipping_status == 'delivered' %}Доставлено
{% elseif model.shipping_status == 'cash_on_delivery' %}Доставлено, нал. платеж в пути
{% elseif model.shipping_status == 'cash_recived' %}Доставлено, нал. платеж получен
{% elseif model.shipping_status == 'return' %}Возвращается
{% elseif model.shipping_status == 'returned' %}Возвращено
{% elseif model.shipping_status == 'disposal' %}Утилизация
{% elseif model.shipping_status == 'refused' %}Ошибка доставки
{% endif %}

15. Как добавить округление цен?

Если необходимо математическое округление до меньшего или большего: 

{{ model.grand_total|round|format_currency(currency, locale='de') }} 

Если необходимо округление всегда до большего:

{{ model.grand_total|round(0, 'floor')|format_currency(currency, locale='de') }}

Если необходимо округление всегда до меньшего: 

{{ model.grand_total|round(0, 'ceil')|format_currency(currency, locale='de') }}

16. Как вывести только нужное свойство товара? 

Добавьте код, который будет обрезать другие свойства и оставлять только то, название которого вы указали. Например, размер:

{% for product in model.products %}
{% if product.product_properties %}
{% set properties = product.product_properties|split("\n") %}
{% for property in properties %}
{% set parts = property|split(':') %}
{% if parts|length == 2 and parts[0]|trim == 'Размер' %}
{% set rozmir = parts[1]|trim %}
Розмір: {{ rozmir }}
{% endif %}
{% endfor %}
{% endif %}
{% endfor %}

Теги: шаблоны документов, код документа, переменные, примеры кода
Оцените эту статью