Просмотр Исходного

h2. Шаблоны HTML

При создании и редактировании шаблона возможно использование переменных печати в формате Django Template. Возможные тэги django template можно посмотреть в данной статье [https://djbook.ru/rel1.6/ref/templates/builtins.html] Для вставки значения из переменной в шаблоне необходимо использовать две пары фигурных скобок с названием переменной внутри, т.е. вот так \-  {{ название_переменной }} . Ниже приведен небольшой пример.

[Использование шаблона печати и его настройка^Шаблон.png] - Это один из шаблонов по умолчанию, карточка абонента. При печати карточки такого абонента - [Использование шаблона печати и его настройка^Абонент.png] может быть создан следующий html-документ \- [Использование шаблона печати и его настройка^Карточка.png]. Обратите внимание что текст шаблона содержащий переменные был заменен на различный текст. Так например вместо *{{ abonent.name }}* было подставлено _"ООО Лучший провайдер"_. Важно заметить и знать, что если при печати переменная не содержит значения, то будет вставлена пустая строка и никаких сообщений об ошибке не появится.

Ниже приведен неполный список доступных к использованию переменных:
* *abonent* \- Информация по абоненту. У этой переменной есть поля, содержащие более детальную информацию. Список полей:
** *name* \- ФИО абонента
** *contract_number* \- Номер договора абонента.
** *email* \- Адрес электронной почты абонента.
** *sms* \- Телефонный номер абонента.
** *home* \- Адрес дома абонента.
** *a_home_number* \- Номер квартиры абонента.
** *create_date* \- Дата договора.
** *nds* \- процент НДС
* *tarif* \- Тариф абонента. У этой переменной есть поля, содержащие более детальную информацию. Список полей:
** *name* \- Название тарифа.
** *tarif_group* \- Текстовое имя группы тарифа.
** *limit* \- Ограничение по данному тарифу.
** *get_abon_sum* \- Абонентская плата тарифа.
* *users* \- Содержит список учетных записей абонента. *{{ users.0 }}* \- первая учетная запись абонента, *{{ users.1 }}* \- вторая учетная запись абонента, *{{ users.2 }} *\- третья учетная запись абонента и т.д.. У каждой учетной записи есть поля, содержащие более детальную информацию. Список полей:
** *login* \- логин учетной записи.
** *gen_pwd* \- пароль учетной записи.
** *ip* \- IP адрес учетной записи.
** *mask* \- Маска подсети учетной записи.
** *mask_str* \- Маска подсети в десятичной форме.
** *pull* \- IP пул абонента
*** *gateway* \- шлюз, указанный в пуле
* *full_credit_summ* \- сумму текущего счёта + задолженность за предыдущий период.
* *services* \- Содержит список активных услуг абонента. *{{ services.0 }}* \- первая услуга абонента, *{{ services.1 }}* \- вторая услуга абонента, *{{ services.2 }} *\- третья услуга абонента и т.д.. У каждой услуги есть поля, содержащие более детальную информацию. Список полей:
** *comment* \- Примечание.
** *usluga* \- Услуга абонента. У этой переменной есть поля, содержащие более детальную информацию. Список полей:
*** *name* \- Название услуги.
*** *nds* \- процент НДС
*** *summa* \- цена услуги
*** *activate_pay* \- стоимость подключения услуги
* *active_services* \- Содержит список включенных, но, не обязательно, активных услуг абонента. *{{* *active_services{*}*.0 }}* \- первая услуга абонента, *{{* *active_services{*}*.1 }}* \- вторая услуга абонента, *{{* *active_services{*}*.2 }} *\- третья услуга абонента и т.д.. У каждой услуги есть поля, содержащие более детальную информацию. Список полей аналогичен *services*
* *operator* \- Оператор связи, обслуживающий абонента. У этой переменной есть поля, содержащие более детальную информацию.
** *name* \- Название оператора связи.
** *email* \- Адрес электронной почты оператора связи.
** *sms* \- Телефон оператора связи.
* *operator_attrs* \- Содержит список значений реквизитов оператора. Полный список доступных реквизитов можно посмотреть в разделе _"Справочники"_ на вкладке _"Реквизиты"_ - [Использование шаблона печати и его настройка^Реквизиты.png]. Для указания реквизита через точку к названию переменной необходимо дописать его номер, т.е. например *{{ operator_attrs.25 }}* подставит значения реквизита _"Юридический адрес"_.
* *abonent_attrs* \- Содержит список значений реквизитов абонента. Полный список доступных реквизитов можно посмотреть в разделе _"Справочники"_ на вкладке _"Реквизиты"_ \- [Использование шаблона печати и его настройка^Реквизиты.png]. Для указания реквизита через точку к названию переменной необходимо дописать его номер, т.е. например *{{ abonent_attrs.33 }}* подставит значения реквизита _"Комментарий"_.
* *abonent_attrs_names* \- Содержит список названий реквизитов абонента. Например *{{ abonent_attrs_names.33 }}* подставит название реквизита, т.е. _"Комментарий"_.
* *voip_logs* \- Содержит список звонков у каждой учетной записи абонента. 
** *account_number* \- Номер абонента в учетной записи
*** *s_time* \- время начала звонка.
*** *mask* \- маска исходящего номера.
*** *direction_name* \- направление звонка
*** *v* \- время звонка в минутах
*** *bill_sum* \- стоимость звонка.
* *descr* \- содержимое поля "Описание" при формировании документа.
* *abonent_status* \- статус подключения
* *abonent_substatus* \- подстатус подключения

{tip}
Вывод всех доступных в шаблоне переменных
{code}
{% debug %}
{code}
{tip}

{info}Для того, чтобы печатать финансовые документы, как PDF, необходимо перейти в настройки оператора связи - настройки биллинга и включить опцию "Печатать финансовые документы, как PDF"{info}

!PDF.png|border=1!

h2. Скрипт выводящий (Буквами), за какой месяц счет.
{code}
Без склонения месяц выводится: {{ op_date|date:"E" }}

Для вычисления предыдущего месяца нужно в начало шаблона добавить загрузку математических фильтров
{% load mathfilters %}


Далее редактировать строку с датой
{% with month=op_date.month|sub:1 %}
Счет на оплату № {{ number }} от {{ op_date|date:"d.m.y" }}
за
{% if month == 1 %}
январь
{% elif month == 2 %}
февраль
{% elif month == 5 %}
май
{% endif %}
{% endwith %}
{code}

h2. Шаблоны Docx

При создании и редактировании шаблона возможно использование переменных печати в формате *Jinja2*. В большинстве случаев всё аналогично шаблонам HTML.

Различия:

# Значение по умолчанию. Если в HTML шаблоне была конструкция вида {{ sms\|default_if_none:"-\--" }}, то в DOCX следует использовать {{ sms\|default("-\--", true) }}
# Форматирование даты. Используется фильтр *dateformat*. Если в HTML шаблоне была конструкция вида {{ create_date\|date:"d.m.y" }}, то в DOCX следует использовать {{ create_date\|dateformat("%Y.%m.%d") }}
# Форматирование валюты. Используется фильтр *rubles*.
# Реквизиты абонентов выводятся следующим образом. Вывести значение реквизита "Комментарий":
{code} {{ abonent_attrs['33'] }} {code}
Для того, что бы вывести список всех доступных реквизитов воспользуйтесь конструкцией:
{code}
{% for attr in abonent_attrs %}
{{ abonent_attrs_names[attr] }}: {{ abonent_attrs[attr] }}
{% endfor %}
{code}
# При проверке шаблона с чем-то вроде {{users.0.something}} используется специальный абонент, у которого количество users равно нулю. Для того, чтобы шаблон проходил проверку, необходимо оборачивать элементы шаблона в if:
{code}
{% if users.0 %} {{users.0.something}} {% endif %}
{code}
Примеры шаблонов в формате *Docx*:
* [Карточка абонента|^abonent_card_hWRmdlX-2.docx]
* [Счет по услугам|^abonent_card_hWRmdlX-2.docx]