Gloobus Опубликовано 27 июня, 2013 Жалоба Поделиться Опубликовано 27 июня, 2013 (изменено) В файле simpla\design\html\orders.tpl добавляем в выпадающий список новое действие - Объединить: <span id="select"> <select name="action"> <option value="delete">Удалить</option> <option value="merge">Объединить</option> </select> </span> Далее в файле simpla\OrdersAdmin.php находим выполнение действия удаления: case 'delete': { .... } и после него вставляем: case 'merge': { sort($ids); //сортируем массив отчекбошеных заказов по возрастанию, что бы первым был "первый" (более ранний) заказ $count_ids=0; //счетчик на нуль, начинаем отчет foreach($ids as $id) //перебираем сортированный массив заказов { if ($count_ids==0) //тут у нас должен быть первый заказ, который станет основным... { $main_id = $id; // ... берем его айди, этот заказ будет главным! } else { //далее идут следующие заказы, получаем товары присоединяемого заказа $purchases = $this->orders->get_purchases(array('order_id'=>$id)); foreach($purchases as $purchase) // разбираем их { // ищем такой же товар в главном (основном) заказе, куда объединяются другие $query = $this->db->placehold("SELECT * FROM __purchases WHERE order_id=$main_id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id." LIMIT 1"); $this->db->query($query); $main_purchases = $this->db->result(); if(!empty($main_purchases)) { // если в главном заказе товар найден, то апдейтим у него кол-во на ту величину, что у присоединяемого заказа $update_purchase = $this->db->placehold("UPDATE __purchases SET amount=amount+".$purchase->amount." WHERE order_id=$main_id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id.""); $this->db->query($update_purchase); // после удаляем этот товар из присоединяемого заказа $delete_purchase = $this->db->placehold("DELETE FROM __purchases WHERE order_id=$id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id." LIMIT 1"); $this->db->query($delete_purchase); } else { // если в главном заказе не было товара из присоединяемого заказа, то мы товар переносим, сменив ему ID-заказа $move_purchase = $this->db->placehold("UPDATE __purchases SET order_id=$main_id WHERE order_id=$id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id.""); $this->db->query($move_purchase); } } $this->orders->delete_order($id); //после чего, удаляем присоединяемый заказ } $count_ids++; //увеличиваем счетчик } //после всех переносов товаров в основной заказ, нужно проапдейтить итоговую стоимость заказа $upd_order_price = $this->db->placehold("UPDATE __orders o SET o.total_price=IFNULL((SELECT SUM(p.price*p.amount)*(100-o.discount)/100 FROM __purchases p WHERE p.order_id=o.id), 0)+o.delivery_price*(1-o.separate_delivery)-o.coupon_discount, modified=NOW() WHERE o.id=$main_id LIMIT 1"); $this->db->query($upd_order_price); break; } Это простое, но возможно кривое решение работает нормально Может кому пригодится... Да, кстати... объединяя заказ №1, №2, №3 у вас останется тольк заказ №1, в него перенесутся все товары из заказов №2 и №3, после чего они удалятся. Информация о покупателе и другая инфа по заказам №2 и №3 так же удалится. Переносятся ТОЛЬКО товары из заказов! Изменено 9 сентября, 2013 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 июля, 2013 Автор Жалоба Поделиться Опубликовано 2 июля, 2013 Есть ньюанс один в этом решении:если в объединяемых заказах есть одинаковые позиции товаров - они не объединяются, в результате одинаковые позиции в итоговом заказе будут как разные. В свободное время попробую доработать. Комплектации заказа на складе по распечатанной накладной это не мешает. Цитата Ссылка на сообщение Поделиться на другие сайты
nwnet Опубликовано 2 июля, 2013 Жалоба Поделиться Опубликовано 2 июля, 2013 Если вас не затруднит - может сразу реализуете и сортировку по наименованию товаров в заказе по умолчанию. Это существенно облегчит задачу складским работникам. И кстати заодно позволит отслеживать имеются ли в заказе дублирующиеся товары. Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 17 августа, 2013 Жалоба Поделиться Опубликовано 17 августа, 2013 Gloobus Вы не дорабатывали своё решение "объединение заказов" по поводу одинаковых позиций в заказах? Чтобы одинаковый товар увеличивался в количестве штук, а не добавлялся ещё одной позицией. Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 9 сентября, 2013 Автор Жалоба Поделиться Опубликовано 9 сентября, 2013 DanyaПоправил шапку, дописал код Теперь при объединении нескольких заказов с одинаковыми товарами в них они не дублируются, а тоже объединяются Раза три затестил, вроде все ОК Кто хочет, погонять можно тут: http://simpla.gloobus.ru/simpla/Логин: managerПароль: test Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 10 сентября, 2013 Жалоба Поделиться Опубликовано 10 сентября, 2013 Gloobus Огромное СПАСИБИЩЕ! Цитата Ссылка на сообщение Поделиться на другие сайты
svma3x Опубликовано 4 января, 2014 Жалоба Поделиться Опубликовано 4 января, 2014 Доброго времени суток всем, спасибо больное Globus за проделанную работу.Правда под мои цели пришлось поменять кое-что: заказы не удаляются а создается новый соответственно и товар остаётся в старых заказах. Проверил, протестил все работает гуд кому надо берите))) Далее в файле simpla\OrdersAdmin.php находим выполнение действия удаления: case 'delete': { .... } и после него вставляем: case 'merge': { // Создаем пустой заказ и берем его id для дальнейшей работы с ним $order_last = $this->orders->add_order($id); $main_id = $order_last; rsort($ids); //сортируем массив отчекбошеных заказов по убыванию, что бы первым был "первый" (более ранний) заказ $count_ids=0; //счетчик на нуль, начинаем отчет foreach($ids as $id){ //перебираем сортированный массив заказов { //далее идут следующие заказы, получаем товары присоединяемого заказа $purchases = $this->orders->get_purchases(array('order_id'=>$id)); foreach($purchases as $purchase) // разбираем их { // ищем такой же товар в главном (основном) заказе, куда объединяются другие $query = $this->db->placehold("SELECT * FROM __purchases WHERE order_id=$main_id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id." LIMIT 1"); $this->db->query($query); $main_purchases = $this->db->result(); if(!empty($main_purchases)) { // если в главном заказе товар найден, то апдейтим у него кол-во на ту величину, что у присоединяемого заказа $update_purchase = $this->db->placehold("UPDATE __purchases SET amount=amount+".$purchase->amount." WHERE order_id=$main_id and product_id=".$purchase->product_id." and variant_id=".$purchase->variant_id.""); $this->db->query($update_purchase); } else { // если в главном заказе не было товара из присоединяемого заказа, то мы товар добавляем, сменив ему ID-заказа $purchase->id = $this->orders->add_purchase(array('order_id'=>$main_id, 'product_id'=>$purchase->product_id, 'variant_id'=>$purchase->variant_id, 'product_name'=>$purchase->product_name, 'variant_name'=>$purchase->variant_name, 'variant_color'=>$purchase->variant_color, 'price'=>$purchase->price, 'amount'=>$purchase->amount, 'sku'=>$purchase->sku)); $posted_purchases_ids[] = $purchase->id; } } $count_ids++; //увеличиваем счетчик } //после всех переносов товаров в основной заказ, нужно проапдейтить итоговую стоимость заказа $upd_order_price = $this->db->placehold("UPDATE __orders o SET o.total_price=IFNULL((SELECT SUM(p.price*p.amount)*(100-o.discount)/100 FROM __purchases p WHERE p.order_id=o.id), 0)+o.delivery_price*(1-o.separate_delivery)-o.coupon_discount, modified=NOW() WHERE o.id=$main_id LIMIT 1"); $this->db->query($upd_order_price); break; } Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.