Обработка задач по событию ядра "Поступление платежа", создание новой задачи и изменение существующей
Материал из BiTel WiKi
Skandinav (Обсуждение | вклад) |
Skandinav (Обсуждение | вклад) (→код скрипта) |
||
(2 промежуточные версии не показаны) | |||
Строка 5: | Строка 5: | ||
В событиях привязывается к событию "Приход платежа". | В событиях привязывается к событию "Приход платежа". | ||
- | Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) | + | Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. |
+ | Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) | ||
+ | Если не найдено ни одной открытой задачи - создается новая задача CRM, заполняются все поля задачи, все даты ставятся по дате занечения платежа, в данном случае текущая дата, к задаче привязывается исполнитель (опять же из поля "квартал" адреса договора) и задача закрывается. | ||
+ | главное условие - перед занесением платежа необходимо заполнить поле адрес подключения в договоре. | ||
== код скрипта == | == код скрипта == | ||
+ | между версиями 4.5 и 4.6 API биллинга существуют небольшие отличия. | ||
+ | отличия обозначены соответствующими блоками. | ||
import java.sql.*; | import java.sql.*; | ||
Строка 18: | Строка 23: | ||
import ru.bitel.bgbilling.plugins.crm.server.dao.*; | import ru.bitel.bgbilling.plugins.crm.server.dao.*; | ||
import ru.bitel.bgbilling.plugins.crm.common.model.*; | import ru.bitel.bgbilling.plugins.crm.common.model.*; | ||
+ | |||
+ | для версии 4.6 добавить: | ||
+ | |||
+ | import ru.bitel.bgbilling.plugins.crm.server.model.*; | ||
+ | import ru.bitel.common.model.*; | ||
+ | |||
+ | |||
int DATE_ZAKL_DOG = 25; | int DATE_ZAKL_DOG = 25; | ||
int ADDR = 7; | int ADDR = 7; | ||
Строка 30: | Строка 42: | ||
contr = CM.getContractByID( cid ); | contr = CM.getContractByID( cid ); | ||
capv = cpu.getAddressParam(cid,ADDR); | capv = cpu.getAddressParam(cid,ADDR); | ||
+ | |||
+ | для версии 4.5: | ||
filter = new RegisterTaskManager.TaskFilter(); | filter = new RegisterTaskManager.TaskFilter(); | ||
+ | для версии 4.6: | ||
+ | filter = new TaskFilter(); | ||
+ | |||
filter.cid = cid; | filter.cid = cid; | ||
filter.orders = new ArrayList(); | filter.orders = new ArrayList(); | ||
tl = rtm.getNoClosedTaskList(cid); | tl = rtm.getNoClosedTaskList(cid); | ||
if ( cont == null ) { // проверяем наличие в параметрах договора даты заключения договора. если дата заключения проставлена - выходим. | if ( cont == null ) { // проверяем наличие в параметрах договора даты заключения договора. если дата заключения проставлена - выходим. | ||
+ | |||
+ | для версии 4.5: | ||
cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getDate().getTime() ); | cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getDate().getTime() ); | ||
+ | |||
+ | для версии 4.6: | ||
+ | cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getPaymentDate(), payment.getUserID() ); | ||
+ | |||
contr.setComment ( cpu.getStringParam ( cid, FIO )); | contr.setComment ( cpu.getStringParam ( cid, FIO )); | ||
query = "UPDATE contract SET comment=? WHERE id=?"; | query = "UPDATE contract SET comment=? WHERE id=?"; | ||
Строка 42: | Строка 65: | ||
psUpdate.setInt( 2, cid ); | psUpdate.setInt( 2, cid ); | ||
psUpdate.executeUpdate(); | psUpdate.executeUpdate(); | ||
+ | |||
+ | для версии 4.5: | ||
curtime = payment.getDate().getTime(); | curtime = payment.getDate().getTime(); | ||
+ | |||
+ | для версии 4.6: | ||
+ | curtime = payment.getPaymentDate(); | ||
+ | |||
+ | |||
cnt = rtm.getTaskCount(filter); | cnt = rtm.getTaskCount(filter); | ||
prt = rtm.getTaskList(filter, new Page (0,0)); | prt = rtm.getTaskList(filter, new Page (0,0)); |
Текущая версия на 04:48, 27 апреля 2009
описание
Скрипт родился с целью частично автоматизировать работу абонентского отдела при обработке новых подключений.
Скрипт подключается в меню Автоматизация -> функции скриптов поведения. В событиях привязывается к событию "Приход платежа".
Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) Если не найдено ни одной открытой задачи - создается новая задача CRM, заполняются все поля задачи, все даты ставятся по дате занечения платежа, в данном случае текущая дата, к задаче привязывается исполнитель (опять же из поля "квартал" адреса договора) и задача закрывается.
главное условие - перед занесением платежа необходимо заполнить поле адрес подключения в договоре.
код скрипта
между версиями 4.5 и 4.6 API биллинга существуют небольшие отличия. отличия обозначены соответствующими блоками.
import java.sql.*; import java.util.*; import bitel.billing.server.contract.bean.*; import bitel.billing.server.util.*; import bitel.billing.server.model.*; import ru.bitel.bgbilling.plugins.crm.server.bean.*; import ru.bitel.bgbilling.plugins.crm.server.dao.*; import ru.bitel.bgbilling.plugins.crm.common.model.*;
для версии 4.6 добавить:
import ru.bitel.bgbilling.plugins.crm.server.model.*; import ru.bitel.common.model.*;
int DATE_ZAKL_DOG = 25; int ADDR = 7; int FIO = 9; int TYPE_ID = 5; rtm = new RegisterTaskManager(con); payment = event.getPayment(); cid = event.getContractID(); CM = new ContractManager ( con ); cpu = new ContractParamUtils ( con ); cont = cpu.getDateParam (cid , DATE_ZAKL_DOG ); contr = CM.getContractByID( cid ); capv = cpu.getAddressParam(cid,ADDR);
для версии 4.5:
filter = new RegisterTaskManager.TaskFilter();
для версии 4.6:
filter = new TaskFilter();
filter.cid = cid; filter.orders = new ArrayList(); tl = rtm.getNoClosedTaskList(cid); if ( cont == null ) { // проверяем наличие в параметрах договора даты заключения договора. если дата заключения проставлена - выходим.
для версии 4.5:
cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getDate().getTime() );
для версии 4.6:
cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getPaymentDate(), payment.getUserID() );
contr.setComment ( cpu.getStringParam ( cid, FIO )); query = "UPDATE contract SET comment=? WHERE id=?"; psUpdate = con.prepareStatement( query ); psUpdate.setString( 1, cpu.getStringParam ( cid, FIO )); psUpdate.setInt( 2, cid ); psUpdate.executeUpdate();
для версии 4.5:
curtime = payment.getDate().getTime();
для версии 4.6:
curtime = payment.getPaymentDate();
cnt = rtm.getTaskCount(filter); prt = rtm.getTaskList(filter, new Page (0,0)); if ( tl.size() > 0 ) { // проверяем наличие задачи CRM в договоре, если нет, создаем новую, // заполняем все поля, привязываем к мастеру, проставляем все даты текущими. prts = tl.size(); for (int i=0; i<prts;i++) { //перебираем существующие задачи. task = tl.get(i); rtm.loadExecutorList(task); if (task.getTypeID() == TYPE_ID) { //если незакрытая задача типа "новое подключение" - if (task.getAcceptTime() == null ) { task.setAcceptTime(curtime); } if (task.getCloseTime() == null ) { task.setCloseTime(curtime); } if (task.getExecuteDate() == null) { task.setExecuteDate(curtime); } task.setOpenUserID(payment.getUserID()); task.setLastmodUserID(payment.getUserID()); tlst=task.getExecutors(); if (tlst.size() == 0 ) { llst=task.getExecutors(); query = "SELECT * FROM register_executor"; re = con.prepareStatement(query); ResultSet re = re.executeQuery(); while (re.next()) { if (capv.getAddress().indexOf(re.getString(2)) != -1) { lst.add(re.getInt(1)); } //End of IF } //End of WHILE for (int i=0; i<llst.size(); i++) { query = "INSERT register_task_executor SET tid=? , eid=?"; psu1 = con.prepareStatement(query); psu1.setInt(1,task.getID()); psu1.setInt(2,llst.get(i)); psu1.executeUpdate(); } //End of FOR } //End of IF task.setStatus(2); rtm.updateTask(String.valueOf(task.getID()),task); } //End of IF } // end of FOR } else { print (" no task count, making new task" ); curtime = payment.getDate().getTime(); nt = new RegisterTask(); rtm.loadExecutorList(nt); lst = nt.getExecutors(); lst.clear(); query = "SELECT * FROM register_executor"; re = con.prepareStatement(query); ResultSet re = re.executeQuery(); while (re.next()) { if (capv.getAddress().indexOf(re.getString(2)) != -1) { lst.add(re.getInt(1)); } //End of IF } //End of WHILE nt.setGroupID(10); nt.setAddressParamID(ADDR); nt.setAcceptUserID(payment.getUserID()); nt.setCloseUserID(payment.getUserID()); nt.setCreateUserID(payment.getUserID()); nt.setLastmodTime(curtime); nt.setLastmodUserID(payment.getUserID()); nt.setOpenTime(curtime); nt.setOpenUserID(payment.getUserID()); nt.setProcessed(true); nt.setResolution("Новое подключение. Задача сгенерирована скриптом"); nt.setTargetDate(curtime); nt.setAcceptTime(curtime); nt.setCloseTime(curtime); nt.setComment("Сделано скриптом"); nt.setCreateTime(curtime); nt.setExecuteDate(curtime); nt.setStatus(2); nt.setContractID(cid); nt.setTypeID(TYPE_ID); rtm.updateTask("new", nt); for (int i=0; i<lst.size(); i++) { query = "INSERT register_task_executor SET tid=? , eid=?"; psu = con.prepareStatement(query); psu.setInt(1,nt.getID()); psu.setInt(2,lst.get(i)); psu.executeUpdate(); print("task id: "+nt.getID()+" executor id: "+lst.get(i)); } //End of FOR } //End of ELSE } else { print ("this task can not be processed! date of contract confirmation is already set"); return; }