| Current Path : /var/www/homesaver/www/bitrix/admin/ |
| Current File : /var/www/homesaver/www/bitrix/admin/receipt_status.php |
<?
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_before.php');
use Bitrix\Main\Page;
// $blogModulePermissions = $APPLICATION->GetGroupRight("blog");
// if ($blogModulePermissions < "R")
// $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
IncludeModuleLangFile(__FILE__);
require_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/ofdferma/prolog.php');
CJSCore::init('sidepanel');
$APPLICATION->SetAdditionalCSS('/bitrix/css/ofdferma/ofdferma_receipts.css');
// Page\Asset::getInstance()->addCss('/bitrix/css/ofdferma/ofdferma_receipts.css');
Page\Asset::getInstance()->addJs('/bitrix/js/ofdferma/ofdferma_receipts.js');
CModule::includeModule('ofdferma');
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$receiptId = isset($_POST['receiptId']) ? $_POST['receiptId'] : null;
if (empty($receiptId)) {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => 'Не указан ID чека.',
]);
exit;
}
$receipt = COfdFermaReceipt::GetByReceiptID($receiptId);
if (empty($receipt)) {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => 'Чек не найден.',
]);
exit;
}
try {
$fermaApiClient = CMainOfdFerma::getApiClient();
} catch (\RuntimeException $e) {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => 'Не удалось создать клиент для api фермы.',
]);
exit;
}
try {
$response = $fermaApiClient->getElectronReceiptStatus($receipt['RECEIPT_ID']);
} catch (CFermaApiException $e) {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => sprintf('Ошибка при обращении к api фермы: %s', $e->getMessage()),
]);
exit;
}
if ($response['Status'] === 'Failed') {
if (isset($response['Error']['Message'])) {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => sprintf('Проверка фискального чека не удалась: %s.', $response['Error']['Message']),
]);
} else {
echo CUtil::PhpToJSObject([
'result' => 'failed',
'message' => sprintf('Проверка фискального чека не удалась по неизвестной причине.'),
]);
}
exit;
}
$data = $response['Data'];
COfdFermaReceipt::Update($receipt['ID'], [
'STATUS_ID' => $data['StatusCode'],
'STATUS_NAME' => $data['StatusName'],
'STATUS_MESSAGE' => $data['StatusMessage'],
'DEVICE_ID' => $data['Device']['DeviceId'],
'RNM' => $data['Device']['RNM'],
'ZN' => $data['Device']['ZN'],
'FN' => $data['Device']['FN'],
'FDN' => $data['Device']['FDN'],
'FPD' => $data['Device']['FPD'],
]);
echo CUtil::PhpToJSObject([
'result' => 'success',
'data' => $data,
]);
exit;
}
$APPLICATION->SetTitle('Проверка статуса чека');
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_admin_after.php');
$receiptId = $_REQUEST['receiptId'];
?>
<?php
if (empty($receiptId)) {
?>
<div class="adm-info-message-wrap adm-info-message-red">
<div class="adm-info-message">
<span>Не указан номер чека для проверки</span>
<div class="adm-info-message-icon"></div>
</div>
</div>
<?php
} else {
?>
<div class="ofd-loader" id="ofd-loader">
Подождите, идёт проверка информации...
</div>
<div class="ofd-result" id="ofd-result" style="display: none">
<table class="ofd-result__table">
<tbody>
<tr>
<td>Статус:</td>
<td>#StatusMessage# (id: #StatusCode#)</td>
</tr>
<tr>
<td>Дата чека:</td>
<td>#ReceiptDateUtc#</td>
</tr>
<tr>
<td>Номер кассы:</td>
<td>#Device.DeviceId#</td>
</tr>
<tr>
<td>Регистрационный номер кассы:</td>
<td>#Device.RNM#</td>
</tr>
<tr>
<td>Заводской номер кассы:</td>
<td>#Device.ZN#</td>
</tr>
<tr>
<td>Номер фискального накопителя:</td>
<td>#Device.FN#</td>
</tr>
<tr>
<td>Номер фискального документа:</td>
<td>#Device.FDN#</td>
</tr>
<tr>
<td>Фискальный признак документа:</td>
<td>#Device.FPD#</td>
</tr>
</tbody>
</table>
</div>
<div class="ofd-actions" id="ofd-actions" style="display: none">
<input type="button" class="adm-btn" id="refresh-btn" value="Повторить запрос">
</div>
<script>
BX.ready(function () {
var $loader = BX('ofd-loader');
var $result = BX('ofd-result');
var $refreshBtn = BX('refresh-btn');
var $actions = BX('ofd-actions');
var template = $result.innerHTML;
BX.cleanNode($result);
BX.show($result);
BX.bind($refreshBtn, 'click', function (e) {
e.preventDefault();
refreshStatus();
});
runCheck();
function refreshStatus() {
startLoader();
BX.cleanNode($result);
runCheck();
}
function runCheck() {
window.ofdferma.checkReceiptStatus(
<?=json_encode($receiptId)?>,
function (response) {
finishLoader();
if (response.result === 'failed') {
$result.append(BX.create('div', {
html: '<div class="adm-info-message-wrap adm-info-message-red">' +
'<div class="adm-info-message">' +
'<span>' + response.message + '</span>' +
'<div class="adm-info-message-icon"></div>' +
'</div>' +
'</div>'
}));
}
if (response.result === 'success') {
var data = response.data;
var content = template
.replace('#StatusMessage#', data['StatusMessage'])
.replace('#StatusCode#', data['StatusCode'])
.replace('#ReceiptDateUtc#', data['ReceiptDateUtc'])
.replace('#Device.DeviceId#', data['Device']['DeviceId'])
.replace('#Device.RNM#', data['Device']['RNM'])
.replace('#Device.ZN#', data['Device']['ZN'])
.replace('#Device.FN#', data['Device']['FN'])
.replace('#Device.FDN#', data['Device']['FDN'])
.replace('#Device.FPD#', data['Device']['FPD']);
$result.append(BX.create('div', {
html: content
}));
}
},
function (response) {
finishLoader();
$result.append(BX.create('div', {
html: '<div class="adm-info-message-wrap adm-info-message-red">' +
'<div class="adm-info-message">' +
'<span>Произошла непредвиденная ситуация. Попробуйте повтрить запрос позже.</span>' +
'<div class="adm-info-message-icon"></div>' +
'</div>' +
'</div>'
}));
}
);
}
function startLoader() {
BX.show($loader);
BX.hide($actions);
window.parent.BX.showWait();
}
function finishLoader() {
BX.hide($loader);
BX.show($actions);
window.parent.BX.closeWait();
}
});
</script>
<?php
}
require($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/epilog_admin.php');