Остатки на складе

Уроки и советы по работе с TSVshop
gregst
Сообщения: 2
Зарегистрирован: 14 сен 2016, 11:26

Остатки на складе

Сообщение gregst » 14 сен 2016, 11:31

Добрый день.

Можно ли добавить доп.поле "остаток на складе" и при переводе заказа в состояние "оплачен" автоматически уменьшать "остатки" на количество купленного товара?

Плюс, можно ли ограничить количество покупаемых товаров остатками на складе? Что бы нельзя было купить 10 товаров при наличие на складе 2-х?


Как можно импортировать товары из 1С? в шопкипере есть свой сниппет для этого, в твшопе можно также?

Спасибо

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Остатки на складе

Сообщение admin » 15 сен 2016, 13:43

Здравствуйте.
1) Можно сделать. Для этого нужно написать небольшой плагин на события TSVshopOnAddItem и TSVshopOnDeleteItem (ссылка на документацию http://tsvshop.xyz/dokumentacziya/dlya- ... itiya.html), который при добавлении товара в корзину сначала проверяет количество товара на складе, потом делает необходимые действия, а также при удалении заказа возвращает товары на склад. Я на скорую набросал плагин (извините за ужасный код, сейчас заболел гриппом, голова не соображает) может не работать, но думаю, что суть понятна. Если что, пишите или спрашивайте.

Код: Выделить всё

/*
Плагин для учета товаров на складе
 
Конфигурация:
&tvinventory=Название TV учета кол-ва товара;string;tvinventory &templateid=ID шаблона карточки товара;string; &errorchunk=Чанк с сообщением, если товара нет в наличии;string;Shop_ItemNull &lesschunk=Чанк с сообщением, если товара меньше, чем надо;string;Shop_ItemLess

События:
TSVshopOnAddItem, TSVshopOnDeleteItem
*/

global $session, $cache;
$e = &$modx->Event;

//Подключаем конфиг и ядро корзины
include(MODX_BASE_PATH."assets/snippets/tsvshop/include/config.inc.php");
include(MODX_BASE_PATH."assets/snippets/tsvshop/include/cart.inc.php");
include(MODX_BASE_PATH."assets/snippets/tsvshop/admin/includes/core.inc.php");

// Определяем переменные
$tvinventory = (!empty($tvinventory)) ? $tvinventory : 'inventory';  // название TV для учета количества товара на складе
$templateid = (!empty($templateid)) ? $templateid : '';  // ИД шаблона карточки товара
$eventstatus = (!empty($eventstatus)) ? $eventstatus : 'Оплачено'; // статус, при котором заказ считается выполненным
$errorchunk = (!empty($errorchunk)) ? $errorchunk : '';  // Чанк с сообщением, если товара нету в наличии
$lesschunk = (!empty($lesschunk)) ? $lesschunk : '';  // Чанк с сообщением, если товара в наличии меньше, чем заказали


if (empty($templateid)) return;

$dborders=$modx->getFullTableName('shop_order');
$tvtable = $modx->getFullTableName('site_tmplvar_contentvalues');
$dborders_details=$modx->getFullTableName('shop_order_detail');

if ($e->name == 'TSVshopOnAddItem') {
   // Срабатывает при добавлении товара в корзину
   // Здесь мы будем проверять, есть ли товар в наличии при добавлении в корзину, сколько единиц доступно.
   // Если его кол-во равно 0 или пусто - не даем добавить в корзину и выводим предупреждение
   // Если его кол-во меньше, чем положено в корзину, то уменьшаем на доступное кол-во + алерт
   // Если все ок, то уменьшаем на заказанное кол-во
   // Данные о добавляемом товаре доступны в массиве $item
   
   $count = $modx->getTemplateVar($tvinventory,'value',$item['url']);
   swith ($count['value']) {
     case '' :
     case 0 :
      unset($_SESSION[$session]['orders'][$item['id']]);
      $modx->webAlert(getTpl($errorchunk));
      // или $e->output(getTpl($errorchunk));
      break;
     default:
      if ($count['value']< $item['qty']) {
        $modx->db->update(array('value'=>0),$tvtable,'contentid = '.$order['url'].' AND tmplvarid='.$templateid);
        $_SESSION[$session]['orders'][$item['id']]['qty'] = $count['value'];
        $modx->webAlert(getTpl($lesschunk));
        // или $e->output(getTpl($lesschunk));
      } else {
        $modx->db->update(array('value'=>floatval($count['value']-$item['qty'])),$tvtable,'contentid = '.$order['url'].' AND tmplvarid='.$templateid);
      }
     break;
   }
}

if ($e->name == 'TSVshopOnDeleteItem') {
   // При удалении товара из корзины
   // Приплюсовываем кол-во товара к общему кол-ву товара на складе
   // Данные об удаляемом товаре доступны в массиве $item
   
   $count = $modx->getTemplateVar($tvinventory,'value',$item['url']);
   $modx->db->update(array('value'=>floatval($count['value']+$item['qty'])),$tvtable,'contentid = '.$order['url'].' AND tmplvarid='.$templateid);
}




2) Для импорта прекрасно подходит https://yadi.sk/d/Uky1ww-HujR9u . Поскольку это решение уже было написано, не видел необходимости писать что-то новое. Ведь товары - это обычные документы МОДх, а потому можно использовать любое подходящее решение.

gregst
Сообщения: 2
Зарегистрирован: 14 сен 2016, 11:26

Re: Остатки на складе

Сообщение gregst » 15 сен 2016, 19:05

Окей, спасибо!

Буду пробовать

Genapi
Сообщения: 3
Зарегистрирован: 13 апр 2017, 12:17

Остатки на складе

Сообщение Genapi » 18 апр 2017, 10:57

Вроде все так,проверила.А остатки на начало года,мы заносили в ручную,может там что-то не так?А у вас есть пошаговая интрукция как в этом складе работать?

admin
Администратор
Сообщения: 148
Зарегистрирован: 08 фев 2013, 13:53

Re: Остатки на складе

Сообщение admin » 28 апр 2017, 16:53

Пошаговой инструкции нету.
Просто устанавливаете плагин и потом вручную прописываете остатки на складе. Или каким-то другим способом. А далее плангин сам будет считать. Если есть какие-то вопросы по настройкам, пишите.


Вернуться в «Как сделать ... ?»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость