BiTel

Форум BiTel
bgbilling.ru     docs.bitel.ru     wiki.bitel.ru     dbinfo.bitel.ru     bgcrm.ru     billing.bitel.ru     bitel.ru    
Текущее время: 21 июн 2025, 00:23

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




Начать новую тему Ответить на тему  [ Сообщений: 14 ] 
Автор Сообщение
СообщениеДобавлено: 14 окт 2011, 21:40 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Всем доброго времени суток!
Прошу помочь со скритпом включения должников по приходу платежа. Модуль IPN
Тот что на вики для 5.1 уже не подходит.
Может кто поделиться?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 окт 2011, 01:42 
Не в сети
Разработчик

Зарегистрирован: 07 апр 2007, 23:51
Сообщения: 4494
Откуда: Уфа, Россия
Карма: 187
Sputnik писал(а):
Тот что на вики для 5.1 уже не подходит.


почему?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 15 окт 2011, 06:03 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 03 авг 2009, 18:42
Сообщения: 7166
Откуда: Благовещенск
Карма: 241
э...мож логи хотяб этого вашего "не подходит" увидеть ;)

_________________
Код:
  Клиент: вер. 6.2.714 / 25.05.2015 17:27:15
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
  Сервер: вер. 6.2.881 / 22.05.2015 17:56:55
    os: Linux; java: Java HotSpot(TM) 64-Bit Server VM, v.1.8.0_45
Помощь по администрированию bgbilling в jabber конференции или Группа в telegram
Стиль программирования - пьяный мастерстер
Разработка мобильных приложений


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 08:54 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Вот лог выполнения скрипта с вики. Ничего не правил, просто скопировал. Может в этом моя ошибка?
Код:
10-17/08:43:43  INFO [Thread-9] script - Starting event processor...
10-17/08:43:43  INFO [main] ScriptEventListener - Starting ScriptEventListener...
10-17/08:43:43  INFO [main] EventProcessor - Add listener ru.bitel.bgbilling.kernel.script.server.ScriptEventListener$1@171194d to BG.Event.ru.bitel.bgbilling.kernel.script.common.ScriptFunctionModifiedEvent
10-17/08:44:40  INFO [ActiveMQ Session Task] ScriptEventListener - Script event function 2 was modified. (Re)linking function...
10-17/08:46:28  INFO [ActiveMQ Session Task] ScriptEventListener - Script event function 4 was modified. (Re)linking function...
10-17/08:47:39  INFO [http-8080-1] script - Process event cid:3956; event:Event bitel.billing.server.script.bean.event.PaymentEvent cid: 3956; module: 0; type: 1; userId: 7
10-17/08:47:39  INFO [http-8080-1] script - Process event cid:3956; event:Event bitel.billing.server.script.bean.event.PaymentEvent cid: 3956; module: 0; type: 1; userId: 7
10-17/08:47:39  INFO [pool-2-thread-1] ScriptInstance - Eval script Function [id:4; title:Включение должников по приходу платежа]
10-17/08:47:39 ERROR [http-8080-1] script - Eval error: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

java.util.concurrent.ExecutionException: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

   at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
   at java.util.concurrent.FutureTask.get(Unknown Source)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.runScriptImpl(ScriptMachine.java:371)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:129)
   at bitel.billing.server.script.bean.event.EventProcessor.processContractEvent(EventProcessor.java:313)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:231)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:199)
   at bitel.billing.server.contract.action.ActionUpdateContractPayment.doAction(ActionUpdateContractPayment.java:179)
   at bitel.billing.server.Executer.doModule(Unknown Source)
   at bitel.billing.server.Executer.doPost(Unknown Source)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:49)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Unknown Source)
Caused by: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

   at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:77)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
   at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:86)
   at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:84)
   at bsh.Interpreter.eval(Interpreter.java:653)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:352)
   at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:70)
   at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:190)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.access$0(ScriptMachine.java:1)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:361)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:1)
   at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
   at java.util.concurrent.FutureTask.run(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   ... 1 more
10-17/08:47:39  INFO [http-8080-1] script - Process time => 90
10-17/08:47:39  INFO [http-8080-1] script - Сумма платежа1000.0

Текущий статус: 4

Баланс: 551.83
Баланс ОК
Можно открывать!


Договор не открылся :(

Так же лог ошибок сервера
Код:
script 10-17/08:47:39 ERROR [http-8080-1] script - Eval error: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

java.util.concurrent.ExecutionException: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

   at java.util.concurrent.FutureTask$Sync.innerGet(Unknown Source)
   at java.util.concurrent.FutureTask.get(Unknown Source)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.runScriptImpl(ScriptMachine.java:371)
   at bitel.billing.server.script.bean.ScriptMachine.runScript(ScriptMachine.java:129)
   at bitel.billing.server.script.bean.event.EventProcessor.processContractEvent(EventProcessor.java:313)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:231)
   at bitel.billing.server.script.bean.event.EventProcessor.processEvent(EventProcessor.java:199)
   at bitel.billing.server.contract.action.ActionUpdateContractPayment.doAction(ActionUpdateContractPayment.java:179)
   at bitel.billing.server.Executer.doModule(Unknown Source)
   at bitel.billing.server.Executer.doPost(Unknown Source)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
   at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at bitel.billing.server.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:49)
   at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
   at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
   at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
   at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
   at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:568)
   at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
   at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
   at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
   at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
   at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
   at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
   at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
   at java.lang.Thread.run(Unknown Source)
