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

Рейтинг: 2.7804  
Новая
Предложил Пользователь 25773 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  
Пользователь 25773 08.10.2019 20:42:31
Евгений Жуков, как же теперь назначать пользователю тип цен в зависимости от города или поддомена?
Рейтинг: 0  
Пользователь 2106 08.10.2019 23:03:54
Т.е. речь либо о разделении типов цен по сайтам, либо о выборе типа цены в зависимости от местоположения?
Рейтинг: 0  
Пользователь 25773 09.10.2019 14:09:22
Т.е. речь либо о разделении типов цен по сайтам, либо о выборе типа цены в зависимости от местоположения?

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

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

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

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

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

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

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

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

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

Обратите внимание еще на идею:
Чтобы правила работы корзины учитывали местоположение
https://idea.1c-bitrix.ru/to-the-rules-of-the-basket-took-into-account-the-location/
Рейтинг: 0  
Пользователь 2106 09.10.2019 18:11:35
Я знаю ее.
Рейтинг: 0  
Пользователь 2026689 05.12.2019 18:43:47
поддерживаю автора, тоже добавлял пользователя на лету в группу в зависимости от местоположения нужны были разные цены, и для неавторизированных пользователей не учитывало его групп, что странно. Писал в тп по этому вопросу, показывал даже где поменять нужно, говорил что в старом ядре все было ок. Но ответ был, что єто норма.
Рейтинг: 0  
Пользователь 2026689 05.12.2019 19:12:43
https://idea.1c-bitrix.ru/32411/

то же само что хочет автор, просто другими словами.
Рейтинг: 0  
Пользователь 2026689 05.12.2019 19:16:20
сейчас так $userId === 0
https://clip2net.com/s/44X44Dp

но лутше что было так https://clip2net.com/s/44X40MF