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


Запрет оплаты заказа до подтверждения менеджером


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

#1 badisoft

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

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

Отправлено 31 January 2014 - 01:40 PM

Модуль Запрет оплаты заказа до подтверждения менеджером.

Запрещает оплату оформленного заказа до перевода статуса заказа в "Подтвержден менеджером", после чего заказ можно оплатить из личного кабинета.
Является некоторым развитием модуля "отложенная оплата из личного кабинета".
В "Общих настройках" появится новый статус "Подтверждено менеджером".
Если этот статус совпадает со штатным статусом "Статус нового заказа", то все работает как и было, в штатном режиме.
Если не совпадает, то:
- при оформлении заказа нет выбора способа оплаты
- после оформления заказа нет перехода к оплате
- в личном аккаунте отложенная оплата этого заказа недоступна
- при смене статуса заказа на "Подтверждено менежджером" отсылается письмо с разрешением оплатить :) и ссылкой на личный аккаунт, где оплата этого заказа разрешена.

Спонсор: navff

Установка:
----------
1. копируем файлы

addon.php -> core/includes/admin/ (comment: этот файл при первом же заходе в админку сделает нужное и сам себя удалит. Если не удалился, то удалить вручную)
order_confirm.php -> core/includes/
order_confirm.tpl.html -> core/tpl/user/[шаблон]/
order_confirm_info.tpl.html -> core/tpl/email/


2. в файле order_history.tpl.html

2.1. в самое начало вставляем


{* BEGIN order_confirm *}
{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 order_confirm *}


2.2. строку


<td class="pad" align="left" valign="middle">{$user_orders[i].OrderStatus}</td>


заменяем на


