Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Ситуация когда 2 человека делают заказ в одно время


indaled

Recommended Posts

Добрый день! Вопрос на форуме поднимался пару раз но ответа так никто и не дал.

 

Ситуация: 2 человека примерно в одно время добавляют товар с наличием 1шт в корзину. Даже если в настройках запрещено продавать товар с нулевым остатком они могут это сделать. Соответственно далее на этапе оформления заказа они опять таки оба (а их может быть и больше) могут купить этот товар. В итоге мы получаем наличие "-1 шт" и недостаток товаров на складе.

 

Происходит (насколько я понимаю) это потому что проверка наличия идет на этапе добавления в корзину, а списывание товара со склада только на этапе оформления заказа, соот-но все кто добавил товар в корзину до момента когда последняя единица товара была списана могут так же оформить свой заказ и вывести наличие в минус.

 

Решение вижу в том чтобы при отправке заказа так же проверять весь список товаров на текущее наличие на складе.

 

Вопрос простой: как быть!?

 

Версия движка любая (ранее вопрос поднимался и про OS 1.5 и про 2.0, в моем случае 2.3)

Змінено користувачем indaled
Надіслати
Поділитися на інших сайтах


Присвоить статус одинаковый и для заказа "в процессе" и для "завершённого" ?

Ну что бы кто первый успел, тот и списал товар со склада, а второму в настройках запретить покупать товар которого нет в наличии...

Надіслати
Поділитися на інших сайтах

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

Надіслати
Поділитися на інших сайтах

20 часов назад, Tom сказал:

Присвоить статус одинаковый и для заказа "в процессе" и для "завершённого" ?

Ну что бы кто первый успел, тот и списал товар со склада, а второму в настройках запретить покупать товар которого нет в наличии...

Вы не совсем поняли суть вопроса. Проблема в том что на последнем этапе оформления заказа (кнопка #button-confirm) не проводится верификация на наличие товаров находящихся в корзине к реальному наличию, соот-но если кто то оформлял заказ с вами параллельно, то вы можете заказать единицу которой в наличии реально нет.

Проблему решил следующим образом (вдруг кому пригодится).

1. Добавляем в контроллер используемого payment (по дефолту cod.php, но может быть и другой если настраивали оплату) в функцию confirm валидацию корзины условием выполнения. Соответственно должно получиться как то так:

public function confirm() {
	    if ((!$this->cart->hasProducts() && empty($this->session->data['vouchers'])) || (!$this->cart->hasStock() && !$this->config->get('config_stock_checkout'))) {
			$redirect = $this->url->link('checkout/cart');
			$json['redirect'] = $redirect;
			$this->response->addHeader('Content-Type: application/json');
		    $this->response->setOutput(json_encode($json));
		}
        else {
    		if ($this->session->data['payment_method']['code'] == 'cod') {
    			$this->load->model('checkout/order');
    
    			$this->model_checkout_order->addOrderHistory($this->session->data['order_id'], $this->config->get('cod_order_status_id'));
    		}
        }
	}

2. В tpl файле того же метода оплаты (в данному случае дефолтный cod.tpl) меняем ajax запрос с учетом проверки json на предмет наличия там условия редиректа в корзину:

<div class="buttons">
  <div class="pull-right">
    <input type="button" value="<?php echo $button_confirm; ?>" id="button-confirm" class="btn btn-primary" data-loading-text="<?php echo $text_loading; ?>" />
  </div>
</div>
<script type="text/javascript"><!--
$('#button-confirm').on('click', function() {
	$.ajax({
		type: 'get',
		url: 'index.php?route=extension/payment/cod/confirm',
		cache: false,
		beforeSend: function() {
			$('#button-confirm').button('loading');
		},
		complete: function() {
			$('#button-confirm').button('reset');
		},
		success: function(json) {
		    if(json['redirect']) {
				location = json['redirect'];
			}
			else {
			    location = '<?php echo $continue; ?>';
			}
		}
	});
});
//--></script>

Теперь при нажатии кнопки "подтверждение заказа" проходит еще одна валидация, которая не допустит проблемы с минусовым наличием.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.