Novo Campo de fotos da simpleroute

This commit is contained in:
2026-07-20 22:23:49 -03:00
parent f6eda043a3
commit 94860dd5bc
3 changed files with 101 additions and 57 deletions

View File

@@ -218,31 +218,54 @@ 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:
# Campos de foto customizados do SimpliRoute (extra_field_values). É AQUI que
# ficam as fotos reais tiradas pelo motorista — o array `pictures` só traz uma
# imagem genérica. Mapa: campo da API => [rótulo p/ o ADM, categoria de cor].
# Campos fora deste mapa ainda aparecem (rótulo derivado do nome do campo).
FOTOS_EXTRA = {
'foto_prova_visita' => ['Prova da visita', 'prova'],
'foto_nf' => ['Nota Fiscal', 'nf'],
'foto_termo' => ['Termo', 'termo'],
'foto_relatorio2' => ['Relatório', 'relatorio']
}.freeze
# Reúne TODAS as imagens do lançamento 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)
# 2. extra_field_values -> fotos reais do motorista (foto_nf, prova, etc.)
# 3. pictures[]/signature -> imagens genéricas + assinatura
#
# 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).
# A mesma foto pode vir de 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']
brutas << [entrega.try(:foto_da_fachada), 'Fachada', 'fachada', 'Rastreio']
# Fotos customizadas — o /detail/ é a fonte mais completa; cai p/ a visita.
extras = detalhe['extra_field_values'].presence || visita['extra_field_values'] || {}
extras.each do |campo, valor|
rotulo, cat = FOTOS_EXTRA[campo] || [rotulo_do_campo(campo), 'extra']
brutas << [valor, rotulo, cat, 'SimpliRoute']
end
[[visita, 'Visita'], [detalhe, 'Comprovante']].each do |fonte, origem|
Array(fonte['pictures']).each { |u| brutas << [u, 'entrega', origem] }
brutas << [fonte['signature'], 'assinatura', origem]
Array(fonte['pictures']).each { |u| brutas << [u, 'Comprovante', 'entrega', origem] }
brutas << [fonte['signature'], 'Assinatura', 'assinatura', origem]
end
vistas = Set.new
brutas.filter_map do |valor, tipo, origem|
brutas.filter_map do |valor, rotulo, cat, origem|
url = url_imagem(valor)
next if url.nil? || !vistas.add?(url)
{ url: url, tipo: tipo, origem: origem }
{ url: url, rotulo: rotulo, cat: cat, origem: origem }
end
end
# "foto_relatorio2" -> "Relatorio2". Fallback p/ campos de foto não mapeados.
def rotulo_do_campo(campo)
campo.to_s.sub(/\Afoto_?/, '').tr('_', ' ').strip.capitalize.presence || campo.to_s
end
# Sem token não há o que fazer — avisa e volta.
def garantir_configurado
return if SimpliRoute.configurado?