Доброго времени.
Можно ли на стандартной функциональности каждой группе пользователей настроить минимальный заказ, например:
Группа пользователей:
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());
}
}
}
У вас есть готовое решение в виде модуля?
Это решение я применял в рамках другого модуля, но организовать всё в модуль с конкретными потребностями тоже возможно.
Если интересно - свяжитесь со мной в личку, обсудим
вы что, зачем пре контроллер, это же все равно что оверрайд в вашем случае. если можете использовать хуки то лучше их