forum.bitel.ru
http://forum.bitel.ru/

canchange в main при смене статуса
http://forum.bitel.ru/viewtopic.php?f=22&t=10321
Страница 1 из 2

Автор:  skyb [ 24 мар 2015, 08:09 ]
Заголовок сообщения:  canchange в main при смене статуса

Что это значит и где посмотреть логику выбора?
Код:
        <xsl:choose>
                <!-- если canchange=1 (CANCHANGE_DISABLED) -->
                <xsl:when test="/data/@canchange=1">
                        Смена статуса запрещена системой.
                </xsl:when>             
                 <!-- если canchange=2 (CANCHANGE_DISABLED_BADSTATUS) -->
            <xsl:when test="/data/@canchange=2">
                        Смена статуса невозможна из текущего статуса.
                </xsl:when>             
                <!-- если canchange=3 (CANCHANGE_DO) -->
            <xsl:when test="/data/@canchange=3">

собственно что мне нужно сделать, там есть возможность приостановить и активировать мне нужно чтоб было можно активировать и только активировать с нужного статуса

Автор:  dimOn [ 24 мар 2015, 12:39 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

логика зашита в код. чтобы выбирать откуда можно активировать и с какого статуса и для кого вообще запретить - см. событие "список дат для смены статуса"

Автор:  skyb [ 24 мар 2015, 12:51 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

dimOn писал(а):
логика зашита в код. чтобы выбирать откуда можно активировать и с какого статуса и для кого вообще запретить - см. событие "список дат для смены статуса"

а перенастроить можно это как то? мне нада чтобы статус с кодом 7 можно было переводить в статус с кодом 0 в указанную дату и все

Автор:  vkulakov [ 24 мар 2015, 12:56 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Так в XSL и проверяй текущий статус. Если 7, то показывай окошко с выбором даты. Если не 7, то пиши ошибку или ещё чего. А статус 0 жестко пропиши в форму, чтобы его нельзя было изменить. Думаю, текущий статус в атрибутах есть.

skyb, что-то не узнаю тебя в последнее время, как будто другой человек пишет.

Автор:  dimOn [ 24 мар 2015, 12:57 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

я ж сказал какое смотреть событие

Автор:  vkulakov [ 24 мар 2015, 13:27 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

dimOn писал(а):
я ж сказал какое смотреть событие

Так я же просто предложил альтернативный вариант решения проблемы. По мне проще изменить XSL.

Автор:  skyb [ 24 мар 2015, 13:33 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

dimOn писал(а):
я ж сказал какое смотреть событие

в дебаге клиента?

Автор:  vkulakov [ 24 мар 2015, 13:34 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

dimOn писал(а):
см. событие "список дат для смены статуса"

Полагаю, что смотреть нужно в документации.

Автор:  skyb [ 24 мар 2015, 13:39 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

vkulakov писал(а):
Так в XSL и проверяй текущий статус. Если 7, то показывай окошко с выбором даты. Если не 7, то пиши ошибку или ещё чего. А статус 0 жестко пропиши в форму, чтобы его нельзя было изменить. Думаю, текущий статус в атрибутах есть.

skyb, что-то не узнаю тебя в последнее время, как будто другой человек пишет.

еслиб я не пробовал, я б и не писал, почему и спрашиваю, поидеи, там 2 смены, 1 это приостановить вторая активировать и цифрами статус. закоментил 1, нужно было ещё закоментить и секцию choose закоментил, вроде ок, добавил статус, поменял в шаблоне на верную цифру, чтоб можно было выставить только активен, он почему то начал писать что в этом статусе нет возможности менять статусы, после этого пошел на форум

Автор:  skyb [ 24 мар 2015, 13:39 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

vkulakov писал(а):
dimOn писал(а):
см. событие "список дат для смены статуса"

Полагаю, что смотреть нужно в документации.

онаж маленькая =)
я ж не пробегался по ней =))))

Автор:  dimOn [ 24 мар 2015, 13:43 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Что непонятного то сейчас?
Событием которое я дважды указал можно управлять и какими датами можно менять и вообще можно менять ли (по любым условиям, очевидно, т.к. речь о скрипте на событие).

Автор:  vkulakov [ 24 мар 2015, 13:51 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

vkulakov писал(а):
Полагаю, что смотреть нужно в документации.


Открываешь биллинг, потом меню "Сервис - Автоматизация - Функции скриптов поведения", потом вкладка "Классы Java", потом нажимаешь плюсик, потом в списке "Событие" ищешь "Получения списка дат для смены статуса договора в Web" и выбираешь его, потом нажимаешь Ctrl + i и получаешь класс этого события.

Потом открываешь браузер, потом там вбиваешь адрес http://bgbilling.ru/v6.1/javadoc/, там ищешь нужный класс (GetContractStatusChangeDatesEvent), внимательно читаешь и пишешь динамический код, который будет запрещать менять статус при определённых условиях.

Уф, вроде всё написал.

Автор:  skyb [ 24 мар 2015, 14:03 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

не-до-ли-стал )))) нашел событие ))))
а про контрол i что так искать можно даже не знал ))) ы
разобрались

