Новый ПродуктПровайдерКласс не понимает групп пользователя

Рейтинг: 0  
Новая
Предложил Зайцев Артемий 07.10.2019 18:03:47

Новый ПродуктПровайдерКласс не понимает групп пользователя

Поломалась многородовость с новым АПИ. Теперь не получится пользователю на лету добавлять группу с ценой в этом городе.

Вместо CCatalogProductProvider теперь Bitrix\Catalog\Product\CatalogProvider

Новый ПродуктПровайдерКласс не понимает групп пользователя, которые установлены "на лету" методом  $USER->GetUserGroupArray();. Приходится заменять новый на старый.

// Получение корзины для текущего пользователя
                $basket = \Bitrix\Sale\Basket::loadItemsForFUser(
                   \Bitrix\Sale\Fuser::getId(), 
                   $_GET["site_id"]
                );

                if($item = $basket->getExistsItem("catalog", intval($_GET["id"]))){

                   //Обновление товара в корзине
                   $item->setField("QUANTITY", $item->getQuantity() + $addBasketQuantity);

                }

                else{


                    //Добавление товара
                    $rsElement = CIBlockElement::GetByID(intval($_GET["id"]));
                    if($arNextElement = $rsElement->GetNext()){
                        $item = $basket->createItem("catalog", intval($_GET["id"]));
                        $item->setFields([
                            "QUANTITY" => $addBasketQuantity,
                            "CURRENCY" => \Bitrix\Currency\CurrencyManager::getBaseCurrency(),
                            "LID" => $_GET["site_id"],
                            "PRODUCT_PROVIDER_CLASS" => "CCatalogProductProvider",//changed for OPT price in basket//Bitrix\Catalog\Product\CatalogProvider",
                            "CATALOG_XML_ID" => $arNextElement["IBLOCK_EXTERNAL_ID"],
                            "PRODUCT_XML_ID" => $arNextElement["EXTERNAL_ID"],
                        ]);
                    }

                }

                //Сохранение изменений
                $basket->save();

Предлагаю добавить в новый Bitrix\Catalog\Product\CatalogProvider проверку на группы пользователей как было раньше.
Рейтинг: 0  
Ответил Жуков Евгений 07.10.2019 18:26:06
В старом эта ошибка так же исправлена (список групп берется по базе). Изменяться это поведение не будет. Однако мы всегда готовы обсудить сценарии использования старого поведения.

Рейтинг: 0  
Зайцев Артемий 08.10.2019 20:42:31
Евгений Жуков, как же теперь назначать пользователю тип цен в зависимости от города или поддомена?
Рейтинг: 0  
Жуков Евгений 08.10.2019 23:03:54
Т.е. речь либо о разделении типов цен по сайтам, либо о выборе типа цены в зависимости от местоположения?
Рейтинг: 0  
Зайцев Артемий 09.10.2019 14:09:22
Т.е. речь либо о разделении типов цен по сайтам, либо о выборе типа цены в зависимости от местоположения?

Да, можно с местоположением связать. Но обычно регионы продаж делаем на инфоблоке или хайлоадблоке.

Стандартное решение с многогородовостью: делаем инфоблок со списком городов. Рисуем в шапке выбиралку городов. В зависимости от выбранного пользователем города делаем $USER->GetUserGroupArray(); с нужной группой -  пользователь получает цену в своём регионе.

Еще обычно устанавливаем местоположение в корзине и показываем нужные склады.
Рейтинг: 0  
Зайцев Артемий 09.10.2019 14:14:18
Еще было бы хорошо сделать событие, чтобы явно в зависимости от каких-то условий выбирать доступные пользователю типы цен.

Событие OnGetOptimalPrice сложное. Надо весь результат возвращать.
Рейтинг: 0  
Жуков Евгений 09.10.2019 15:56:33
Еще было бы хорошо сделать событие, чтобы явно в зависимости от каких-то условий выбирать доступные пользователю типы цен.

Событие OnGetOptimalPrice сложное. Надо весь результат возвращать.
Поясните.
Рейтинг: 0  
Зайцев Артемий 09.10.2019 16:25:49
Поясните.
Бывают задачи например: если общая сумма товаров в корзине по розничной цене больше 10000, то дать доступ к цене "Мелкий Опт".

А могут быть товары исключения, для которых "Мелкий Опт" нельзя, т.к. розничная цена установлена производителем.

Бывает, что при вычислении цены товара надо знать от какого типа сейчас  надо считать цену этого товара по специальным условиям (не только от  выбранного региона)

Или товары легковые шины считать по одному типу цен, а диски по другому типу цен. Хотя могут быть оба типа заполнены. Просто у заказчика разными категориями товаров разные подразделения занимаются и свои цены придумывают.

Я подумал, что интересно было бы ещё иметь возможность гибко назначать пользователю его типы цен, к которым он имеет доступ,  с помощью события.
Рейтинг: 0  
Жуков Евгений 09.10.2019 17:04:16
Бывают задачи например: если общая сумма товаров в корзине по розничной цене больше 10000, то дать доступ к цене "Мелкий Опт".
Вот прямо сейчас в работе, будет реализовано через правила корзины.
Рейтинг: 0  
Зайцев Артемий 09.10.2019 17:26:19
Вот прямо сейчас в работе, будет реализовано через правила корзины.
Спасибо.

Обратите внимание еще на идею:
Чтобы правила работы корзины учитывали местоположение
https://idea.1c-bitrix.ru/to-the-rules-of-the-basket-took-into-account-the-location/
Рейтинг: 0  
Жуков Евгений 09.10.2019 18:11:35
Я знаю ее.