Внимание! При отложенной оплате способ доставки не меняется, а остается тот же, который был выбран изначально при оформлении заказа.
Возможно, когда-то я сделаю и это, но пока не вижу надобности.
1. копируем файл
order_confirm.php -> core/includes/
2. в файле order_history.tpl.html в самое начало вставляем
{* BEGIN Отложенная оплата из личного аккаунта *}
{php}
$data = db_query("SELECT PID, name FROM ".PAYMENT_TYPES_TABLE." WHERE enabled=1 AND module_id>0 ORDER BY sort_order");
while ($row = db_fetch_assoc($data)) $pay[] = $row;
$this->assign("pay",$pay);
{/php}
{* END Отложенная оплата из личного аккаунта *}
а строчку
<td class="pad" align="left" valign="middle">{$user_orders[i].OrderStatus}</td>
заменяем на
{* BEGIN Отложенная оплата из личного аккаунта *}
{*<td class="pad" align="left" valign="middle">{$user_orders[i].OrderStatus}</td>*}
<td class="pad" align="left" valign="middle">
{$user_orders[i].OrderStatus}
{if $user_orders[i].statusID == $smarty.const.CONF_ORDER_CONFIRM_YES}
<select onchange="eval(this.value);">
<option>Оплатить</option>
{section name=p loop=$pay}
<option value="location.href='index.php?order_confirm=yes&paymentMethodID={$pay[p].PID}&orderID={$user_orders[i].orderID}'">{$pay[p].name}</option>
{/section}
</select>
{/if}
</td>
{* BEGIN Отложенная оплата из личного аккаунта *}
3. в файле order4_confirmation.php вместо строк
if ( isset ( $_GET["orderID"] ) && isset ( $_SESSION["newoid"] ) && ( int ) $_SESSION["newoid"] == ( int ) $_GET["orderID"] ) {
$paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"]);
вставляем
# BEGIN Отложенная оплата из личного аккаунта
#if ( isset ( $_GET["orderID"] ) && isset ( $_SESSION["newoid"] ) && ( int ) $_SESSION["newoid"] == ( int ) $_GET["orderID"] ) {
#$paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"]);
$data = db_query("SELECT orderID FROM ".ORDERS_TABLE." WHERE customerID=".regGetIdByLogin($_SESSION["log"]));
while ($row = db_fetch_assoc($data)) $orders[] = $row['orderID'];
if ( isset ( $_GET["orderID"] ) && (isset ( $_SESSION["newoid"] ) && ( int ) $_SESSION["newoid"] == ( int ) $_GET["orderID"] || in_array((int)$_GET["orderID"],$orders))) {
$paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"]);
db_query("UPDATE ".ORDERS_TABLE." SET payment_type='".$paymentMethod['name']."', paymethod=".$paymentMethod['PID']." WHERE orderID=".$_GET["orderID"]);
# END Отложенная оплата из личного аккаунта
comment к правке: я так и не понял, зачем привязывать процедуру оплаты к сессии - $_SESSION["newoid"] (чтобы кто-то левый не оплатил наш заказ?), но на всякий случай сделал аналогичную фишку - оплатить можно только свой заказ. ИМХО, оно нафиг не надо и правильнее убрать $_SESSION["newoid"] вообще.
Или я чего-то важного не замечаю.
4.1 в russian.php я заменил обещание "менеджер свяжется с вами" (как-то так, не в тему совершенно) на "Вы можете оплатить заказ позже из личного кабинета"
4.2 там же "личный аккаунт" заменен на "личный кабинет". Лично мне оно как-то привычнее и понятнее.
4.3 в админке в "Статусы заказов" изменил текст "Доставлен" на "Оплачен", тоже более понятно.