Corrige dashboard por período, CRUD de usuário, PDFs e paginação na revisão
- Dashboard: no_periodo passa a cobrir o dia inteiro (planned_date é timestamp), corrigindo período que zerava ao terminar no dia dos dados - Dashboard: card de consolidações filtra por sobreposição de datas (não created_at) - Usuários: adiciona helper role_options_for_select (corrige edição/criação) - Consolidação: set_consolidacao nas actions de PDF/preview (corrige Pundit::NotDefinedError em Relatório Individual, Gerar Holerite e Preview) - Revisão: paginação com Pagy (20/página + seletor 20/50/100) - Nova consolidação: veículos filtrados pelo(s) motorista(s) no período
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# app/controllers/application_controller.rb
|
||||
class ApplicationController < ActionController::Base
|
||||
include Pundit::Authorization
|
||||
include Pagy::Backend
|
||||
|
||||
before_action :authenticate_user!
|
||||
before_action :set_tema
|
||||
|
||||
@@ -125,15 +125,19 @@ class ConsolidacaoEntregasController < ApplicationController
|
||||
authorize @consolidacao, :show?
|
||||
@motorista = params[:motorista]
|
||||
|
||||
@classificacoes = @consolidacao.consolidacao_entregas
|
||||
.where(motorista_nome: @motorista)
|
||||
.order(:created_at)
|
||||
todas = @consolidacao.consolidacao_entregas.where(motorista_nome: @motorista)
|
||||
|
||||
# reorder(nil): GROUP BY tipo + ORDER BY created_at é inválido no PostgreSQL
|
||||
@resumo = @classificacoes.reorder(nil).group(:tipo).count
|
||||
@total = @classificacoes.sum do |c|
|
||||
# Agregados calculados sobre o conjunto COMPLETO (não só a página exibida)
|
||||
@resumo = todas.group(:tipo).count
|
||||
@total = todas.sum do |c|
|
||||
c.tipo == 'desconto' ? -c.valor_aplicado : c.valor_aplicado
|
||||
end
|
||||
@total_pilares = todas.count
|
||||
@total_classificadas = todas.distinct.count(:tracking_id)
|
||||
|
||||
# Paginação só da tabela exibida — 20 padrão, com seletor 20/50/100
|
||||
@por_pagina = [20, 50, 100].include?(params[:por_pagina].to_i) ? params[:por_pagina].to_i : 20
|
||||
@pagy, @classificacoes = pagy(todas.order(:created_at), limit: @por_pagina)
|
||||
|
||||
# Próximo motorista pendente (para botão "Próximo Motorista")
|
||||
nomes_completos = @consolidacao.consolidacao_motoristas.map(&:motorista_nome)
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
class ConsolidacoesController < ApplicationController
|
||||
include Auditavel
|
||||
|
||||
before_action :set_consolidacao, only: %i[show edit update destroy finalizar arquivar wizard]
|
||||
before_action :set_consolidacao,
|
||||
only: %i[show edit update destroy finalizar arquivar wizard
|
||||
preview_holerite gerar_pdf_relatorio gerar_pdf_holerite]
|
||||
|
||||
# GET /consolidacoes — lista com filtros
|
||||
def index
|
||||
@@ -65,6 +67,17 @@ class ConsolidacoesController < ApplicationController
|
||||
render :new, status: :unprocessable_entity
|
||||
end
|
||||
|
||||
# GET /consolidacoes/veiculos_disponiveis?motoristas[]=X&inicio=&fim=
|
||||
# Lista (JSON) os veículos usados pelos motoristas selecionados no período —
|
||||
# alimenta o filtro dinâmico de veículos no formulário de nova consolidação.
|
||||
def veiculos_disponiveis
|
||||
authorize Consolidacao, :new?
|
||||
veiculos = Entrega.veiculos_de_motoristas(
|
||||
params[:motoristas], inicio: params[:inicio], fim: params[:fim]
|
||||
)
|
||||
render json: { veiculos: veiculos }
|
||||
end
|
||||
|
||||
# GET /consolidacoes/:id — visão geral
|
||||
def show
|
||||
authorize @consolidacao
|
||||
|
||||
@@ -72,8 +72,10 @@ class DashboardController < ApplicationController
|
||||
# Evolução diária no período (para Chart.js)
|
||||
@grafico_diario = build_grafico_diario(entregas, config[:entrega])
|
||||
|
||||
# Consolidações criadas no período
|
||||
@consolidacoes_mes = Consolidacao.ativas.where(created_at: @periodo_inicio.beginning_of_day..@periodo_fim.end_of_day)
|
||||
# Consolidações cujo período (data_inicio..data_fim) cruza o período do dashboard
|
||||
# — independe de quando foram criadas (created_at).
|
||||
@consolidacoes_mes = Consolidacao.ativas
|
||||
.where('data_inicio <= ? AND data_fim >= ?', @periodo_fim, @periodo_inicio)
|
||||
@consolidacoes_abertas = @consolidacoes_mes.where(status: :rascunho).count
|
||||
@consolidacoes_fechadas = @consolidacoes_mes.where(status: :finalizada).count
|
||||
|
||||
|
||||
Reference in New Issue
Block a user