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

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


receipts

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
Следующая версия Следующая версия справа и слева
receipts [2019/04/23 17:06]
bobr [Печать квитанций]
receipts [2020/07/27 15:49]
bobr [Поддерживаемые переменные и макросы]
Строка 1: Строка 1:
 ====== Печать квитанций ====== ====== Печать квитанций ======
 Начиная с релиза 0.9.8 появилась возможность<​del>,​ которая никому не нужна</​del>​ печати квитанций на оплату услуг(для последующего вручения абонентам или рассылки любыми возможными средствами связи) для абонентов Интернет и [[ukv|UKV]]. Так же в квитанцию может быть внедрен QR-код с необходимой информацией <​del>​или пожеланием всего наилучшего тому, кто его отсканирует</​del>​. Начиная с релиза 0.9.8 появилась возможность<​del>,​ которая никому не нужна</​del>​ печати квитанций на оплату услуг(для последующего вручения абонентам или рассылки любыми возможными средствами связи) для абонентов Интернет и [[ukv|UKV]]. Так же в квитанцию может быть внедрен QR-код с необходимой информацией <​del>​или пожеланием всего наилучшего тому, кто его отсканирует</​del>​.
-Включается модуль опцией PRINT_RECEIPTS_ENABLED в [[alteriniconf|altre.ini]]. С помощью опции ​altre.ini PRINT_RECEIPTS_IN_PROFILE можно включить печать квитанций лично для каждого юзера прямо из его профиля Онлайн/​UKV.\\+Включается модуль опцией ​**PRINT_RECEIPTS_ENABLED** в [[alteriniconf|alter.ini]]. С помощью опции ​alter.ini **PRINT_RECEIPTS_IN_PROFILE** можно включить печать квитанций лично для каждого юзера прямо из его профиля Онлайн/​UKV.\\ 
 Выглядит это примерно так: Выглядит это примерно так:
 {{ :​receipts1.png?​direct&​400 |}} {{ :​receipts1.png?​direct&​400 |}}
 На наш взгляд в каких-либо пояснениях интерфейс модуля не нуждается,​ а вот про шаблон для него и генерацию QR-кодов стоит упомянуть отдельно. На наш взгляд в каких-либо пояснениях интерфейс модуля не нуждается,​ а вот про шаблон для него и генерацию QR-кодов стоит упомянуть отдельно.
  
 +
 +Начиная с релиза 1.0.9 стало возможным сохранять каждую из сгенерированных квитанций в БД. Для этого просто отметьте соответствующий флажок на форме перед, непосредственно,​ генерацией. Для использования этой возможности нужно всего лишь добавить в [[alteriniconf|alter.ini]] опцию //​PRINT_RECEIPTS_HISTORY_ENABLED=1//​.
 ==== Шаблон ==== ==== Шаблон ====
 ---- ----
Строка 13: Строка 16:
 Как несложно заметить - это обычный HTML-документ,​ разделенный на 3 секции(части):​ **heading**,​ **body**, **footer**. Как несложно заметить - это обычный HTML-документ,​ разделенный на 3 секции(части):​ **heading**,​ **body**, **footer**.
  
-  * **heading** - "​шапка"​ документа,​ добавляемая к нему единожды в самом начале. Кроме того, именно здесь должны быть описаны форматы дат/​лет/​месяцев а так же содержимое внедряемого QR-кода. Если оно вам в квитанции нужно, конечно.+  * **heading** - "​шапка"​ документа,​ добавляемая к нему единожды в самом начале. Кроме того, именно здесь должны быть описаны форматы дат/​лет/​месяцев а так же содержимое внедряемого QR-кода. Если оно вам в квитанции нужно, конечно. ​\\ Файл: //​payment_receipt_head.tpl//​
        
-  * **body** - основная и, собственно,​ "​повторяющаяся"​ для каждого абонента часть документа. Здесь должна содержаться вся информация,​ которую мы хотим донести до абонента.+  * **body** - основная и, собственно,​ "​повторяющаяся"​ для каждого абонента часть документа. Здесь должна содержаться вся информация,​ которую мы хотим донести до абонента. ​\\ Файл: //​payment_receipt.tpl//​
        
