Нужно это, например, когда заказ попадает под ограничение службы доставки по весу или стоимости.
Или когда часть товаров есть на складе и можно отгрузить, а часть товаров надо подождать.
Суть:
=====
В админке заказа появился столбец с галками на списке товаров, а в заголовке столбца с галками - кнопка "Новый". При нажатии создается новый заказ и "огалоченные" товары переносятся в него.
В старом заказе:
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 выделяем часть заказа в отдельный заказ