Correção do função de editar lançamento para quer consiga listar todas
This commit is contained in:
@@ -167,6 +167,7 @@ class Admin::EdicaoLancamentosController < ApplicationController
|
||||
|
||||
visitas = do_dia.select { |v| v['reference'].to_s == nf || trackings.include?(v['tracking_id'].to_s) }
|
||||
.uniq { |v| v['id'] }
|
||||
visitas = com_tracking_id(visitas)
|
||||
|
||||
achadas = visitas.map { |v| ocorrencia_da_api(v, entrega_de(entregas, v['tracking_id'])) }
|
||||
|
||||
@@ -183,9 +184,34 @@ class Admin::EdicaoLancamentosController < ApplicationController
|
||||
end
|
||||
|
||||
def entrega_de(entregas, tracking_id)
|
||||
return nil if tracking_id.blank?
|
||||
|
||||
entregas.find { |e| e.tracking_id.to_s == tracking_id.to_s }
|
||||
end
|
||||
|
||||
# Quantas visitas da lista vale a pena detalhar (1 GET cada). Uma NF com mais
|
||||
# que isso é dado estranho, não plano duplicado.
|
||||
MAX_DETALHES_LISTA = 5
|
||||
|
||||
# A lista-por-data nem sempre traz o `tracking_id`, e é ele que liga a visita
|
||||
# ao espelho — de onde vêm motorista e veículo. Sem esse casamento a NF
|
||||
# duplicada aparece com as duas linhas sem motorista, que é exatamente o dado
|
||||
# que distingue uma da outra. Quando faltar, busca a visita completa.
|
||||
def com_tracking_id(visitas)
|
||||
visitas.each_with_index.map do |visita, i|
|
||||
next visita if visita['tracking_id'].present? || i >= MAX_DETALHES_LISTA
|
||||
|
||||
detalhar(visita)
|
||||
end
|
||||
end
|
||||
|
||||
# Best-effort: se o detalhe falhar, segue com o que a lista deu.
|
||||
def detalhar(visita)
|
||||
client.visita(visita['id']).presence || visita
|
||||
rescue SimpliRoute::Error
|
||||
visita
|
||||
end
|
||||
|
||||
# Resumo de um lançamento para a lista de escolha (não carrega fotos/detalhe —
|
||||
# isso só acontece quando o ADM abre um).
|
||||
def ocorrencia_da_api(visita, entrega)
|
||||
@@ -200,8 +226,10 @@ class Admin::EdicaoLancamentosController < ApplicationController
|
||||
motorista: entrega&.driver,
|
||||
veiculo: entrega&.vehicle,
|
||||
editavel: true,
|
||||
# Está na API mas ainda não no espelho — daí não sabermos motorista/veículo.
|
||||
aviso: entrega ? nil : 'Ainda não sincronizado no painel'
|
||||
# Sem linha no espelho não há como saber motorista/veículo: a API não
|
||||
# devolve esses campos na visita. O ADM diferencia pelo status/checkout.
|
||||
no_painel: entrega.present?,
|
||||
aviso: entrega ? nil : 'Ainda não sincronizado no painel — motorista e veículo indisponíveis'
|
||||
}
|
||||
end
|
||||
|
||||
@@ -217,7 +245,8 @@ class Admin::EdicaoLancamentosController < ApplicationController
|
||||
motorista: entrega.driver,
|
||||
veiculo: entrega.vehicle,
|
||||
editavel: false,
|
||||
aviso: 'Não localizado na API do SimpliRoute — não é editável'
|
||||
no_painel: true,
|
||||
aviso: 'Só no painel — não está entre as visitas desta data no SimpliRoute, então não dá para editar'
|
||||
}
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user