2namespace Bitrix\Sale\Internals;
4use Bitrix\Main\Localization\Loc;
10 private const STATUS_LOCKED_NOW = 1;
11 private const STATUS_LOCKED_EARLIER = -1;
12 private const STATUS_NOT_LOCKED = 0;
14 private $statusLock = self::STATUS_NOT_LOCKED;
32 $this->userId = $userId;
55 "CURRENCY" =>
$order->getCurrency(),
56 "TYPE" => $budgetType,
72 protected function lock(): void
74 if ($this->statusLock === self::STATUS_NOT_LOCKED)
79 $this->statusLock = self::STATUS_LOCKED_EARLIER;
84 $this->statusLock = self::STATUS_LOCKED_NOW;
88 private function getUniqLockName() : string
90 return "user_budget_{$this->userId}";
98 if ($this->statusLock === self::STATUS_LOCKED_NOW)
104 $this->statusLock = self::STATUS_NOT_LOCKED;
111 $this->statusLock === self::STATUS_LOCKED_EARLIER
112 || $this->statusLock === self::STATUS_LOCKED_NOW
118 return $this->statusLock === self::STATUS_LOCKED_EARLIER;
124 public function get()
126 if (isset($this->items))
139 public function delete($index)
141 if (isset($this->items) && isset($this->items[$index]))
143 unset($this->items[$index]);
144 if (
count($this->items) === 0)
161 if (!isset(static::$userBudgetPool[$userId]))
163 static::$userBudgetPool[$userId] =
new static($userId);
166 return static::$userBudgetPool[$userId];
178 if (floatval($value) == 0)
181 $userId =
$order->getUserId();
182 $pool = static::getUserBudgetPool($userId);
194 $pool = static::getUserBudgetPool($userId);
196 if ($pool->isStatusLockEarlier())
200 Loc::getMessage(
'SALE_PROVIDER_USER_BUDGET_LOCKED')
205 foreach ($pool->get() as
$key => $budgetDat)
210 if (isset($budgetDat[
'ORDER'])
213 $orderId = $budgetDat[
'ORDER']->getId();
216 if (isset($budgetDat[
'PAYMENT'])
217 && ($budgetDat[
'PAYMENT'] instanceof
Sale\
Payment))
219 $paymentId = $budgetDat[
'PAYMENT']->getId();
224 $result->addError(
new Sale\
ResultError(Loc::getMessage(
"SALE_PROVIDER_USER_BUDGET_".$budgetDat[
'TYPE'].
"_ERROR"),
"SALE_PROVIDER_USER_BUDGET_".$budgetDat[
'TYPE'].
"_ERROR") );
239 $ignoreTypes =
array(
240 static::BUDGET_TYPE_ORDER_PAY
247 array(
"TRANSACT_DATE" =>
"DESC"),
249 "ORDER_ID" =>
$order->getId(),
253 array(
"AMOUNT",
"CURRENCY",
"DEBIT")
255 while ($transactDat = $resTrans->Fetch())
257 if ($transactDat[
'DEBIT'] ==
"Y")
259 $sumTrans += $transactDat[
'AMOUNT'];
263 $sumTrans -= $transactDat[
'AMOUNT'];
272 if (in_array($userBudgetDat[
'TYPE'], $ignoreTypes))
275 $sumTrans += $userBudgetDat[
'SUM'];
288 $budget = static::getUserBudget(
$order->getUserId(),
$order->getCurrency());
293 $budget += $userBudgetDat[
'SUM'];
308 if ($userAccount = \CSaleUserAccount::GetByUserId($userId,
$currency))
310 if ($userAccount[
'LOCKED'] !=
'Y')
311 $budget = floatval($userAccount[
'CURRENT_BUDGET']);
static getConnection($name="")
const BUDGET_TYPE_ORDER_CANCEL_PART
const BUDGET_TYPE_OUT_CHARGE_OFF
add($sum, $budgetType, Sale\Order $order, Sale\Payment $payment=null)
static getUserBudget($userId, $currency)
const BUDGET_TYPE_ORDER_PART_RETURN
const BUDGET_TYPE_ORDER_PAY
const BUDGET_TYPE_EXCESS_SUM_PAID
static getUserBudgetByOrder(Sale\Order $order)
static getUserBudgetTransForOrder(Sale\Order $order)
static getUserBudgetPool($userId)
static onUserBudgetSave($userId)
const BUDGET_TYPE_ORDER_UNPAY
const BUDGET_TYPE_ORDER_PAY_PART
static addPoolItem(Sale\Order $order, $value, $type, Sale\Payment $payment=null)
static UpdateAccount($userID, $sum, $currency, $description="", $orderID=0, $notes="", $paymentId=null)
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(empty($signedUserToken)) $key
</p ></td >< td valign=top style='border-top:none;border-left:none;border-bottom:solid windowtext 1.0pt;border-right:solid windowtext 1.0pt;padding:0cm 2.0pt 0cm 2.0pt;height:9.0pt'>< p class=Normal align=center style='margin:0cm;margin-bottom:.0001pt;text-align:center;line-height:normal'>< a name=ТекстовоеПоле54 ></a ><?=($taxRate > count( $arTaxList) > 0) ? $taxRate."%"