diff --git a/app/controllers/consolidacoes_controller.rb b/app/controllers/consolidacoes_controller.rb index 305c076..8545a6d 100644 --- a/app/controllers/consolidacoes_controller.rb +++ b/app/controllers/consolidacoes_controller.rb @@ -3,7 +3,7 @@ class ConsolidacoesController < ApplicationController include Auditavel before_action :set_consolidacao, - only: %i[show edit update destroy finalizar arquivar wizard + only: %i[show edit update destroy finalizar arquivar reativar wizard preview_holerite gerar_pdf_relatorio gerar_pdf_holerite] # GET /consolidacoes — lista com filtros @@ -122,6 +122,28 @@ class ConsolidacoesController < ApplicationController redirect_to consolidacoes_path, notice: 'Consolidação arquivada.' end + # GET /consolidacoes/arquivadas — histórico de consolidações arquivadas + def arquivadas + authorize Consolidacao + @consolidacoes = Consolidacao.arquivadas.recentes.includes(:criador, :arquivador) + end + + # POST /consolidacoes/:id/reativar — restaura uma consolidação arquivada + def reativar + authorize @consolidacao, :destroy? + @consolidacao.reativar!(current_user) + auditar!(:reativar, @consolidacao) + redirect_to consolidacoes_path, notice: 'Consolidação reativada.' + end + + # DELETE /consolidacoes/:id — exclui PERMANENTEMENTE (apenas arquivadas) + def destroy + authorize @consolidacao, :destroy? + @consolidacao.destroy! + auditar!(:excluir, @consolidacao) + redirect_to arquivadas_consolidacoes_path, notice: 'Consolidação excluída permanentemente.' + end + # ── FASE 7 — PDFs ──────────────────────────────────────────── # GET /consolidacoes/:id/gerar_pdf_relatorio?motorista=X diff --git a/app/models/consolidacao.rb b/app/models/consolidacao.rb index 35dd818..f2946c1 100644 --- a/app/models/consolidacao.rb +++ b/app/models/consolidacao.rb @@ -41,6 +41,18 @@ class Consolidacao < ApplicationRecord ) end + # Restaura uma consolidação arquivada. Como o status original não é guardado, + # inferimos: se já tinha sido finalizada (finalizado_em presente) volta para + # :finalizada, senão para :rascunho. Limpa os campos de arquivamento. + def reativar!(_user) + update!( + deleted_at: nil, + status: finalizado_em? ? :finalizada : :rascunho, + arquivado_por: nil, + arquivado_em: nil + ) + end + def finalizar!(user) return false unless todas_entregas_classificadas? diff --git a/app/policies/consolidacao_policy.rb b/app/policies/consolidacao_policy.rb index 0cf7214..cbbca0f 100644 --- a/app/policies/consolidacao_policy.rb +++ b/app/policies/consolidacao_policy.rb @@ -1,8 +1,9 @@ # app/policies/consolidacao_policy.rb class ConsolidacaoPolicy < ApplicationPolicy - def index? = user.pode_consolidar? - def show? = user.pode_consolidar? - def create? = user.pode_consolidar? + def index? = user.pode_consolidar? + def arquivadas? = user.pode_consolidar? + def show? = user.pode_consolidar? + def create? = user.pode_consolidar? def update? = user.pode_consolidar? && !record_finalizada_para_operador? def destroy? = user.admin? || user.gerente? diff --git a/app/views/consolidacoes/arquivadas.html.erb b/app/views/consolidacoes/arquivadas.html.erb new file mode 100644 index 0000000..d25fadc --- /dev/null +++ b/app/views/consolidacoes/arquivadas.html.erb @@ -0,0 +1,68 @@ +<%# app/views/consolidacoes/arquivadas.html.erb %> +<% content_for :title, 'Consolidações arquivadas' %> + +
+ Histórico de consolidações arquivadas. Você pode reativar + uma consolidação para voltar a editá-la, ou excluí-la + permanentemente — esta ação não pode ser desfeita. +
+ +<%# ── Lista ────────────────────────────────────────────── %> +<% if @consolidacoes.any? %> ++ 📅 <%= l c.data_inicio, format: :short %> → <%= l c.data_fim, format: :short %> + · 👤 <%= c.consolidacao_motoristas.count %> motorista(s) + · Criada por <%= c.criador.nome_display %> +
++ 📁 Arquivada + <% if c.arquivado_em.present? %>em <%= l c.arquivado_em, format: :short %><% end %> + <% if c.arquivador.present? %>por <%= c.arquivador.nome_display %><% end %> +
+<%= moeda(c.valor_total) %>
+<%= c.consolidacao_entregas.count %> entregas classificadas
+🗂️
+Nenhuma consolidação arquivada.
+ <%= link_to 'Ver consolidações ativas', consolidacoes_path, + class: 'inline-block bg-orange-500 hover:bg-orange-600 text-black font-bold px-5 py-3 rounded-lg' %> +