bitrix24-php-sdk
bitrix24-php-sdk copied to clipboard
add phpmoney as default money type
Проблема деньги в ответах 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-функции
Вопрос с записью оставляем открытым, но скорее всего придётся делать работу в обе стороны нормализация\денормализация
покапать:
- [x] документацию к сериалайзеру https://symfony.com/doc/current/components/serializer.html#installation
- [x] документацию по callback функции: https://www.php.net/manual/ru/language.types.callable.php
Изучить вопрос:
- Когда получать базовую валюту (в момент создания сервиса которые отвечают за работу с сущностями CRM)
- Можно ли создать сделку с товарами если у них выставлена другая валюта.
- Можно ли сделать сделку если в табличной части 2 товара с разной валютой.
- Решить вопрос куда смотреть при получении табличной сделки или лида . Откуда получать значения валюты из сделки или из лида?
- Обдумать вариант передачи аргумента в методе при создании лида или сделки.(Вся ответственность будет лежать внутри клиентского кода.)
Изучить вопрос:
- Когда получать базовую валюту (в момент создания сервиса которые отвечают за работу с сущностями CRM)
Возможно нам не очень и важна базовая валюта которая установлена в нашем битриксе так как мы можем взять нашу валюту из сделки.
- Можно ли создать сделку с товарами если у них выставлена другая валюта.
Можно, будет взята валюта которая выставлена в сделке. (Нужно указывать цену товара в самой сделке.)
- Можно ли сделать сделку если в табличной части 2 товара с разной валютой.
Можно, будет взята валюта которая выставлена в сделке. (Нужно указывать цену товара в самой сделке.)
- Решить вопрос куда смотреть при получении табличной сделки или лида . Откуда получать значения валюты из сделки или из лида?
Если работаем с лидом , то берем валюту из лида, если со сделкой , то берем валюту из сделки.
- Обдумать вариант передачи аргумента в методе при создании лида или сделки.(Вся ответственность будет лежать внутри клиентского кода.)