forum.bitel.ru
http://forum.bitel.ru/

Изменение статуса договора. Где старый статус?
http://forum.bitel.ru/viewtopic.php?f=19&t=4594
Страница 1 из 1

Автор:  WhiteWind [ 28 сен 2010, 16:05 ]
Заголовок сообщения:  Изменение статуса договора. Где старый статус?

Пытаюсь в событии "Изменение статуса договора" получить текущий статус:
Код:
status = event.getStatus();
cid = event.getContractID();
cstm = new ContractStatusManager(con);
StatusContractList = cstm.getStatusList(cid, status.getDate1());

Получаю пустой StatusContractList.

Пытаюсь так:
Код:
status = event.getStatus();
cid = event.getContractID();
cstm = new ContractStatusManager(con);
curStatus = cstm.getStatus(cid, status.getDate1());

Получаю curStatus == null

Скрин статусов договора прилагается.
Статус пытаюсь сменить с 29.09.2010 (с открытой второй датой)
Как получить статус договора на момент начала действия нового статуса?

Вложения:
snapshot8.png
snapshot8.png [ 1.24 КБ | Просмотров: 10167 ]

Автор:  dimOn [ 28 сен 2010, 16:09 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

ContractStatusManager как раз отдаёт всё из этой таблички с промежутками. если там нет этого промежутка, то статуса никакого не будет. Если в какую-то дату никакой из отрезочков не попадает, то считается, что статус "активен".

Автор:  dimOn [ 28 сен 2010, 16:11 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

status.getDate1() это у вас начало нового статуса, если до того был закрытый промежуток, то вернётся null потому что под этой датой статуса нет. или что у вас было до того как вы ставили этот ваш статус?

Автор:  dimOn [ 28 сен 2010, 16:12 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Ещё такая тонкость: в момент срабатывания события все статусы в БД уже изменены, потому рыться там на предмет того, что было ДО этого какбы бессмысленно. Опишите что именно вам надо и для чего именно...

Автор:  WhiteWind [ 29 сен 2010, 06:35 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

В первом посте на скриншоте состояние статусов ДО изменения. Я меняю статус с 29.09.2010 и я ожидаю, что cstm.getStatus(cid, status.getDate1()) вернёт мне последний статус с открытой датой (29.09.2010- Активен)

Я хочу сделать так(псевдокод):
Код:
при попытке смены статуса:
если (новый_статус == АКТИВЕН && старый_статус != В_ПОДКЛЮЧЕНИИ) тогда
  новый_статус = В_ПОДКЛЮЧЕНИИ

Автор:  dimOn [ 29 сен 2010, 12:03 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Нет, если вы ставите статус 29-го, то сначала алгоритм разберётся какие именно статусы и как надо перетереть (в вашем случае из БД удалится последний открытый промежуток), а потом вызовется событие и отработает скрипт, внутри которого 29-го уже будет пустота. А после события новый статус запишется уже на это новое пустое место.
Вот в данный момент так. Вот здесь смотрите алгоритм смены статуса в псевдокоде, если непонятно - спрашивайте: viewtopic.php?f=22&t=4544

Автор:  WhiteWind [ 29 сен 2010, 12:49 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Ну, у меня-то 4.6, так что меня это не особо касается. Однако, я понял, что на момент вызова события в БД уже затёрты статусы, которые должны быть перекрыты.
Из этого всего следует, что я НИКАК не могу узнать, какой был (должен был быть) статус договора ДО смены статуса? Может быть, стоит добавить в ContractStatusChangingEvent список всех статусов до затирания? Или хотя бы список тех статусов, которые пересекаются с периодом устанавливаемого статуса?

Автор:  skyb [ 29 сен 2010, 12:51 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

А если с логов вытягивать :?:

Автор:  WhiteWind [ 29 сен 2010, 14:04 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Ага, и самому высчитывать перекрытие всех статусов?

Автор:  skyb [ 29 сен 2010, 14:13 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Не вдавался в суть вопроса, просто предложил :)

Автор:  dimOn [ 29 сен 2010, 14:54 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Да, в 4.6 аналогично всё работает, за исключением варианта, когда включаются приоритеты.
Статус самого договора (!) на момент срабатывания этого события ещё не менялся. То есть можно запросить договор по cid и там getStatus покажет статус договора. Уже после этого события у договора меняется статус, если устанавливаемый промежуток затрагивает и сегодняшний день, тогда он ставится для договора статус + генерируется событие "изменился статус договора".

Автор:  vdd [ 30 сен 2010, 11:32 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

dimOn писал(а):
Ещё такая тонкость: в момент срабатывания события все статусы в БД уже изменены, потому рыться там на предмет того, что было ДО этого какбы бессмысленно. Опишите что именно вам надо и для чего именно...


То есть разница между событиями "Изменение статуса договора" и "Статус договора изменен" только в статусе довора, а сама история статусов уже перетерта?

Автор:  WhiteWind [ 30 сен 2010, 14:50 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Так я узнаю только текущий статус. А если новый статус не включает сегодняшний день?
И как насчёт моего предложения передавать в событии старые статусы?

Автор:  vdd [ 30 сен 2010, 14:58 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

WhiteWind писал(а):
И как насчёт моего предложения передавать в событии старые статусы?

Может правильнее восстановить семантику события "изменение статуса"? Что бы в обработчике этого события можно было изменить статус и система корректировала статусы имеенно под измененный статус.

Автор:  dimOn [ 04 окт 2010, 10:41 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

vdd писал(а):
dimOn писал(а):
Ещё такая тонкость: в момент срабатывания события все статусы в БД уже изменены, потому рыться там на предмет того, что было ДО этого какбы бессмысленно. Опишите что именно вам надо и для чего именно...


То есть разница между событиями "Изменение статуса договора" и "Статус договора изменен" только в статусе довора, а сама история статусов уже перетерта?

Нет, первый - синхронный, второй - асинхронный. В первом можно поменять статус до изменения. Второй срабатывает не всегда, а только когда статус договора меняется прямо сейчас. Сама история статусов уже перетёрта до вызова первого из этих событий, да. В данный момент так.

Автор:  dimOn [ 04 окт 2010, 10:42 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

WhiteWind писал(а):
И как насчёт моего предложения передавать в событии старые статусы?
В общем виде это в TODO прописано, пока непонятно, как сделать, чтобы было красиво и всем понравилось. Вскоре переделывать придётся немного всю схему, тогда и реализуется так или иначе.

Автор:  dimOn [ 04 окт 2010, 10:43 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

vdd писал(а):
WhiteWind писал(а):
И как насчёт моего предложения передавать в событии старые статусы?

Может правильнее восстановить семантику события "изменение статуса"? Что бы в обработчике этого события можно было изменить статус и система корректировала статусы имеенно под измененный статус.

Чтобы событие вызывалось вообще до каких-либо сдвигов и затираний статусов? Возможно... но надо посмотреть зачем именно было сделано так, как сейчас.

Автор:  vdd [ 04 окт 2010, 11:47 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

dimOn писал(а):
vdd писал(а):
Может правильнее восстановить семантику события "изменение статуса"? Что бы в обработчике этого события можно было изменить статус и система корректировала статусы имеенно под измененный статус.

Чтобы событие вызывалось вообще до каких-либо сдвигов и затираний статусов?

Именно так.
И что бы перетирание статусов производилось уже по установленному (если конечно, обработчик события решит его изменить) статусу.
Например у нас, при ручном управлении АТС, смена абонотделом статуса на "отключен" подменяется обработчиком на "в отключении". А меняет статус договора на "отключен" уже обработчик выполнения CRM задачи и запросто на следующий день, а то и через несколько дней.

Автор:  vdd [ 04 окт 2010, 12:08 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

dimOn писал(а):
vdd писал(а):
dimOn писал(а):
Ещё такая тонкость: в момент срабатывания события все статусы в БД уже изменены, потому рыться там на предмет того, что было ДО этого какбы бессмысленно. Опишите что именно вам надо и для чего именно...


То есть разница между событиями "Изменение статуса договора" и "Статус договора изменен" только в статусе довора, а сама история статусов уже перетерта?

Нет, первый - синхронный, второй - асинхронный. В первом можно поменять статус до изменения. Сама история статусов уже перетёрта до вызова первого из этих событий, да. В данный момент так.


Вот и получается, что смотрит оператор на историю статусов и понять не может, почему она такая.

Автор:  dimOn [ 04 окт 2010, 12:14 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

vdd писал(а):
dimOn писал(а):
vdd писал(а):
dimOn писал(а):
Ещё такая тонкость: в момент срабатывания события все статусы в БД уже изменены, потому рыться там на предмет того, что было ДО этого какбы бессмысленно. Опишите что именно вам надо и для чего именно...


То есть разница между событиями "Изменение статуса договора" и "Статус договора изменен" только в статусе довора, а сама история статусов уже перетерта?

Нет, первый - синхронный, второй - асинхронный. В первом можно поменять статус до изменения. Сама история статусов уже перетёрта до вызова первого из этих событий, да. В данный момент так.


Вот и получается, что смотрит оператор на историю статусов и понять не может, почему она такая.

Ненене, о чём вы говорите? ЗАПИСЫВАЕТСЯ новый статус и история смены уже после события. Что в скрипте сменится, то и будет в БД для нового статуса.

Автор:  vdd [ 04 окт 2010, 12:24 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Так вы же сами написали, что история статусов перетирается до вызова "изменение статуса".

Автор:  dimOn [ 04 окт 2010, 12:50 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Перетирается именно промежутки, привязанные к договору. Но не лог изменений и не новый пришедший статус.

Автор:  vdd [ 04 окт 2010, 13:04 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Операторы и смотрят промежутки. Абоненсткая плата по ним начисляется. И вся повременка.

Автор:  dimOn [ 04 окт 2010, 14:15 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Я к тому, что как можно не понять почему именно такая история статусов? И причём тут событие до или после? Что изменится то?

Автор:  vdd [ 04 окт 2010, 14:29 ]
Заголовок сообщения:  Re: Изменение статуса договора. Где старый статус?

Потому что статусы были поправлены по событию "отключен", а обработчик события "изменение статуса" поставил статус "активен". Фактически это означает, что договор вообще не переключался в статус "отключен", а история статусов этому не соответствует.

Может быть уже пора узнать причину, почему обработчик "изменение статуса" вызывается после того, как практически все изменения проведены, в то время как семантика "тонко намекает" на то, что пользователь может изменить статус внутри этого обработчика и получить реакцию системы именно на измененный статус?

Страница 1 из 1 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/