-  * **footer** - то же что и "​шапка",​ только в самом конце. Не предполагает наличия какой-либо полезной инфы(кроме закрывающих тегов </​body></​html>​) в принципе. Но если вам, например,​ очень хочется напомнить сотруднику,​ занимающемуся квитанциями,​ о чем-то очень-очень важном,​ когда он закончит разбор пачки отпечатанной бумаги - это именно то самое место.+  * **footer** - то же что и "​шапка",​ только в самом конце. Не предполагает наличия какой-либо полезной инфы(кроме закрывающих тегов </​body></​html>​) в принципе. Но если вам, например,​ очень хочется напомнить сотруднику,​ занимающемуся квитанциями,​ о чем-то очень-очень важном,​ когда он закончит разбор пачки отпечатанной бумаги - это именно то самое место.\\ Файл: //​payment_receipt_footer.tpl//​
  
 +
 +Начиная с релиза 1.0.9 стало возможным иметь неограниченное количество шаблонов,​ которые можно указывать прямо на форме печати квитанций. Например,​ если для разных предпренимателей должны быть разные бланки квитанций. Или если вы хотите печатать и не квитанции вовсе, а, скажем - уведомления(никто же вас не обязывает к тому, чтобы в шаблоне фигурировали суммы и оплаты). Просто разместите каталог с наименованием шаблона в **content/​documents/​receipt_template/​**,​ а уже в этот каталог положите файлы секций **heading**,​ **body**, **footer** - и ваш шаблон станет доступным в соответствующем выпадающем списке на форме модуля.
 ==== Поддерживаемые переменные и макросы ==== ==== Поддерживаемые переменные и макросы ====
 ----  ---- 
-\\  
 **{CURDATE}** - текущая дата \\ **{CURDATE}** - текущая дата \\
 +**{CURTIME}** - текущее время \\
 +**{CURDATENODELIMS}** - текущая дата без разделителей \\
 +**{CURDATETIMENODELIMS}** - текущее время без разделителей \\
 +**{INVOICE_NUM}** - номер квитанции. Генерируется как следующий ID в таблице //'​​invoices'//,​​ если квитанция в процессе генерации сохраняется в БД. \\ Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS} + '​​-'​​ + "​​**текущий индекс массива** выбранных для печати абонентов"​​. \\ Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS},​​ если в **heading**-секции указан макрос {INV_NUM_CURDATETIME}. \\
 +**{MONTH_COUNT}** - количество месяцев указанных для оплаты \\
 **{PAYFORPERIODSTR}** - оплата за период(месяцы),​ например:​ март 2019, апрель 2019 \\ **{PAYFORPERIODSTR}** - оплата за период(месяцы),​ например:​ март 2019, апрель 2019 \\
 **{PAYTILLMONTHYEAR}** - будет заменено на текущий год + следующий месяц(согласно формату даты, указанному в шаблоне) \\ **{PAYTILLMONTHYEAR}** - будет заменено на текущий год + следующий месяц(согласно формату даты, указанному в шаблоне) \\
Строка 28: Строка 37:
 **{SERVICENAME}** - наименование оплачиваемой услуги \\ **{SERVICENAME}** - наименование оплачиваемой услуги \\
 **{CONTRACT}** - номер договора пользователя \\ **{CONTRACT}** - номер договора пользователя \\
 +**{CONTRACTDATE}** - дата договора пользователя \\
 **{REALNAME}** - ФИО пользователя \\ **{REALNAME}** - ФИО пользователя \\
 **{CITY}** - город проживания пользователя \\ **{CITY}** - город проживания пользователя \\
Строка 33: Строка 43:
 **{BUILD}** - дом \\ **{BUILD}** - дом \\
 **{APT}** - квартира \\ **{APT}** - квартира \\
 +**{EXTADDR_POSTALCODE}** - почтовый индекс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\
 +**{EXTADDR_TOWNDISTR}** - район/​​ПГТ/​​округ/​​етс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\
 +**{EXTADDR_ADDREXT}** - дополнительная инфо по адресу из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\
 **{PHONE}** - телефон пользователя \\ **{PHONE}** - телефон пользователя \\
 **{MOBILE}** - мобильный пользователя \\ **{MOBILE}** - мобильный пользователя \\
