From f6eda043a37da9ee6739316f133fc4add2ef986b4377ab4df73dd7f9d1d737bd Mon Sep 17 00:00:00 2001 From: victor Date: Mon, 20 Jul 2026 17:35:21 -0300 Subject: [PATCH] =?UTF-8?q?Altera=C3=A7=C3=B5es=20de=20fotos=20da=20simple?= =?UTF-8?q?route?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/edicao_lancamentos_controller.rb | 39 ++++- app/services/simpli_route/client.rb | 11 ++ .../admin/edicao_lancamentos/show.html.erb | 160 ++++++++++++++---- bin/sondar_fotos_simpliroute | 147 ++++++++++++++++ 4 files changed, 319 insertions(+), 38 deletions(-) create mode 100755 bin/sondar_fotos_simpliroute diff --git a/app/controllers/admin/edicao_lancamentos_controller.rb b/app/controllers/admin/edicao_lancamentos_controller.rb index fa70edc..3d0472b 100644 --- a/app/controllers/admin/edicao_lancamentos_controller.rb +++ b/app/controllers/admin/edicao_lancamentos_controller.rb @@ -32,8 +32,10 @@ class Admin::EdicaoLancamentosController < ApplicationController entrega = Entrega.por_nf(nf).first return render_erro("NF #{nf} não encontrada na base de rastreio.") if entrega.nil? - id = client.resolver_id(entrega) - visita = client.visita(id) + id = client.resolver_id(entrega) + visita = client.visita(id) + # Segunda fonte de imagens (POD). Não é obrigatória: se falhar, vem {}. + detalhe = client.detalhe_visita(id) render json: { ok: true, @@ -52,11 +54,9 @@ class Admin::EdicaoLancamentosController < ApplicationController planned_date: visita['planned_date'], contato: visita['contact_name'], telefone: visita['contact_phone'], - # Fotos do card: fachada vem do rastreio (mesma foto do mapa de operações); - # pictures/assinatura vêm da API. Só URLs http(s) chegam ao . - foto_fachada: url_imagem(entrega.try(:foto_da_fachada)), - pictures: Array(visita['pictures']).filter_map { |u| url_imagem(u) }, - signature: url_imagem(visita['signature']), + # Galeria unificada — TODAS as fotos do lançamento, de todas as fontes, + # cada uma etiquetada para o ADM saber o que está conferindo. + fotos: fotos_do_lancamento(entrega, visita, detalhe), motorista: entrega.driver, veiculo: entrega.vehicle }, @@ -218,6 +218,31 @@ class Admin::EdicaoLancamentosController < ApplicationController url.match?(%r{\Ahttps?://}i) ? url : nil end + # Reúne as imagens das TRÊS fontes numa lista única e etiquetada: + # 1. espelho de rastreio -> foto da fachada (mesma do mapa de operações) + # 2. visita da API -> pictures[] + signature + # 3. detalhe do POD -> pictures[] + signature (costuma ser mais completo) + # + # A mesma foto costuma aparecer em mais de uma fonte, então deduplica por URL + # mantendo a primeira etiqueta (a ordem abaixo é a mais informativa). + def fotos_do_lancamento(entrega, visita, detalhe) + brutas = [] + brutas << [entrega.try(:foto_da_fachada), 'fachada', 'Rastreio'] + + [[visita, 'Visita'], [detalhe, 'Comprovante']].each do |fonte, origem| + Array(fonte['pictures']).each { |u| brutas << [u, 'entrega', origem] } + brutas << [fonte['signature'], 'assinatura', origem] + end + + vistas = Set.new + brutas.filter_map do |valor, tipo, origem| + url = url_imagem(valor) + next if url.nil? || !vistas.add?(url) + + { url: url, tipo: tipo, origem: origem } + end + end + # Sem token não há o que fazer — avisa e volta. def garantir_configurado return if SimpliRoute.configurado? diff --git a/app/services/simpli_route/client.rb b/app/services/simpli_route/client.rb index 282b6dd..8936ad0 100644 --- a/app/services/simpli_route/client.rb +++ b/app/services/simpli_route/client.rb @@ -84,6 +84,17 @@ module SimpliRoute [] end + # Detalhe do comprovante de entrega (POD): traz foto, assinatura, hora e GPS. + # É uma fonte MAIS COMPLETA de imagens que `visita(id)` — a visita crua às + # vezes vem com `pictures` vazio mesmo havendo foto registrada no checkout. + # Best-effort: se o endpoint não existir/responder, devolve {} e a tela segue + # com o que a visita tiver. + def detalhe_visita(id) + get("/v1/plans/visits/#{id}/detail/") || {} + rescue Error + {} + end + private def get(path) diff --git a/app/views/admin/edicao_lancamentos/show.html.erb b/app/views/admin/edicao_lancamentos/show.html.erb index 606e222..d5a23b2 100644 --- a/app/views/admin/edicao_lancamentos/show.html.erb +++ b/app/views/admin/edicao_lancamentos/show.html.erb @@ -71,14 +71,12 @@
- <%# Coluna esquerda — fotos %> + <%# Coluna esquerda — galeria com TODAS as fotos do lançamento %>
-

Foto da fachada

-
- +

+ Fotos do lançamento +

+
<%# Coluna direita — campos click-to-edit %> @@ -105,6 +103,38 @@
+ + <%# Visualizador de foto — amplia e navega entre todas as imagens do lançamento %> +