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 @@
Foto da fachada
- -Fotos do SimpliRoute
- -+ Fotos do lançamento +
+