Дробные товары
Плагин позволяет продавать товары с дробным количеством: весу, метражу, площади и по другим единицам измерения, с поддержкой минимальной кратности для покупки товара.
Функциональность плагина
- Поддержка целочисленных единиц товара
- Поддержка дробных единиц товара
- Возможность задания кратности покупки
- Настройки единиц измерения и кратности покупки по типу товара
- Контроль ввода количества в темах дизайна с учетом кратности на витрине
Единицы измерения и минимальная кратность
Единица измерения устанавливается товару и может быть дробной или целочисленной, плагином поддерживается множетсво единиц измерения с определенной минимальной кратностью (минимальная неделимая единица товара для покупки). Также есть гибкие настройки кратности для покупки, настраивается в товаре.
Ед. измерения | Описание | Минимальная кратность |
---|---|---|
Товары по весу |
||
кг. | товар в килограммах | 0.001 |
г. | товар в граммах | 1 (целочисленный товар) |
унция | товар в унциях (28.34 г) | 1 (целочисленный товар) |
Товары по длине |
||
м. | товар в метрах | 0.01 |
м. п. | товар в погонных метрах | 0.01 |
см. | товар в сантиметрах | 1 (целочисленный товар) |
км. | товар в километрах | 0.001 |
Товары по площади |
||
м² | товар в квадратных метрах | 0.001 |
га. | товар в гектарах | 0.001 |
км² | товар в квадратных километрах | 0.001 |
см² | товар в квадратных километрах | 1 (целочисленный товар) |
Товары по объему |
||
л. | товар в литрах | 0.001 |
м³ | товар в кубических метрах | 0.001 |
см³ | товар в кубических сантиметрах | 1 (целочисленный товар) |
мл. | товар в миллилитрах | 1 (целочисленный товар) |
Целочисленные единицы товара |
||
шт. | Штучный товар | 1 (целочисленный товар) |
л. | товар в литрах (не путать с литрами в дробных единицах) | 1 (целочисленный товар) |
100 г. | товар фасованный по 100 грамм | 1 (целочисленный товар) |
0.5 л. | товар в таре 0.5 литра | 1 (целочисленный товар) |
м. п. | товар в погонных метрах (не путать с п. метрами в дробных единицах) | 1 (целочисленный товар) |
Возможность задания кратности покупки
Часто дробные и штучные товары необходимо продавать с определенной кратностью, например весовой товар по 200 грамм или товар в погонных метрах с кратностью по 10 см, или штучный товар, в котором можно будет заказать только с кратностью по 5 шт. Для этого введена система приведения количества при заказе к кратному. В настройках продукта можно установить минимальную кратность для покупки товара, согласно которой количество будет округляться до кратного.
Настройка приведения к кратному работает в нескольких режимах:
- Отключено (не приводить к кратному)
- Только на витрине (для покупателей)
- Везде
При установленном типе приведения к кратному "Только на витрине", количество будет приводиться к кратному только покупателей магазина, в административной части магазина при редактировании заказа можно будет вводить любое значение, вопреки установленной кратности у товаров. При установке приведения к кратному "Везде", кратность будет работать везде и для всех.
Также отдельно выведе на настройка предупреждения о некратности, при вводе пользователем не кратного количества ему будет показано уведомление о кратности товара, также при включенном приведении к кратному в админ части, заказ не будет сохранен до приведения количества к кратному.
Настройки единиц измерения и кратности покупки
Единицы и кратность покупки присваиваются каждому продукту отдельно, также в плагине предусмотрена настройка единиц и кратности для товаров по типу. При создании товара или смене типа, продукту будут установлены настройки из типа товаров, дополнительно в настройках плагина можно установить запрет на смену смены единицы и кратности товара в самом продукте (настраивается по типа товара).
Внимание!
Плагин подменяет некоторые модели и экшены самого приложения, в связи с чем в плагине предусмотрена версионность.
Во избежание ошибок работы магазина, устанавливать обновления Shop-Script необходимо будет вместе с выходом обновления плагина!
Это бета версия плагина!
В данной версии не реализована поддержка дробного количества в:
- стандартном импорте и экспорте (если очень нужно сделаем)
- в стандартном обмене с 1С (нет тестовой установки 1С), с модулем 1С Полная интеграция все работает.
Документация для разработчиков
Логика работы плагина:
Плагин эмулирует дробное количество за счет конвертации видимого покупателю количества в минимальную неделимую единицу. Пример: заводится товар в метрах погонных, для данной размерности минимальная единица будет сантиметр, что составляет одну сотую метра, множитель 100. Соответственно когда покупатель вводит количество в корзине 1.2 м, в базу пишется 1.2 * 100 , что равно 120 см. При запросе данных данные из базы декодируются в видимое пользователем, количеcтво делится на множитель 120 см / 100 = 1.2 м и уже выводится пользователю. Таким же образом конвертируются остатки на складах, позиции заказа и отчеты продаж.
Апи для разработчиков плагинов и приложений:
В плагине предусмотрены методы для взаимодействия с другими плагинами, предусмотрены методы конвертации и кастомизации продуктов, артикулов и их остатков, позиций корзины, позиций заказа, методы добавления и сохранения позиций корзины, все методы описаны в интерфейсе shopZzzfractionalPluginStrategyPublicInterface и shopZzzfractionalPluginHelperUnitsInterface.
Проверка наличия плагина
if(class_exists('shopZzzfractionalPlugin') && shopZzzfractionalPlugin::isOn()) {
/* Тут логика */
}
Получение объекта апи
$api = wao(new shopZzzfractionalPluginFactory())->getStrategy();
Есть готовый трейт для подключения:
Публичные методы:
Конвертирует количество, остатки на складах в массиве $products, а также их skus в видимое для покупателя
Возвращает исходный массив с преобразованными и дополненными данными
$api->decodeProducts(&$products = array());
Конвертирует количество, остатки на складах в массиве $products, а также их skus в минимальную единицу размерности, используется перед записью в бд
Возвращает исходный массив с преобразованными и дополненными данными
$api->encodeProducts(&$products= array());
Конвертирует количество, остатки на складах артикулов в видимое для покупателя
Возвращает исходный массив с преобразованными и дополненными данными
$skus - Массив артикулов одного товара или разных
$api->decodeSkus(&$skus);
Конвертирует количество, остатки на складах артикулов в минимальную единицу размерности, используется перед записью в бд
Возвращает исходный массив с преобразованными и дополненными данными
$skus - Массив артикулов одного товара или разных
$api->encodeSkus(&$skus);
Конвертирует количество (quantity) позиций корзины или заказа в видимое пользователю
Возвращает исходный массив с преобразованными и дополненными данными
$items - Массив позиций корзины или заказа
$api->decodeItemsCount(&$items);
Конвертирует количество (quantity) позиций корзины или заказа в минимальную единицу размерности, используется перед записью в бд
Возвращает исходный массив с преобразованными и дополненными данными
$items - Массив позиций корзины или заказа
$api->encodeItemsCount(&$items);
Конвертирует количество в видимое пользователю (эмуляция дробного)
$count - количество для конвертации
$unit_id - единица измерения для конвертации от базовой находится в $product['unit']
$cast_default - для бесконечного количества вернуть по умолчанию строку или null
$api->decodeCount(&$count = null, $unit_id, $cast_default = '');
Конвертирует количество из видимого для пользователя в минимальную единицу размерности, используется перед записью в бд
$count - количество для конвертации
$unit_id - единица измерения для конвертации от базовой находится в $product['unit']
$cast_default - для бесконечного количества вернуть по умолчанию строку или null
$api->encodeCount(&$count = null, $unit_id, $cast_default = '');
Методы приведения к кратному, используются в корзине:
Конвертирует из дробного в минимальную единицу размерности, с приведением количества к кратному
$count - количество для конвертации
$product_data - массив данных продукта
$error - переменная по ссылке возвращает текст ошибки, при переданном не кратном количестве, если в настройках включены уведомления о кратности
$api->encodeAndCastCountByProduct(&$count, $product_data, &$error = null);
Конвертирует количество в видимое пользователю (эмуляция дробного) с приведением к кратному
$count - количество для конвертации
$product_data - массив данных продукта
$error - переменная по ссылке возвращает текст ошибки, при переданном не кратном количестве, если в настройках включены уведомления о кратности
$api-> decodeAndCastCountByProduct(&$count, $product_data, &$error = null);
Приводит переданное количество к кратному
$count - количество для конвертации ДРОБНОЕ!!!!
$product_data - массив данных продукта
$error - переменная по ссылке возвращает текст ошибки, при переданном не кратном количестве, если в настройках включены уведомления о кратности
$api-> castCountByProduct(&$count, $product_data, &$error = null);
Конвертирует из дробного в минимальную единицу размерности, с приведением количества к кратному и дополнительной проверкой количества остатков на складе, если на складе не будет нужного количества, то вернется остаток количества на складе, максимально возможный для покупки
$quantity - количество для конвертации ДРОБНОЕ!!!!
$sku_id - ID артикула покупаемого товара
$product_id - ID товара
$error - переменная по ссылке возвращает текст ошибки, при переданном не кратном количестве, если в настройках включены уведомления о кратности, также вернется ошибка о недоступном количестве к покупке товара
$api->encodeCartAddQuantity(&$quantity, $sku_id, $product_id = null, &$error = null);
Конвертирует из дробного в минимальную единицу размерности, с приведением количества к кратному и дополнительной проверкой количества остатков на складе и корзине покупателя, если на складе не будет нужного количества, то вернется остаток количества на складе, максимально возможный для покупки
$quantity - количество для конвертации ДРОБНОЕ!!!!
$sku_id - ID артикула покупаемого товара
$product_id - ID товара
$error - переменная по ссылке возвращает текст ошибки, при переданном не кратном количестве, если в настройках включены уведомления о кратности, также вернется ошибка о недоступном количестве к покупке товара
$api->encodeCartSaveQuantity(&$quantity, $sku_id, $product_id = null, &$error = null);
Методы Хелперы
Возвращает название ячейки единицы измерения в массиве
$api->unitKey();
Возвращает название ячейки кратности покупки в массиве, используется в конвертации количества с приведением к кратному
$api->multiplicityKey();
Возвращает название ячейки веса позиции заказа в массиве, можно использовать для проверки позиции на тип вес, если ячейка есть значит товар продается по весу
$api->weightKey();
$api->setConvert($flag = null);
$api->returnValueType($type = shopZzzfractionalPluginConfig::RETURN_VALUE_TYPE_NUMERIC);
$api->castReturnValue(&$value);