} else { $errorMessage .= GetMessage("STPC_ERROR_SAVING_CARD") . ". "; } } } if (strlen($errorMessage) <= 0) { if (strlen($_POST["save"]) > 0) { LocalRedirect($arParams["PATH_TO_LIST"]); } elseif (strlen($_POST["apply"]) > 0) { LocalRedirect(CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_DETAIL"], array("ID" => $ID))); } } else { $bVarsFromForm = true; } } $dbUserCards = CSaleUserCards::GetList(array("DATE_UPDATE" => "DESC"), array("ID" => $ID, "USER_ID" => IntVal($GLOBALS["USER"]->GetID())), false, false, array("ID", "USER_ID", "ACTIVE", "SORT", "PAY_SYSTEM_ACTION_ID", "CURRENCY", "CARD_TYPE", "CARD_NUM", "CARD_CODE", "CARD_EXP_MONTH", "CARD_EXP_YEAR", "DESCRIPTION", "SUM_MIN", "SUM_MAX", "SUM_CURRENCY", "TIMESTAMP_X", "LAST_STATUS", "LAST_STATUS_CODE", "LAST_STATUS_DESCRIPTION", "LAST_STATUS_MESSAGE", "LAST_SUM", "LAST_CURRENCY", "LAST_DATE")); if ($arUserCards = $dbUserCards->GetNext()) { $arResult = $arUserCards; $arResult["CARD_NUM"] = CSaleUserCards::CryptData($arResult["CARD_NUM"], "D"); } else { $arResult["ID"] = 0; $arResult["ACTIVE"] = "Y"; $arResult["SORT"] = 100; } if ($bVarsFromForm) { foreach ($_POST as $k => $v) { $arResult[$k] = htmlspecialcharsex($v); $arResult['~' . $k] = $v; } } $arResult["ERROR_MESSAGE"] = $errorMessage;
break; case "activate": case "deactivate": $arFields = array("ACTIVE" => $_REQUEST['action'] == "activate" ? "Y" : "N"); if (!CSaleUserCards::Update($ID, $arFields)) { if ($ex = $APPLICATION->GetException()) { $lAdmin->AddGroupError($ex->GetString(), $ID); } else { $lAdmin->AddGroupError(str_replace("#ID#", $ID, GetMessage("SCA_ERROR_UPDATE")), $ID); } } break; } } } $dbResultList = CSaleUserCards::GetList(array($by => $order), $arFilter, false, false, array("*")); $dbResultList = new CAdminResult($dbResultList, $sTableID); $dbResultList->NavStart(); $lAdmin->NavText($dbResultList->GetNavPrint(GetMessage("SCA_NAV"))); $lAdmin->AddHeaders(array(array("id" => "ID", "content" => "ID", "sort" => "id", "default" => true), array("id" => "USER_ID", "content" => GetMessage("SCA_USER"), "sort" => "user_id", "default" => true), array("id" => "ACTIVE", "content" => GetMessage("SCA_ACT"), "sort" => "active", "default" => true), array("id" => "SORT", "content" => GetMessage("SCA_SORT"), "sort" => "sort", "default" => true), array("id" => "CURRENCY", "content" => GetMessage("SCA_CURRENCY"), "sort" => "currency", "default" => true), array("id" => "CARD_TYPE", "content" => GetMessage("SCA_TYPE"), "sort" => "card_type", "default" => true))); $arVisibleColumns = $lAdmin->GetVisibleHeaderColumns(); while ($arCCard = $dbResultList->NavNext(true, "f_")) { $row =& $lAdmin->AddRow($f_ID, $arCCard, "sale_ccards_edit.php?ID=" . $f_ID . "&lang=" . LANG . GetFilterParams("filter_"), GetMessage("SCA_UPDATE_ALT")); $row->AddField("ID", $f_ID); $fieldValue = "[<a href=\"/bitrix/admin/user_edit.php?ID=" . $f_USER_ID . "&lang=" . LANG . "\">" . $f_USER_ID . "</a>] "; $fieldValue .= htmlspecialcharsEx($arCCard["USER_NAME"] . (strlen($arCCard["USER_NAME"]) <= 0 || strlen($arCCard["USER_LAST_NAME"]) <= 0 ? "" : " ") . $arCCard["USER_LAST_NAME"]) . "<br>"; $fieldValue .= htmlspecialcharsEx($arCCard["USER_LOGIN"]) . " "; $fieldValue .= "<a href=\"mailto:" . htmlspecialcharsEx($arCCard["USER_EMAIL"]) . "\">" . htmlspecialcharsEx($arCCard["USER_EMAIL"]) . "</a>"; $row->AddField("USER_ID", $fieldValue); $row->AddCheckField("ACTIVE"); $row->AddInputField("SORT");
/** * <p>Метод снимает указанную сумму с внутреннего счета пользователя. Если на внутреннем счете не достаточно средств, то делается попытка снять дополнительные средства с пластиковой карточки пользователя. Метод динамичный.</p> * * * @param int $userID Код пользователя. </h * * @param double $paySum Снимаемая сумма. * * @param string $payCurrency Валюта снимаемой суммы. * * @param $int Код заказа, если снятие денег относится к заказу. * * @param orderI $D = 0[ Если <i>true</i>, то система пробует снять деньги с пластиковой карты * пользователя при недостаточности средств на внутреннем счете. * Если <i>false</i>, то пластиковая карта пользователя не задействуется. * * @param bool $useCC = True]] * * @return bool <p>Метод возвращает <i>true</i> в случае успешного снятия денег с * внутреннего счета пользователя и <i>false</i> в случае невозможности * снять указанную сумму.</p> <p></p><div class="note"> <b>Примечание</b>: деньги * снимаются только со счета той же валюты, которая передается * параметром в метод. Счета пользователя в другой валюте не * затрагиваются.</div> <a name="examples"></a> * * <h4>Example</h4> * <pre> * <? * // Снимем с рублевого счета текущего пользователя 3 рубля в счет оплаты заказа номер 21 * $bSuccessPayment = CSaleUserAccount::Pay( * $USER->GetID(), * 3, * "RUR", * 21, * False * ); * if ($bSuccessPayment) * echo "Сумма для оплаты счета успешно снята"; * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleuseraccount/csaleuseraccount.pay.php * @author Bitrix */ public static function Pay($userID, $paySum, $payCurrency, $orderID = 0, $useCC = True, $paymentId = null) { global $DB; $errorCode = ""; $userID = IntVal($userID); if ($userID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_USER_ID"), "EMPTY_USER_ID"); return False; } $paySum = str_replace(",", ".", $paySum); $paySum = DoubleVal($paySum); if ($paySum <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_SUM"), "EMPTY_SUM"); return False; } $payCurrency = Trim($payCurrency); if (strlen($payCurrency) <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_CURRENCY"), "EMPTY_CURRENCY"); return False; } $orderID = IntVal($orderID); $paymentId = IntVal($paymentId); $useCC = $useCC ? True : False; if (!CSaleUserAccount::Lock($userID, $payCurrency)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_ERROR_LOCK"), "ACCOUNT_NOT_LOCKED"); return False; } $currentBudget = 0.0; // Check current user account budget $dbUserAccount = CSaleUserAccount::GetList(array(), array("USER_ID" => $userID, "CURRENCY" => $payCurrency)); if ($arUserAccount = $dbUserAccount->Fetch()) { $currentBudget = roundEx(DoubleVal($arUserAccount["CURRENT_BUDGET"]), SALE_VALUE_PRECISION); } $withdrawSum = 0; if ($currentBudget < $paySum && $useCC) { $payOverdraft = $paySum - $currentBudget; // Try to get money from credit cards $bPayed = False; $dbUserCards = CSaleUserCards::GetList(array("SORT" => "ASC"), array("USER_ID" => $userID, "CURRENCY" => $payCurrency, "ACTIVE" => "Y")); while ($arUserCard = $dbUserCards->Fetch()) { if ($withdrawSum = CSaleUserCards::Withdraw($payOverdraft, $payCurrency, $arUserCard, $orderID)) { $bPayed = True; break; } } if (!$bPayed) { $dbUserCards = CSaleUserCards::GetList(array("SORT" => "ASC"), array("USER_ID" => $userID, "CURRENCY" => "", "ACTIVE" => "Y")); while ($arUserCard = $dbUserCards->Fetch()) { if ($withdrawSum = CSaleUserCards::Withdraw($payOverdraft, $payCurrency, $arUserCard, $orderID)) { $bPayed = True; break; } } } if ($bPayed) { $arFields = array("USER_ID" => $userID, "TRANSACT_DATE" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID))), "AMOUNT" => $withdrawSum, "CURRENCY" => $payCurrency, "DEBIT" => "Y", "ORDER_ID" => $orderID > 0 ? $orderID : False, "PAYMENT_ID" => $paymentId > 0 ? $paymentId : False, "DESCRIPTION" => "CC_CHARGE_OFF", "EMPLOYEE_ID" => $GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : False); CSaleUserTransact::Add($arFields); if ($arUserAccount) { $arFields = array("CURRENT_BUDGET" => $withdrawSum + $currentBudget); CSaleUserAccount::Update($arUserAccount["ID"], $arFields); } else { $arFields = array("USER_ID" => $userID, "CURRENT_BUDGET" => $withdrawSum + $currentBudget, "CURRENCY" => $payCurrency); CSaleUserAccount::Add($arFields); } } } if ($withdrawSum + $currentBudget >= $paySum) { if ($arUserAccount) { $arFields = array("CURRENT_BUDGET" => $withdrawSum + $currentBudget - $paySum); CSaleUserAccount::Update($arUserAccount["ID"], $arFields); } else { $arFields = array("USER_ID" => $userID, "CURRENT_BUDGET" => $withdrawSum + $currentBudget - $paySum, "CURRENCY" => $payCurrency); CSaleUserAccount::Add($arFields); } $arFields = array("USER_ID" => $userID, "TRANSACT_DATE" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID))), "AMOUNT" => $paySum, "CURRENCY" => $payCurrency, "DEBIT" => "N", "ORDER_ID" => $orderID > 0 ? $orderID : False, "PAYMENT_ID" => $paymentId > 0 ? $paymentId : False, "DESCRIPTION" => "ORDER_PAY", "EMPLOYEE_ID" => $GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : False); CSaleUserTransact::Add($arFields); CSaleUserAccount::UnLock($userID, $payCurrency); return True; } CSaleUserAccount::UnLock($userID, $payCurrency); $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_NO_ENOUGH"), "CANT_PAY"); return False; }
if (strlen($apply) <= 0) { LocalRedirect("/bitrix/admin/sale_ccards_admin.php?lang=" . LANG . GetFilterParams("filter_", false)); } } } else { $bVarsFromForm = true; } } require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/sale/prolog.php"; if ($ID > 0) { $APPLICATION->SetTitle(GetMessage("SCE_ERROR_UPDATING")); } else { $APPLICATION->SetTitle(GetMessage("SCE_ADD_NEW")); } require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"; $dbCCard = CSaleUserCards::GetList(array(), array("ID" => $ID), false, false, array("ID", "USER_ID", "ACTIVE", "SORT", "PAY_SYSTEM_ACTION_ID", "CURRENCY", "CARD_TYPE", "CARD_NUM", "CARD_CODE", "CARD_EXP_MONTH", "CARD_EXP_YEAR", "DESCRIPTION", "SUM_MIN", "SUM_MAX", "SUM_CURRENCY", "TIMESTAMP_X", "LAST_STATUS", "LAST_STATUS_CODE", "LAST_STATUS_DESCRIPTION", "LAST_STATUS_MESSAGE", "LAST_SUM", "LAST_CURRENCY", "LAST_DATE", "USER_LOGIN", "USER_NAME", "USER_LAST_NAME")); if (!$dbCCard->ExtractFields("str_")) { $ID = 0; $str_ACTIVE = "Y"; $str_SORT = 100; } else { $str_CARD_NUM = CSaleUserCards::CryptData($str_CARD_NUM, "D"); } if ($bVarsFromForm) { $DB->InitTableVarsForEdit("b_sale_user_cards", "", "str_"); } ?> <?php $aMenu = array(array("TEXT" => GetMessage("SCEN_2FLIST"), "TITLE" => GetMessage("SCEN_2FLIST_TITLE"), "LINK" => "/bitrix/admin/sale_ccards_admin.php?lang=" . LANG . GetFilterParams("filter_"), "ICON" => "btn_list")); if ($ID > 0 && $saleModulePermissions >= "U") {
$dbUserCards = CSaleUserCards::GetList(array(), array("ID" => $del_id, "USER_ID" => IntVal($USER->GetID()))); if ($arUserCards = $dbUserCards->Fetch()) { if (!CSaleUserCards::Delete($arUserCards["ID"])) { if ($ex = $APPLICATION->GetException()) { $errorMessage = $ex->GetString(); } else { $errorMessage = str_replace("#ID#", $del_id, GetMessage("STPCL_ERROR_DELETING")); } } } else { $errorMessage = str_replace("#ID#", $del_id, GetMessage("STPCL_NO_CARD_FOUND")); } } if (strLen($errorMessage) >= 0) { $arResult["ERROR_MESSAGE"] = $errorMessage; } $by = strlen($_REQUEST["by"]) > 0 ? $_REQUEST["by"] : "ID"; $order = strlen($_REQUEST["order"]) > 0 ? $_REQUEST["order"] : "DESC"; $dbUserCards = CSaleUserCards::GetList(array($by => $order), array("USER_ID" => IntVal($USER->GetID()))); $dbUserCards->NavStart($arParams["PER_PAGE"]); $arResult["NAV_STRING"] = $dbUserCards->GetPageNavString(GetMessage("SPCL_PAGES")); $arResult["CARDS"] = array(); while ($arUserCards = $dbUserCards->GetNext()) { $arResultTmp = array(); $arResultTmp = $arUserCards; $arResultTmp["PAY_SYSTEM"] = CSalePaySystemAction::GetByID($arUserCards["PAY_SYSTEM_ACTION_ID"]); $arResultTmp["URL_TO_DETAIL"] = CComponentEngine::MakePathFromTemplate($arParams["PATH_TO_DETAIL"], array("ID" => $arUserCards["ID"])); $arResultTmp["URL_TO_DELETE"] = htmlspecialcharsbx($APPLICATION->GetCurPage()) . "?del_id=" . $arUserCards["ID"] . "&" . bitrix_sessid_get(); $arResult["CARDS"][] = $arResultTmp; } $this->IncludeComponentTemplate();