Обработка задач по событию ядра "Поступление платежа", создание новой задачи и изменение существующей

Материал из BiTel WiKi

(Различия между версиями)
Перейти к: навигация, поиск
(описание)
(код скрипта)
 
Строка 12: Строка 12:
== код скрипта ==
== код скрипта ==
 +
между версиями 4.5 и 4.6 API биллинга существуют небольшие отличия.
 +
отличия обозначены соответствующими блоками.
  import java.sql.*;
  import java.sql.*;
Строка 21: Строка 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;
Строка 33: Строка 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=?";
Строка 45: Строка 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;
     }
Личные инструменты