From 033e083ec55cb0399850f6182e2705b6a86aa8c28d15bbf21b1ba50728be4cf7 Mon Sep 17 00:00:00 2001 From: victor Date: Tue, 21 Jul 2026 16:33:21 -0300 Subject: [PATCH] =?UTF-8?q?Corre=C3=A7=C3=A3o=20do=20fun=C3=A7=C3=A3o=20de?= =?UTF-8?q?=20editar?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/edicao_lancamentos/show.html.erb | 35 +++++++++++++++---- 1 file changed, 29 insertions(+), 6 deletions(-) diff --git a/app/views/admin/edicao_lancamentos/show.html.erb b/app/views/admin/edicao_lancamentos/show.html.erb index eb3b20a..82eda37 100644 --- a/app/views/admin/edicao_lancamentos/show.html.erb +++ b/app/views/admin/edicao_lancamentos/show.html.erb @@ -258,11 +258,25 @@ renderPeriodo(data.periodo, data.falhas); // Só veio o card pronto quando a NF tem um lançamento único; com mais de // um, o ADM escolhe na lista antes de abrir qualquer coisa. - if (data.visita) { abrirCard(data.visita); } else { visita = null; renderOcorrencias(); } - if (!data.visita && !ocorrencias.length) mostrarErroBusca('Nenhum lançamento localizado para esta NF no período consultado.'); + if (data.visita) { + abrirCard(data.visita); + } else { + visita = null; + renderOcorrencias(); + // Tela em branco é pior que erro: se não há card E a lista ficou + // escondida, o ADM precisa saber por quê em vez de achar que a NF + // não existe. + if (ocEl.classList.contains('hidden')) { + mostrarErroBusca(ocorrencias.length + ? 'O lançamento foi localizado mas não pôde ser aberto — veja os avisos acima.' + : 'Nenhum lançamento localizado para esta NF no período consultado.'); + } + } } catch (e) { - renderOcorrencias(); - mostrarErroBusca('Erro de conexão ao buscar a NF.'); + // Mostra o erro real: "Erro de conexão" genérico escondeu uma exceção de + // renderização e deixou a tela muda. + console.error('[edicao-lancamento] falha na busca', e); + mostrarErroBusca('Falha ao processar a busca: ' + ((e && e.message) || e)); } finally { loadEl.classList.add('hidden'); } @@ -306,10 +320,16 @@ const ocCont = document.getElementById('oc-contador'); const ocDica = document.getElementById('oc-dica'); + // ⚠️ NÃO usar new Date('2026-07-15') para data pura: o JS lê como meia-noite + // UTC e o toLocale em UTC-3 devolve o DIA ANTERIOR. Data planejada não é um + // instante — formata direto do texto ISO. const fmtData = v => { if (!v) return '—'; - const d = new Date(v); - return isNaN(d) ? String(v).slice(0, 10) : d.toLocaleDateString('pt-BR'); + const s = String(v); + const iso = s.match(/^(\d{4})-(\d{2})-(\d{2})/); + if (iso) return iso[3] + '/' + iso[2] + '/' + iso[1]; + const d = new Date(s); + return isNaN(d) ? s.slice(0, 10) : d.toLocaleDateString('pt-BR'); }; const fmtHora = v => { if (!v) return null; @@ -325,6 +345,9 @@ ocEl.classList.add('hidden'); ocLista.innerHTML = ''; return; } + // O bloco nasce com `hidden` no ERB — sem tirar a classe aqui, a lista é + // montada e fica invisível (a tela parecia não ter achado nada). + ocEl.classList.remove('hidden'); ocCont.textContent = n + (n === 1 ? ' lançamento' : ' lançamentos'); ocDica.textContent = n > 1 ? 'para esta NF — escolha qual quer editar.' : 'para esta NF.'; ocLista.innerHTML = ocorrencias.map((o, i) => {