bitrix24-php-sdk icon indicating copy to clipboard operation
bitrix24-php-sdk copied to clipboard

add phpmoney as default money type

Open mesilov opened this issue 4 years ago • 3 comments

Проблема деньги в ответах API не являются деньгами, из-за этого в клиентском коде разработчики обращаются с ними достаточно вольно и это является источником ошибок.

Предлагаемое решение Занести как зависимость https://github.com/moneyphp/money

  • отлаженное решение
  • нет зависимостей на расширения PHP как с decimal
  • есть готовые рецепты для хранения в БД → конвертация в decimal

Ожидания по интеграции в SDK

  • [x] #240
  • [ ] поддержка для сделок
  • [ ] #241
  • [ ] поддержка для продуктов
  • [ ] поддержка для встроенного типа Деньги (постарайтесь им не пользоваться, он ужасен).
  • [ ] WIP поддержка для пользовательского типа Деньги, который выведен из пользовательского типа double с точностью 2 (требование необходимости фильтров в списке сущностей)

К обсуждению если в запросе на изменение переданы объекты PHPMoney (валюта \ деньги), то производить автоматическую сериализацию в структуры данных которые ожидает Б24

Проблемы для пользовательского типа данных

Текущая реализация:

var_dump($сontact->getUserfieldByFieldName('BALANCE'));
// string(6) "134.43"

Ожидание: метод $сontact->getUserfieldByFieldName('BALANCE') вернёт объект Money\Money

Предлагаемое решение для пользовательских типов данных - чтение

Вариант 1 - использовать Serializer Component

При необходимости для поля может быть зарегистрирован денормалайзер имплементирующий интерфейс DenormalizerInterface компонента Serializer Component

Вариант 2 - обычная callback-функция при получении поля проверяем наличие каллбек-функции зарегистрированной по имени поля, если она есть, то вызываем её.

в обоих случаях ответственность за приведение типа к Битрикс24-совместимому лежит на коде внутри callback-функции

Вопрос с записью оставляем открытым, но скорее всего придётся делать работу в обе стороны нормализация\денормализация

mesilov avatar Nov 28 '21 20:11 mesilov

покапать:

  • [x] документацию к сериалайзеру https://symfony.com/doc/current/components/serializer.html#installation
  • [x] документацию по callback функции: https://www.php.net/manual/ru/language.types.callable.php

KarlsonComplete avatar Jul 22 '22 14:07 KarlsonComplete

Изучить вопрос:

  1. Когда получать базовую валюту (в момент создания сервиса которые отвечают за работу с сущностями CRM)
  2. Можно ли создать сделку с товарами если у них выставлена другая валюта.
  3. Можно ли сделать сделку если в табличной части 2 товара с разной валютой.
  4. Решить вопрос куда смотреть при получении табличной сделки или лида . Откуда получать значения валюты из сделки или из лида?
  5. Обдумать вариант передачи аргумента в методе при создании лида или сделки.(Вся ответственность будет лежать внутри клиентского кода.)

KarlsonComplete avatar Jul 27 '22 14:07 KarlsonComplete

Изучить вопрос:

  1. Когда получать базовую валюту (в момент создания сервиса которые отвечают за работу с сущностями CRM)

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

  1. Можно ли создать сделку с товарами если у них выставлена другая валюта.

Можно, будет взята валюта которая выставлена в сделке. (Нужно указывать цену товара в самой сделке.)

  1. Можно ли сделать сделку если в табличной части 2 товара с разной валютой.

Можно, будет взята валюта которая выставлена в сделке. (Нужно указывать цену товара в самой сделке.)

  1. Решить вопрос куда смотреть при получении табличной сделки или лида . Откуда получать значения валюты из сделки или из лида?

Если работаем с лидом , то берем валюту из лида, если со сделкой , то берем валюту из сделки.

  1. Обдумать вариант передачи аргумента в методе при создании лида или сделки.(Вся ответственность будет лежать внутри клиентского кода.)

KarlsonComplete avatar Aug 03 '22 13:08 KarlsonComplete