Только работы много
Не так уж и много.
в файле ..\classes\order\OrderState.php
есть такая функция (у меня версия 1.6.1.12 в других наверняка похожая):
public static function getOrderStates($id_lang)
{
$cache_id = 'OrderState::getOrderStates_'.(int)$id_lang;
if (!Cache::isStored($cache_id)) {
$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT *
FROM `'._DB_PREFIX_.'order_state` os
LEFT JOIN `'._DB_PREFIX_.'order_state_lang` osl ON (os.`id_order_state` = osl.`id_order_state` AND osl.`id_lang` = '.(int)$id_lang.')
WHERE deleted = 0
ORDER BY `name` ASC');
Cache::store($cache_id, $result);
return $result;
}
return Cache::retrieve($cache_id);
}
строку
WHERE deleted = 0
заменить на
WHERE deleted = 0 and (os.id_order_state IN (1,2,3))
или
WHERE deleted = 0 and !(os.id_order_state IN (1,2,3))
В первом случае показывать только статусы с id 1,2 и 3. Во втором - кроме них.
id статусов можно посмотреть в таблице ps_order_state_lang
Но это способ "топором", лучше так:
В таблицу ps_order добавить свое поле, например, is_to_show (tinyint(1)), у нужных статусов проставить 1 и тогда
WHERE deleted = 0 and is_to_show = 1
Можно, по желанию, это поле добавить на страницу настроек статусов.
Вот и все.
пользы мало
Пользы как раз очень много - когда у менеджера перед глазами список из 20-30 статусов, из которых реально нужно только 5, то ошибки неизбежны.