Использование шаблона печати и его настройка

Skip to end of metadata
Go to start of metadata
Вы просматриваете старую версию данной страницы. Смотрите текущую версию. Сравнить с текущим  |   просмотр истории страницы

Шаблоны 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 - подстатус подключения
  • account - лицевой счет
    • balance - текущий баланс

Вывод всех доступных в шаблоне переменных
<pre>{% debug %}</pre>
Для того, чтобы печатать финансовые документы, как PDF, необходимо перейти в настройки оператора связи - настройки биллинга и включить опцию "Печатать финансовые документы, как PDF"

Шаблоны .html

Для шаблонов печати используется шаблонизатор Django версии 1.6, тем не менее большая часть документации по версии 1.7 так же применима к шаблонам используемой версии: https://docs.djangoproject.com/en/1.7/ref/templates/builtins/

Скрипт выводящий (Буквами), за какой месяц счет.

Без склонения месяц выводится:

 {{ 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 %}

Вывод списка услуг c их стоимостью вместо фактического потребления услуг

В случае, если Вам требуется вывести только набор услуг абонента попавший в счет и их стоимость по тарифу замените стандартную таблицу набора услуг, отражающую фактическое потребление за период счета согласно настройкам, приведённой ниже.

<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>

Математические операции.

{% load mathfilters %}
{{ service.price|mul:0.8|floatformat:2 }} {# Умножение стоимости услуги на 0.8 с округлением до 2 знаков #}
{{ service.price|div:5 }} {# Деление #}
{{ service.price|add:5 }} {# Сложение #}
{{ service.price|sub:5 }} {# Вычитание #}

Шаблоны .docx

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

Различия:

  1. Значение по умолчанию. Если в HTML шаблоне была конструкция вида
    {{ sms|default_if_none:"---" }}

    , то в DOCX следует использовать

    {{ sms|default("---", true) }}
  2. Форматирование даты. Используется фильтр dateformat. Если в HTML шаблоне была конструкция вида
    {{ create_date|date:"d.m.y" }}

    , то в DOCX следует использовать

    {{ create_date|dateformat("%Y.%m.%d") }}
  3. Вывод текущего времени. Используется метод now(), который выводит время в формате, для отображения в нужном формате можно использовать фильтр, например:
    {{ now() | dateformat('%d.%m.%Y') }}
  4. Форматирование валюты. Используется фильтр rubles. Для принудительной печати копеек в целых суммах следует использовать
    {{ account.balance|rubles(True) }}
  5. Реквизиты абонентов выводятся следующим образом. Вывести значение реквизита "Комментарий":
     {{ abonent_attrs['33'] }} 

    Для того, что бы вывести список всех доступных реквизитов воспользуйтесь конструкцией:

    {% for attr in abonent_attrs %}
    {{ abonent_attrs_names[attr] }}: {{ abonent_attrs[attr] }}
    {% endfor %}
    
  6. При проверке шаблона с чем-то вроде users.0.something используется специальный абонент, у которого количество users равно нулю. Для того, чтобы шаблон проходил проверку, необходимо оборачивать элементы шаблона в if:
    {% if users.0 %} {{users.0.something}} {% endif %}
    
  7. Для суммирования сумм всех услуг абонента используется данная конструкция:
    {{ services | sum(attribute='summ')}}
    
  8. Для суммирования сумм всех услуг абонента с округлением до 2 знака после запятой используется следующая конструкция:
    {{  "%.2f"|format(services | sum(attribute='summ'))}}
    
  9. Для вывода месяца, в который был выставлен счет используется следующий шаблон:
    {% if op_date | dateformat('%-m') == '1' %}Январь{% elif op_date | dateformat('%-m') == '2' %}Февраль{% elif op_date | dateformat('%-m') == '3' %}Март{% elif op_date | dateformat('%-m') == '4' %}Апрель{% elif op_date | dateformat('%-m') == '5' %}Май{% elif op_date | dateformat('%-m') == '6' %}Июнь{% elif op_date | dateformat('%-m') == '7' %}Июль{% elif op_date | dateformat('%-m') == '8' %}Август{% elif op_date | dateformat('%-m') == '9' %}Сентябрь{% elif op_date | dateformat('%-m')== '10' %}Октябрь{% elif op_date | dateformat('%-m') == '11' %}Ноябрь{% elif op_date | dateformat('%-m') == '12' %}Декабрь{% else %}---
    {% endif %}
    
  10. Для применение финансовой операции необходимо предварительно перевести значение, над которым необходимо провести финансовую операцию в тип данных int(если число целое без дробной части) или в тип данных float(если число с дробной частью)
    Пример умножения цены step_price(которая равна 1.5) на 1.2. В выводе будет число 1.8
    {{ voip_log. step_price*1.2 | float}}
    

Примеры шаблонов

Введите метки, чтобы добавить к этой странице:
Please wait 
Ищите метку? просто начните печатать.