Платежи из файла: відмінності між версіями

Матеріал з NoDeny
Перейти до навігації Перейти до пошуку
 
(Не показано 25 проміжних версій цього користувача)
Рядок 1: Рядок 1:
Модуль позволяет загрузить в NoDeny платежи из файла, распределив их по абонентам по определенному признаку. При повторной загрузке файла, дубликаты не будут созданы. Возможна загрузка файлов с разным форматом хранения платежей.
==Описание==
Модуль позволяет загрузить в NoDeny платежи из файла, распределив их по абонентам по определенному признаку:<br>
[[Файл:Pays from file 1.png|800px]]
<br><br>
При повторной загрузке файла, дубликаты не будут созданы:
<br>
[[Файл:Pays from file 2.png|800px]]
<br><br>


В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном файле необходимо в каждой строке указать имя параметра = значение. Пример:
==Настройка==
В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном документе необходимо в каждой строке указать имя параметра = значение. Пример:


<pre>
<pre>
Рядок 26: Рядок 34:
* user_column_number: номер колонки, в которой содержится идентификатор абонента
* user_column_number: номер колонки, в которой содержится идентификатор абонента
* user_field_in_db: имя поля в базе данных, в котором хранится идентификатор абонента
* user_field_in_db: имя поля в базе данных, в котором хранится идентификатор абонента
* user_db: имя таблицы, в которой хранится идентификатор абонента (по умолчанию data0)
* user_id_in_db: имя поля в базе данных, в котором хранится номер абонента (по умолчанию uid)
* amount_column_number: номер колонки, в которой содержится сумма пополнения
* amount_column_number: номер колонки, в которой содержится сумма пополнения
* only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая
* only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая
* div100_amount: 1 - необходимо разделить сумму на 100 (в csv хранится в копейках)
* div100_amount: 1 - необходимо разделить сумму на 100 (когда в csv хранится в копейках)
* comment_column_number: номер колонки, в которой содержится комментарий к платежу
* comment_column_number: номер колонки, в которой содержится комментарий к платежу
* date_column_number: номер колонки, в которой содержится дата платежа
* date_column_number: номер колонки, в которой содержится дата платежа
Рядок 36: Рядок 46:


Все колонки нумеруются с единицы.
Все колонки нумеруются с единицы.
==Установка модуля==
<pre>
    cd /usr/ports/textproc/p5-Text-CSV && make install clean
</pre>
или на Linux:
<pre>
    apt-get install libtext-csv-perl
</pre>


==Импорт платежей==
==Импорт платежей==


В разделе «Платежи» нажмите на кнопку «Загрузить из файла». В появившемся окне выберите документ с настойками, по которым мы хотим распарсить файл с платежами. Затем выберите сам файл.
В разделе «Платежи» нажмите на кнопку «Загрузить из файла». В появившемся окне выберите документ с настройками, по которым вы хотите распарсить файл с платежами. Затем выберите сам файл.


==Установка модуля==
==Ошибки в данных==
Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо определенного разделителя использован пробел, точка, тире и т.д. В таком случае можно попытаться подогнать идентификатор под нужный формат. К примеру, в качестве идентификатора выступает договор такого формата:
<pre>
Xчисло-число-число
</pre>
===Пример 1===
Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Кое-что удалить, кое-что заменить. Это делается двумя переменными:
<pre>
user_regexp_in = ^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$
user_regexp_out = X$1-$2-$3
</pre>
 
Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество [https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%B3%D1%83%D0%BB%D1%8F%D1%80%D0%BD%D1%8B%D0%B5_%D0%B2%D1%8B%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F информации по ним].
<pre>
user_regexp_in - что меняем
user_regexp_out - на что меняем
</pre>
То, что в регулярных выражениях внутри скобок, преобразуется в переменную "$ и дальше номер по порядку". В квадратных скобках варианты символа в данной позиции.
 
Рассмотрим несколько примеров:
 
<pre>
1-2 3
</pre>
 
Преобразуется в
<pre>
X1-2-3
</pre>
 
