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 (с открытой второй датой) Как получить статус договора на момент начала действия нового статуса?
|
Автор: | 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/ |