Novo Campo de fotos da simpleroute
This commit is contained in:
@@ -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?
|
||||
|
||||
Reference in New Issue
Block a user