Your IP : 216.73.216.86


Current Path : /var/www/homesaver/www/bitrix/admin/
Upload File :
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');