BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 20 май 2024, 23:25

Часовой пояс: UTC + 5 часов [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: 06 фев 2009, 15:07 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
Код:
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);
print ("CID: " + cid);
filter = new RegisterTaskManager.TaskFilter();
filter.cid = cid;
filter.orders = new ArrayList();

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();
      print ("Contract comment: " + contr.getComment());
      print ("Contract FIO: " + cpu.getStringParam(cid, FIO));
//         if ( rtm.getTaskCount(filter) > 0 ) {
//            prt = rtm.getTaskList(filter, new Page (0,0));
//            prts = prt.size();
//            print ("prt.size();" + prt.size()+"rtm.getTaskCount(filter)"+rtm.getTaskCount(filter));
//            for (int i=0; i<prts;i++) {
//            obj = prt.get(i);
//            task = obj.getTask();
//            print ( "Contract : "+obj.getContract() );
//            print ( "comment :" + task.getComment() + " Status :" + task.getStatus());
//            }
            
//         } 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) {
            print(re.getString(2) +" | "+ capv.getAddress() +" | "+ re.getInt(1));
            print(capv.getAddress().indexOf(re.getString(2)));
            lst.add(re.getInt(1));
            print(re.getInt(1));
            }}
//            nt.setExecutors(lst);
//            break;
//            }
//            }
   query = "SELECT hid FROM contract_parameter_type_2 where address =?";
   pa = con.prepareStatement(query);
   pa.setString(1,capv.getAddress());
   pa = pa.executeQuery(); pa.next();            
   print (pa.getInt(1));
            nt.setGroupID(10);
            nt.setAddressObjectId(pa.getInt(1));
//            nt.setAddressParamID(pa.getInt(1));
            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));
            }
//               }
} else {
      print ("this task can not be processed! date of contract confirmation is already set");
return;
      }


ну не заполняются поля адреса в списке задач! все остальное работает так как и хотелось.

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 фев 2009, 01:28 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
в вашем случае нужно

Код:
//            nt.setAddressObjectId(pa.getInt(1));
            nt.setAddressParamID(ADDR);


следующий код не нужен

Код:
 query = "SELECT hid FROM contract_parameter_type_2 where address =?";
   pa = con.prepareStatement(query);
   pa.setString(1,capv.getAddress());
   pa = pa.executeQuery(); pa.next();           
   print (pa.getInt(1));


так как выбор pid адреса идет из таблицы contract_parameter_type_2 то значение должно подставляться в nt.setAddressParamID();

в nt.setAddressObjectId() нужно подставлять значение из таблицы object_param_value_address если вы ИСПОЛЬЗУЕТЕ объекты в договорах.

должно быть установлено только одно из этих значений


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 фев 2009, 05:43 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
А вы можете проверить код скрипта у себя?

скрипт привязывается к событию "поступление платежа" и должен ставить дату закрытия договора и создавать CRM задачу на новое подключение в договоре, привязывать ее к исполнителю. Исполнитель у нас хранится в поле адреса квартал. Так повелось.

или ADDR это какая то системная переменная, а я ее ненароком оверрайдю? :)

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 07 фев 2009, 21:59 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
ADDR это переменная объявленая выше в вашем скрипте
в nt.setAddressParamID(); нужно подставлять не значение поля hid, а значение поля pid (а pid в вашем случае совпадает с переменной ADDR объявленой в начале скрипта)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 фев 2009, 12:32 
Не в сети
Клиент

Зарегистрирован: 02 окт 2008, 17:52
Сообщения: 530
Карма: 27
вопрос по методам класса RegisterTask

создается обьект
Код:
 nt = new RegisterTask();


где можно почитать про доступные методы этого класса ?

эти понятны
Код:
            nt.setAcceptTime(curtime);
            nt.setCloseTime(curtime);
            nt.setComment("Сделано скриптом");
            nt.setCreateTime(curtime);
            nt.setExecuteDate(curtime);
            nt.setStatus(2);
            nt.setContractID(cid);
            nt.setTypeID(TYPE_ID);


но вот например какой метод отвечает за заполнение поля 'gr' в таблице register_task базы ?
или нужно использовать метод updateTask() из класса RegisterTaskManager?
http://www.bgbilling.ru/v4.5/javadoc/ru ... nager.html


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 фев 2009, 18:17 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Код:
task.setGroupID( int value )


Цитата:
или нужно использовать метод updateTask() из класса RegisterTaskManager?


ну это вы сами решайте, что вам удобнее


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 12 фев 2009, 18:19 
Не в сети
Клиент

Зарегистрирован: 02 окт 2008, 17:52
Сообщения: 530
Карма: 27
ок
спасибо!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 26 фев 2009, 13:53 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
продолжим. достаточно давно меня тут не было. все ни как не выдавалось времени продолжить свои издевательства над биллингом.

скрипт в основной части работает нормально.
вот только одна маленькая неприятность... при обработке существующей 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));
print(" task list size  "+ tl.size());
         if ( tl.size() > 0 ) { // проверяем наличие задачи CRM в договоре, если нет, создаем новую,
                     // заполняем все поля, привязываем к мастеру, проставляем все даты текущими.
            prts = tl.size();
            for (int i=0; i<prts;i++) { //перебираем существующие задачи.
            task = tl.get(i);
print(task.getID());
print(task.getStatus());
print(task.getTypeID());
         if (task.getStatus() < 2) { // проверям закрыта ли задача
            if (task.getTypeID() == TIPE_ID) { //если незакрытая задача типа "новое подключение" -
               if (task.getAcceptTime() == null ) {
                  task.setAcceptTime(curtime);
                  }
               if (task.getCloseTime() == null ) {
                     task.setCloseTime(curtime);
                  }
               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(task.getID(),task); // В этом месте я пробовал и rtm.updateTask(task.getID().toString(),task);
               } //End of IF
            } //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;
      }

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 мар 2009, 01:50 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4489
Откуда: Уфа, Россия
Карма: 186
Вроде все правильно... Попробуйте так

Код:
rtm.updateTask(String.valueOf(task.getID()),task);


посмотрите логи, может там, что то есть интересное


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 02 мар 2009, 08:25 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
все. скрипт работает. финальный, рабочий код скрипта:


Код:
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;
      }


кстати, с недавних пор в документации пропало описание класса RegisterTask(). это так задумано или "упс... случайно получилось"? :)

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 мар 2009, 12:39 
Не в сети
Разработчик

Зарегистрирован: 08 ноя 2007, 01:05
Сообщения: 8343
Откуда: Уфа
Карма: 238
2 skandinav : выложите пожалуйста скрипт в wiki, если не сложно . С кратким описанием того, что он делает


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 05 мар 2009, 13:44 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
как появится достаточно свободного времени что бы заняться описаловом скрипта...

да и на вики региться надо...

P.S. тут в вики положил. хватит такого описания?

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: 27 апр 2009, 10:53 
Не в сети

Зарегистрирован: 27 ноя 2008, 15:13
Сообщения: 56
Карма: 0
в версии 4.6 биллинга в API модуля CRM произошли некоторые изменения. скрипт в вики обновлен.

_________________
================================
ООО "Подряд" является зарегистрированным пользователем данного аддикта.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 73 ]  На страницу Пред.  1, 2, 3

Часовой пояс: UTC + 5 часов [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
POWERED_BY
Русская поддержка phpBB
[ Time : 0.050s | 41 Queries | GZIP : On ]