Обработка задач по событию ядра "Поступление платежа", создание новой задачи и изменение существующей
Материал из BiTel WiKi
Skandinav (Обсуждение | вклад) |
Skandinav (Обсуждение | вклад) (→описание) |
||
| Строка 5: | Строка 5: | ||
В событиях привязывается к событию "Приход платежа". | В событиях привязывается к событию "Приход платежа". | ||
| - | Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) | + | Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. |
| - | + | Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) | |
| + | Если не найдено ни одной открытой задачи - создается новая задача CRM, заполняются все поля задачи, все даты ставятся по дате занечения платежа, в данном случае текущая дата, к задаче привязывается исполнитель (опять же из поля "квартал" адреса договора) и задача закрывается. | ||
== код скрипта == | == код скрипта == | ||
Версия 09:25, 5 марта 2009
описание
Скрипт родился с целью частично автоматизировать работу абонентского отдела при обработке новых подключений.
Скрипт подключается в меню Автоматизация -> функции скриптов поведения. В событиях привязывается к событию "Приход платежа".
Во время занесения платежа в договор, скрипт проверяет установлена ли дата заключения договора, если нет, проверяет присутствует ли незакрытая CRM задача типа "новое подключение" привязанная к текущему договору. Если задача существует - скрипт закрывает задачу, привязывает исполнителя к задаче (исполнитель берется из поля "квартал" адреса в договоре. у нас так принято :)) Если не найдено ни одной открытой задачи - создается новая задача CRM, заполняются все поля задачи, все даты ставятся по дате занечения платежа, в данном случае текущая дата, к задаче привязывается исполнитель (опять же из поля "квартал" адреса договора) и задача закрывается.
код скрипта
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.*;
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);
filter = new RegisterTaskManager.TaskFilter();
filter.cid = cid;
filter.orders = new ArrayList();
tl = rtm.getNoClosedTaskList(cid);
if ( cont == null ) { // проверяем наличие в параметрах договора даты заключения договора. если дата заключения проставлена - выходим.
cpu.setDateParam ( cid, DATE_ZAKL_DOG, payment.getDate().getTime() );
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();
curtime = payment.getDate().getTime();
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;
}
