3namespace Bitrix\Sale\Cashbox;
6use Bitrix\Main\Localization;
7use Bitrix\Sale\Cashbox\Internals\CashboxTable;
48 $dateTime =
$data[
'date_create'];
51 'timestamp' => $dateTime->format(
'd.m.Y H:i:s'),
52 'external_id' => static::buildUuid(static::UUID_TYPE_CHECK,
$data[
'unique_id']),
59 'attributes' =>
array(
62 'payments' =>
array(),
64 'total' => (
float)
$data[
'total_sum']
69 if (is_string($phone))
71 if ($phone[0] ===
'7')
72 $phone = mb_substr($phone, 1);
82 if ($clientInfo ===
'PHONE')
84 $result[
'receipt'][
'attributes'] = [
'phone' => $phone];
86 elseif ($clientInfo ===
'EMAIL')
92 $result[
'receipt'][
'attributes'] = [
106 foreach (
$data[
'items'] as
$i => $item)
111 'name' => mb_substr($item[
'name'], 0, self::MAX_NAME_LENGTH),
112 'price' => (
float)$item[
'price'],
113 'sum' => (
float)$item[
'sum'],
114 'quantity' => $item[
'quantity'],
128 $scheme =
$context->getRequest()->isHttps() ?
'https' :
'http';
130 $domain = $server->getServerName();
132 if (preg_match(
'/^(?<domain>.+):(?<port>\d+)$/', $domain,
$matches))
139 $port = $server->getServerPort();
141 $port = in_array($port,
array(80, 443)) ?
'' :
':'.$port;
143 return sprintf(
'%s://%s%s/bitrix/tools/sale_farm_check_print.php', $scheme, $domain, $port);
168 if (empty($checkInfo))
175 $errorType = static::getErrorType(
$data[
'error'][
'code']);
178 'CODE' =>
$data[
'error'][
'code'],
179 'MESSAGE' =>
$data[
'error'][
'text'],
180 'TYPE' => ($errorType ===
Errors\Error::TYPE) ?
Errors\Error::TYPE :
Errors\Warning::TYPE
184 $result[
'ID'] = $checkInfo[
'ID'];
185 $result[
'CHECK_TYPE'] = $checkInfo[
'TYPE'];
243 $groupCode = $this->
getField(
'NUMBER_KKM');
245 if ($operation === static::OPERATION_CHECK_REGISTRY)
247 return static::SERVICE_URL.
'/'.$groupCode.
'/'.$queryData[
'CHECK_TYPE'].
'?tokenid='.$token;
249 elseif ($operation === static::OPERATION_CHECK_CHECK)
251 return static::SERVICE_URL.
'/'.$groupCode.
'/report/'.$queryData[
'EXTERNAL_UUID'].
'?tokenid='.$token;
253 elseif ($operation === static::OPERATION_GET_TOKEN)
255 return static::SERVICE_URL.
'/getToken';
270 if (!$validateResult->isSuccess())
272 return $validateResult;
278 $operation =
'sell_refund';
292 $printResult =
new Result();
294 $token = $this->getAccessToken();
297 $token = $this->requestAccessToken();
300 $printResult->addError(
new Main\
Error(
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_REQUEST_TOKEN_ERROR')));
305 $url = $this->
getRequestUrl(static::OPERATION_CHECK_REGISTRY, $token, [
'CHECK_TYPE' => $operation]);
307 $result = $this->send(static::REQUEST_TYPE_POST,
$url, $check);
314 if (
$response[
'http_code'] === static::RESPONSE_HTTP_CODE_401)
316 $token = $this->requestAccessToken();
319 $printResult->addError(
new Main\
Error(
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_REQUEST_TOKEN_ERROR')));
324 $result = $this->send(static::REQUEST_TYPE_POST,
$url, $check);
333 if (
$response[
'http_code'] === static::RESPONSE_HTTP_CODE_200)
341 $printResult->addError(
new Main\
Error(
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_CHECK_REG_ERROR')));
352 $printResult->addError(
new Main\
Error(
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_CHECK_REG_ERROR')));
373 static::OPERATION_CHECK_CHECK,
374 $this->getAccessToken(),
375 [
'EXTERNAL_UUID' => $uuid]
378 $result = $this->send(static::REQUEST_TYPE_GET,
$url);
385 if (
$response[
'http_code'] === static::RESPONSE_HTTP_CODE_401)
387 $token = $this->requestAccessToken();
395 static::OPERATION_CHECK_CHECK,
396 $this->getAccessToken(),
397 [
'EXTERNAL_UUID' => $uuid]
400 $result = $this->send(static::REQUEST_TYPE_GET,
$url);
417 return static::applyCheckResult(
$response);
428 if ($checkData[
'receipt'][
'attributes'][
'email'] ===
'' && $checkData[
'receipt'][
'attributes'][
'phone'] ===
'')
433 foreach ($checkData[
'receipt'][
'items'] as $item)
435 if ($item[
'tax'] ===
null)
456 $http->setHeader(
'Content-Type',
'application/json; charset=utf-8');
458 if (
$method === static::REQUEST_TYPE_POST)
460 $http->disableSslVerification();
484 $response[
'http_code'] = $http->getStatus();
487 catch (Main\ArgumentException $e)
494 $error = $http->getError();
512 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_AUTH'),
517 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_AUTH_LOGIN_LABEL')
521 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_AUTH_PASS_LABEL')
526 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_SERVICE'),
531 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_SERVICE_INN_LABEL')
533 'P_ADDRESS' =>
array(
535 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_SERVICE_URL_LABEL')
540 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_CLIENT'),
545 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_CLIENT_INFO'),
547 'NONE' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_CLIENT_NONE'),
548 'PHONE' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_CLIENT_PHONE'),
549 'EMAIL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_CLIENT_EMAIL'),
557 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_P_TYPE'),
562 $systemPaymentType =
array(
566 foreach ($systemPaymentType as
$type => $value)
570 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_P_TYPE_LABEL_'.mb_strtoupper(
$type)),
576 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_BITRIX_SETTINGS_VAT'),
581 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_BITRIX_SETTINGS_VAT_LABEL_NOT_VAT'),
587 if (
Main\Loader::includeModule(
'catalog'))
590 'filter' => [
'=ACTIVE' =>
'Y'],
598 $defaultVatList = static::getDefaultVatList();
603 if (isset($defaultVatList[(
int)
$vat[
'RATE']]))
604 $value = $defaultVatList[(int)
$vat[
'RATE']];
608 'LABEL' =>
$vat[
'NAME'].
' ['.(
int)
$vat[
'RATE'].
'%]',
616 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_SNO'),
621 'LABEL' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SETTINGS_SNO_LABEL'),
624 'osn' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_OSN'),
625 'usn_income' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_UI'),
626 'usn_income_outcome' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_UIO'),
627 'envd' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_ENVD'),
628 'esn' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_ESN'),
629 'patent' =>
Localization\Loc::getMessage(
'SALE_CASHBOX_ATOL_FARM_SNO_PATENT')
635 if (static::hasMeasureSettings())
637 $settings[
'MEASURE'] = static::getMeasureSettings();
646 0 => self::CODE_VAT_0,
647 10 => self::CODE_VAT_10,
648 20 => self::CODE_VAT_20,
672 if (
Main\Loader::includeModule(
'catalog'))
674 $measuresList = \CCatalogMeasure::getList();
675 while ($measure = $measuresList->fetch())
677 $measureItems[$measure[
'CODE']] = [
679 'LABEL' => $measure[
'MEASURE_TITLE'],
687 'ITEMS' => $measureItems,
696 $generalRequiredFields = parent::getGeneralRequiredFields();
698 $map = CashboxTable::getMap();
699 $generalRequiredFields[
'NUMBER_KKM'] =
$map[
'NUMBER_KKM'][
'title'];
700 return $generalRequiredFields;
706 private function getAccessToken()
714 private function setAccessToken($token)
722 private function getOptionName()
724 return static::getOptionPrefix() .
'_' .mb_strtolower($this->
getField(
'NUMBER_KKM'));
732 return static::TOKEN_OPTION_NAME;
749 private function decode(
$data)
758 private function requestAccessToken()
773 $this->setAccessToken(
$response[
'token']);
static get($moduleId, $name, $default="", $siteId=false)
static set($moduleId, $name, $value="", $siteId="")
static loadMessages($file)
static getMessage($code, $replace=null, $language=null)
static getList(array $parameters=array())
static encode($data, $options=null)
const PARAM_CALCULATION_ATTR
const PARAM_FISCAL_DOC_ATTR
const PARAM_FISCAL_DOC_NUMBER
const CALCULATED_SIGN_CONSUMPTION
const PARAM_FISCAL_RECEIPT_NUMBER
const PARAM_REG_NUMBER_KKT
const PAYMENT_TYPE_CASHLESS
static extractZReportData(array $data)
const RESPONSE_HTTP_CODE_200
const OPERATION_GET_TOKEN
static getErrorType($errorCode)
static getSettings($modelId=0)
static getGeneralRequiredFields()
static getDefaultVatList()
static getMeasureSettings()
static extractCheckData(array $data)
static hasMeasureSettings()
printImmediately(Check $check)
validateCheckQuery(array $checkData)
const OPERATION_CHECK_REGISTRY
registerCheck($operation, array $check)
const OPERATION_CHECK_CHECK
getRequestUrl($operation, $token, array $queryData=array())
const RESPONSE_HTTP_CODE_401
buildCheckQuery(Check $check)
getValueFromSettings($name, $code)
static getCheckInfoByExternalUuid($uuid)
static getObjectById($id)
static addDebugInfo(?string $message, $cashboxId=null)
static getTag2108Value(?string $measureCode)
</td ></tr ></table ></td ></tr >< tr >< td class="bx-popup-label bx-width30"><?=GetMessage("PAGE_NEW_TAGS")?> array( $site)
if(!is_null($config))($config as $configItem)(! $configItem->isVisible()) $code
NormalizePhone($number, $minLength=10)
if( $daysToExpire >=0 &&$daysToExpire< 60 elseif)( $daysToExpire< 0)