по таким правилам:
* X? - в исходном идентификаторе вначале может стоять буква X, а может нет. На это указывает знак вопроса
* [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем.
* (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает "любая цифра", а плюс - одна или больше цифр подряд). Это число запишется в переменную $1
 
в консоли вы можете легко проверить преобразования:
 
<pre>
perl -e'$a = "некорректные_данные"; $a =~ s/как_преобразовуем/во_что_преобразовуем/; print $a';
</pre>
 
Например:


<pre>
<pre>
    cd /usr/ports/textproc/p5-Text-CSV && make install clean
perl -e'$a = "11 - 22 - 33"; $a =~ s/^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$/X$1-$2-$3/; print $a';
</pre>
</pre>
или
 
===Пример 2===
<pre>
<pre>
    apt-get install libtext-csv-perl
user_regexp_in = .*?(\d{3,10}).*
user_regexp_out = $1
</pre>
</pre>
этот шаблон выудит первое число длинной от 3 до 10 цифр

Поточна версія на 07:53, 6 вересня 2021

Описание

Модуль позволяет загрузить в NoDeny платежи из файла, распределив их по абонентам по определенному признаку:


При повторной загрузке файла, дубликаты не будут созданы:


Настройка

В разделе «Документы» создайте папку с именем, например, «Импорт платежей». В этой папке создайте документ с любым именем, например, по имени банка, чью выписку вы хотите регулярно импортировать. В данном документе необходимо в каждой строке указать имя параметра = значение. Пример:

file_format = csv
file_encoding = cp1251
csv_delimiter = ;
skip_first_line = 1
user_column_number = 10
user_field_in_db = _erdpo
action_when_many_users = ignore
amount_column_number = 15
only_positive_amount = 1
div100_amount = 0
comment_column_number = 16
date_column_number = 5
date_column_format = %d.%m.%Y %H:%M
unique_columns = 5,12
  • file_format: формат файла
  • file_encoding: кодировка файла (cp1251/utf8)
  • csv_delimiter: разделитель столбцов в csv-файле
  • skip_first_line: 1 - не обрабатывать первую строку (обычно она содержит заголовок), 0 - обрабатывать
  • user_column_number: номер колонки, в которой содержится идентификатор абонента
  • user_field_in_db: имя поля в базе данных, в котором хранится идентификатор абонента
  • user_db: имя таблицы, в которой хранится идентификатор абонента (по умолчанию data0)
  • user_id_in_db: имя поля в базе данных, в котором хранится номер абонента (по умолчанию uid)
  • amount_column_number: номер колонки, в которой содержится сумма пополнения
  • only_positive_amount: 1 - разрешается только положительная сумма, 0 - любая
  • div100_amount: 1 - необходимо разделить сумму на 100 (когда в csv хранится в копейках)
  • comment_column_number: номер колонки, в которой содержится комментарий к платежу
  • date_column_number: номер колонки, в которой содержится дата платежа
  • date_column_format: формат даты (https://www.unix.com/man-page/FreeBSD/3/strftime/)
  • unique_columns: какие колонки определяют уникальность платежа - защита от дубликатов. Колонки "время" и "клиент" можно не указывать - проверяются автоматически
  • pay_category: категория платежа, по умолчанию 4 (банк)

Все колонки нумеруются с единицы.

Установка модуля

    cd /usr/ports/textproc/p5-Text-CSV && make install clean

или на Linux:

    apt-get install libtext-csv-perl

Импорт платежей

В разделе «Платежи» нажмите на кнопку «Загрузить из файла». В появившемся окне выберите документ с настройками, по которым вы хотите распарсить файл с платежами. Затем выберите сам файл.

Ошибки в данных

Вполне вероятно, что в данных могут быть ошибки в идентификаторах, например, лишние пробелы или иные символы, либо же вместо определенного разделителя использован пробел, точка, тире и т.д. В таком случае можно попытаться подогнать идентификатор под нужный формат. К примеру, в качестве идентификатора выступает договор такого формата:

Xчисло-число-число

Пример 1

Допустим в файле у нас указано X.10.12.14, а в биллинге содержится значение X10-12-14. Видно, что нужно сделать некоторые преобразования. Кое-что удалить, кое-что заменить. Это делается двумя переменными:

user_regexp_in = ^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$
user_regexp_out = X$1-$2-$3

Это регулярные выражение - довольно стандартный способ преобразования информации. В интернете громадное количество информации по ним.

user_regexp_in - что меняем
user_regexp_out - на что меняем

То, что в регулярных выражениях внутри скобок, преобразуется в переменную "$ и дальше номер по порядку". В квадратных скобках варианты символа в данной позиции.

Рассмотрим несколько примеров:

1-2 3

Преобразуется в

X1-2-3

по таким правилам:

  • X? - в исходном идентификаторе вначале может стоять буква X, а может нет. На это указывает знак вопроса
  • [ \-]? - далее может идти или пробел или тире (минус). А может не идти (на это указывает знак вопроса). Минус экранируется обратным слешем.
  • (\d+) - далее обязательно идет какое-то число (\d в регулярных выражениях означает "любая цифра", а плюс - одна или больше цифр подряд). Это число запишется в переменную $1

в консоли вы можете легко проверить преобразования:

perl -e'$a = "некорректные_данные"; $a =~ s/как_преобразовуем/во_что_преобразовуем/; print $a';

Например:

perl -e'$a = "11 - 22 - 33"; $a =~ s/^X?[ \-]?(\d+)[ \-]*(\d+)[ \-]*(\d+)$/X$1-$2-$3/; print $a';

Пример 2

user_regexp_in = .*?(\d{3,10}).*
user_regexp_out = $1

этот шаблон выудит первое число длинной от 3 до 10 цифр