Минимальный Заказ

Доброго времени.

Можно ли на стандартной функциональности каждой группе пользователей настроить минимальный заказ, например:

Группа пользователей:
1. Мелкий оптовик - минимальный заказ 15000р
2. Средний оптовик - минимальный заказ 30000р
3. Крупный оптовик - минимальный заказ 45000р

Благодарен.

Доброго времени.

Можно ли на стандартной функциональности каждой группе пользователей настроить минимальный заказ, например:

Группа пользователей:
1. Мелкий оптовик - минимальный заказ 15000р
2. Средний оптовик - минимальный заказ 30000р
3. Крупный оптовик - минимальный заказ 45000р

Благодарен.

К сожалению, стандартными средствами такое не сделать

Даже готовых решений в MarketPlace нам не удалось найти.

Вам нужна функция fn_allow_place_order из файла /app/functions/fn.cart.php (у меня строка 5660)

если по быстрому, то в этой строке

 $cart['amount_failed'] = (Registry::get('settings.General.min_order_amount') > $total && floatval($total));

вместо Registry::get('settings.General.min_order_amount') вытаскивать из $auth группу покупателя и в зависимости от нее проставлять значение

если по правильному - написать маленький аддон со страницей настроек

PS все это чисто домыслы никоим образом не проверенные, но мысль нравится, так как давно задавался тем же вопросом, но так к нему пока и не подходил :)

PPS

по правильному - повесить на хук fn_set_hook('pre_place_order', $cart, $allow, $cart['product_groups']);

в функции fn_place_order все те действия, которые описал

Вам нужна функция fn_allow_place_order из файла /app/functions/fn.cart.php (у меня строка 5660)

если по быстрому, то в этой строке

 $cart['amount_failed'] = (Registry::get('settings.General.min_order_amount') > $total && floatval($total));

вместо Registry::get('settings.General.min_order_amount') вытаскивать из $auth группу покупателя и в зависимости от нее проставлять значение

если по правильному - написать маленький аддон со страницей настроек

PS все это чисто домыслы никоим образом не проверенные, но мысль нравится, так как давно задавался тем же вопросом, но так к нему пока и не подходил :)

PPS

по правильному - повесить на хук fn_set_hook('pre_place_order', $cart, $allow, $cart['product_groups']);

в функции fn_place_order все те действия, которые описал

А зачем на размещение заказа уже вешать? Есть же стандартное сообщение при заходе на оформление заказа app/controllers/frontend/checkout.php

    if (
        Registry::get('settings.General.min_order_amount_type') == 'only_products'
        && Registry::get('settings.General.min_order_amount') > $cart['subtotal']
    ) {
        Tygh::$app['view']->assign('value', Registry::get('settings.General.min_order_amount'));
        $min_amount = Tygh::$app['view']->fetch('common/price.tpl');
        fn_set_notification('W', __('notice'), __('text_min_products_amount_required') . ' ' . $min_amount);
    return array(CONTROLLER_STATUS_REDIRECT, 'checkout.cart');
}

Можно подобное сделать модулем через pre контроллер

А зачем на размещение заказа уже вешать? Есть же стандартное сообщение при заходе на оформление заказа app/controllers/frontend/checkout.php

    if (
        Registry::get('settings.General.min_order_amount_type') == 'only_products'
        && Registry::get('settings.General.min_order_amount') > $cart['subtotal']
    ) {
        Tygh::$app['view']->assign('value', Registry::get('settings.General.min_order_amount'));
        $min_amount = Tygh::$app['view']->fetch('common/price.tpl');
        fn_set_notification('W', __('notice'), __('text_min_products_amount_required') . ' ' . $min_amount);
    return array(CONTROLLER_STATUS_REDIRECT, 'checkout.cart');
}

Можно подобное сделать модулем через pre контроллер

Точно, досюда не докопался, так логичнее и правильней будет

Удалось сделать?

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

use Tygh\Settings;

if (!defined('BOOTSTRAP')) {
    die('Access denied');
}
if ($mode == 'checkout') {
    $ignore_cart_limit = false;
    if ($auth['user_id'] != 0) {
        $user_data = fn_get_user_info($auth['user_id'], false);
        $ignore_cart_limit = $user_data['ignore_cart_limit'] == 'Y';
    }

    $limit = (int)Settings::instance()->getValue('minimal_cart_value', 'my_changes');
    if(!$ignore_cart_limit){
    if (!empty($limit) && $limit != 0 && $limit > $_SESSION['cart']['subtotal']) {
        fn_set_notification('E', __('error'), __('cart_subtotal_to_small', ['[limit]' => $limit]));
        return array(CONTROLLER_STATUS_REDIRECT, fn_url());
    }
    }
}

У вас есть готовое решение в виде модуля?

Это решение я применял в рамках другого модуля, но организовать всё в модуль с конкретными потребностями тоже возможно.
Если интересно - свяжитесь со мной в личку, обсудим

вы что, зачем пре контроллер, это же все равно что оверрайд в вашем случае. если можете использовать хуки то лучше их