Биллинговая система Nodeny
23 Ноября 2024, 00:44:56 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Прекращена поддержка версии Nodeny 49
 
   Начало   Помощь Поиск Войти Регистрация  
Страниц: [1] 2
  Печать  
Автор Тема: Карточка юзера - поле "Контракт"  (Прочитано 8862 раз)
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« : 28 Февраля 2012, 17:00:56 »

Доброго дня.
Биллинг 50.32

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

Кто нибуть подскажет чтото по данным вопросам ?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #1 : 28 Февраля 2012, 17:10:34 »

Пойдет, если контракт будет = id?
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #2 : 28 Февраля 2012, 18:39:26 »

Хм.. Как всегда ...
"Не спеши выполнять приказы, их в любой момент могут отменить" (с)

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

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

Как то так ? ))) Нужно ли еще где нибуть исправлять данные значения ?
« Последнее редактирование: 28 Февраля 2012, 18:41:25 от Elisium » Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #3 : 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
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #4 : 28 Февраля 2012, 20:10:36 »

To Efendy
Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом?
PS или много захотелось Улыбающийся
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #5 : 28 Февраля 2012, 21:28:29 »

To Efendy
Что поправить для id=номер контракта=ппк? Я так понимаю исправление будет sql-запросом, что исправить для автоматического заполнения поля "контракт" и работы всего алгоритма (отталкиваясь от id автоматом вбить все остальное) в целом?
PS или много захотелось Улыбающийся

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


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

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #6 : 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;
Записан
Elisium
NoDeny
Старожил
*

Карма: 19
Offline Offline

Сообщений: 360


На форумах "спасибом" называется плюс к карме.


Просмотр профиля
« Ответ #7 : 28 Февраля 2012, 22:07:14 »

На 2м биллинге:
...
Ого... Многовасто )
Спасибо, будем пробовать.
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #8 : 29 Февраля 2012, 11:47:16 »

Да с ппк тупанул  Улыбающийся , спасибо. А что поправить чтоб в дальнейшем завел юзера и его id сразу вносилось в поле контракт?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #9 : 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");
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #10 : 01 Марта 2012, 10:31:11 »

Спасибо! Не сочти за наглость, но мы думали, думали и решили чтоб было Контракт=ППК.
Подскажи запрос для обновления поля контракт у всех и что добавить чтоб забивалось автоматом при заведении юзера.
Заранее Спасибо!
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #11 : 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"); ?
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #12 : 01 Марта 2012, 16:11:44 »

$mppk =  0;
$mppk += $_ foreach split //,$mId;
$mppk %= 10;
$mppk = $mId.$mppk;
Записан
poxy.
NoDeny
Спец
*

Карма: 10
Offline Offline

Сообщений: 844



Просмотр профиля
« Ответ #13 : 02 Марта 2012, 00:01:03 »

$mppk =  0;
$mppk += $_ foreach split //,$mId;
$mppk %= 10;
$mppk = $mId.$mppk;
Может сонный уже, чет не пойму куда это вставить? В перле пока не силен...
Записан
Efendy
Администратор
Спец
*****

Карма: 138
Online Online

Сообщений: 4790



Просмотр профиля
« Ответ #14 : 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");
Записан
Страниц: [1] 2
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.20 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!