{* BEGIN order_confirm *}
{*<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>
{* END order_confirm *}



3. в файле order4_confirmation.tpl.html

вместо


{else}{$smarty.const.STRING_ORDER_PLACED}{if $smarty.const.CONF_DISP_ORDERNUM eq 1}


вставляем


{* BEGIN order_confirm *}
{*{else}{$smarty.const.STRING_ORDER_PLACED}{if $smarty.const.CONF_DISP_ORDERNUM eq 1}*}
{else}
{if $smarty.const.CONF_NEW_ORDER_STATUS == $smarty.const.CONF_ORDER_CONFIRM_YES}
{$smarty.const.STRING_ORDER_PLACED}
{elseif $after_processing_html}
{$smarty.const.STRING_ORDER_PLACED_POST}
{else}
{$smarty.const.STRING_ORDER_PLACED_PRED}
{/if}
{if $smarty.const.CONF_DISP_ORDERNUM eq 1}
{* END order_confirm *}



4. в файле order3_billing.php перед


$payment_methods = payGetAllPaymentMethods(true);


вставляем


# BEGIN order_confirm
if (CONF_NEW_ORDER_STATUS != CONF_ORDER_CONFIRM_YES) $payment_methods = array();
else
# END order_confirm



5. в файле order4_confirmation.php

5.1. вместо строк


if ( isset ( $_GET["orderID"] ) && isset ( $_SESSION["newoid"] ) && ( int ) $_SESSION["newoid"] == ( int ) $_GET["orderID"] ) {
$paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"]);


вставляем


# BEGIN order_confirm
#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 order_confirm


5.2. вместо строки


if ( $currentPaymentModule != null )


вставляем


# BEGIN order_confirm
#if ( $currentPaymentModule != null )
$row = db_fetch_assoc(db_query("select statusID from ".ORDERS_TABLE." where orderID=".(int)$_GET["orderID"]));
if ( $currentPaymentModule != null && $row['statusID'] == CONF_ORDER_CONFIRM_YES)
# END order_confirm



6. в файле language.php после


define('STRING_ORDER_PLACED', '<b>Спасибо за Ваш заказ!</b><br>В ближайшее время наш менеджер свяжется с Вами');


вставляем


# BEGIN order_confirm
define('STRING_ORDER_PLACED_PRED', '<b>Спасибо за Ваш заказ!</b><br>Ваш заказ оформлен и ждет подтверждения менеджером.<br>После подтверждения Вы получите извещение email-ом и сможете оплатить заказ в личном аккаунте.');
define('STRING_ORDER_PLACED_POST', '<b>Спасибо, что решили оплатить Ваш заказ!</b><br>После оплаты ожидайте изменения статуса заказа в личном аккаунте.');
define('USER_LOGIN','<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<link rel=STYLESHEET href="data/admin/style.css" type="text/css">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<link rel="icon" href="data/admin/favicon.ico" type="image/x-icon">
<link rel="shortcut icon" href="data/admin/favicon.ico" type="image/x-icon">
<title>Вход в личный кабинет</title>
<style type="text/css">html, body {background-color: white; height: 100%}</style>
</head>
<body>
<table class="adn" style="height: 100%;">
<tr>
<td style="text-align: center; vertical-align: middle; padding-bottom: 40px;">
<form action="" method=post id="aushform">
<table class="adw" align="center">
<tr>
<td align=center valign="top" style="background-image: url(\'data/admin/adminstart.gif\'); background-repeat: no-repeat; background-position: top left;" width="330" height="116">
<table class="adw" style="width: 330px; height: 116px">
<tr>
<td colspan="5" height="46"><input type="hidden" name="enter" value="1"></td>
</tr>
<tr>
<td width="40">&nbsp;</td>
<td align=left width="100" style="color: #000000;">Логин:</td>
<td width="20">&nbsp;</td><td align=left width="100" style="color: #000000;">Пароль:&nbsp;&nbsp;</td>
<td width="70">&nbsp;</td>
</tr>
<tr>
<td colspan="5" height="2"></td>
</tr>
<tr>
<td width="40">&nbsp;</td>
<td align="left" valign="middle"><input type="text" name="user_login" maxlength="30" style="width: 98px; font-size: 11px; border: 1px solid #7F9DB9; padding-left: 1px; padding-right: 1px;"></td>
<td width="20">&nbsp;</td>
<td align="left" valign="middle"><input name="user_pw" type="password" maxlength="30" style="width: 98px; font-size: 11px; border: 1px solid #7F9DB9; padding-left: 1px; padding-right: 1px;"></td>
<td align="left" valign="middle" width="70"><input type="image" src="data/admin/ret.gif" onclick="document.getElementById(\'aushform\').submit(); return false" style="margin-left: 14px;"></td>
</tr>
<tr>
<td colspan="5" height="32"></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</td>
</tr>
</table>
</body>
</html>');
# END order_confirm



7. в файле statistic_functions.php в функции stChangeOrderStatus

вместо строки


xMailTxt($Email, STRING_CHANGE_ORDER_STATUS, 'customer.order.change_status.tpl.html',


вставляем


#BEGIN order_confirm
#xMailTxt($Email, STRING_CHANGE_ORDER_STATUS, 'customer.order.change_status.tpl.html',
xMailTxt($Email, STRING_CHANGE_ORDER_STATUS, ($statusID == CONF_ORDER_CONFIRM_YES)?'order_confirm_info.tpl.html':'customer.order.change_status.tpl.html',
#END order_confirm



8. в файле order_history.php

перед строкой


if ( isset($order_detailed))


вставляем


#BEGIN order_confirm
elseif (isset($_GET['order_history']) && $_GET['order_history'] == 'yes') die(USER_LOGIN);
#BEGIN order_confirm


------------------

Прикрепленные файлы


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

#2 FusSheva

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

  • Assistent vsupport.club
  • PipPipPip
  • 210 сообщений
Репутация: 7
Начинающий

Отправлено 29 March 2014 - 03:39 PM

Есть один момент...
Получается, нужно чтобы обязательно был подключен хотя бы один из модулей оплаты.

При простом оформлении, когда менеждер отсылает Email или звонит клиенту, и сообщает ему скажем тот же номер карточки Приватбанк на который нужно перевести сумму за заказ, конечную сумму и т.д. При этом варианте вашего модуля это уже сделать не возможно.

Хотелось бы иметь в истории заказов скажем кнопку ОK напротив select'a, при нажатии на которую идет переход к выбору способа оплаты (как раньше в табличке). А так, просто высвечивается select с надписью Оплатить с пустым списком.

p.s. У меня допустим два способа оплаты: Через терминал Приватбанка (пополнение счета по номеру карты) (бесплатно для клиента), и через сайт Приват24 (не мгновенная оплата). Просто человек идет на сайт Privat24 и переводит на счет деньги через свой кабинет (но там он платит за операцию перевода).
  • 0
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#3 badisoft

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

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

Отправлено 29 March 2014 - 06:03 PM

Получается, нужно чтобы обязательно был подключен хотя бы один из модулей оплаты.

Довольно логично, что если предполагается оплата, то нужен хотя бы один модуль оплаты :).

При простом оформлении, когда менеждер отсылает Email или звонит клиенту, и сообщает ему скажем тот же номер карточки Приватбанк на который нужно перевести сумму за заказ, конечную сумму и т.д. При этом варианте вашего модуля это уже сделать не возможно.

В случае отсутствия платежных модулей клиент и так не может оплатить товар пока ему не позвонит менеджер. Нахрена нужен этот модуль? :)

Хотелось бы иметь в истории заказов скажем кнопку ОK напротив select'a, при нажатии на которую идет переход к выбору способа оплаты (как раньше в табличке). А так, просто высвечивается select с надписью Оплатить с пустым списком.

Вы ведь наверняка догадываетесь, что можно ответить на "хотелось бы" применительно к бесплатному модулю, да? :)
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 FusSheva

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

  • Assistent vsupport.club
  • PipPipPip
  • 210 сообщений
Репутация: 7
Начинающий

Отправлено 29 March 2014 - 07:07 PM

В случае отсутствия платежных модулей клиент и так не может оплатить товар пока ему не позвонит менеджер. Нахрена нужен этот модуль? :)

Собственно, есть такой еще вариант...
Стоит модуль оплаты Privat24 (моментальная оплата), но можно еще оплатить просто на карточку так?
Человеку приходит мыло - мол можно оплачивать. Он открывает Историю заказов и тут может выбрать только модуль Privat24 (моментальная оплата), а как же быть с информацией о том что можно еще оплатить просто на карточку, либо в банкомате, либо на сайте Приват24 через обычный перевод денег на номер счета?

Были случаи, когда человек бежал в банк к банкомату, оплачивал заказ, а потом узнавал что нужно доплатить еще за что либо. Или наоборот, переплатил (за кол-во товара которого небыло в наличии). Звонки то звонками. А вот придержать "коней" иногда просто необходимо. Почему и нужен этот модуль.

Вы ведь наверняка догадываетесь, что можно ответить на "хотелось бы" применительно к бесплатному модулю, да? :)

