Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Разделенный заказ в корзине


Recommended Posts

Всем привет! Как думаете, как можно реализовать такую идею,

Например в корзине лежат товары трех производителей, при оформлении заказа выходит один заказ №120, а мне нужно чтобы было три разных заказа №121, №122, №123.То есть заказ разделился бы.

У меня пал глаз на реализацию в model/checkout/order.php То есть добавила в insert  "manufacture_id = '".(int)$product['manufacture_id']."'," и переместила запрос в foreach

<?php
class ModelCheckoutOrder extends Model {
	public function addOrder($data) {
		// Products
		if (isset($data['products'])) {
			foreach ($data['products'] as $product) {
                /*мои доработки*/
                $this->db->query("INSERT INTO `" . DB_PREFIX . "order` SET invoice_prefix = '" . $this->db->escape($data['invoice_prefix']) . "', store_id = '" . (int)$data['store_id'] . "', manufacture_id = '".(int)$product['manufacture_id']."', store_name = '" . $this->db->escape($data['store_name']) . "', store_url = '" . $this->db->escape($data['store_url']) . "', customer_id = '" . (int)$data['customer_id'] . "', customer_group_id = '" . (int)$data['customer_group_id'] . "', firstname = '" . $this->db->escape($data['firstname']) . "', lastname = '" . $this->db->escape($data['lastname']) . "', email = '" . $this->db->escape($data['email']) . "', telephone = '" . $this->db->escape($data['telephone']) . "', custom_field = '" . $this->db->escape(isset($data['custom_field']) ? json_encode($data['custom_field']) : '') . "', payment_firstname = '" . $this->db->escape($data['payment_firstname']) . "', payment_lastname = '" . $this->db->escape($data['payment_lastname']) . "', payment_company = '" . $this->db->escape($data['payment_company']) . "', payment_address_1 = '" . $this->db->escape($data['payment_address_1']) . "', payment_address_2 = '" . $this->db->escape($data['payment_address_2']) . "', payment_city = '" . $this->db->escape($data['payment_city']) . "', payment_postcode = '" . $this->db->escape($data['payment_postcode']) . "', payment_country = '" . $this->db->escape($data['payment_country']) . "', payment_country_id = '" . (int)$data['payment_country_id'] . "', payment_zone = '" . $this->db->escape($data['payment_zone']) . "', payment_zone_id = '" . (int)$data['payment_zone_id'] . "', payment_address_format = '" . $this->db->escape($data['payment_address_format']) . "', payment_custom_field = '" . $this->db->escape(isset($data['payment_custom_field']) ? json_encode($data['payment_custom_field']) : '') . "', payment_method = '" . $this->db->escape($data['payment_method']) . "', payment_code = '" . $this->db->escape($data['payment_code']) . "', shipping_firstname = '" . $this->db->escape($data['shipping_firstname']) . "', shipping_lastname = '" . $this->db->escape($data['shipping_lastname']) . "', shipping_company = '" . $this->db->escape($data['shipping_company']) . "', shipping_address_1 = '" . $this->db->escape($data['shipping_address_1']) . "', shipping_address_2 = '" . $this->db->escape($data['shipping_address_2']) . "', shipping_city = '" . $this->db->escape($data['shipping_city']) . "', shipping_postcode = '" . $this->db->escape($data['shipping_postcode']) . "', shipping_country = '" . $this->db->escape($data['shipping_country']) . "', shipping_country_id = '" . (int)$data['shipping_country_id'] . "', shipping_zone = '" . $this->db->escape($data['shipping_zone']) . "', shipping_zone_id = '" . (int)$data['shipping_zone_id'] . "', shipping_address_format = '" . $this->db->escape($data['shipping_address_format']) . "', shipping_custom_field = '" . $this->db->escape(isset($data['shipping_custom_field']) ? json_encode($data['shipping_custom_field']) : '') . "', shipping_method = '" . $this->db->escape($data['shipping_method']) . "', shipping_code = '" . $this->db->escape($data['shipping_code']) . "', comment = '" . $this->db->escape($data['comment']) . "', total = '" . (float)$data['total'] . "', affiliate_id = '" . (int)$data['affiliate_id'] . "', commission = '" . (float)$data['commission'] . "', marketing_id = '" . (int)$data['marketing_id'] . "', tracking = '" . $this->db->escape($data['tracking']) . "', language_id = '" . (int)$data['language_id'] . "', currency_id = '" . (int)$data['currency_id'] . "', currency_code = '" . $this->db->escape($data['currency_code']) . "', currency_value = '" . (float)$data['currency_value'] . "', ip = '" . $this->db->escape($data['ip']) . "', forwarded_ip = '" .  $this->db->escape($data['forwarded_ip']) . "', user_agent = '" . $this->db->escape($data['user_agent']) . "', accept_language = '" . $this->db->escape($data['accept_language']) . "', date_added = NOW(), date_modified = NOW()");
                /*end*/
                $order_id = $this->db->getLastId();
				$this->db->query("INSERT INTO " . DB_PREFIX . "order_product SET order_id = '" . (int)$order_id . "', product_id = '" . (int)$product['product_id'] . "', name = '" . $this->db->escape($product['name']) . "', model = '" . $this->db->escape($product['model']) . "', quantity = '" . (int)$product['quantity'] . "', price = '" . (float)$product['price'] . "', total = '" . (float)$product['total'] . "', tax = '" . (float)$product['tax'] . "', reward = '" . (int)$product['reward'] . "'");
				$order_product_id = $this->db->getLastId();

				foreach ($product['option'] as $option) {
					$this->db->query("INSERT INTO " . DB_PREFIX . "order_option SET order_id = '" . (int)$order_id . "', order_product_id = '" . (int)$order_product_id . "', product_option_id = '" . (int)$option['product_option_id'] . "', product_option_value_id = '" . (int)$option['product_option_value_id'] . "', name = '" . $this->db->escape($option['name']) . "', `value` = '" . $this->db->escape($option['value']) . "', `type` = '" . $this->db->escape($option['type']) . "'");
				}

			}
		}

		// Gift Voucher
		$this->load->model('extension/total/voucher');

Либо что-то в контроллере делать controller/checkout/simplechekout.php

  private function order() {
// ....
    $this->load->model('checkout/order');

        $order_id = 0;

        $customInfo = $this->simplecheckout->getCustomFields(array('customer', 'payment_address', 'payment', 'shipping_address', 'shipping'), 'order');

        $data = array_merge($customInfo, $data);


        if ($version < 152) {
            $order_id = $this->model_checkout_order->create($data);

            // Gift Voucher
            if (isset($this->session->data['vouchers']) && is_array($this->session->data['vouchers'])) {
                $this->load->model('checkout/voucher');

                foreach ($this->session->data['vouchers'] as $voucher) {
                    $this->model_checkout_voucher->addVoucher($order_id, $voucher);
                }
            }
        } elseif ($version >= 152) {
            $order_id = $this->model_checkout_order->addOrder($data);
        }

        $this->session->data['order_id'] = $order_id;

        $this->simplecheckout->saveCustomFields(array('customer', 'payment_address', 'payment', 'shipping_address', 'shipping'), 'order', $order_id);

        $simple_cart_id = !empty($this->session->data['simple_cart_id']) ? $this->session->data['simple_cart_id'] : 0;

        if ($simple_cart_id) {
            $this->load->model('tool/simpleapi');
            $this->model_tool_simpleapi->deleteAbandonedCart($simple_cart_id);
        }

        return $order_id;

    }

В $order_id = $this->model_checkout_order->addOrder($data); здесь как раз вызывается метод, и я думаю может быть здесь можно разделить заказы по производителям.

На этом все мои догадки кончились. Буду благодарна услышать подсказку.

OpenCart 3.0.2

Link to post
Share on other sites

Да, это реально сделать и даже я делал такое, но много нюансов есть.

Как минимум это методы оплаты, их нужно потом научить менять статусы заказы не только последнему, но и всем остальным.

Если это метод оплаты связан с эквайрингом тут все сложнее + надо не забывать что может быть применен купон/скидка и т.д. т.е. разные методы что меняют итоговую стоимость заказа.

 

 

По симпле так же не забывайте про существование clearOrder() именно симплы метода, иначе много левака в базе будет при разбивке. 

 

UPD:

12 минут назад, AnnaBez сказал:

В $order_id = $this->model_checkout_order->addOrder($data); здесь как раз вызывается метод, и я думаю может быть здесь можно разделить заказы по производителям.

В своей реализации делал разделение до вызова функции.

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

  

 

Link to post
Share on other sites

4 минуты назад, Bn174uk сказал:

Да, это реально сделать и даже я делал такое, но много нюансов есть.

Как минимум это методы оплаты, их нужно потом научить менять статусы заказы не только последнему, но и всем остальным.

Если это метод оплаты связан с эквайрингом тут все сложнее + надо не забывать что может быть применен купон/скидка и т.д. т.е. разные методы что меняют итоговую стоимость заказа.

 

 

По симпле так же не забывайте про существование clearOrder() именно симплы метода, иначе много левака в базе будет при разбивке. 

А если оплата только по счету для юр.лиц будет? То есть выставлен общий счет, покупатель оплачивает и 1С по всем заказам меняет статус "оплачено". Нюанс не отпадает?

Link to post
Share on other sites

4 минуты назад, AnnaBez сказал:

А если оплата только по счету для юр.лиц будет? То есть выставлен общий счет, покупатель оплачивает и 1С по всем заказам меняет статус "оплачено". Нюанс не отпадает?

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

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

 

В общем, все можно сделать, просили подсказку я ее дал.

А как именно реализуете это уже Ваше дело, я всего лишь рассказал о своем случаи с который я столкнулся и как я его решал.

Link to post
Share on other sites

17 минут назад, AnnaBez сказал:

А если оплата только по счету для юр.лиц будет? То есть выставлен общий счет, покупатель оплачивает и 1С по всем заказам меняет статус "оплачено". Нюанс не отпадает?

Может проще разделять заказы уже при передаче информации на сторону 1С?

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Similar Content

    • By Leingard
      Интерактивный модуль имитации заказов на сайте, который значительно повысит доверие Ваших клиентов к Вашему сайту!
       
      Модуль повышает доверие Ваших клиентов, путём имитации заказов на Вашем сайте. Клиенты видят, как в данный момент совершаются заказы на Вашем сайте реальных товаров, на которые они могут перейти и убедится в этом
       
      Посмотреть демо работы модуля OcStore 2.3 (установлено 8 секунд)
      Просмотреть демо работы модуля OcStore 2.1 (Установлено 6 секунд)
      Демо админ. панели (demo, demo) OcStore 2.3
       
      Версия для OpenCart 3
       
      Особенности:
      Быстрая скорость работы Использует актуальную информацию о Ваших товарах Возможность выбора категории из которой будут отображаться товары для имитации заказов (свой набор товаров) Возможность задать интервал для отображения (NEW) Возможность задать ценовую политику товаров для отображения (NEW) Разрешить / запретить показывать товары с ценой "0" (NEW) Разрешить / запретить показывать товары с количеством "0" (NEW) Возможность указать позицию отображения Возможность задать свой отступ отображения блока Удобная графическая настройка всех элементов модуля Поддержка практически любых нестандартных тем Повышает доверие к Вашему сайту с первых минут пребывания на нем  
      Приобретая модуль сейчас, в следующих дополнениях Вы бесплатно получите:
       
      3 вида анимации появления и исчезания 3 вида тем оформления (Классическая, Новогодняя, Современная)  
      Инструкция:
      Установите и настройте модуль по Вашим пожеланиям Выведите через схемы на любую страницу в любом расположении  
      Сложность установки и настройки: Лёгкая
       
      Обновление 1.5
      Добавлена возможность отображения общего количества покупок товара (Купили N раз) Добавлена возможность включения / выключения товаров со статусом "выключен" (FIX если у Вас отображались товары с ценой 0) Теперь вся анимация модуля воспроизводится на CSS5, вместо JS (анимация стала легче и быстрее) Исправлена неполадка при которой товары выводились из одной категории некорректно Исправлена неполадка с повторением анимации одинаковых товаров Добавлена проверка цены на все возможные скидки и акции Добавлены подсказки для некоторых пунктов настроек  
      Обновление 1.4
      Оптимизирована работа скриптов вывода Исправлена неполадка при вызове товара из выключенной категории Обновление 1.3
      Возможность задать интервал для отображения (NEW) Возможность задать ценовую политику товаров для отображения (NEW) Разрешить / запретить показывать товары с ценой "0" (NEW) Разрешить / запретить показывать товары с количеством "0" (NEW)  
      Обновление 1.2
      Добавлена возможность выбрать категорию из которой будут отображаться товары для имитации заказов (свой набор товаров) Добавлена возможность указать позицию отображения Добавлена возможность задать свой отступ отображения блока Дополнительная оптимизация Исправления совместимости с некоторыми популярными темами  
      Обновление 1.1
      OpenCart/OcStore 2.2 Opencart/OcStore 2.1  
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть
    • By Leingard
      750
      Скачать/Купить дополнение


      FakeOrders 1.5.1 PRO - имитация заказов на сайте
      Интерактивный модуль имитации заказов на сайте, который значительно повысит доверие Ваших клиентов к Вашему сайту!
       
      Модуль повышает доверие Ваших клиентов, путём имитации заказов на Вашем сайте. Клиенты видят, как в данный момент совершаются заказы на Вашем сайте реальных товаров, на которые они могут перейти и убедится в этом
       
      Посмотреть демо работы модуля OcStore 2.3 (установлено 8 секунд)
      Просмотреть демо работы модуля OcStore 2.1 (Установлено 6 секунд)
      Демо админ. панели (demo, demo) OcStore 2.3
       
      Версия для OpenCart 3
       
      Особенности:
      Быстрая скорость работы Использует актуальную информацию о Ваших товарах Возможность выбора категории из которой будут отображаться товары для имитации заказов (свой набор товаров) Возможность задать интервал для отображения (NEW) Возможность задать ценовую политику товаров для отображения (NEW) Разрешить / запретить показывать товары с ценой "0" (NEW) Разрешить / запретить показывать товары с количеством "0" (NEW) Возможность указать позицию отображения Возможность задать свой отступ отображения блока Удобная графическая настройка всех элементов модуля Поддержка практически любых нестандартных тем Повышает доверие к Вашему сайту с первых минут пребывания на нем  
      Приобретая модуль сейчас, в следующих дополнениях Вы бесплатно получите:
       
      3 вида анимации появления и исчезания 3 вида тем оформления (Классическая, Новогодняя, Современная)  
      Инструкция:
      Установите и настройте модуль по Вашим пожеланиям Выведите через схемы на любую страницу в любом расположении  
      Сложность установки и настройки: Лёгкая
       
      Обновление 1.5
      Добавлена возможность отображения общего количества покупок товара (Купили N раз) Добавлена возможность включения / выключения товаров со статусом "выключен" (FIX если у Вас отображались товары с ценой 0) Теперь вся анимация модуля воспроизводится на CSS5, вместо JS (анимация стала легче и быстрее) Исправлена неполадка при которой товары выводились из одной категории некорректно Исправлена неполадка с повторением анимации одинаковых товаров Добавлена проверка цены на все возможные скидки и акции Добавлены подсказки для некоторых пунктов настроек  
      Обновление 1.4
      Оптимизирована работа скриптов вывода Исправлена неполадка при вызове товара из выключенной категории Обновление 1.3
      Возможность задать интервал для отображения (NEW) Возможность задать ценовую политику товаров для отображения (NEW) Разрешить / запретить показывать товары с ценой "0" (NEW) Разрешить / запретить показывать товары с количеством "0" (NEW)  
      Обновление 1.2
      Добавлена возможность выбрать категорию из которой будут отображаться товары для имитации заказов (свой набор товаров) Добавлена возможность указать позицию отображения Добавлена возможность задать свой отступ отображения блока Дополнительная оптимизация Исправления совместимости с некоторыми популярными темами  
      Обновление 1.1
      OpenCart/OcStore 2.2 Opencart/OcStore 2.1  
       
      Лицензия:
      Модуль продается с лицензией на сайт. Одна покупка = Один домен Покупая копию модуля вы получаете право на использование. Распространения модуль платно или бесплатно нарушает лицензию и грозит обнулением покупки, а так же уголовной ответственность предусмотренной статей 146 УК РФ (Нарушение авторских и смежных прав)  Автор оставляет за собой право изменят условия предоставления лицензии, изменения цены и стоков продления лицензии. Все доработки, переработки и изменения функционала не входят в стоимость модуля и оплачиваются отдельно по письменной договоренности с автором.  
      Тип распространения:
      Как есть Добавил Leingard Добавлено 20.12.2017 Категория Покупки, оформление заказа, корзина Системные требования bootstrap Метод активации По запросу в ЛС Ioncube Loader Нет OpenCart 2.3
      2.1 ocStore 2.3
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика Нет Старая цена 550  
    • By ArtemPitov
      1050 15
      Доступ к обновлениям: 500.00 руб за 360 дней
      Доступ к обновлениям: 5.00 USD за 360 дней
      Скачать/Купить дополнение


      Брошенная корзина + вечная корзина + редактор корзин
      Будет работать с симплой, собирает заказы гостей, после окончания периода лицензии модуль будет работать 
       
      Дополнения предназначено для сбора, обработки и рассылки уведомлений о забытых корзинах. 
      Система отслеживает добавления и изменения товаров в корзине, а также оформления заказа, тем самым собирает информацию о забытых или не до конца оформленных заказах. 
      Опираясь на статистические данные, около 70 – 80% корзин интернет-магазина остаются брошенными, а в реалиях OpenCart с временем жизни корзины для гостей не более часа статистика может быть еще хуже. Для борьбы с этой проблемой была разработана система, включающая в себе сбор, восстановления и хранения товаров в корзине покупателя.
       
      Демо:
      admin  
      Модуль собирает:
       Информация о покупателе. ФИО, Номер телефона, Email, Магазин в котором оформлялся заказ (актуально для мультимагазинов), язык магазина (актуально для мультиязычных магазинов). Сохранения данных корзины. Собираются все стандартные данные корзины OpenCart.  
      Возможности:
      Отправка email уведомлений. Рассылка сообщений клиентам о забытых заказах с возможною добавления купона и повторных отправок оповещений, учитывается язик и магазин в котором находится потерянная корзина. Восстановления корзины по ссылке. Позволяет восстановить корзину по ссылке, для постоянных клиентов с авторизацией. Во время формирования ссылки используется два ключа шифрования, первый внешний которые вы можете указать в настройках, второй системный.   Не ограничено хранения товаров в корзине. Метка корзины хранится в cookie, у каждого покупателя индивидуальная и зашифрованная внутренним и внешним кличем. Для мультимагазина формируются индивидуальные метки. Рассылка уведомлений. Предусмотрена автоматическая (cron) или ручная рассылка уведомлений, дополнительно в целях безопасности защищена секретным кличем который формируется для каждой копии модуля индивидуально.  
      Установка:
       Инструкция по установке доступна при скачивание модуля   
      Технические требования:
      PHP версии 5.6 или выше OpenCart и другие сборки версий 2.1.х  IonCube 10  
      Лицензия
       
       
      Добавил ArtemPitov Добавлено 23.04.2018 Категория Покупки, оформление заказа, корзина Системные требования Ioncube Loader 10, php 5.6 и выше Метод активации По запросу в ЛС Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1 Обращение к серверу разработчика Нет Старая цена 0  
    • By SirGrey
      750 10
      Скачать/Купить дополнение


      Повтор заказа (заказать снова)
      Повторить заказ (заказать снова) для OpenCart
       
      Это расширение реализует функцию «повторения заказа» для OpenCart
      Модуль добавляет кнопку в списке заказов и на странице информации о заказе в личном кабинете клиента.
      Все товары из заказа (и связанные с ними опции) добавляются обратно в корзину.
       
       

       
      Добавил SirGrey Добавлено 27.02.2021 Категория Покупки, оформление заказа, корзина Системные требования Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3 ocStore 3.0
      2.3 OpenCart.Pro, ocShop Обращение к серверу разработчика Нет Старая цена 0  
    • By SirGrey
      Повторить заказ (заказать снова) для OpenCart
       
      Это расширение реализует функцию «повторения заказа» для OpenCart
      Модуль добавляет кнопку в списке заказов и на странице информации о заказе в личном кабинете клиента.
      Все товары из заказа (и связанные с ними опции) добавляются обратно в корзину.
       
       

       
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.