|
Ключ
Эта строка удалена.
Это слово было удалено. Это слово было добавлено.
Эта строка добавлена.
|
Изменения (31)
просмотр истории страницыh2. Шаблоны HTML |
{toc:maxLevel=3} |
|
При создании и редактировании шаблона возможно использование переменных печати в формате Django Template. Возможные тэги django template можно посмотреть в данной статье [https://djbook.ru/rel1.6/ref/templates/builtins.html] Для вставки значения из переменной в шаблоне необходимо использовать две пары фигурных скобок с названием переменной внутри, т.е. вот так \- {{ название_переменной }} . Ниже приведен небольшой пример. |
h2. Описание системы шаблонов печати |
[Использование шаблона печати и его настройка^Шаблон.png] - Это один из шаблонов по умолчанию, карточка абонента. При печати карточки такого абонента - [Использование шаблона печати и его настройка^Абонент.png] может быть создан следующий html-документ \- [Использование шаблона печати и его настройка^Карточка.png]. Обратите внимание что текст шаблона содержащий переменные был заменен на различный текст. Так например вместо *{{ abonent.name }}* было подставлено _"ООО Лучший провайдер"_. Важно заметить и знать, что если при печати переменная не содержит значения, то будет вставлена пустая строка и никаких сообщений об ошибке не появится. |
{info}Для того, чтобы печатать финансовые документы, как PDF, необходимо перейти в настройки оператора связи - настройки биллинга и включить опцию "Печатать финансовые документы, как PDF"{info} !PDF.png|border=1! h2. Переменные |
Ниже приведен неполный список доступных к использованию переменных: * *abonent* \- Информация по абоненту. У этой переменной есть поля, содержащие более детальную информацию. Список полей: |
... |
** *create_date* \- Дата договора. ** *nds* \- процент НДС |
* ** *tarif* \- Тариф абонента. У этой переменной есть поля, содержащие более детальную информацию. Список полей: |
*** *name* \- Название тарифа. |
*** *tarif_group* \- Текстовое имя группы тарифа. |
*** *limit* \- Ограничение по данному тарифу. |
*** *get_abon_sum* \- Абонентская плата тарифа. |
* *users* \- Содержит список учетных записей абонента. *{{ users.0 }}* \- первая учетная запись абонента, *{{ users.1 }}* \- вторая учетная запись абонента, *{{ users.2 }} *\- третья учетная запись абонента и т.д.. У каждой учетной записи есть поля, содержащие более детальную информацию. Список полей: ** *login* \- логин учетной записи. ** *gen_pwd* \- пароль учетной записи. ** *ip* \- IP адрес учетной записи. |
** *hw_serial* \- серийный номер оборудования. |
** *mask* \- Маска подсети учетной записи. ** *mask_str* \- Маска подсети в десятичной форме. |
... |
* *abonent_status* \- статус подключения * *abonent_substatus* \- подстатус подключения |
* *account* \- лицевой счет ** *balance* \- текущий баланс ** *balance_buh* \- баланс бухгалтерский |
|
h3. Переменные для шаблона заявки HelpDesk в DocX * *id* \- ID заявки * \*suid * - * *parent* \- информация о родительской (номер заявки, Название/ФИО) * *hdsk_datetime* \- дата создания заявки * *subj* \- Тема заявки * *text* \- Описание заявки * *status* \- Статус * *abonent* \- Название/ФИО абонента * *hdsk_type* \- Тип запроса * *performed_whom* \- Кому назначено * *performed_when* \- Когда назначено * *closed_when* \- Когда исполнено (установлен статус "Закрыто") * *creator* \- * *is_task* \- Заполняется если задача CRM (не HelpDesk) * *operator* \- Принадлежит оператору Атрибуты заявки: * *attribute.pk* \- ID атрибута * *attribute.code* \- код атрибута в формате "attr_ID" * *attribute.name* \- Наименование атрибута * *attribute.item* \- Значение Комментарии * *comment.id* \- ID комментария * *comment.text* \- Текст комментария * *comment.creator_abonent* \- Автор (Название/ФИО) * *comment.hdsk_parent* \- информация о родительской (номер заявки, Название/ФИО) * *comment.read_comment* \- флаг о прочтении комментария Вывести на печать все атрибуты указанные в заявке можно так: {code}{% for attribute in hdsk_attribute %} pk {{ attribute.pk }} code {{ attribute.code }} name {{ attribute.name }} item {{ attribute.item }} {% endfor %}{code} Вывести на печать все комментарии можно так: {code}{% for comment in hdsk_parent_id_comments %} id {{ comment.id }} text {{ comment.text }} creator_abonent {{ comment.creator_abonent }} hdsk_parent {{ comment.hdsk_parent }} read_comment {{ comment.read_comment }} {% endfor %}{code} h3. Отладка |
{tip} Вывод всех доступных в шаблоне переменных {code} |
{% debug %} |
<pre>{% debug %}</pre> |
{code} {tip} |
{info}Для того, чтобы печатать финансовые документы, как PDF, необходимо перейти в настройки оператора связи - настройки биллинга и включить опцию "Печатать финансовые документы, как PDF"{info} |
h2. Шаблоны .html |
|
!PDF.png|border=1! |
При создании и редактировании шаблона возможно использование переменных печати в формате Django Template. Возможные тэги django template можно посмотреть в [данной статье на русском языке|https://djbook.ru/rel1.6/ref/templates/builtins.html] и [официальной документации Django на английском языке|https://docs.djangoproject.com/en/1.7/ref/templates/builtins/] (большая часть документации по версии 1.7 так же применима к используемой версии 1.6). Для вставки значения из переменной в шаблоне необходимо использовать две пары фигурных скобок с названием переменной внутри, т.е. вот так \- {{ название_переменной }} . Ниже приведен небольшой пример. |
|
h2. Скрипт выводящий (Буквами), за какой месяц счет. |
h3. Сумма всех тарифных услуг |
|
Чтобы получить эту сумму в документе, нужно обратитьсяк модели tarif, но через абонента. Проще, говоря, вот так: {code}{{ abonent.tarif.get_abon_sum }}{code} h3. Скрипт выводящий (Буквами), за какой месяц счет. |
Без склонения месяц выводится: {code} |
... |
{code} |
h2. Шаблоны Docx |
h3. Вывод списка услуг c их стоимостью вместо фактического потребления услуг |
|
В случае, если Вам требуется вывести только набор услуг абонента попавший в счет и их стоимость по тарифу замените стандартную таблицу набора услуг, отражающую фактическое потребление за период счета согласно [настройкам|CarbonBilling:Счет на предоплату], приведённой ниже. {code}<table border="1" style="font-size: 8pt" cellpadding="2"> <tr style="text-align: center; font-weight: bold"> <td width="260">Товары (работы, услуги)</td> </tr> <table border="1" style="font-size: 8pt" cellpadding="2"> <tr style="text-align: center; font-weight: bold"> <td width="260">Товары (работы, услуги)</td> <td width="70">Стоимость</td> </tr> {% regroup services by name as uslugi_list %} {% for service in uslugi_list %} <tr> <td width="260">Абонентская плата за услугу: {{ service.grouper }}</td> {% regroup service.list by usluga as uslugas %} {% for grouper in uslugas %} <td width="260" align="right">{{ grouper.grouper.summa|floatformat:2 }}</td> {% endfor %} </tr> {% endfor %} </table> </table>{code} h3. Математические операции. {code} {% load mathfilters %} {{ service.price|mul:0.8|floatformat:2 }} {# Умножение стоимости услуги на 0.8 с округлением до 2 знаков #} {{ service.price|div:5 }} {# Деление #} {{ service.price|add:5 }} {# Сложение #} {{ service.price|addf:5 }} {# Сложение дробных чисел #} {{ service.price|sub:5 }} {# Вычитание #} {code} h3. Циклы {code} {% with op_summa|div:1.2 as test %} {{test}} {% endwith %} {code} h3. Добавление QR code. QR-коды формируются согласно [ГОСТ|http://roskazna.ru/dokumenty/dokumenty/vzaimodeystvie-s-bankovskoy-sistemoy/1157315/] {code} {% load pytils_numeral %} {% load mathfilters %} {% load qr_code %} <!DOCTYPE html> <html> <body> <div class="container"> <div><img width=200 height=200 src="{{MEDIA_URL}}{% generate_qrcode inst operator_attrs.2 operator_attrs.6 operator_attrs.7 operator_attrs.8 op_summa|mul:100 'Оплата услуг связи' operator_attrs.4 abonent_attrs.3 abonent_attrs.1007 abonent_attrs.1006 abonent_attrs.1008 operator_attrs.12 %}?{% now 'U' %}" alt="QR-код"></div> </div> </body> </html> {code} В шаблон передаются следующие параметры h5. Оператора связи operator_attrs.2 - Наименование operator_attrs.6 - Счет operator_attrs.7 - Банк operator_attrs.8 - БИК op_summa - сумма, по ГОСТ она должна быть в копейках, поэтому в документе подключен модуль mathfilters и сумма умножена на 100 Назначение платежа - указать текст без ковычек operator_attrs.4 - ИНН operator_attrs.12 - корреспондентский счет (в биллинге к/с) h5. Абонента abonent_attrs.3 - Адрес abonent_attrs.1002 - Имя abonent_attrs.1001 - Фамилия abonent_attrs.1003 - Отчество h3. Несколько учетных записей. В случае если в одном счете указанно несколько абонентов есть возможность отобразить все данные из всех учетных записей этих абонентов. Пример - отображение телефонных номеров {code} {% for user in users %} {{ user.phone.phone }} {% endfor %} {code} h3. Разные договора в агентских счетах Если Вы предоставляете услуги телефонии по [агентской схеме|Взаиморасчеты между операторами, агентская схема телефонии и транзит] и абонент подписывает с каждым оператором отедьные договора с разными номерами, можно выводить соответствующий номер в финансовых документах. Допустим, у Вас есть несколько партнёров: Вымпелком, ТТК, МТС. # Заполните у операторов [реквизит|CarbonBilling:Реквизиты] "Наименование # Создайте в справочники "Реквизиты" три реквизита с типом _текст_: #* "Номер договора с оператором Вымпелком" #* "Номер договора с оператором ТТК" #* "Номер договора с оператором МТС" # Предположим, что реквизиты получили ID (номера) 1001, 1002 и 1003 соответственно. Добавьте в шаблон следующую конструкцию: {code}{% if agent_operator_attr.2 == "Вымпелком" %} {{ abonent_attrs.1001 }} {% elif agent_operator_attr.2 == "ТТК" %} {{ abonent_attrs.1002 }} {% elif agent_operator_attr.2 == "МТС" %} {{ abonent_attrs.1003 }} {% endif %}{code} {info}В условиях имена операторов долдны быть написаны так же как они указаны в их реквизитах{info} # Добавьте абонентам соответствующие реквизиты. h3. Вывод информации об оборудовании, установленное абоненту. !equip.png|width=600px! Использовать только в привязке _abonents_ {code} {% for equip in abonent_id_equipment %} id {{ equip.id }} Описание {{ equip.name }} Тип {{ equip.equipment_type }} Серийный номер {{ equip.serial_no }} {% endfor %} {code} h3. Вывод названия услуг в документах для печати Получить название услуги в шаблоны печати можно следующим методом: 1. Используем привязку _FinanceOperations_ + доп.привязка _op_type_id=1_ {code} {% for service in act_services %} Абонентская плата за услугу: {{ service.name }} {% endfor %} **** {% for service in services %} Название: {{ service.name }} {{services.0.usluga.name}} {% endfor %} {code} 2. Если использовать привязку _FinanceOperations_ + доп.привязка _op_type_id=6_ {code}{{active_services.0}} {{active_services.1}} {{active_services.2}}{code} h3. Вывод учетной записи определенного типа Вывести учетную запись определенного типа(Internet, VOIP, IPTV, Sensor) можно с помощью конструкции: {code} {% for user in users %} {% if user.service_type_id == 2 %} {{ user.login }} {% endif %} {% endfor %} {code} Где 2 - id типа учетной записи Соответствие типа учетной записи и id: 1 - Internet 2 - IPTV 3 - VOIP 4 - Sensor h2. Шаблоны .docx |
При создании и редактировании шаблона возможно использование переменных печати в формате *Jinja2*. В большинстве случаев всё аналогично шаблонам HTML. |
... |
{% endfor %} {code} |
Реквизит ФИО состоит из трех частей (фамилия, имя, отчество), каждую из которых можно вывести по-отдельности: {code} {% if abonent_attrs %} Фамилия: {{ abonent_attrs['24']['0'] }} {% endif %} {code} Для корректного вывода данного реквизита полностью, необходимо использовать конструкцию: {code} {% if abonent_attrs %} {{ abonent_attrs['24']['0'] }} {{ abonent_attrs['24']['1'] }} {{ abonent_attrs['24']['2'] }} {% endif %} {code} Для вывода значения реквизита с отрицательным id(например, с id -219000), вместо минуса необходимо указывать "m": {code} {{ abonent_attrs['m219000'] }} {code} Вывод названия реквизита с отрицательным id: {code} {{ abonent_attrs_names["-219000"] }} {code} |
# При проверке шаблона с чем-то вроде {{users.0.something}} используется специальный абонент, у которого количество users равно нулю. Для того, чтобы шаблон проходил проверку, необходимо оборачивать элементы шаблона в if: {code} |
... |
{{ services | sum(attribute='summ')}} {code} |
# Для суммирования сумм всех услуг абонента с округлением до 2 знака после запятой используется следующая конструкция: {code} {{ "%.2f"|format(services | sum(attribute='summ'))}} {code} |
# Для вывода месяца, в который был выставлен счет используется следующий шаблон: {code} |
... |
{% endif %} {code} |
Например, так можно вывести дату договора в формате "«05» ноября 2020г." {code} «{{ abonent.create_date|dateformat("%d") }}» {% if abonent.create_date | dateformat('%-m') == '1' %}января{% elif abonent.create_date | dateformat('%-m') == '2' %}февраля{% elif abonent.create_date | dateformat('%-m') == '3' %}марта{% elif abonent.create_date | dateformat('%-m') == '4' %}апреля{% elif abonent.create_date | dateformat('%-m') == '5' %}мая{% elif abonent.create_date | dateformat('%-m') == '6' %}июня{% elif abonent.create_date | dateformat('%-m') == '7' %}июля{% elif abonent.create_date | dateformat('%-m') == '8' %}августа{% elif abonent.create_date | dateformat('%-m') == '9' %}сентября{% elif abonent.create_date | dateformat('%-m')== '10' %}октября{% elif abonent.create_date | dateformat('%-m') == '11' %}ноября{% elif abonent.create_date | dateformat('%-m') == '12' %}декабря{% else %}--- {% endif %} {{ abonent.create_date|dateformat("%Y") }}г. {code} # Для применения математической операции необходимо предварительно перевести значение исходных данных в тип данных *int* (если число целое без дробной части) или *float* (если число с дробной частью) Пример умножения цены step_price(которая равна 1.5) на 1.2. В выводе будет число 1.8 {code} {{ voip_log. step_price*1.2 | float}} {code} # При необходимости печати разных документов для физических и юридических лиц шаблоны печати помещаются в один файл .docx следующим образом: {code} {% if abonent.company %} <Вставляем шаблон печати договора юридического лица> {% else %} <Вставляем шаблон печати договора физического лица> {% endif %} {code} # Для отображения суммы стоимости тарифа {code}{{ abonent.tarif.get_abon_sum() }}{code} # Требуется показать в шаблоне печати последние 3 символа логина {code}{{ users.0.login|slice:"-3:" }}{code} |
|
h3. Примеры шаблонов в формате *Docx* |
* [Карточка абонента|^abonent_card3.docx] |
* [Счет по услугам|^bill_guPQBlr.docx] |
* [Договор|^contract_dogovor.docx] * [Заявка HelpDesk/CRM|^helpdesk.docx] * [Акт+распечатка звонков|^akt_and_voip.docx] h2. Расположение файлов на сервере Файлы шаблонов хранятся на сервере биллинга в каталоге: {code} /app/asr_billing/mnt/var/print_tmpl/ {code} |