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

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


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