• Модуль: sale
  • Путь к файлу: ~/bitrix/modules/sale/lib/cashbox/cashboxcheckbox.php
  • Класс: BitrixSaleCashboxCashboxCheckbox
  • Вызов: CashboxCheckbox::openShift
private function openShift(): Result
{
	$url = $this->getRequestUrl(static::OPERATION_CREATE_SHIFT);
	$token = $this->getAccessToken();

	$requestHeaders = [
		'ACCESS_TOKEN' => $token,
		'LICENSE_KEY' => $this->getValueFromSettings('AUTH', 'LICENSE_KEY'),
	];

	$requestBody = [];

	$openShiftResult = $this->sendRequestWithAuthorization(self::HTTP_METHOD_POST, $url, $requestHeaders, $requestBody);
	if (!$openShiftResult->isSuccess())
	{
		return $openShiftResult;
	}

	$response = $openShiftResult->getData();

	switch ($response['http_code'])
	{
		case self::HTTP_RESPONSE_CODE_202:
			$waitAttempts = 0;
			$openShiftSuccess = false;
			while ($waitAttempts < static::OPEN_SHIFT_WAIT_ATTEMPTS)
			{
				sleep(static::OPEN_SHIFT_WAIT_SECONDS);
				$currentShiftResult = $this->getCurrentShift();
				if (!$currentShiftResult->isSuccess())
				{
					return $currentShiftResult;
				}

				$currentShiftStatus = $currentShiftResult->getData()['status'];
				if ($currentShiftStatus === static::SHIFT_STATUS_OPENED)
				{
					$openShiftSuccess = true;
					break;
				}
				$waitAttempts++;
			}

			if (!$openShiftSuccess)
			{
				$openShiftResult->addError(new MainError(Loc::getMessage('SALE_CASHBOX_CHECKBOX_SHIFT_OPEN_ERROR')));
				return $openShiftResult;
			}

			return $openShiftResult;
		case self::HTTP_RESPONSE_CODE_400:
			$currentShiftResult = $this->getCurrentShift();
			if (!$currentShiftResult->isSuccess())
			{
				return $currentShiftResult;
			}

			$currentShift = $currentShiftResult->getData();
			if ($currentShift['status'] && $currentShift['status'] === static::SHIFT_STATUS_OPENED)
			{
				$openShiftResult->addWarning(new ResultWarning(Loc::getMessage('SALE_CASHBOX_CHECKBOX_SHIFT_ALREADY_OPENED')));
				return $openShiftResult;
			}

			$openShiftResult->addError(new MainError(Loc::getMessage('SALE_CASHBOX_CHECKBOX_SHIFT_OPEN_ERROR')));
			return $openShiftResult;
		default:
			$openShiftResult->addError(new MainError(Loc::getMessage('SALE_CASHBOX_CHECKBOX_SHIFT_OPEN_ERROR')));
			return $openShiftResult;
	}
}