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

6.2 PaymentService и модуль mps
http://forum.bitel.ru/viewtopic.php?f=19&t=12275
Страница 1 из 1

Автор:  fmaks [ 01 мар 2017, 18:26 ]
Заголовок сообщения:  6.2 PaymentService и модуль mps

Здравствуйте.
Подскажите, пожалуйста, по такому вопросу - в 6.2 пытался сделать обработку по приходу платежа,
реализовал через dynservice, расширив PaymentService - результат, при занесении платежа через интерфейс клиента
всё отрабатывает, при занесение платежа через платёжную систему (osmp) - тишина.
Собственно, в 6.0 пытался делать через dynaction - результат идентичный. Думал в 6.2 через PaymentService заработает.
При этом скрипт на договоре по приходу платежа отрабатывает и при занесении платежа из клиента, и по приходу через mps.
Собственно вопрос - это так и должно быть?
Просто скрипт на договоре не всегда удобно.

Автор:  Phricker [ 01 мар 2017, 18:44 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Там же вроде есть стандартное событие "Приход платежа".
И оно отрабатывает на все виды приходов.
Его не хватает?

Автор:  fmaks [ 01 мар 2017, 20:30 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Да, есть, и по нему, как я и написал работает.
Но скрипт на договоре не всегда хорошо.
Его могут удалить, закрыть, создать договор не из шаблона. Волшебные ручки могут много чего сделать.
Можно писать обработчики событий при изменении/удалении скриптов на договоре контролировать это и запрещать/разрешать действия
(при том, что тому же абонентскому отделу разрешены в правах манипуляции со скриптами на договорах и это нормально),
но такое решение, на мой взгляд, не очень хорошее и только усложняет поддержку.
Обработчик же как dynaction/dynservice позволяет в некоторых случаях (когда действие применяется для всех договоров, либо условия фильтрации просты)
закрыть такую проблему.
Как-то так. Потому и возник вопрос - обработчики написать возможность есть, а работают они не всегда.

Автор:  fmaks [ 01 мар 2017, 20:37 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Добавлю, если ни чего не путаю, скрипт по событию "Приход платежа" отрабатывает после события, есть
конечно before и after, но если мне не изменяет склероз они давно не рекомендованы к использованию и их
как раз предлагают заменить решением через dynaction/dynservice, где можно воткнуть обработку как до стандартного
действия, так и после.

Автор:  Phricker [ 01 мар 2017, 20:59 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

fmaks писал(а):
Его могут удалить, закрыть, создать договор не из шаблона.

Решаете административные проблемы техническим способом © Кто-то из разрабов.


fmaks писал(а):
обработчики написать возможность есть, а работают они не всегда.

Судя по MPSTransactionManager там вызывается PaymentDao.update(payment)
А в PaymentDao
Код:
 protected void updateImpl(Payment payment)
    throws BGException, SQLException
  {
    if (payment != null)
    {
      String query = null;
      PreparedStatement ps = null;
      if (payment.getId() < 1)
      {
        query = "INSERT INTO " + this.tableName + " SET dt=?, cid=?, pt=?, uid=?, summa=?, comment=?";
        ps = this.con.prepareStatement(query, 1);
      }
      else
      {
        query = "UPDATE " + this.tableName + " SET dt=?, cid=?, pt=?, uid=?, summa=?, comment=? WHERE id=?";
        ps = this.con.prepareStatement(query);
        ps.setInt(7, payment.getId());
      }
      ps.setDate(1, TimeUtils.convertDateToSqlDate(payment.getDate()));
      ps.setInt(2, payment.getContractId());
      ps.setInt(3, payment.getTypeId());
      ps.setInt(4, payment.getUserId());
      ps.setBigDecimal(5, payment.getSum());
      ps.setString(6, payment.getComment());
      ps.executeUpdate();
      if (payment.getId() < 0) {
        payment.setId(ServerUtils.lastInsertId(ps));
      }
      ps.close();
    }
  }

Автор:  fmaks [ 01 мар 2017, 21:50 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Phricker писал(а):
fmaks писал(а):
Его могут удалить, закрыть, создать договор не из шаблона.

Решаете административные проблемы техническим способом © Кто-то из разрабов.


Согласен. Но - да, местами так и есть, тем более если техническое решение позволяет без особых сложностей закрыть проблему в принципе.

Phricker писал(а):
fmaks писал(а):
обработчики написать возможность есть, а работают они не всегда.

Судя по MPSTransactionManager там вызывается PaymentDao.update(payment)
А в PaymentDao
Код:
 protected void updateImpl(Payment payment)
    throws BGException, SQLException
  {
...
    }
  }


Ясно. Т.о. в mps разработчики напрямую используют PaymentDao, в результате навесить свою обработку ни через ActionUpdateContractPayment,
ни через PaymentService не получается.
Честно, не очень это удобно для заточки функционала под себя - здесь это работает, а здесь нет.
И как быть тогда с предобработкой, забыв про before и after.
Может разработчики что ответят, планируется ли это приводить к единому виду, чтобы dynservice для платежей можно было использовать?

Автор:  dimOn [ 02 мар 2017, 22:30 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Динсервисы перегружаются только для вызова через экзекутеры, конечно.
Так работать не будет как вы хотите, нельзя перегрузить дин.кодом любой код в биллинге. Так и должно быть, да.
Не говоря уж о том, что сервисы не используются в обработке платежей в этом месте. И даже если бы использовались они - оно бы так не сработало, т.к. см. сначала сообщения.

Событие не кидается после прихода платежа, что-то я не понял?

Автор:  fmaks [ 03 мар 2017, 14:08 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Да я и не предполагал, что можно перегрузить любой код в биллинге :D
Просто предположил, что коль есть PaymentService, то он будет работать для любого прихода платежа.
Когда выяснили, что mps не использует PaymentService, то стало ясно что работать и не будет, а своим
первым предложением про экзекутеры вы вбили последний гвоздь.
С этим теперь всё ясно - работать не будет, переделываться не будет.

Хорошо, неудобно, но ладно.

Событие после прихода платежа кидается и скрипт висящий на договоре срабатывает по событию "Приход платежа".
Я объяснял почему скрипт на договоре - это не всегда удобно.
Если мне нужна предобработка, before и after - будут поддерживаться?
Вот это будет работать и в следующих версиях:
Код:
  action.event_contract_UpdateContractPayment=before

?

Просто в инструкции начиная с версии 5.2 этого нет и если мне не изменяет склероз,
то где-то писалось - что before и аfter - не рекомендованны к применению.

Автор:  dimOn [ 14 мар 2017, 19:11 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

эта настройка before и after будет работать опять же для вызова вашего экшена UpdateContractPayment только, из клиента или веба.
это можно полностью заменить с помощью dynaction, только более просто и гибко, именно поэтому они устаревшие.

Автор:  fmaks [ 21 мар 2017, 20:32 ]
Заголовок сообщения:  Re: 6.2 PaymentService и модуль mps

Да, теперь я понял. Спасибо за ответ.
Получается что единую предобрабоку/обработку
для события прихода платежа включая и модуль mps сделать ни как не получится.
Жаль.

P.S. Да я только "за" dynaction-ы :D жаль только всё ими сделать не получается.

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