Caused by: Sourced file: Function [id:4; title:Включение должников по приходу платежа] : Typed variable declaration : Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

   at bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:77)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102)
   at bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47)
   at bsh.BSHVariableDeclarator.eval(BSHVariableDeclarator.java:86)
   at bsh.BSHTypedVariableDeclaration.eval(BSHTypedVariableDeclaration.java:84)
   at bsh.Interpreter.eval(Interpreter.java:653)
   at ru.bitel.bgbilling.kernel.script.server.bean.ScriptInstance.eval(ScriptInstance.java:352)
   at bitel.billing.server.script.bean.ScriptMachine$SimpleScriptRunner.runScript(ScriptMachine.java:70)
   at bitel.billing.server.script.bean.ScriptMachine.runScriptImpl(ScriptMachine.java:190)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine.access$0(ScriptMachine.java:1)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:361)
   at bitel.billing.server.script.bean.ScriptMachine$ThreadedScriptMachine$1.call(ScriptMachine.java:1)
   at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
   at java.util.concurrent.FutureTask.run(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   ... 1 more


Что я делаю не так?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 10:52 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Код:
Error in method invocation: Method getStatusList( int, java.util.GregorianCalendar ) not found in class'bitel.billing.server.contract.bean.ContractStatusManager' : at Line: 80 : in file: Function [id:4; title:Включение должников по приходу платежа] : cstm .getStatusList ( cid , now )

наверное заменили методы.

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 11:53 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Phricker писал(а):
наверное заменили методы.


Нет. Просто скопировал с вики, ничего не правил.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 11:55 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Киньте ссылкой на вики

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 12:16 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Phricker писал(а):
Киньте ссылкой на вики


вот
http://wiki.bgbilling.ru/index.php/Включение_должников_по_приходу_платежа


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 12:22 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Код:
getStatusList(int cid)
           Полный список статусов договора

В 5.1 он без дат.
Строчку
Код:
List statusList =  cstm.getStatusList(cid, now);

замените на
Код:
List statusList =  cstm.getStatusList(cid);

По идее должно помочь

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 12:26 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Если поможет - отпишитесь, поправлю в вики для 5.1

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 13:03 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Заменил. Ругнулся еще на
Код:
getContractByID(int)
и
Код:
getContractID(int)
как на запрещенные. Но я их поправил.

В логах выдал вот это

Код:
10-17/12:56:21  INFO [http-8080-1] script - Process time => 50
10-17/12:56:21  INFO [http-8080-1] script - Сумма платежа200.0
Текущий статус: 4
Баланс: 251.83
Баланс ОК
Можно открывать!
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 0 Будущий статус: 0
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
Статус: 4 Будущий статус: 4
Баланс: 251.83
BalMode: 1
10-17/12:56:21  INFO [pool-1-thread-2] ScriptInstance - Eval script Function [id:4; title:Включение должников по приходу платежа  вики]


Вот только статус договора все не изменился. Как был приостановлен так и остался :(


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 14:16 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Разобрался скрипт работает! Спасибо за подсказки!
Статус не менялся потому что проверялись условия только для договоров со статусом ОТКЛЮЧЕН и ЗАКРЫТ! Добавил условия на проверку и все работает.

Phricker писал(а):
Если поможет - отпишитесь, поправлю в вики для 5.1

Помогло:)
Не подскажешь как проверить достаточно ли денег на счету для снятия если скажем денежка приходит в середине месяца?
У нас списание средств происходит 1 числа каждого месяца.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 14:33 
Не в сети
Клиент
Аватара пользователя

Зарегистрирован: 29 мар 2010, 23:11
Сообщения: 5854
Карма: 472
Sputnik писал(а):
Не подскажешь как проверить достаточно ли денег на счету для снятия если скажем денежка приходит в середине месяца?
У нас списание средств происходит 1 числа каждого месяца.

Помоему где то в вики я видел нечто подобное. Точно не скажу

_________________
Цитаты великих людей :umnik:
Напишите в helpdesk © stark
повторяю: => хелпдеск => доработка => профит © dimOn
свершилось... © skn
Мой код изящен, лёгок, оригинален, краток. Как прохладный весенний ветерок, как звонкий ручей! © dimOn
Вежливый разработчик © Artur
Эти баги тоже исправлены, как и те, которые еще не написаны © Artur
ну т.е. существует воркэраунд, ок © dimOn


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 17 окт 2011, 16:26 
Не в сети
Аватара пользователя

Зарегистрирован: 14 окт 2011, 14:38
Сообщения: 122
Карма: 0
Phricker писал(а):
Если поможет - отпишитесь, поправлю в вики для 5.1


Кстати он еще плевался на setDate1 и getDate1. Может тоже подправишь это в вики? :)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 14 ] 

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


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

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


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

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