Перейти к содержимому


Разделение одного заказа на два заказа


  • Вы не можете ответить в тему
Сообщений в теме: 4

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 27 April 2016 - 01:38 PM

Дополнение позволяет в админке заказа перенести часть товаров в новый заказ. Т.е. из одного заказа создать два.
Нужно это, например, когда заказ попадает под ограничение службы доставки по весу или стоимости.
Или когда часть товаров есть на складе и можно отгрузить, а часть товаров надо подождать.

Суть:
=====
В админке заказа появился столбец с галками на списке товаров, а в заголовке столбца с галками - кнопка "Новый". При нажатии создается новый заказ и "огалоченные" товары переносятся в него.

В старом заказе:
1. удаляются эти позиции
2. пересчитывается сумма заказа
3. скидка остается та же (в процентах)
4. доставка остается та же (в абсолюте)

В новом заказе:
1. меняется дата-время.
2. всегда ставится статус "новый" (независимо от статуса исходного заказа)
3. прописывается комментарий к этому статусу "скопировано из заказа XXX"
4. скидка остается та же (в процентах)
5. доставка остается та же (в абсолюте)

Доставку автоматически не пересчитать в принципе, т.к. в заказе НЕТ информации о модуле доставки, только текст названия и сумма. Только если по названию отлавливать соответствующий модуль доставки, но это не совсем хорошо.
Внимание: штатный модуль админки заказа не позволяет изменять стоимость доставки и размер скидки, так что для полноценного использования полезно установить сторонний модуль админки заказа, позволяющий редактировать заказ.


Установка:
==========

1. в файле custord_new_orders.tpl.html

1.1. чуть выше


{section name=i loop=$orderContent}


после


<table class="adn">
<tr class="lineb">


вставляем


{* BEGIN выделяем часть заказа в отдельный заказ *}
<td align="center" style="padding:0;" width="1%">
<input type="hidden" name="move" id="move" value="0">
<input type="hidden" name="encodedUrlToReturn" value="{$encodedUrlToReturn}">
<input type="submit" value="Новый" style="cursor:pointer;" onclick="getElementById('move').value=1;">
</td>
{* END выделяем часть заказа в отдельный заказ *}


Собственно, таким образом мы добавили столбец в таблицу. Это заголовок столбца.

1.2. после


{section name=i loop=$orderContent}
<tr class="liney">


вставляем


{* BEGIN выделяем часть заказа в отдельный заказ *}
<td align="center"><input type="checkbox" name="chbox_{$orderContent[i].itemID}" value="1"></td>
{* END выделяем часть заказа в отдельный заказ *}


Это мы добавили содержимое столбца (чекбоксы).

1.3. чуть ниже увеличиваем на единицу colspan="x"


2. в файле custord_new_orders.php

перед


if ( isset($_GET["delete"]) )


вставляем


# BEGIN выделяем часть заказа в отдельный заказ
if (isset($_POST["move"]) && $_POST["move"] == 1 && count($data = ScanPostVariableWithId(array("chbox"))))
{
$old_orderID = (int)$_GET["orderID"];
db_query("CREATE TEMPORARY TABLE ".DB_PRFX."temporary AS SELECT * FROM ".ORDERS_TABLE." WHERE orderID=$old_orderID");
db_query("UPDATE ".DB_PRFX."temporary SET orderID=NULL");
db_query("INSERT INTO ".ORDERS_TABLE." SELECT * FROM ".DB_PRFX."temporary");
$new_orderID = db_insert_id();
db_query("DROP TABLE ".DB_PRFX."temporary");
stChangeOrderStatus($new_orderID, ostGetNewOrderStatus(), $comment = "перенос товара из заказа $old_orderID");
db_query("UPDATE ".ORDERED_CARTS_TABLE." SET orderID=$new_orderID WHERE orderID=$old_orderID AND itemID IN(".implode(',',array_keys($data)).")");
$row = db_fetch_assoc(db_query("SELECT shipping_cost, order_discount FROM ".ORDERS_TABLE." WHERE orderID=$old_orderID"));
$sum = db_fetch_assoc(db_query("SELECT SUM(Price) AS sum FROM ".ORDERED_CARTS_TABLE." WHERE orderID=$old_orderID"));
db_query("UPDATE ".ORDERS_TABLE." SET order_amount=".($sum['sum']*(1.0-$row['order_discount']/100.0)+$row['shipping_cost'])." WHERE orderID=$old_orderID");
$sum = db_fetch_assoc(db_query("SELECT SUM(Price) AS sum FROM ".ORDERED_CARTS_TABLE." WHERE orderID=$new_orderID"));
db_query("UPDATE ".ORDERS_TABLE." SET order_amount=".($sum['sum']*(1.0-$row['order_discount']/100.0)+$row['shipping_cost']).", order_time='".get_current_time()."', statusID=".ostGetNewOrderStatus()." WHERE orderID=$new_orderID");
Redirect(ADMIN_FILE."?dpt=custord&sub=new_orders&orders_detailed=yes&orderID=$new_orderID&urlToReturn=".$_POST['encodedUrlToReturn']);
}
# END выделяем часть заказа в отдельный заказ

  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 super-shop-ru.ru

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 76 сообщений
Репутация: 0
Начинающий
  • ГородМск

Отправлено 27 April 2016 - 07:48 PM

Набрался наглости и сделал все как описано.

Работает!
Удобно!
Супер!

Спасибо!
  • 0

#3 super-shop-ru.ru

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 76 сообщений
Репутация: 0
Начинающий
  • ГородМск

Отправлено 27 April 2016 - 11:13 PM

Одна маленькая проблемка, вернее, неудобство.

Комментарии к заказу высвечиваются в крайней левой колонке.
А можно их разместить под "Комментарием" чуть правее?

При печати все печатается правильно.
Неудобство именно при просмотре с экрана.

Скан экрана http://savephoto.ru/...xj5hsufyj28.jpg
Изображение
  • 0

#4 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 28 April 2016 - 10:17 AM

Комментарии к заказу высвечиваются в крайней левой колонке.
А можно их разместить под "Комментарием" чуть правее?

Вы не там разместили кнопку "Новый".
см. п.1.1 инструкции.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 super-shop-ru.ru

    Продвинутый пользователь

  • Пользователи
  • PipPipPip
  • 76 сообщений
Репутация: 0
Начинающий
  • ГородМск

Отправлено 30 April 2016 - 09:44 PM

Нашел как правильно должно быть.
Спасибо!
  • 0