Перейти к содержанию
Luch

Вычитание со склада при оформлении заказа

Рекомендуемые сообщения

Здравствуйте, Коллеги!

Если включить опцию "вычитать со склада", то вычитание происходит после того, когда заказ в админке переведен в статус "сделка завершена".

Но здесь проблема в том, что одновременно могут оформить заказ несколько покупателей, но в сумме они могут взять количество товара, большее, чем есть на остатке. И этот товар будет доступен пока не подтвердит владелец магазина, что сделка завершена.

 

Может кто-то решал этот вопрос таким образом, чтобы количество товара вычиталось со склада именно по завершении оформления заказа покупателем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если у тебя 1 купит последний товар - и потом захотят купить кто то - а товара нету 

 

А 1 клиент отменит заявку и все 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты


foreach ($order_product_query->rows as $order_product) {

$this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");

$order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");

foreach ($order_option_query->rows as $option) {

$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");

}

}

Изменено пользователем nikifalex

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
foreach ($order_product_query->rows as $order_product) {
	$this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");
	$order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");
	foreach ($order_option_query->rows as $option) {
		$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
	}
}

Спасибо. Можно вкратце, в каком файле, и за что отвечает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А если у тебя 1 купит последний товар - и потом захотят купить кто то - а товара нету 

 

А 1 клиент отменит заявку и все 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Есть золотая середина : статус заказ выполняется / согласован / ожидает оплаты

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что если в настройках магазина поставить статус завершённого заказа, тот который сразу после оформления заказа у вас?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

а что если в настройках магазина поставить статус завершённого заказа, тот который сразу после оформления заказа у вас?

Если по умолчанию поставить "завершенный", то на вычитание это не повлияет, статус отразится только в информационном письие покупателю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
foreach ($order_product_query->rows as $order_product) {
	$this->db->query("UPDATE " . DB_PREFIX . "product SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_id = '" . (int)$order_product['product_id'] . "' AND subtract = '1'");
	$order_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_option WHERE order_id = '" . (int)$order_id . "' AND order_product_id = '" . (int)$order_product['order_product_id'] . "'");
	foreach ($order_option_query->rows as $option) {
		$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$order_product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
	}
}

Есть такой файл catalog/model/checkout/order.php, но не совсем понял суть...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Тоже интересно. Думаю о неком буфере резервном, чтобы не вычиталось из наличия все оформленные заказы.

 

Как организовать вычитание из "Наличия" через смену статуса заказа?

 

 

По теме:

Может клиенту, который зазказывает товар, который уже заказали, но не оплатили, писчать об этом в корзине? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, Коллеги!

Если включить опцию "вычитать со склада", то вычитание происходит после того, когда заказ в админке переведен в статус "сделка завершена".

Но здесь проблема в том, что одновременно могут оформить заказ несколько покупателей, но в сумме они могут взять количество товара, большее, чем есть на остатке. И этот товар будет доступен пока не подтвердит владелец магазина, что сделка завершена.

 

Может кто-то решал этот вопрос таким образом, чтобы количество товара вычиталось со склада именно по завершении оформления заказа покупателем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.