Користувальницькькі налаштування

Налаштування сайту


receipts

Розбіжності

Тут показані розбіжності між вибраною ревізією та поточною версією сторінки.

Посилання на цей список змін

Наступна ревізія
Попередня ревізія
receipts [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
receipts [2024/05/31 13:06] (поточний)
nightfly
Рядок 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|alter.ini]]. С помощью опции alter.ini **PRINT_RECEIPTS_IN_PROFILE** можно включить печать квитанций лично для каждого юзера прямо из его профиля Онлайн/UKV.\\+Вмикається модуль опцією **PRINT_RECEIPTS_ENABLED** в [[alteriniconf|alter.ini]]. За допомогою опції alter.ini **PRINT_RECEIPTS_IN_PROFILE** можна ввімкнути друк квитанцій особисто для кожного користувача прямо з його профілю \\.
  
-Выглядит это примерно так:+Виглядає це приблизно так:
 {{ :receipts1.png?direct&400 |}} {{ :receipts1.png?direct&400 |}}
-На наш взгляд в каких-либо пояснениях интерфейс модуля не нуждается, а вот про шаблон для него и генерацию QR-кодов стоит упомянуть отдельно.+На наш погляд, якихось пояснень інтерфейс модуля не потребує, а ось про шаблон для нього і генерацію QR-кодів варто згадати окремо.
  
  
-Начиная с релиза 1.0.9 стало возможным сохранять каждую из сгенерированных квитанций в БД. Для этого просто отметьте соответствующий флажок на форме перед, непосредственно, генерацией. Для использования этой возможности нужно всего лишь добавить в [[alteriniconf|alter.ini]] опцию //PRINT_RECEIPTS_HISTORY_ENABLED=1//.+Починаючи з релізу 1.0.9 стало можливим зберігати кожну зі згенерованих квитанцій у БД. Для цього просто відмітьте відповідний чекбокс на формі безпосередньо перед генерацією. Для використання цієї можливості потрібно всього лише додати в [[alteriniconf|alter.ini]] опцію //PRINT_RECEIPTS_HISTORY_ENABLED=1//.
 ==== Шаблон ==== ==== Шаблон ====
 ---- ----
