function OnBeforeUserRegisterHandler(&$arFields) { CModule::IncludeModule('sale'); //создаём профиль //PERSON_TYPE_ID - идентификатор типа плательщика, для которого создаётся профиль $arProfileFields = array( "NAME" => "Профиль покупателя (".$arFields['LOGIN'].')', "USER_ID" => $arFields['ID'], "PERSON_TYPE_ID" => 1 ); /** * Добавляем счет пользователя * @var array */ $arFields = array( "USER_ID" => $arFields['ID'], "CURRENCY" => "RUB", "CURRENT_BUDGET" => 0 ); $accountID = CSaleUserAccount::Add($arFields); $PROFILE_ID = CSaleOrderUserProps::Add($arProfileFields); //если профиль создан if ($PROFILE_ID) { //формируем массив свойств $PROPS = array( array( "USER_PROPS_ID" => $PROFILE_ID, "ORDER_PROPS_ID" => 2, "NAME" => "Адрес доставки", "VALUE" => $arFields['PERSONAL_STREET'] ), array( "USER_PROPS_ID" => $PROFILE_ID, "ORDER_PROPS_ID" => 1, "NAME" => "Ф.И.О.", "VALUE" => $arFields['LAST_NAME'].' '.$arFields['NAME'].' '.$arFields['SECOND_NAME'] ) ); //добавляем значения свойств к созданному ранее профилю foreach ($PROPS as $prop) { CSaleOrderUserPropsValue::Add($prop); } } }
/** * <p>Метод изменяет сумму на счете пользователя с кодом userID. Метод динамичный.</p> * * * @param int $userID Код пользователя. </h * * @param double $sum Величина изменения суммы на счете. Для увеличения суммы на счете * величина должна быть со знаком "+" или без знака, а для уменьшения - * со знаком "-". * * @param string $currency Валюта суммы. * * @param $string Описание причины изменения суммы. * * @param descriptio $n = ""[ Код заказа, если изменение суммы относится к заказу. * * @param int $orderID = 0[ Произвольное текстовое описание. * * @param string $notes = ""]]] * * @return int <p>Метод возвращает код пользовательского счета или <i>false</i> в * случае ошибки.</p> <p></p><div class="note"> <b>Замечания:</b> <ul> <li>Деньги * снимаются только со счета той же валюты, которая передается * параметром в метод. Счета пользователя в другой валюте не * затрагиваются.</li> <li>Если счета в данной валюте раньше у * пользователя не было, то он автоматически создастся (и будет * возвращен код созданного счета).</li> </ul> </div> <a name="examples"></a> * * <h4>Example</h4> * <pre> * <? * // Напишем функцию обратного вызова, которая будет вызываться при изменении * // флага "Доставка разрешена" заказа и добавлять (или снимать) 100 USD на счет * * function MyDeliveryOrderCallback($productID, $userID, $bPaid, $orderID) * { * global $DB; * * // Обработаем входные параметры * $productID = IntVal($productID); // Код заказанного товара * $userID = IntVal($userID); // Код пользователя-покупателя * $bPaid = ($bPaid ? True : False); // Устанавливается или снимается флаг доставки * $orderID = IntVal($orderID); // Код заказа * * if ($userID <= 0) * return False; * * if ($orderID <= 0) * return False; * * // Внесем (снимем) деньги на счет * if (!CSaleUserAccount::UpdateAccount( * $userID, * ($bPaid ? 100 : -100), * "USD", * "MANUAL", * $orderID * )) * return False; * * return True; * } * ?> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleuseraccount/csaleuseraccount.updateaccount.php * @author Bitrix */ public static function UpdateAccount($userID, $sum, $currency, $description = "", $orderID = 0, $notes = "", $paymentId = null) { global $DB, $APPLICATION; $userID = (int) $userID; if ($userID <= 0) { $APPLICATION->ThrowException(GetMessage("SKGU_EMPTYID"), "EMPTY_USER_ID"); return False; } $dbUser = CUser::GetByID($userID); if (!$dbUser->Fetch()) { $APPLICATION->ThrowException(str_replace("#ID#", $userID, GetMessage("SKGU_NO_USER")), "ERROR_NO_USER_ID"); return False; } $sum = (double) str_replace(",", ".", $sum); $currency = trim($currency); if ($currency === '') { $APPLICATION->ThrowException(GetMessage("SKGU_EMPTY_CUR"), "EMPTY_CURRENCY"); return False; } $orderID = (int) $orderID; $paymentId = (int) $paymentId; if (!CSaleUserAccount::Lock($userID, $currency)) { $APPLICATION->ThrowException(GetMessage("SKGU_ACCOUNT_NOT_WORK"), "ACCOUNT_NOT_LOCKED"); return False; } $currentBudget = 0.0; $result = false; $dbUserAccount = CSaleUserAccount::GetList(array(), array("USER_ID" => $userID, "CURRENCY" => $currency)); if ($arUserAccount = $dbUserAccount->Fetch()) { $currentBudget = floatval($arUserAccount["CURRENT_BUDGET"]); $arFields = array("CURRENT_BUDGET" => $arUserAccount["CURRENT_BUDGET"] + $sum); $result = CSaleUserAccount::Update($arUserAccount["ID"], $arFields); } else { $currentBudget = floatval($sum); $arFields = array("USER_ID" => $userID, "CURRENT_BUDGET" => $sum, "CURRENCY" => $currency, "LOCKED" => "Y", "DATE_LOCKED" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)))); $result = CSaleUserAccount::Add($arFields); } if ($result) { if (isset($GLOBALS["SALE_USER_ACCOUNT"]["SALE_USER_ACCOUNT_CACHE_" . $userID . "_" . $currency])) { unset($GLOBALS["SALE_USER_ACCOUNT"]["SALE_USER_ACCOUNT_CACHE_" . $userID . "_" . $currency]); } $arFields = array("USER_ID" => $userID, "TRANSACT_DATE" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID))), "CURRENT_BUDGET" => $currentBudget, "AMOUNT" => $sum > 0 ? $sum : -$sum, "CURRENCY" => $currency, "DEBIT" => $sum > 0 ? "Y" : "N", "ORDER_ID" => $orderID > 0 ? $orderID : False, "PAYMENT_ID" => $paymentId > 0 ? $paymentId : false, "DESCRIPTION" => strlen($description) > 0 ? $description : False, "NOTES" => strlen($notes) > 0 ? $notes : False, "EMPLOYEE_ID" => $GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : False); CSaleUserTransact::Add($arFields); } CSaleUserAccount::UnLock($userID, $currency); return $result; }
} __IncludeLang(GetLangFileName(dirname(__FILE__) . "/lang/", "/" . basename(__FILE__), $lang)); $dbPerson = CSalePersonType::GetList(array()); if (!$dbPerson->Fetch()) { //Person Types $arGeneralInfo["personType"]["fiz"] = CSalePersonType::Add(array("LID" => $siteID, "NAME" => GetMessage("SALE_WIZARD_PERSON_1"), "SORT" => "100")); $arGeneralInfo["personType"]["ur"] = CSalePersonType::Add(array("LID" => $siteID, "NAME" => GetMessage("SALE_WIZARD_PERSON_2"), "SORT" => "150")); //currecny to site $dbUserAccount = CSaleUserAccount::GetList(array(), array("USER_ID" => 1)); if (!$dbUserAccount->Fetch()) { if ($bRus) { CSaleLang::Add(array("LID" => $siteID, "CURRENCY" => "RUB")); CSaleUserAccount::Add(array("USER_ID" => 1, "CURRENT_BUDGET" => 1000, "CURRENCY" => "RUB")); } else { CSaleLang::Add(array("LID" => $siteID, "CURRENCY" => "USD")); CSaleUserAccount::Add(array("USER_ID" => 1, "CURRENT_BUDGET" => 100, "CURRENCY" => "USD")); } } //Sale administrators $userGroupID = ""; $dbGroup = CGroup::GetList($by = "", $order = "", array("STRING_ID" => "sale_administrator")); if ($arGroup = $dbGroup->Fetch()) { $userGroupID = $arGroup["ID"]; } else { $group = new CGroup(); $arFields = array("ACTIVE" => "Y", "C_SORT" => 800, "NAME" => GetMessage("SALE_WIZARD_ADMIN_SALE"), "DESCRIPTION" => GetMessage("SALE_WIZARD_ADMIN_SALE_DESCR"), "USER_ID" => array(), "STRING_ID" => "sale_administrator"); $userGroupID = $group->Add($arFields); } if (IntVal($userGroupID) > 0) { DemoSiteUtil::SetFilePermission(array($siteID, "/bitrix/admin"), array($userGroupID => "R")); CSaleGroupAccessToSite::Add(array("SITE_ID" => $siteID, "GROUP_ID" => $userGroupID));
function UpdateAccount($userID, $sum, $currency, $description = "", $orderID = 0, $notes = "") { global $DB; $userID = IntVal($userID); if ($userID <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTYID"), "EMPTY_USER_ID"); return False; } $dbUser = CUser::GetByID($userID); if (!$dbUser->Fetch()) { $GLOBALS["APPLICATION"]->ThrowException(str_replace("#ID#", $userID, GetMessage("SKGU_NO_USER")), "ERROR_NO_USER_ID"); return False; } $sum = str_replace(",", ".", $sum); $sum = DoubleVal($sum); $currency = Trim($currency); if (strlen($currency) <= 0) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_EMPTY_CUR"), "EMPTY_CURRENCY"); return False; } $orderID = IntVal($orderID); if (!CSaleUserAccount::Lock($userID, $currency)) { $GLOBALS["APPLICATION"]->ThrowException(GetMessage("SKGU_ACCOUNT_NOT_WORK"), "ACCOUNT_NOT_LOCKED"); return False; } $result = false; $dbUserAccount = CSaleUserAccount::GetList(array(), array("USER_ID" => $userID, "CURRENCY" => $currency)); if ($arUserAccount = $dbUserAccount->Fetch()) { $arFields = array("CURRENT_BUDGET" => $arUserAccount["CURRENT_BUDGET"] + $sum); $result = CSaleUserAccount::Update($arUserAccount["ID"], $arFields); } else { $arFields = array("USER_ID" => $userID, "CURRENT_BUDGET" => $sum, "CURRENCY" => $currency, "LOCKED" => "Y", "DATE_LOCKED" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID)))); $result = CSaleUserAccount::Add($arFields); } if ($result) { $arFields = array("USER_ID" => $userID, "TRANSACT_DATE" => date($DB->DateFormatToPHP(CSite::GetDateFormat("FULL", SITE_ID))), "AMOUNT" => $sum > 0 ? $sum : -$sum, "CURRENCY" => $currency, "DEBIT" => $sum > 0 ? "Y" : "N", "ORDER_ID" => $orderID > 0 ? $orderID : False, "DESCRIPTION" => strlen($description) > 0 ? $description : False, "NOTES" => strlen($notes) > 0 ? $notes : False, "EMPLOYEE_ID" => $GLOBALS["USER"]->IsAuthorized() ? $GLOBALS["USER"]->GetID() : False); CSaleUserTransact::Add($arFields); } CSaleUserAccount::UnLock($userID, $currency); return $result; }