teste #9

Merged
victor merged 3 commits from teste into main 2026-07-21 00:31:16 -03:00
Showing only changes of commit e631e8448a - Show all commits

View File

@@ -1548,3 +1548,93 @@ docker-compose exec app bundle exec rails db:migrate
</details> </details>
---
<details>
<summary><strong>🎨 Atualização 20/07/2026 — Ícones da marca (emoji → SVG laranja) + galeria de fotos no Editar Lançamento</strong></summary>
Três frentes num dia: (1) troca de **todos os ícones** do sistema, que eram emojis, por
ícones SVG chapados no laranja da marca; (2) **galeria com todas as fotos** do lançamento na
tela de Editar Lançamento; (3) investigação (com veredito) sobre **por que não dá para
editar as fotos** pela API do SimpliRoute. **Sem migration.**
### 🎨 1. Ícones — emoji → SVG da marca
Os ícones eram **emojis** (📊 📋 👥 ⚙️ …), que davam aparência "genérica de IA" e mudavam de
forma/cor conforme o sistema operacional. Agora são **SVG chapados**, na cor laranja da marca
(`#f97316`), consistentes em qualquer navegador.
- **Sprite próprio** em `public/icons.svg` — subconjunto do **Bootstrap Icons** (licença MIT),
arquivo único (~33 KB), servido localmente (sem CDN externo).
- **Helper `icone(nome, …)`** em `app/helpers/application_helper.rb`: mapa de nomes semânticos
em pt-BR (`:caminhao`, `:consolidacoes`, `:dinheiro`, …) → símbolo do sprite. Trocar um ícone
é mudar uma linha. Usa `fill="currentColor"` → a cor vem da classe CSS.
- **Helper `rotulo(nome, texto, …)`** para `link_to`/`button_to` (que recebem o rótulo como
argumento, onde não cabe ERB). `nav_link_to` ganhou a opção `icon:`.
- **~260 emojis substituídos em ~33 arquivos** (views, `_navbar`, layout, popups do mapa Leaflet
e HTML montado em JS na tela de Editar Lançamento).
- **Ícones de status mantêm cor semântica** (sucesso verde, alerta amarelo, erro vermelho) —
só os de navegação/ação viraram laranja.
- **E-mails** (`consolidacao_mailer`) ficaram sem os emojis decorativos: sprite via `<use href>`
não funciona em cliente de e-mail.
- **Ajuste fino (mesma data):** ícones **+20%** (padrão `1.05em`→`1.25em`), **espaçamento**
ícone↔texto (parâmetro `espaco:` com `mr-1`, desligado nos ícones sozinhos/centralizados) e
**correção de contraste** — ícone laranja sobre fundo laranja ficava invisível (botão
"Relatório" do dashboard e os ícones das telas de recuperar/redefinir senha → herdam preto).
### 🖼️ 2. Editar Lançamento — galeria com TODAS as fotos
Antes a tela mostrava só **uma** foto genérica. Descobrimos (testando a API real) que as fotos
reais do motorista **não** estão no array `pictures`, e sim em **`extra_field_values`**, em
campos nomeados: **`foto_nf`** (Nota Fiscal), **`foto_prova_visita`** (Prova da visita, presente
até em insucesso), **`foto_relatorio2`** (Relatório) e **`foto_termo`** (Termo, quase sempre vazio).
- Novo método **`SimpliRoute::Client#detalhe_visita`** → `GET /v1/plans/visits/{id}/detail/`
(fonte de fotos mais completa; best-effort, cai para a visita se falhar).
- **`fotos_do_lancamento`** no controller reúne **todas as fontes** — fachada (rastreio),
`extra_field_values`, `pictures[]` e `signature` — numa lista **etiquetada** (tipo + origem) e
**deduplicada por URL**.
- **Galeria** com a 1ª foto em destaque + grade, cada uma com etiqueta colorida por categoria,
e **visualizador (lightbox)** que amplia e navega (setas do teclado / Esc / link p/ tamanho real).
### 🚫 3. Por que NÃO dá para editar as fotos (limitação do SimpliRoute)
Investigamos todos os caminhos de escrita contra a API real. **A limitação é do SimpliRoute:**
| Caminho | Resultado |
|---|---|
| `PATCH`/`PUT` em `extra_field_values` (todos os formatos) | **HTTP 500** — o servidor deles quebra |
| Editar outros campos (`status`, `notes`) por `PATCH` | Funciona (200) — o bloqueio é **só** das fotos |
| Suspeita de "plano expirado" | Descartada — visita **ativa (de hoje)** dá o mesmo 500 |
| `GET /v1/plans/visits/{id}/detail/` | Somente leitura |
| Checkout mobile `POST /v1/mobile/visit/{id}/checkout/` | **403** — exige token de **motorista**; e refaz o checkout inteiro (hora/GPS/assinatura) |
| Webhook | Canal de **saída** apenas — não escreve de volta |
- **Webhook existente descoberto:** a conta (Gade Hospitalar) tem um webhook `visit_checkout_detailed`
apontando para um **Google Apps Script** (`script.google.com/…/exec`) — recebe os dados de cada
entrega finalizada (inclui as URLs das fotos). É **inbound**, não serve para editar.
- **Conclusão:** não há caminho administrativo (nem por API, nem pelo painel web do SimpliRoute)
para corrigir uma foto após o envio do motorista. Só liberando escrita em `extra_field_values`
(pela API) ou uma opção de substituir imagem no painel deles.
- **Ferramenta de diagnóstico:** `bin/sondar_fotos_simpliroute --visita <id> [--testar-escrita]` —
mostra as fotos de todas as fontes e testa (com segurança, mirando campo vazio e restaurando) se
a escrita é aceita. Roda no servidor: `docker compose exec app bin/sondar_fotos_simpliroute …`.
> ⚠️ **Token do SimpliRoute:** é de **produção** e tem escrita. Se for compartilhado (chat/e-mail),
> **rotacione** depois em `app2.simpliroute.com`.
### 📂 Arquivos
```
public/icons.svg (novo — sprite Bootstrap Icons, MIT)
bin/sondar_fotos_simpliroute (novo — sondagem da API de fotos)
app/helpers/application_helper.rb (icone / rotulo / nav_link_to)
app/services/simpli_route/client.rb (detalhe_visita)
app/controllers/admin/edicao_lancamentos_controller.rb (fotos_do_lancamento)
app/views/admin/edicao_lancamentos/show.html.erb (galeria + lightbox)
app/views/layouts/_navbar.html.erb · _sidebar.html.erb · application.html.erb
app/javascript/controllers/validacao_controller.js (chip usa SVG, não emoji)
+ ~30 views com emojis substituídos (consolidacoes, dashboard, operacoes_dashboard, devise, …)
```
> **Sem migration e sem gem nova** — só views, helpers, JS e um asset estático.
> Em produção, o `public/icons.svg` precisa ir junto no deploy.
</details>