Биллинговая система Nodeny

Главная категория => Nodeny 50 => Тема начата: Elisium от 28 Февраля 2012, 17:00:56



Название: Карточка юзера - поле "Контракт"
Отправлено: Elisium от 28 Февраля 2012, 17:00:56
Доброго дня.
Биллинг 50.32

Хочется странного, но нужного.
Первое:
В карточке юзера есть поле "Контракт".
Хочется сделать это поле автоинкрементным и начать его, например, с 010000. При создании нового пользователя в этом поле должен отображаться номер его, так называемого, "контракта". Грубо говоря, это просто автоинкрементное число, добавляемое каждому юзеру.
А у существующих пользователей этот самый номер нужно проставить.
Второе:
На странице пользователя вместо персонального платежнего кода нужно выводить номер этого самого контракта в формате 6 цифр.

Кто нибуть подскажет чтото по данным вопросам ?


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 28 Февраля 2012, 17:10:34
Пойдет, если контракт будет = id?


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Elisium от 28 Февраля 2012, 18:39:26
Хм.. Как всегда ...
"Не спеши выполнять приказы, их в любой момент могут отменить" (с)

Оказывается, этот весь гемморой нужен был для подготовки (??) к обьединению двух биллингов ...
Настоящая задача такова:
в первом биллинге оставить ид юзеров от 1 до 010000, а во втором сделать эти же самые с 010001 до 020000.
При чем, само собой, скорректировать все платежи итд во втором биллинге.

Правильно ли я понимаю, что на втором биллинге нужно сделать следующее (теоретически):
1. Экспортировать таблицу Users, поправить в ней автоинкрементное поле id на 010001
2. Импортировать ее обратно.
3. В таблице Pays ко всем платежам, где есть ид юзера, добавить 010000.

Как то так ? ))) Нужно ли еще где нибуть исправлять данные значения ?


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 28 Февраля 2012, 18:58:17
На 2м биллинге:
update users set id=id+10000;
алиасы:
update users set mid=mid+10000 where mid>0;

экспортировать в файл, изменить имя на temp_users, залить на 1й и выполнить:

insert into users select * from temp_users;
drop table temp_users;

На 2м:

update pays set mid=mid+10000 where mid>0;
id записей (не клиентов) в таблице платежей не должны пересекаться с id в 1м биллинге
update pays set id=id+10000;

залить на 1й аналогичным способом.

тоже с users_trf.

В dopvalues надо грохнуть все неактуальные ревизии, потом parent_id=parent_id+10000 where dopfield_id in(select id from dopfields where parent_type=0); (подзапрос нужен чтобы не затронуть оборудование)

-----

По таблице pays для некоторых (влом искать) типов платежей не будет сходится _неключевая_ инфа, например ссылка на отредактированную запись будет не соответствовать т.к. id (не юзерские) строк изменились.

Ну еще нужно разрулить группы клиентов, если нужно чтоб новые были в новых, то заранее заапдейтить grp  в users и в таблице user_grp


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 28 Февраля 2012, 20:10:36
To Efendy
Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом?
PS или много захотелось :)


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 28 Февраля 2012, 21:28:29
To Efendy
Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом?
PS или много захотелось :)

UPDATE users SET contract = RIGHT(CONCAT('00000', id), 6);


А id = ППК это как? ППК - это избыточная информация, специально для защиты от ошибок, оно получается по формуле из id.


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 28 Февраля 2012, 21:40:45
Самый простой способ получить ППК:

SELECT id, CONCAT(id,RIGHT(SUBSTRING(id,1,1)+SUBSTRING(id,2,1)+SUBSTRING(id,3,1)+SUBSTRING(id,4,1),1)) AS ppk FROM users;


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Elisium от 28 Февраля 2012, 22:07:14
На 2м биллинге:
...
Ого... Многовасто )
Спасибо, будем пробовать.


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 29 Февраля 2012, 11:47:16
Да с ппк тупанул  :) , спасибо. А что поправить чтоб в дальнейшем завел юзера и его id сразу вносилось в поле контракт?


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 29 Февраля 2012, 12:07:02
Да с ппк тупанул  :) , спасибо. А что поправить чтоб в дальнейшем завел юзера и его id сразу вносилось в поле контракт?

в adduser.pl после

$id=$sth->{mysql_insertid} || $sth->{insertid};
$mId=$mid || $id; # id основной записи

добавить:

sql_do($dbh,"UPDATE users SET contract=id WHERE id=$mId");


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 01 Марта 2012, 10:31:11
Спасибо! Не сочти за наглость, но мы думали, думали и решили чтоб было Контракт=ППК.
Подскажи запрос для обновления поля контракт у всех и что добавить чтоб забивалось автоматом при заведении юзера.
Заранее Спасибо!


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 01 Марта 2012, 15:01:41
Так пойдет :

в adduser.pl после

$id=$sth->{mysql_insertid} || $sth->{insertid};
$mId=$mid || $id; # id основной записи

добавить:

sql_do($dbh,"UPDATE users SET contract=id WHERE id=$mppk"); ?


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 01 Марта 2012, 16:11:44
$mppk =  0;
$mppk += $_ foreach split //,$mId;
$mppk %= 10;
$mppk = $mId.$mppk;


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 02 Марта 2012, 00:01:03
$mppk =  0;
$mppk += $_ foreach split //,$mId;
$mppk %= 10;
$mppk = $mId.$mppk;
Может сонный уже, чет не пойму куда это вставить? В перле пока не силен...


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: Efendy от 02 Марта 2012, 01:52:10
$id=$sth->{mysql_insertid} || $sth->{insertid};
$mId=$mid || $id; # id основной записи

добавить:

$mppk =  0;
$mppk += $_ foreach split //,$mId;
$mppk %= 10;
$mppk = $mId.$mppk;
sql_do($dbh,"UPDATE users SET contract=$mppk WHERE id=$mId");


Название: Re: Карточка юзера - поле "Контракт"
Отправлено: poxy. от 02 Марта 2012, 10:15:15
Спасибо!