-Пример шаблона квитанции вы найдете по этому пути: \\ +Приклад шаблону квитанції ви знайдете за цим шляхом: \\ 
 **content/documents/receipt_template/** **content/documents/receipt_template/**
  
-Как несложно заметить - это обычный HTML-документ, разделенный на 3 секции(части): **heading**, **body**, **footer**.+Нескладно помітити, що це - звичайний HTML-документ, розділений на 3 секції (частини): **heading**, **body**, **footer**.
  
-  * **heading** - "шапка" документа, добавляемая к нему единожды в самом начале. Кроме того, именно здесь должны быть описаны форматы дат/лет/месяцев а так же содержимое внедряемого QR-кода. Если оно вам в квитанции нужно, конечно. \\ Файл: //payment_receipt_head.tpl//+  * **heading** - "шапка" документа, що додається до нього один раз на самому початку. Крім того, саме тут мають бути описані формати дат/років/місяців, а також вміст інтегрованого QR-коду. Якщо він вам у квитанції потрібен, звісно. \\ Файл: //payment_receipt_head.tpl//
        
-  * **body** - основная и, собственно, "повторяющаяся" для каждого абонента часть документа. Здесь должна содержаться вся информация, которую мы хотим донести до абонента. \\ Файл: //payment_receipt.tpl//+  * **body** - основна і, власне, "повторювана" для кожного абонента частина документа. Тут має міститися вся інформація, яку ми хочемо донести до абонента. \\ Файл: //payment_receipt.tpl//.
        
-  * **footer** - то же что и "шапка", только в самом конце. Не предполагает наличия какой-либо полезной инфы(кроме закрывающих тегов </body></html>) в принципе. Но если вам, например, очень хочется напомнить сотруднику, занимающемуся квитанциями, о чем-то очень-очень важном, когда он закончит разбор пачки отпечатанной бумаги - это именно то самое место.\\ Файл: //payment_receipt_footer.tpl//+  * **footer** - те саме що й "шапка", тільки в самому кінці. Не передбачає наявності будь-якої корисної інфи (крім закриваючих тегів </body></html>) у принципі. Але якщо вам, наприклад, дуже хочеться нагадати співробітникові, який займається квитанціями, про щось дуже-дуже важливе, коли він закінчить розбір пачки надрукованого паперу - це саме те місце. \\ Файл: //payment_receipt_footer.tpl//.
  
  
-Начиная с релиза 1.0.9 стало возможным иметь неограниченное количество шаблонов, которые можно указывать прямо на форме печати квитанций. Например, если для разных предпренимателей должны быть разные бланки квитанций. Или если вы хотите печатать и не квитанции вовсе, а, скажем - уведомления(никто же вас не обязывает к тому, чтобы в шаблоне фигурировали суммы и оплаты). Просто разместите каталог с наименованием шаблона в **content/documents/receipt_template/**, а уже в этот каталог положите файлы секций **heading**, **body**, **footer** - и ваш шаблон станет доступным в соответствующем выпадающем списке на форме модуля. +Починаючи з релізу 1.0.9 стало можливим мати необмежену кількість шаблонів, які можна вказувати прямо на формі друку квитанцій. Наприклад, якщо для різних підприємців мають бути різні бланки квитанцій. Або якщо ви хочете друкувати і не квитанції зовсім, а, скажімо, повідомлення (ніхто ж вас не зобов'язує до того, щоб у шаблоні фігурували суми та оплати). Просто розмістіть каталог із найменуванням шаблону в **content/documents/receipt_template/**, а вже в цей каталог покладіть файли секцій **heading**, **body**, **footer** - і ваш шаблон стане доступним у відповідному випадаючому списку на формі модуля. 
-==== Поддерживаемые переменные и макросы ====+==== Підтримувані змінні та макроси ====
 ----  ---- 
-**{CURDATE}** - текущая дата \\ +**{CURDATE}** - поточна дата \\ 
-**{CURTIME}** - текущее время \\ +**{CURTIME}** - поточний час \\ 
-**{CURDATENODELIMS}** - текущая дата без разделителей \\ +**{CURDATENODELIMS}** - поточна дата без роздільників \\ 
-**{CURDATETIMENODELIMS}** - текущее время без разделителей \\ +**{CURDATETIMENODELIMS}** - поточний час без роздільників \\ 
-**{INVOICE_NUM}** - номер квитанции. Генерируется как следующий ID в таблице //'​invoices'//,​ если квитанция в процессе генерации сохраняется в БД. \\ Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS} + '​-'​ + "​**текущий индекс массива** выбранных для печати абонентов"​. \\ Или просто как {CURDATENODELIMS} + {CURDATETIMENODELIMS},​ если в **heading**-секции указан макрос {INV_NUM_CURDATETIME}. \\ +**{INVOICE_NUM}** - номер квитанції. Генерується як наступний ID у таблиці //'invoices'//, якщо квитанція в процесі генерації зберігається в БД. \\ Або просто як {CURDATENODELIMS} + {CURDATETIMENODELIMS} + '-' + "**поточний індекс масиву** обраних для друку абонентів". \\ Або просто як {CURDATENODELIMS} + {CURDATETIMENODELIMS}, якщо в **heading**-секції вказано макрос {INV_NUM_CURDATETIME}. \\ 
-**{MONTH_COUNT}** - количество месяцев указанных для оплаты \\ +**{MONTH_COUNT}** - кількість місяців зазначених для оплати \\ 
-**{PAYFORPERIODSTR}** - оплата за период(месяцы), например: март 2019, апрель 2019 \\ +**{PAYFORPERIODSTR}** - оплата за період(місяці), наприклад: березень 2019, квітень 2019 \\ 
-**{PAYTILLMONTHYEAR}** - будет заменено на текущий год + следующий месяц(согласно формату даты, указанному в шаблоне) \\ +**{PAYTILLMONTHYEAR}** - буде замінено на поточний рік + наступний місяць (згідно з форматом дати, зазначеним у шаблоні) \\ 
-**{PAYTILLDATE}** - оплатить до указанной даты \\ +**{PAYTILLDATE}** - оплатити до зазначеної дати \\ 
-**{SERVICENAME}** - наименование оплачиваемой услуги \\ +**{SERVICENAME}** - найменування оплачуваної послуги \\ 
-**{CONTRACT}** - номер договора пользователя \\ +**{CONTRACT}** - номер договору користувача \\ 
-**{CONTRACTDATE}** - дата договора пользователя \\ +**{CONTRACTDATE}** - дата договору користувача \\ 
-**{REALNAME}** - ФИО пользователя \\ +**{REALNAME}** - ПІБ користувача \\ 
-**{CITY}** - город проживания пользователя \\ +**{CITY}** - місто проживання користувача \\ 
-**{STREET}** - улица проживания пользователя \\ +**{STREET}** - вулиця проживання користувача \\ 
-**{BUILD}** - дом \\+**{BUILD}** - будинок \\
 **{APT}** - квартира \\ **{APT}** - квартира \\
-**{EXTADDR_POSTALCODE}** - почтовый индекс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\ +**{EXTADDR_POSTALCODE}** - поштовий індекс з додаткових полів адреси. Вимагає ввімкненої alter.ini опції ADDRESS_EXTENDED_ENABLED. \\ 
-**{EXTADDR_TOWNDISTR}** - район/​ПГТ/​округ/​етс из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\ +**{EXTADDR_TOWNDISTR}** - район/ПГТ/округ/етс із додаткових полів адреси. Потребує ввімкненої alter.ini опції ADDRESS_EXTENDED_ENABLED. \\ 
-**{EXTADDR_ADDREXT}** - дополнительная инфо по адресу из дополнительных полей адреса. Требует включенной alter.ini опции ADDRESS_EXTENDED_ENABLED. \\ +**{EXTADDR_ADDREXT}** - додаткова інфо за адресою з додаткових полів адреси. Потребує ввімкненої alter.ini опції ADDRESS_EXTENDED_ENABLED. \\ 
-**{PHONE}** - телефон пользователя \\ +**{PHONE}** - телефон користувача \\ 
-**{MOBILE}** - мобильный пользователя \\ +**{MOBILE}** - мобільний користувача \\ 
-**{TARIFF}** - тариф пользователя \\ +**{TARIFF}** - тариф користувача \\ 
-**{TARIFFPRICE}** - стоимость тарифа пользователя \\ +**{TARIFFPRICE}** - вартість тарифу користувача \\ 
-**{TARIFFPRICECOINS}** - стоимость тарифа пользователя выраженная в копейках  \\ +**{TARIFFPRICECOINS}** - вартість тарифу користувача виражена в копійках \\ 
-**{TARIFFPRICEDECIMALS}** - стоимость тарифа пользователя с двумя знаками после запятой \\ +**{TARIFFPRICEDECIMALS}** - вартість тарифу користувача з двома знаками після коми \\ 
-**{SUMM}** - сумма к оплате \\ +**{SUMM}** - сума до сплати \\ 
-**{SUMMCOINS}** - сумма к оплате выраженная в копейках \\ +**{SUMMCOINS}** - сума до сплати виражена в копійках \\\ 
-**{SUMMDECIMALS}** - сумма к оплате с двумя знаками после запятой \\+**{SUMMDECIMALS}** - сума до сплати з двома знаками після коми \\
 \\ \\
  
-==== QR-коды и специальные переменные и макросы ====+==== QR-коди спеціальні змінні та макроси ====
 ---- ----
-Для генерация QR-кодов предполагается использование JS-библиотеки **jquery.qrcode** и соответствующей минимальной "обвязки" для нее. В шаблоне-примере уже имеются все минимально необходимые для этого скрипты.\\ +Для генерації QR-кодів передбачається використання JS-бібліотеки **jquery.qrcode** і відповідної мінімальної "обв`язки" для неї. У шаблоні-прикладі вже є всі мінімально необхідні для цього скрипти. \\
  
-Для корректной генерации и расположения QR-кодов используются следующие макросы:+Для коректної генерації та розташування QR-кодів використовуються такі макроси: 
  
-**{QR_CODES_CNT}** - количество QR-кодов, по сути равное количеству абонентов(генерируемых документов). Используется JS-скриптом для обхода элементов DOM с соответствующими индексами. Располагать в **heading**-секции.+**{QR_CODES_CNT}** - кількість QR-кодів, яка, по суті, дорівнює кількості абонентів (документів, що генеруються). Використовується JS-скриптом для обходу елементів DOM з відповідними індексами. Розташовувати в **heading**-секції.
  
-**{QR_CODE_CONTENT}** - данные, которые нужно "упаковать" в QR-код. Располагать в **body**-секции.+**{QR_CODE_CONTENT}** - дані, які потрібно "упакувати" в QR-код. Розташовувати в **body**-секції.
  
-**{QR_INDEX}** - индекс или порядковый номер QR-кода, по которому JS-скрипт будет находить элемент DOM, который будет содержать сам QR-код или же содержит данные, которые нужно "упаковать" в QR-код. Располагать в **body**-секции.+**{QR_INDEX}** - індекс або порядковий номер QR-коду, за яким JS-скрипт знаходитиме елемент DOM, який міститиме сам QR-код або ж містить дані, що їх треба "упакувати" в QR-код. Розташовувати в **body**-секції.
  
-**{QR_EMBED}** - наличие этого макроса указывает, что генерация QR-кодов должна производится на стороне сервера и готовый QR-код встраивается в документ в виде закодированного в Base64 изображения. Также **необходимо** не забыть добавить в секцию **heading** скрытый инпут вида:+**{QR_EMBED}** - наявність цього макросу вказує, що генерація QR-кодів повинна проводитися на стороні сервера і готовий QR-код вбудовується в документ у вигляді закодованого в Base64 зображення. Також **необхідно** не забути додати в секцію **heading** прихований інпут виду:
 <code html> <code html>
 <input id="qr_embedded" type="hidden" value="0" /> <input id="qr_embedded" type="hidden" value="0" />
 </code> </code>
-со значением //"value"=1//. Располагать в **heading**-секции.\\ Важно отметить, что, поскольку, делается это средствами гуглоАПИ http://chart.apis.google.com/chart - такая генерация занимает довольно много времени и не рекомендована для большого количества документов(хотя на тестах до 100 штук - вполне себе приемлемо - пара минут ожидания...).+зі значенням //"value"=1//. Розташовувати в **heading**-секції.\\ Важливо відзначити, <del> що, оскільки, робиться це засобами гуглоАПІ http://chart.apis.google.com/chart - така генерація займає доволі багато часу і не рекомендована для великої кількості документів (хоча на тестах до 100 штук - цілком собі прийнятно - пара хвилин очікування...).</del> Починаючи з Ubilling 1.4.6 для генерації використовується libGD - все дуже швидко та гарно.
  
-Вкратце, логика процесса генерации QR-кода следующая:  +Якщо коротко - логіка процесу генерації 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-коди ніде не зберігаються і генеруються на льоту під час відкриття сторінки в браузері (звісно, якщо ми не використовуємо //{QR_EMBED}//). Таким чином, зберігання зібраного модулем HTML-документа вимагає в рази менше дискового простору, а так само документ стає набагато легшим для пересилання.
 ---- ----
 \\ \\
-Отдельно стоит сказать о специальных макросах, которые **должны** располагаться исключительно в единственном экземпляре и исключительно в **heading**-секции внутри HTML-комментария(<!-- -->): +Окремо варто сказати про спеціальні макроси, які **повинні** розташовуватися виключно в єдиному екземплярі та виключно в **heading**-секції всередині HTML-коментаря (<!-- -->): 
-  * Блок данных которые нужно "упаковать" в QR-код +  * Блок даних, які потрібно "упакувати" в QR-код 
 <code> <code>
     {QR_EXT_START}     {QR_EXT_START}
Рядок 89: Рядок 89:
     {QR_EXT_END}     {QR_EXT_END}
 </code> </code>
-  * Формат даты, который мы хотим использовать для наших квитанций. По умолчанию установлен стандартный для наших широт \\ +  * Формат дати, який ми хочемо використовувати для наших квитанцій. За замовчуванням встановлено стандартний для наших широт \\ 
-формат: **дд.мм.гггг**. Но в этом макросе вы можете указать любой валидный формат для PHP функции [[https://www.php.net/manual/en/function.date.php|date()]].+формат: **дд.мм.ммггг**. Але в цьому макросі ви можете вказати будь-який валідний формат для PHP функції [[https://www.php.net/manual/en/function.date.php|date()]].
 <code> <code>
     {DATES_FORMAT_START}Y-m-d{DATES_FORMAT_END}     {DATES_FORMAT_START}Y-m-d{DATES_FORMAT_END}
 </code> </code>
-  * Формат месяц-год(да-да, для макроса {PAYTILLMONTHYEAR}). По умолчанию так же установлен стандартный для наших широт \\ +  * Формат місяць-рік (так-так, для макроса {PAYTILLMONTHYEAR}). За замовчуванням так само встановлено стандартний для наших широт \\ 
-формат: **мм.гггг**. Но в этом макросе вы можете указать любой валидный формат для PHP функции [[https://www.php.net/manual/en/function.date.php|date()]].+формат: **мм.ггггг**. Але в цьому макросі ви можете вказати будь-який валідний формат для PHP функції [[https://www.php.net/manual/en/function.date.php|date()]].
 <code> <code>
     {MONTHYEAR_FORMAT_START}m-Y{MONTHYEAR_FORMAT_END}     {MONTHYEAR_FORMAT_START}m-Y{MONTHYEAR_FORMAT_END}
 </code> </code>
-  * Номера квитанций будут генерироваться по принципу {CURDATENODELIMS} + {CURDATETIMENODELIMS}, если вы добавите указанный ниже макрос:+  * Номери квитанцій будуть генеруватись за принципом {CURDATENODELIMS} + {CURDATETIMENODELIMS}, якщо ви додасте вказаний нижче макрос:
 <code> <code>
 {INV_NUM_CURDATETIME} {INV_NUM_CURDATETIME}
 </code> </code>
receipts.1664019551.txt.gz · Востаннє змінено: 2022/09/24 14:39 повз 127.0.0.1