Virtuemart 2, есть группа покупателей - Оптовики. Для них нужно установить минимальное значение количества для заказа товара, ну и шаг тоже..

Решение получилось не универсальное, но всеже..

Поля в карточке товара - Минимальный заказ и Шаг будем использовать только для группы Оптовиков, для остальных групп значение этих полей будет равно 1.

В представлении productdetails открываем файл default_addtocart.php и добавляем следующий код:

$db = JFactory::getDbo();
$user = JFactory::getUser();
$user1 = ($user->get('id'));

$query = 'SELECT `virtuemart_shoppergroup_id` '
. ' FROM `#__virtuemart_vmuser_shoppergroups` '
. ' WHERE `virtuemart_user_id` =' .$user1 ;

$db->setQuery($query, 0, 10);

$groupId = $db->loadResult();  

Код можно вставить после:

defined('_JEXEC') or die('Restricted access');

Тут же вверху файла заменим код для переменной $step:

if (isset($this->product->step_order_level)){
 if ($groupId == 3) $step=$this->product->step_order_level;
 else
 $step=1;
}else
 $step=1;
if($step==0)
 $step=1;

Получив id группы покупателей для текущего авторизованного пользователя, мы будем проверять следующее условие - если группа покупателя совпадает с группой Оптовики, то мы выводим значение, которое в карточке товара, если нет устанавливаем значение равным 1.

<input type="text" class="quantity-input js-recalculate" name="quantity[]" onblur="check(this);"
          value="<?php if (isset($this->product->step_order_level) && (int)$this->product->step_order_level > 0) {
         //echo $this->product->step_order_level;
         if ($groupId == 3) {
          echo $this->product->step_order_level;
         }else{
          echo '1';
         }
        } else if(!empty($this->product->min_order_level)){
         //echo $this->product->min_order_level;
         if ($groupId == 3) {
          echo $this->product->min_order_level;
         }else{
          echo '1';
         }
        }else {
         echo '1';
        } ?>"/>

Теперь в файле:

components/com_virtuemart/helpers/cart.php

Находим функцию checkForQuantities и для минимального значения и шага добавляем проверку на группу.

Сначала, находим группу текущего пользователя $groupId, добавляем тотже код для определения группы, что и выше:

И меняем условия для min_order_level и step_order_level

if ($min != 0 && $quantity < $min && $groupId == 3)

и

if ($step != 0 && ($quantity%$step)!= 0 && $groupId == 3)  

Где $groupId - id группы покупателей, для которых правила по количеству и шагу действуют.

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