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

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


receipts

Розбіжності

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

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

Наступна ревізія
Попередня ревізія
Наступна ревізія По сторонах наступні версії
receipts [2022/09/24 14:39]
127.0.0.1 зовнішнє редагування
receipts [2023/06/15 21:17]
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|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**-секції.\\ Важливо відзначити, що, оскількиробиться це засобами гуглоАПІ http://chart.apis.google.com/chart - така генерація займає доволі багато часу і не рекомендована для великої кількості документів (хоча на тестах до 100 штук - цілком собі прийнятно - пара хвилин очікування...).
  
-Вкратце, логика процесса генерации 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.txt · Востаннє змінено: 2024/05/31 13:06 повз nightfly