Тут без вопросов... :D ну я же и написал, что хотелось бы... а уж как получится платно/бесплатно, это уже другое дело. :)

Вот подумываю написать или попросить кого то написать, модуль оплаты, верней псевдооплаты (не знаю как лучше сказать), собственно чисто под выдачу информации куда платить - номер карточки, ФИО получателя и так далее.

Пробовал ставил модуль Квитанция - немного не то...
Но возникла мысль попробовать его переделать, всмысле сделать переделанный дубль из него.
  • 0
Каждый человек способен на многое. Но к сожалению, не каждый знает на что он способен.

#5 badisoft

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

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

Отправлено 30 March 2014 - 12:21 PM

Человеку приходит мыло - мол можно оплачивать. Он открывает Историю заказов и тут может выбрать только модуль Privat24 (моментальная оплата), а как же быть с информацией о том что можно еще оплатить просто на карточку, либо в банкомате, либо на сайте Приват24 через обычный перевод денег на номер счета?

Открыв историю заказов он должен увидеть весь набор возможных платежных модулей, насколько я помню. С чего бы человеку увидеть только один конкретный модуль и не увидеть все остальные? :)

Вот подумываю написать или попросить кого то написать, модуль оплаты, верней псевдооплаты (не знаю как лучше сказать), собственно чисто под выдачу информации куда платить - номер карточки, ФИО получателя и так далее.

Я выкладывал тут модуль оплаты на карту. Это именно то, что Вы хотите.
  • 1
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#6 badisoft

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

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

Отправлено 17 June 2014 - 01:26 PM

update пункта 5.1 (исправление ошибки):

5. в файле order4_confirmation.php

5.1. вместо строк


if ( isset ( $_GET["orderID"] ) && isset ( $_SESSION["newoid"] ) && ( int ) $_SESSION["newoid"] == ( int ) $_GET["orderID"] ) {
$paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"]);


вставляем


# BEGIN order_confirm
#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))) {
if($paymentMethod = payGetPaymentMethodById($_GET["paymentMethodID"])) db_query("UPDATE ".ORDERS_TABLE." SET payment_type='".$paymentMethod['Name']."', paymethod=".$paymentMethod['PID']." WHERE orderID=".$_GET["orderID"]);
# END order_confirm

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