Автор:  dimOn [ 24 мар 2015, 14:09 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

:umnik:

Автор:  skyb [ 25 мар 2015, 09:23 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

а есть примеры класса реализованного?, а то у меня даже при пустом классе, только что созданном, и навешаном на договор выпадает в ошибку
Код:
03-25/06:03:07 ERROR [http-bio-0.0.0.0-8080-exec-6] XSLManager -
java.lang.NullPointerException
        at org.apache.xalan.transformer.TransformerImpl.setOutputProperty(TransformerImpl.java:966)
        at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.newTransformer(XSLManager.java:85)
        at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.getTransformer(XSLManager.java:107)
        at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.getTransformer(XSLManager.java:169)
        at ru.bitel.bgbilling.kernel.container.web.action.XSLManager.transform(XSLManager.java:261)
        at bitel.billing.server.WebExecuter.doPost(WebExecuter.java:339)
        at bitel.billing.server.WebExecuter.doGet(WebExecuter.java:79)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bitel.common.server.filters.MultipartFilter.doFilter(MultipartFilter.java:48)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bitel.common.server.filters.XSSFilter.doFilter(XSSFilter.java:89)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bitel.common.server.filters.BGAuthFilter.doFilter(BGAuthFilter.java:298)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at ru.bitel.common.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:50)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
        at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
        at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

Автор:  dimOn [ 25 мар 2015, 12:18 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

"Даже при пустом"?? А с чего вообще пустой должен работать? Если от него требуется вернуть список дат.
Всё же там понятно и в доке специально прописано про всё это: http://bgbilling.ru/v6.1/doc/ch01s21s11.html

Автор:  Phricker [ 25 мар 2015, 12:27 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Пример формирования списка дат

Автор:  skyb [ 25 мар 2015, 12:43 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

пробовал подставить, неполучилось, поэтому и прошу пример
Код:
   {
      int cid = event1.getContractId();
      print("cid => " + cid + "status => " + ((GetContractStatusChangeDatesEvent) event1).getCurrentStatus());
      List<Date> dateList = new ArrayList<Date>();
      dateList.add(new Date());
      dateList.add(new Date());
      ((GetContractStatusChangeDatesEvent) event1).setDateList(dateList);
   }

Автор:  vkulakov [ 25 мар 2015, 12:49 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Покажите лучше вес класс целиком.

Автор:  skyb [ 25 мар 2015, 12:55 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

vkulakov писал(а):
Покажите лучше вес класс целиком.

Код:
package ru.skyb.scripts.behavior;

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.event.events.GetContractStatusChangeDatesEvent;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class getUserCabinetDate
   extends EventScriptBase
{
   @Override
   public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
      int cid = event1.getContractId();
      print("cid => " + cid + "status => " + ((GetContractStatusChangeDatesEvent) event1).getCurrentStatus());
      List<Date> dateList = new ArrayList<Date>();
      dateList.add(new Date());
      dateList.add(new Date());
      ((GetContractStatusChangeDatesEvent) event1).setDateList(dateList);
   }

}

Автор:  vkulakov [ 25 мар 2015, 13:40 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

GetContractStatusChangeDatesEvent лучше сразу в определении метода прописывать, тогда не нужно будет типы постоянно приводить:
Код:
onEvent( GetContractStatusChangeDatesEvent event1, Setup setup2, ConnectionSet connectionSet3 )

И что из этого не работает? В логах вызов print виден? А класс этот точно к событию привязали? А скрипт поведения точно на договор повесили? А даты скрипта поведения на договоре правильные?

Описывайте проблему более полно, чтобы не тратить время на кучу дополнительных вопросов.

Автор:  skyb [ 25 мар 2015, 13:44 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

vkulakov писал(а):
GetContractStatusChangeDatesEvent лучше сразу в определении метода прописывать, тогда не нужно будет типы постоянно приводить:
Код:
onEvent( GetContractStatusChangeDatesEvent event1, Setup setup2, ConnectionSet connectionSet3 )

И что из этого не работает? В логах вызов print виден? А класс этот точно к событию привязали? А скрипт поведения точно на договор повесили? А даты скрипта поведения на договоре правильные?

Описывайте проблему более полно, чтобы не тратить время на кучу дополнительных вопросов.

про эвент знаю, сделал пока так, все остальное верно, принта нет, сразу вываливается ошибка

Автор:  dimOn [ 25 мар 2015, 15:39 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Это со скриптом ТОЧНО связано? Т.к. по всем признакам - нет.

Автор:  skyb [ 30 мар 2015, 08:44 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

dimOn писал(а):
Это со скриптом ТОЧНО связано? Т.к. по всем признакам - нет.

да, действительно, со скриптом связано небыло. Сейчас смена в вебе реагирует на скрипт, но статусы менять так же не получается. Есть статус с id = 7 нужно его и только его сменить на статус 0, код сейчас вот такой, что не доделал?
Код:
package ru.skyb.scripts.behavior;

import ru.bitel.bgbilling.kernel.event.Event;
import ru.bitel.bgbilling.kernel.event.events.GetContractStatusChangeDatesEvent;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;

import java.sql.Connection;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import bitel.billing.server.contract.bean.ContractStatus;
import bitel.billing.server.contract.bean.ContractStatusManager;

public class getUserCabinetDate
   extends EventScriptBase
{
   @Override
   public void onEvent( Event event1, Setup setup2, ConnectionSet connectionSet3 )
      throws Exception
   {
      int cid = event1.getContractId();
      Calendar c = Calendar.getInstance();
      c.add(Calendar.DAY_OF_MONTH, 1);
      Connection con = connectionSet3.getConnection();
      ContractStatusManager csm = new ContractStatusManager(con);

      print("cid => " + cid + "status => " + ((GetContractStatusChangeDatesEvent) event1).getCurrentStatus());
      

      if (((GetContractStatusChangeDatesEvent) event1).getCurrentStatus() == 7 )
      {
         List<Date> dateList = new ArrayList<Date>();
         dateList.add(c.getTime());
         ((GetContractStatusChangeDatesEvent) event1).setDateList(dateList);
         ContractStatus status = new ContractStatus();
         status.setContractId(cid);
         status.setDateFrom(c.getTime());
         status.setDateTo(null);
         status.setStatus( 0 );
         status.setComment("");
         csm.changeStatus( status, 0, false );
      }
   }

}


так при переходе меняется статус.но мне же нужно чтобы пользователь мог сам переключится, нажав на кнопки, а не автоматом при переходе. Чет не понимаю как, подскажите =)

Автор:  vkulakov [ 30 мар 2015, 12:15 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Что-то не то вы делаете. Зачем в скрипте, который устанавливает даты, с которых можно менять статус, менять этот статус? Где логика?

Если вот это убрать из скрипта:
Код:
         ContractStatus status = new ContractStatus();
         status.setContractId(cid);
         status.setDateFrom(c.getTime());
         status.setDateTo(null);
         status.setStatus( 0 );
         status.setComment("");
         csm.changeStatus( status, 0, false );

то в ЛК только одна дата будет доступна? И если попробовать изменить статус, то всё работает как нужно?

Автор:  dimOn [ 30 мар 2015, 12:23 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

я честно говоря даже не понял что ещё могло остаться непонятным :umnik:
этот скрипт для формирования дат которые покажутся юзеру при выборе статуса. про то, какие случаи могут быть я и выше сказал два раза и ссылку на доку дал.
зачем в этом скрипте статус менять?
я вообще запутался в чём задача. считаю, что я вообще не понял что нужно в итоге сделать, буду ждать рационального объяснения. смысл писать по неочевидным ТЗ, когда ещё и не слушает никто)

Автор:  skyb [ 30 мар 2015, 14:08 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

Нужно получить возможность менять в ЛК со статуса с кодом = 7 на статус с кодом = 0

Автор:  dimOn [ 30 мар 2015, 15:41 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

И? Что не получается то? Менять можно только с определённого на определённый статус - этим управления нет из скрипта.
Про даты есть: можно или нет и в какие дни - определяется скриптом на событии получение дат. Можно юзеру либо дать три поля для заполнения, либо комбо с датами, либо вообще запретить.
Выше написано про эти разные случаи, и дана ссылка, по которой подробно написано что будет если то и то и то.
Нужно просто тему внимательно прочитать и сделать :umnik: Или задать вопросы, если непонятно что.

Автор:  skyb [ 30 мар 2015, 19:38 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

нужно дать возможность смены с одного статуса на другой, скажите как?

Автор:  dimOn [ 31 мар 2015, 13:45 ]
Заголовок сообщения:  Re: canchange в main при смене статуса

в смысле "дать возможность"? она и так есть вообще-то, возможность смены. для этого и нужна эта страничка в ЛК.
если вообще ничего не настраивать - оно должно работать, по дефолту включено вроде как.
или не даёт там менять статус? в этом вопрос чтоле? или нужно именно управление кодами статусов?

Страница 1 из 2 Часовой пояс: UTC + 5 часов [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/