Инструменты пользователя

Инструменты сайта


Боковая панель

Разделы

Общее описание
История изменений
Рекомендации к обновлению
Планы на будущее
Известные проблемы
Онлайн демо
Случайная статья
Видео
Помощь проекту
Люди

FAQ



Редактировать сайдбар

receipts

Печать квитанций

Начиная с релиза 0.9.8 появилась возможность, которая никому не нужна печати квитанций на оплату услуг(для последующего вручения абонентам или рассылки любыми возможными средствами связи) для абонентов Интернет и UKV. Так же в квитанцию может быть внедрен QR-код с необходимой информацией или пожеланием всего наилучшего тому, кто его отсканирует. Включается модуль опцией PRINT_RECEIPTS_ENABLED в alter.ini. С помощью опции alter.ini PRINT_RECEIPTS_IN_PROFILE можно включить печать квитанций лично для каждого юзера прямо из его профиля Онлайн/UKV.

Выглядит это примерно так: На наш взгляд в каких-либо пояснениях интерфейс модуля не нуждается, а вот про шаблон для него и генерацию QR-кодов стоит упомянуть отдельно.

Начиная с релиза 1.0.9 стало возможным сохранять каждую из сгенерированных квитанций в БД. Для этого просто отметьте соответствующий флажок на форме перед, непосредственно, генерацией. Для использования этой возможности нужно всего лишь добавить в alter.ini опцию PRINT_RECEIPTS_HISTORY_ENABLED=1.

Шаблон


Пример шаблона квитанции вы найдете по этому пути:
content/documents/receipt_template/

Как несложно заметить - это обычный HTML-документ, разделенный на 3 секции(части): heading, body, footer.

  • heading - «шапка» документа, добавляемая к нему единожды в самом начале. Кроме того, именно здесь должны быть описаны форматы дат/лет/месяцев а так же содержимое внедряемого QR-кода. Если оно вам в квитанции нужно, конечно.
    Файл: payment_receipt_head.tpl
  • body - основная и, собственно, «повторяющаяся» для каждого абонента часть документа. Здесь должна содержаться вся информация, которую мы хотим донести до абонента.
    Файл: payment_receipt.tpl
  • footer - то же что и «шапка», только в самом конце. Не предполагает наличия какой-либо полезной инфы(кроме закрывающих тегов </body></html>) в принципе. Но если вам, например, очень хочется напомнить сотруднику, занимающемуся квитанциями, о чем-то очень-очень важном, когда он закончит разбор пачки отпечатанной бумаги - это именно то самое место.
    Файл: payment_receipt_footer.tpl

Начиная с релиза 1.0.9 стало возможным иметь неограниченное количество шаблонов, которые можно указывать прямо на форме печати квитанций. Например, если для разных предпренимателей должны быть разные бланки квитанций. Или если вы хотите печатать и не квитанции вовсе, а, скажем - уведомления(никто же вас не обязывает к тому, чтобы в шаблоне фигурировали суммы и оплаты). Просто разместите каталог с наименованием шаблона в content/documents/receipt_template/, а уже в этот каталог положите файлы секций heading, body, footer - и ваш шаблон станет доступным в соответствующем выпадающем списке на форме модуля.

Поддерживаемые переменные и макросы


{CURDATE} - текущая дата
{CURTIME} - текущее время
{CURDATENODELIMS} - текущая дата без разделителей
{CURDATETIMENODELIMS} - текущее время без разделителей
{INVOICE_NUM} - номер квитанции. Генерируется как следующий ID в таблице '​invoices',​ если квитанция в процессе генерации сохраняется в БД.
Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS} + '​-'​ + «​текущий индекс массива выбранных для печати абонентов»​.
Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS},​ если в heading-секции указан макрос {INV_NUM_CURDATETIME}.
{MONTH_COUNT} - количество месяцев указанных для оплаты
{PAYFORPERIODSTR} - оплата за период(месяцы), например: март 2019, апрель 2019
{PAYTILLMONTHYEAR} - будет заменено на текущий год + следующий месяц(согласно формату даты, указанному в шаблоне)
{PAYTILLDATE} - оплатить до указанной даты
{SERVICENAME} - наименование оплачиваемой услуги
{CONTRACT} - номер договора пользователя
{CONTRACTDATE} - дата договора пользователя
{REALNAME} - ФИО пользователя
{CITY} - город проживания пользователя
{STREET} - улица проживания пользователя
{BUILD} - дом
{APT} - квартира
{EXTADDR_POSTALCODE} - почтовый индекс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED.
{EXTADDR_TOWNDISTR} - район/​ПГТ/​округ/​етс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED.
{EXTADDR_ADDREXT} - дополнительная инфо по адресу из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED.
{PHONE} - телефон пользователя
{MOBILE} - мобильный пользователя
{TARIFF} - тариф пользователя
{TARIFFPRICE} - стоимость тарифа пользователя
{TARIFFPRICECOINS} - стоимость тарифа пользователя выраженная в копейках
{TARIFFPRICEDECIMALS} - стоимость тарифа пользователя с двумя знаками после запятой
{SUMM} - сумма к оплате
{SUMMCOINS} - сумма к оплате выраженная в копейках
{SUMMDECIMALS} - сумма к оплате с двумя знаками после запятой