Строка 49: Строка 62:
 Для корректной генерации и расположения QR-кодов используются следующие макросы:​ Для корректной генерации и расположения QR-кодов используются следующие макросы:​
  
-**{QR_CODES_CNT}** - количество QR-кодов,​ по сути равное количеству абонентов. Используется JS-скриптом для обхода элементов DOM с соответствующими индексами.+**{QR_CODES_CNT}** - количество QR-кодов,​ по сути равное количеству абонентов(генерируемых документов). Используется JS-скриптом для обхода элементов DOM с соответствующими индексами. Располагать в **heading**-секции.
  
-**{QR_CODE_CONTENT}** - данные,​ которые нужно "​упаковать"​ в QR-код+**{QR_CODE_CONTENT}** - данные,​ которые нужно "​упаковать"​ в QR-код. Располагать в **body**-секции.
  
-**{QR_INDEX}** - индекс или порядковый номер QR-кода,​ по которому JS-скрипт будет находить элемент DOM, который будет содержать сам QR-код или же содержит данные,​ которые нужно "​упаковать"​ в QR-код+**{QR_INDEX}** - индекс или порядковый номер QR-кода,​ по которому JS-скрипт будет находить элемент DOM, который будет содержать сам QR-код или же содержит данные,​ которые нужно "​упаковать"​ в QR-код. Располагать в **body**-секции.
  
-Вкратце,​ логика процесса генерации QR-кода следующая:​\\ +**{QR_EMBED}** - наличие этого макроса указывает,​ что генерация QR-кодов должна производится на стороне сервера и готовый QR-код встраивается в документ в виде закодированного в Base64 изображения. Также **необходимо** не забыть добавить в секцию **heading** скрытый инпут вида: 
 +<code html> 
 +<input id="​qr_embedded"​ type="​hidden"​ value="​0"​ /> 
 +</​code>​ 
 +со значением //"​value"​=1//​. Располагать в **heading**-секции.\\ Важно отметить,​ что, поскольку,​ делается это средствами гуглоАПИ http://​chart.apis.google.com/​chart - такая генерация занимает довольно много времени и не рекомендована для большого количества документов(хотя на тестах до 100 штук - вполне себе приемлемо - пара минут ожидания...). 
 + 
 +Вкратце,​ логика процесса генерации QR-кода следующая: ​
   В цикле от i == 1 до {QR_CODES_CNT} поочередно ищем DOM-элементы,​ например,​ с id="​qr_content_"​ + i, берем их содержимое, ​   В цикле от i == 1 до {QR_CODES_CNT} поочередно ищем DOM-элементы,​ например,​ с id="​qr_content_"​ + i, берем их содержимое, ​
   "​упаковываем"​ в QR-код, а QR-код в свою очередь пихаем в DOM-элементы с id="​qr"​ + i.    "​упаковываем"​ в QR-код, а QR-код в свою очередь пихаем в DOM-элементы с id="​qr"​ + i. 
- +Из чего следует,​ что сами QR-коды нигде не хранятся и генерируются на лету при открытии страницы в браузере(конечно,​ если мы не используем //​{QR_EMBED}//​). Таким образом,​ хранение собранного модулем HTML-документа требует в разы меньше дискового пространства,​ а так же документ становится гораздо легче для пересылки.
-Из чего следует,​ что сами QR-коды нигде не хранятся и генерируются на лету при открытии страницы в браузере. Таким образом,​ хранение собранного модулем HTML-документа требует в разы меньше дискового пространства,​ а так же документ становится гораздо легче для пересылки.+
 ---- ----
 \\ \\
Строка 79: Строка 97:
 <​code>​ <​code>​
     {MONTHYEAR_FORMAT_START}m-Y{MONTHYEAR_FORMAT_END}     {MONTHYEAR_FORMAT_START}m-Y{MONTHYEAR_FORMAT_END}
 +</​code>​
 +  * Номера квитанций будут генерироваться по принципу {CURDATENODELIMS} + {CURDATETIMENODELIMS},​ если вы добавите указанный ниже макрос:​
 +<​code>​
 +{INV_NUM_CURDATETIME}
 </​code>​ </​code>​
receipts.txt · Последние изменения: 2020/07/27 15:50 — bobr