+7 495 008 8452 пн.-пт. 10:00 – 17:00
Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.


Как позволить оплатить с внутреннего счета только при определенной сумме на счете

Надеюсь нижеописанное будет полезно. По крайней мере оно нашло применение в двух проектах.

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

Я думал как решить эту задачу путем меньшего сопротивления. И, как мне кажется, нашел очень простое и красивое решение.

1. Копируем шаблон компонента оформления заказа (sale.order.full).

2. В папку шаблона кидаем файл .parameters.php такого содержания:
<?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();

$arTemplateParameters = array(
   "SHOW_PFA_IF" => Array(
      "NAME" => GetMessage("SHOW_PFA_IF"),
      "TYPE" => "LIST",
      "VALUES" => array(
                  "ALWAYS" => GetMessage("SHOW_PFA_ALWAYS"),
                  "SUFFICIENT" => GetMessage("SHOW_PFA_SUFFICIENT"),
                  "MORE_OR_EQUAL" => GetMessage("SHOW_PFA_MORE_OR_EQUAL"),
                  )
   ),
   "MIN_ACCOUNT" => Array(
      "NAME" => GetMessage("MIN_ACCOUNT"),
      "TYPE" => "STRING",
      "DEFAULT" => ""
   )

);
?>

Я очень люблю lang-файлы, многие называют меня параноиком.
Вот значения lang-ключей:
<?
$MESS ['SHOW_PFA_IF'] = "Выводить \"Оплатить со счета\" только если";
$MESS ['SHOW_PFA_ALWAYS'] = "всегда";
$MESS ['SHOW_PFA_SUFFICIENT'] = "сумма на счете достаточна";
$MESS ['SHOW_PFA_MORE_OR_EQUAL'] = "сумма на счете больше либо равна";
$MESS ['MIN_ACCOUNT'] = "Сумма на счете для контроля (пред. опция)";
?>


3. В нашей папке шаблона есть несколько файлов шагов вида step1.php, step2.php, ...
Идем в step4.php. И там, в самом верху, дописываем:
<?
if ($arResult["PAY_FROM_ACCOUNT"] == "Y")
{
   if ($arParams["SHOW_PFA_IF"] == "SUFFICIENT")
   {
      if ($arResult["POST"]["ORDER_PRICE"] <= intval($arResult["USER_ACCOUNT"]["CURRENT_BUDGET"]))
      {
         $arResult["PAY_FROM_ACCOUNT"] = "Y";
      }
      else
      {
         $arResult["PAY_FROM_ACCOUNT"] = "N";
      }
   }
   if ($arParams["SHOW_PFA_IF"] == "MORE_OR_EQUAL")
   {
      if (intval($arParams["MIN_ACCOUNT"]) <= intval($arResult["USER_ACCOUNT"]["CURRENT_BUDGET"]))
      {
         $arResult["PAY_FROM_ACCOUNT"] = "Y";
      }
      else
      {
         $arResult["PAY_FROM_ACCOUNT"] = "N";
      }
   }

}
?>


Вот собственно и все. Заходим в настройки компонента в режиме редактирования сайта и видим волшебные настройки:


UPD:
Забыл еще главный момент дописать. В вышеозвученном файле step4.php Надо воткнуть еще строчку:
<input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N">

Но чтобы до конца быть правильным, надо немного изменить блок, начинающийся с
if ($arResult["PAY_FROM_ACCOUNT"]=="Y")

Должно получиться примерно следующее:
      if ($arResult["PAY_FROM_ACCOUNT"]=="Y";)
      {
         ?>
         <input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N">
         <input type="checkbox" name="PAY_CURRENT_ACCOUNT" id="PAY_CURRENT_ACCOUNT" value="Y"<?if($arResult["PAY_CURRENT_ACCOUNT"]!="N";) echo " checked";?>> <label for="PAY_CURRENT_ACCOUNT"><b><?echo GetMessage("STOF_PAY_FROM_ACCOUNT";)?></b></label><br />
         <?=GetMessage("STOF_ACCOUNT_HINT1";)?> <b><?=$arResult["CURRENT_BUDGET_FORMATED"]?></b> <?echo GetMessage("STOF_ACCOUNT_HINT2";)?>
         <br /><br />
         <?
      }
[COLOR=#009900]      else 
      {
         ?><input type="hidden" name="PAY_CURRENT_ACCOUNT" value="N"><?
      }
[/COLOR]

Зеленым маркером помечено добавленное.

Назад в раздел

Подписаться на новые материалы раздела:












CAPTCHA