15 if (!array_key_exists(
"ONLY_FULL_PAY_FROM_ACCOUNT",
$arOptions))
16 $arOptions[
"ONLY_FULL_PAY_FROM_ACCOUNT"] = COption::GetOptionString(
"sale",
"ONLY_FULL_PAY_FROM_ACCOUNT",
"N");
25 $arUserAccount = $dbUserAccount->Fetch();
29 if ($arUserAccount[
"CURRENT_BUDGET"] <= 0)
31 if ((
$arOptions[
"ONLY_FULL_PAY_FROM_ACCOUNT"] ==
"Y") && (doubleval($arUserAccount[
"CURRENT_BUDGET"]) < doubleval($orderSum)))
34 $withdrawSum = CSaleUserAccount::Withdraw(
44 "SUM_PAID" => $withdrawSum,
49 if ($withdrawSum == $orderSum)
50 CSaleOrder::PayOrder(
$orderId,
"Y", False, False);
63 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SKGU_EMPTY_USER_ID"),
"EMPTY_USER_ID");
68 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SKGU_EMPTY_CURRENCY"),
"EMPTY_CURRENCY");
83 $dbUser = CUser::GetByID(
$arFields[
"USER_ID"]);
84 if (!$dbUser->Fetch())
102 foreach (
GetModuleEvents(
'sale',
'OnBeforeUserAccountDelete',
true) as $arEvent)
114 array(
"USER_ID" => $arOldUserAccount[
"USER_ID"],
"CURRENCY" => $arOldUserAccount[
"CURRENCY"]),
117 array(
"ID",
"USER_ID")
119 while($arTrans = $dbTrans -> Fetch())
122 unset(
$GLOBALS[
"SALE_USER_ACCOUNT"][
"SALE_USER_ACCOUNT_CACHE_".
$ID]);
123 unset(
$GLOBALS[
"SALE_USER_ACCOUNT"][
"SALE_USER_ACCOUNT_CACHE_".$arOldUserAccount[
"USER_ID"].
"_".$arOldUserAccount[
"CURRENCY"]]);
125 $res =
$DB->Query(
"DELETE FROM b_sale_user_account WHERE ID = ".
$ID.
" ",
true);
127 foreach (
GetModuleEvents(
'sale',
'OnAfterUserAccountDelete',
true) as $arEvent)
136 public static function Lock($userID, $payCurrency)
140 $userID = (int)$userID;
144 $payCurrency = trim($payCurrency);
145 if ($payCurrency ==
'')
148 CTimeZone::Disable();
151 array(
"USER_ID" => $userID,
"CURRENCY" => $payCurrency),
154 array(
"ID",
"LOCKED",
"DATE_LOCKED")
157 if ($arUserAccount = $dbUserAccount->Fetch())
160 if ($arUserAccount[
"LOCKED"] ==
"Y")
162 if (!($dateLocked =
MakeTimeStamp($arUserAccount[
"DATE_LOCKED"], CSite::GetDateFormat(
"FULL",
SITE_ID))))
163 $dateLocked = mktime(0, 0, 0, 1, 1, 1990);
169 $timeLockUser = 10 * 60;
171 if (($arUserAccount[
"LOCKED"] !=
"Y")
172 || (($arUserAccount[
"LOCKED"] ==
"Y") && ((time() - $dateLocked) > $timeLockUser)))
176 "=DATE_LOCKED" =>
$DB->GetNowFunction()
192 "USER_ID" => $userID,
193 "CURRENT_BUDGET" => 0.0,
194 "CURRENCY" => $payCurrency,
196 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
197 "=DATE_LOCKED" =>
$DB->GetNowFunction()
206 public static function UnLock($userID, $payCurrency)
208 $userID = (int)$userID;
212 $payCurrency = trim($payCurrency);
213 if ($payCurrency ==
'')
216 CTimeZone::Disable();
219 array(
"USER_ID" => $userID,
"CURRENCY" => $payCurrency),
222 array(
"ID",
"LOCKED",
"DATE_LOCKED")
225 if ($arUserAccount = $dbUserAccount->Fetch())
227 if ($arUserAccount[
"LOCKED"] ==
"Y")
231 "DATE_LOCKED" =>
false
250 "USER_ID" => $userID,
251 "CURRENT_BUDGET" => 0.0,
252 "CURRENCY" => $payCurrency,
254 "DATE_LOCKED" =>
false
273 if ($arUserAccount[
"LOCKED"] ==
"Y")
277 "DATE_LOCKED" =>
false
305 public static function Pay($userID, $paySum, $payCurrency,
$orderID = 0, $useCC =
true, $paymentId =
null)
311 $userID = (int)$userID;
318 $paySum = str_replace(
",",
".", $paySum);
319 $paySum = (float)$paySum;
326 $payCurrency = trim($payCurrency);
327 if ($payCurrency ==
'')
329 $GLOBALS[
"APPLICATION"]->ThrowException(
GetMessage(
"SKGU_EMPTY_CURRENCY"),
"EMPTY_CURRENCY");
334 $paymentId = (int)$paymentId;
336 $useCC = ($useCC ? true :
false);
344 $currentBudget = 0.0;
349 array(
"USER_ID" => $userID,
"CURRENCY" => $payCurrency)
351 if ($arUserAccount = $dbUserAccount->Fetch())
355 if (($currentBudget < $paySum) && $useCC)
357 $payOverdraft = $paySum - $currentBudget;
362 array(
"SORT" =>
"ASC"),
363 array(
"USER_ID" => $userID,
"CURRENCY" => $payCurrency,
"ACTIVE" =>
"Y")
365 while ($arUserCard = $dbUserCards->Fetch())
377 array(
"SORT" =>
"ASC"),
378 array(
"USER_ID" => $userID,
"CURRENCY" =>
"",
"ACTIVE" =>
"Y")
380 while ($arUserCard = $dbUserCards->Fetch())
393 "USER_ID" => $userID,
394 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
395 "TRANSACT_DATE" => date(
$DB->DateFormatToPHP(CSite::GetDateFormat(
"FULL",
SITE_ID))),
396 "AMOUNT" => $withdrawSum,
397 "CURRENCY" => $payCurrency,
400 "PAYMENT_ID" => ($paymentId > 0 ? $paymentId :
false),
401 "DESCRIPTION" =>
"CC_CHARGE_OFF",
402 "EMPLOYEE_ID" => self::getEmployeeId()
404 CTimeZone::Disable();
411 "CURRENT_BUDGET" => ($withdrawSum + $currentBudget)
418 "USER_ID" => $userID,
419 "CURRENT_BUDGET" => ($withdrawSum + $currentBudget),
420 "CURRENCY" => $payCurrency
427 if ($withdrawSum + $currentBudget >= $paySum)
432 "CURRENT_BUDGET" => ($withdrawSum + $currentBudget - $paySum)
439 "USER_ID" => $userID,
440 "CURRENT_BUDGET" => ($withdrawSum + $currentBudget - $paySum),
441 "CURRENCY" => $payCurrency
447 "USER_ID" => $userID,
448 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
449 "TRANSACT_DATE" => date(
$DB->DateFormatToPHP(CSite::GetDateFormat(
"FULL",
SITE_ID))),
451 "CURRENCY" => $payCurrency,
454 "PAYMENT_ID" => ($paymentId > 0 ? $paymentId :
false),
455 "DESCRIPTION" =>
"ORDER_PAY",
456 "EMPLOYEE_ID" => self::getEmployeeId()
458 CTimeZone::Disable();
479 public static function Withdraw($userID, $paySum, $payCurrency,
$orderID = 0)
485 $userID = (int)$userID;
492 $paySum = str_replace(
",",
".", $paySum);
493 $paySum = (float)$paySum;
500 $payCurrency = trim($payCurrency);
501 if ($payCurrency ==
'')
515 $currentBudget = 0.0;
520 array(
"USER_ID" => $userID,
"CURRENCY" => $payCurrency)
522 if ($arUserAccount = $dbUserAccount->Fetch())
524 $currentBudget = (float)$arUserAccount[
"CURRENT_BUDGET"];
528 $registry = \Bitrix\Sale\Registry::getInstance(\Bitrix\Sale\Registry::REGISTRY_TYPE_ORDER);
531 $orderClass = $registry->getOrderClassName();
548 if ($currentBudget > 0)
550 $withdrawSum = $paySum;
551 if ($withdrawSum > $currentBudget)
552 $withdrawSum = $currentBudget;
555 "CURRENT_BUDGET" => ($currentBudget - $withdrawSum)
560 "USER_ID" => $userID,
561 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
562 "TRANSACT_DATE" => date(
$DB->DateFormatToPHP(CSite::GetDateFormat(
"FULL",
SITE_ID))),
563 "AMOUNT" => $withdrawSum,
564 "CURRENCY" => $payCurrency,
567 "DESCRIPTION" =>
"ORDER_PAY",
568 "EMPLOYEE_ID" => self::getEmployeeId()
593 $userID = (int)$userID;
599 $dbUser = CUser::GetByID($userID);
600 if (!$dbUser->Fetch())
602 $APPLICATION->ThrowException(str_replace(
"#ID#", $userID,
GetMessage(
"SKGU_NO_USER")),
"ERROR_NO_USER_ID");
606 $sum = (float)str_replace(
",",
".",
$sum);
616 $paymentId = (int)$paymentId;
623 $currentBudget = 0.0000;
631 if ($arUserAccount = $dbUserAccount->Fetch())
633 $currentBudget = floatval($arUserAccount[
"CURRENT_BUDGET"]);
635 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
636 "CURRENT_BUDGET" => $arUserAccount[
"CURRENT_BUDGET"] +
$sum
648 $currentBudget = floatval(
$sum);
650 "USER_ID" => $userID,
651 "CURRENT_BUDGET" =>
$sum,
654 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
655 "=DATE_LOCKED" =>
$DB->GetNowFunction()
667 if (isset(
$GLOBALS[
"SALE_USER_ACCOUNT"][
"SALE_USER_ACCOUNT_CACHE_".$userID.
"_".
$currency]))
668 unset(
$GLOBALS[
"SALE_USER_ACCOUNT"][
"SALE_USER_ACCOUNT_CACHE_".$userID.
"_".
$currency]);
671 "USER_ID" => $userID,
672 "=TIMESTAMP_X" =>
$DB->GetNowFunction(),
673 "TRANSACT_DATE" => date(
$DB->DateFormatToPHP(CSite::GetDateFormat(
"FULL",
SITE_ID))),
674 "CURRENT_BUDGET" => $currentBudget,
677 "DEBIT" => (
$sum > 0 ?
"Y" :
"N"),
679 "PAYMENT_ID" => ($paymentId > 0 ? $paymentId :
false),
681 "NOTES" => (($notes <>
'') ? $notes : False),
682 "EMPLOYEE_ID" => self::getEmployeeId()
684 CTimeZone::Disable();
693 private static function getEmployeeId(): bool|int
699 &&
$USER instanceof \CUser
700 &&
$USER->IsAuthorized()
716 $Currency = (string)$Currency;
717 if ($Currency ===
'')
729 $userID = (int)$userID;
734 while ($arUserAccount = $dbUserAccounts->Fetch())
747 $userID = (int)$userID;
753 array(
"USER_ID" => $userID,
"!CURRENT_BUDGET" => 0),
758 if ($arUserAccount = $dbUserAccounts->Fetch())
760 $APPLICATION->ThrowException(str_replace(
"#USER_ID#", $userID,
GetMessage(
"UA_ERROR_USER")),
"ERROR_UACCOUNT");
if(!is_object($USER)||! $USER->IsAuthorized()) $userId
static OnBeforeCurrencyDelete($Currency)
static UnLock($userID, $payCurrency)
static Lock($userID, $payCurrency)
static CheckFields($ACTION, &$arFields, $ID=0)
static Pay($userID, $paySum, $payCurrency, $orderID=0, $useCC=true, $paymentId=null)
static OnUserDelete($userID)
static UpdateAccount($userID, $sum, $currency, $description="", $orderID=0, $notes="", $paymentId=null)
static OnBeforeUserDelete($userID)
static DoPayOrderFromAccount($userId, $currency, $orderId, $orderSum, $arOptions, &$arErrors)
static Withdraw($sum, $currency, $arUserCard, $orderID=0)
static Update($ID, $arFields, $bDateUpdate=true)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static Update($ID, $arFields)
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
static GetList($arOrder=array(), $arFilter=array(), $arGroupBy=false, $arNavStartParams=false, $arSelectFields=array())
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(Loader::includeModule( 'bitrix24')) elseif(Loader::includeModule('intranet') &&CIntranetUtils::getPortalZone() !=='ru') $description
ExecuteModuleEventEx($arEvent, $arParams=[])
GetModuleEvents($MODULE_ID, $MESSAGE_ID, $bReturnArray=false)
IncludeModuleLangFile($filepath, $lang=false, $bReturnArray=false)
GetMessage($name, $aReplace=null)
MakeTimeStamp($datetime, $format=false)
$GLOBALS["SALE_USER_ACCOUNT"]
const SALE_TIME_LOCK_USER
const SALE_VALUE_PRECISION
$GLOBALS['_____370096793']