teste #9
90
README.md
90
README.md
@@ -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>
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user