QR-коды и специальные переменные и макросы


Для генерация QR-кодов предполагается использование JS-библиотеки jquery.qrcode и соответствующей минимальной «обвязки» для нее. В шаблоне-примере уже имеются все минимально необходимые для этого скрипты.

Для корректной генерации и расположения QR-кодов используются следующие макросы:

{QR_CODES_CNT} - количество QR-кодов, по сути равное количеству абонентов(генерируемых документов). Используется JS-скриптом для обхода элементов DOM с соответствующими индексами. Располагать в heading-секции.

{QR_CODE_CONTENT} - данные, которые нужно «упаковать» в QR-код. Располагать в body-секции.

{QR_INDEX} - индекс или порядковый номер QR-кода, по которому JS-скрипт будет находить элемент DOM, который будет содержать сам QR-код или же содержит данные, которые нужно «упаковать» в QR-код. Располагать в body-секции.

{QR_EMBED} - наличие этого макроса указывает, что генерация QR-кодов должна производится на стороне сервера и готовый QR-код встраивается в документ в виде закодированного в Base64 изображения. Также необходимо не забыть добавить в секцию heading скрытый инпут вида:

<input id="qr_embedded" type="hidden" value="0" />

со значением «value»=1. Располагать в heading-секции.
Важно отметить, что, поскольку, делается это средствами гуглоАПИ http://chart.apis.google.com/chart - такая генерация занимает довольно много времени и не рекомендована для большого количества документов(хотя на тестах до 100 штук - вполне себе приемлемо - пара минут ожидания…).

Вкратце, логика процесса генерации QR-кода следующая:

В цикле от i == 1 до {QR_CODES_CNT} поочередно ищем DOM-элементы, например, с id="qr_content_" + i, берем их содержимое, 
"упаковываем" в QR-код, а QR-код в свою очередь пихаем в DOM-элементы с id="qr" + i. 

Из чего следует, что сами QR-коды нигде не хранятся и генерируются на лету при открытии страницы в браузере(конечно, если мы не используем {QR_EMBED}). Таким образом, хранение собранного модулем HTML-документа требует в разы меньше дискового пространства, а так же документ становится гораздо легче для пересылки.



Отдельно стоит сказать о специальных макросах, которые должны располагаться исключительно в единственном экземпляре и исключительно в heading-секции внутри HTML-комментария(<!– –>):

  • Блок данных которые нужно «упаковать» в QR-код
    {QR_EXT_START}
      here goes your info to pack into QR-code
      {MACRO_IS_ALLOWED_HERE}
    {QR_EXT_END}
  • Формат даты, который мы хотим использовать для наших квитанций. По умолчанию установлен стандартный для наших широт

формат: дд.мм.гггг. Но в этом макросе вы можете указать любой валидный формат для PHP функции date().

    {DATES_FORMAT_START}Y-m-d{DATES_FORMAT_END}
  • Формат месяц-год(да-да, для макроса {PAYTILLMONTHYEAR}). По умолчанию так же установлен стандартный для наших широт

формат: мм.гггг. Но в этом макросе вы можете указать любой валидный формат для PHP функции date().

    {MONTHYEAR_FORMAT_START}m-Y{MONTHYEAR_FORMAT_END}
  • Номера квитанций будут генерироваться по принципу {CURDATENODELIMS} + {CURDATETIMENODELIMS}, если вы добавите указанный ниже макрос:
{INV_NUM_CURDATETIME}
receipts.txt · Последние изменения: 2020/07/27 15:50 — bobr