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

Статус заказа отменен - возврат на склад


tommy982

Recommended Posts

Здравствуйте

такой вопрос...

покупатель сделал заказ, но потом отменил

чтобы вернуть товар на склад я должен удалить заказ

можно ли возвращать товар не удаляя заказ, а меняя его статус на "Отменен" ?

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


  • 1 month later...
  • 6 months later...

Такая же проблема. Если заказ удалять, то товар как бы вернется на склад. Если заказу присваивать статус "Отменен" или "возврат", то количество товара на складе не прибавляется, приходиться вручную изменять. Удалять заказ полностью не хочется по разным причинам. Подскажет ли кто решение данной проблемы?

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


  • 2 weeks later...
  • 1 month later...
  • 3 weeks later...

можно ли возвращать товар не удаляя заказ, а меняя его статус на "Отменен" ?

Можно просто удалить товар из заказа.

Заказ останется, товар минусуется. Сумма заказ меняется.

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


Можно просто удалить товар из заказа.

Заказ останется, товар минусуется. Сумма заказ меняется.

проверил, товар не возвращается на склад, даже при удалении пустого заказа - он не возвращается

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

  • 1 month later...

на OpenCart 1.5.5.1 сработал этот способ

на ocStore 1.5.4.1 у меня не вышло

Вот по этой ссылке https://github.com/opencart/opencart/pull/173/files редактируете sale/orders.php добавляя что зеленым и будет удалять, и даже более - добавлять заказы при редактировании через админку.

 

Удаление с статусом "отмена" интересно, но если менять подряд несколько раз статус заказа -  то получится неразбериха со складом (тот же недочет что и в 1.5.4.1 при добавлении и удалении заказа через админку )

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


Почти год топику)) а решение подсказали только сегодня (хотя ссылке 7 месяцев)

А какие строчки отвечают именно за обновление количества товара при присвоении заказу статуса "отмена" или "возврат" ?

Насколько я понимаю, добавление товара к заказу через админку и так реализовано в 1.5.4.1 точно. Или речь про добавление цельных заказов?

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


Почти год топику)) а решение подсказали только сегодня (хотя ссылке 7 месяцев)

А какие строчки отвечают именно за обновление количества товара при присвоении заказу статуса "отмена" или "возврат" ?

Насколько я понимаю, добавление товара к заказу через админку и так реализовано в 1.5.4.1 точно. Или речь про добавление цельных заказов?

то что на гитхабе делает только корректное списывание со склада при добавление/изменение/удалении товара через бекенд. Работа с статусами не затрагиваются. Проблема в запрете изменения статуса после простановки его как "ОТМЕНА"

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


Почти год топику)) а решение подсказали только сегодня (хотя ссылке 7 месяцев)

А какие строчки отвечают именно за обновление количества товара при присвоении заказу статуса "отмена" или "возврат" ?

Насколько я понимаю, добавление товара к заказу через админку и так реализовано в 1.5.4.1 точно. Или речь про добавление цельных заказов?

то что на гитхабе - только корректное списывание со склада при добавление/изменение/удалении товара через бекенд. Статусы не затрагиваются. Проблема в запретите изменения статуса после простановки его как "ОТМЕНА"

нормальным русским языком напиши пожалуйста, что менять в своем order.php через гитхабовский?

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


на OpenCart 1.5.5.1 сработал этот способ

на ocStore 1.5.4.1 у меня не вышло

Вот по этой ссылке https://github.com/opencart/opencart/pull/173/files редактируете sale/orders.php добавляя что зеленым и будет удалять, и даже более - добавлять заказы при редактировании через админку.

Также не помогло. Ничего не изменилось в заказе

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


  • 4 months later...

деревенское, возможно, решение, но работает =)

 

 

правим файл

/admin/model/sale/order.php

 

 

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

	public function cancelOrder($order_id) {
		$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'");

		if ($order_query->num_rows) {
			$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

			foreach($product_query->rows as $product) {
				$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "' AND subtract = '1'");

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

				foreach ($option_query->rows as $option) {
					$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity + " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
				}
			}
		}
	}
	
	public function uncancelOrder($order_id) {
		$order_query = $this->db->query("SELECT * FROM `" . DB_PREFIX . "order` WHERE order_status_id > '0' AND order_id = '" . (int)$order_id . "'");

		if ($order_query->num_rows) {
			$product_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "order_product WHERE order_id = '" . (int)$order_id . "'");

			foreach($product_query->rows as $product) {
				$this->db->query("UPDATE `" . DB_PREFIX . "product` SET quantity = (quantity - " . (int)$product['quantity'] . ") WHERE product_id = '" . (int)$product['product_id'] . "' AND subtract = '1'");

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

				foreach ($option_query->rows as $option) {
					$this->db->query("UPDATE " . DB_PREFIX . "product_option_value SET quantity = (quantity - " . (int)$product['quantity'] . ") WHERE product_option_value_id = '" . (int)$option['product_option_value_id'] . "' AND subtract = '1'");
				}
			}
		}
	}

Теперь добавляем вот эти строчки в самое начало (до запроса к БД) функции addOrderHistory

$order_info = $this->getOrder($order_id);
if($order_info['order_status_id']==7) //  order status is canceled
{
    if($data['order_status_id']!=7) // uncancel order
    {
        $this->uncancelOrder($order_id); // add products
    }
}
else // order is ok
{
    if($data['order_status_id']==7) // canceling
    {
        $this->cancelOrder($order_id);   // delete products
    }
}

число 7 меняем на id статуса "отменено" или аналогичного статуса, который надо обрабатывать подобным образом (аннулировано, отказ и тп)

 

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

я надеюсь, что отрицательным количество товаров не станет:)

но это довольно редкая ситуация и ее обработку делать уже не стал.

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


  • 3 weeks later...

небольшое дополнение,

если удалить заказ в статусе "отменен", то система еще раз приплюсует все товары из заказа в каталог.

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

чтобы если статус отменен, то товары не возвращать, т.к. они были возвращены ранее.

ну или оставить все как есть и помнить об этом "баге" 

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


  • 4 months later...
  • 7 months later...

Doost, спасибо за решение. Мне помогло. Согласен со следующим постом, что теперь надо аккуратно думать про удаление заказа - т.к. он тогда еще одну единицу добавит на склад.

UPD1. доработал по вашему алгоритму. 

UPD2. надеюсь вы не против, если я оформлю ваши наработки в виде vqmod.

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

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

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

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

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

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

Вхід

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

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

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

Important Information

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