feat: gerar planilha de carga do SimpliRoute (download .xlsx)
Nova tela ADM/gerente (Administração > Planilha SimpliRoute) que gera a planilha de importação (.xlsx) de uma operação vigente, no formato do pt_br_example.xlsx. Preenche Latitude/Longitude reaproveitando a geocodificação do mês anterior da mesma operação (casa nome + endereço + supervisão; geo vem do rastreio db_reem_simplerout_2026). Pacientes novos saem sem lat/long. - SimpliRoute::PlanilhaCarga: monta linhas + resolve match do mês anterior - SimpliRoute::PlanilhaCargaXlsx: builder caxlsx com cabeçalho verbatim - Admin::PlanilhasSimpliRouteController (show/baixar) + policy admin/gerente - Gem caxlsx (rebuild do container atualiza o Gemfile.lock) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
43
app/controllers/admin/planilhas_simpli_route_controller.rb
Normal file
43
app/controllers/admin/planilhas_simpli_route_controller.rb
Normal file
@@ -0,0 +1,43 @@
|
||||
# app/controllers/admin/planilhas_simpliroute_controller.rb
|
||||
#
|
||||
# Gera a planilha de carga do SimpliRoute (.xlsx) a partir de UMA operação
|
||||
# vigente. Lat/long são preenchidas com o histórico do mês anterior
|
||||
# (SimpliRoute::PlanilhaCarga). Somente leitura das bases.
|
||||
class Admin::PlanilhasSimpliRouteController < ApplicationController
|
||||
XLSX_MIME = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'.freeze
|
||||
|
||||
def show
|
||||
authorize :planilha_simpli_route
|
||||
@operacoes_agrupadas = Operacao.agrupadas_por_mes
|
||||
end
|
||||
|
||||
# GET /admin/planilha_simpli_route/baixar?tabela=gade_entregas_...
|
||||
def baixar
|
||||
authorize :planilha_simpli_route
|
||||
|
||||
tabela = params[:tabela].to_s
|
||||
unless Operacao.valida?(tabela)
|
||||
return redirect_to(admin_planilha_simpli_route_path, alert: 'Selecione uma operação válida.')
|
||||
end
|
||||
|
||||
carga = SimpliRoute::PlanilhaCarga.new(tabela)
|
||||
linhas = carga.linhas
|
||||
|
||||
if linhas.empty?
|
||||
return redirect_to(admin_planilha_simpli_route_path,
|
||||
alert: "A operação #{carga.label} não tem registros.")
|
||||
end
|
||||
|
||||
binario = SimpliRoute::PlanilhaCargaXlsx.new(linhas).gerar
|
||||
send_data binario,
|
||||
filename: "carga_simpliroute_#{nome_arquivo(carga.label)}.xlsx",
|
||||
type: XLSX_MIME,
|
||||
disposition: 'attachment'
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def nome_arquivo(label)
|
||||
label.to_s.parameterize(separator: '_').presence || 'operacao'
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user