Питання - Відповіді(FAQ) створення документів для замовлень

У цій статті зібрані найпопулярніші питання, які з'являються у наших користувачів під час редагування коду для документів
Написано Владислав Пономарь
Оновлено 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 %}

 

Теги: шаблони документів, код документа, змінні, приклади коду
Чи була наша стаття корисною?