Acesso negado. Faça login no Leitor primeiro.

"; exit; } $config = require dirname(__DIR__) . '/config/database.php'; $emp = (int)($config['cod_empresa'] ?? 0); if (($config['tipo'] ?? 'remota') === 'local') { $dsn = "firebird:dbname={$config['database']};charset={$config['charset']}"; } else { $dsn = "firebird:host={$config['host']};port={$config['port']};dbname={$config['database']};charset={$config['charset']}"; } try { $pdo = new PDO($dsn, $config['username'], $config['password'], [ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, ]); $filtroEmpNfce = $emp > 0 ? "AND n.COD_EMPRESA = {$emp}" : ''; $filtroEmpNc = $emp > 0 ? "AND nc.COD_EMPRESA = {$emp}" : ''; // ── Busca NFC-e direto de NFCE_CABN ────────────────────────────────────── $rows = []; $tipo = 'NFC-e'; try { $rows = $pdo->query( "SELECT FIRST 20 n.NR_NOTA, CAST(COALESCE(n.SERIE_NFCE, n.SERIE, 0) AS VARCHAR(10)) AS SERIE, CAST(n.DATA_EMISSAO AS TIMESTAMP) AS DATA_HORA_VENDA, COALESCE(nc.TOTAL_NOTA, CAST(0 AS NUMERIC(15,2))) AS TOTAL_NOTA, TRIM(n.IDNFE) AS IDNFE, 65 AS MODELO_DOC FROM NFCE_CABN n LEFT JOIN NOTAS_CAB nc ON nc.NR_NOTA = n.NR_NOTA AND nc.COD_EMPRESA = n.COD_EMPRESA WHERE TRIM(COALESCE(n.IDNFE,'')) <> '' ORDER BY n.DATA_EMISSAO DESC" )->fetchAll(); } catch (\Throwable $e2) { // fallback sem JOIN se der erro de tipo try { $rows = $pdo->query( "SELECT FIRST 20 n.NR_NOTA, CAST(COALESCE(n.SERIE_NFCE,0) AS VARCHAR(10)) AS SERIE, CAST(n.DATA_EMISSAO AS TIMESTAMP) AS DATA_HORA_VENDA, CAST(0 AS NUMERIC(15,2)) AS TOTAL_NOTA, TRIM(n.IDNFE) AS IDNFE, 65 AS MODELO_DOC FROM NFCE_CABN n WHERE TRIM(COALESCE(n.IDNFE,'')) <> '' ORDER BY n.DATA_EMISSAO DESC" )->fetchAll(); } catch (\Throwable) {} } // ── Fallback: NF-e de NOTAS_CAB ────────────────────────────────────────── if (empty($rows)) { $rows = $pdo->query( "SELECT FIRST 20 nc.NR_NOTA, TRIM(COALESCE(nc.SERIE,'')) AS SERIE, nc.DATA_HORA_VENDA, nc.TOTAL_NOTA, TRIM(nc.IDNFE) AS IDNFE, nc.MODELO_DOC FROM NOTAS_CAB nc WHERE nc.NFE = 'S' AND TRIM(COALESCE(nc.IDNFE,'')) <> '' {$filtroEmpNc} ORDER BY nc.DATA_HORA_VENDA DESC" )->fetchAll(); $tipo = 'NF-e'; } } catch (Throwable $e) { echo "

Erro: ".htmlspecialchars($e->getMessage())."

"; exit; } if (empty($rows)) { echo "
⚠️ Nenhuma nota com chave de acesso encontrada no banco.
"; exit; } $sel = max(0, min((int)($_GET['idx'] ?? 0), count($rows) - 1)); $nota = $rows[$sel]; $chave = $nota['IDNFE']; $modelo = (int)$nota['MODELO_DOC']; $dh = $nota['DATA_HORA_VENDA']; preg_match('/^(\d{4})-(\d{2})-(\d{2})[\sT](\d{2}):(\d{2})/', (string)$dh, $m); $dataFmt = $m ? "{$m[3]}/{$m[2]}/{$m[1]} {$m[4]}:{$m[5]}" : substr((string)$dh, 0, 16); $valor = 'R$ ' . number_format((float)$nota['TOTAL_NOTA'], 2, ',', '.'); $chaveGrupos = implode(' ', str_split($chave, 4)); ?>

🧪 Teste QR Code —

⚠️ Nenhuma NFC-e com IDNFE encontrada — exibindo NF-e de NOTAS_CAB.
QR Code
Modelo —
Nota

Aponte o Leitor Fire para o QR Code acima.
← Voltar ao Leitor