From 403e71b41f39c495d271637f2922525dc27415af Mon Sep 17 00:00:00 2001 From: Paul Chavard Date: Wed, 12 Jan 2022 11:31:05 +0100 Subject: [PATCH] feat(procedure): only purge procedures without dossiers --- .../manager/dossiers_controller.rb | 33 ------------- .../cron/discarded_procedures_deletion_job.rb | 7 +-- app/models/dossier.rb | 8 ---- app/models/procedure.rb | 17 +++++-- app/views/manager/dossiers/show.html.erb | 11 ----- .../procedures_controller_spec.rb | 33 +++++++++++-- .../manager/dossiers_controller_spec.rb | 47 ------------------- .../manager/procedures_controller_spec.rb | 17 ++----- spec/models/dossier_spec.rb | 28 ++++++----- 9 files changed, 61 insertions(+), 140 deletions(-) delete mode 100644 spec/controllers/manager/dossiers_controller_spec.rb diff --git a/app/controllers/manager/dossiers_controller.rb b/app/controllers/manager/dossiers_controller.rb index bcc55e81d..84d2dda86 100644 --- a/app/controllers/manager/dossiers_controller.rb +++ b/app/controllers/manager/dossiers_controller.rb @@ -16,39 +16,6 @@ module Manager end end - # - # Custom actions - # - - def discard - dossier = Dossier.find(params[:id]) - dossier.discard_and_keep_track!(current_super_admin, :manager_request) - - logger.info("Le dossier #{dossier.id} est supprimé par #{current_super_admin.email}") - flash[:notice] = "Le dossier #{dossier.id} a été supprimé." - - redirect_to manager_dossier_path(dossier) - end - - def restore - dossier = Dossier.with_discarded.find(params[:id]) - dossier.restore(current_super_admin) - - flash[:notice] = "Le dossier #{dossier.id} a été restauré." - - redirect_to manager_dossier_path(dossier) - end - - def repasser_en_instruction - dossier = Dossier.find(params[:id]) - dossier.repasser_en_instruction(instructeur: current_super_admin) - - logger.info("Le dossier #{dossier.id} est repassé en instruction par #{current_super_admin.email}") - flash[:notice] = "Le dossier #{dossier.id} est repassé en instruction." - - redirect_to manager_dossier_path(dossier) - end - private def unfiltered_list? diff --git a/app/jobs/cron/discarded_procedures_deletion_job.rb b/app/jobs/cron/discarded_procedures_deletion_job.rb index 8f1a6b92d..d67cde8a9 100644 --- a/app/jobs/cron/discarded_procedures_deletion_job.rb +++ b/app/jobs/cron/discarded_procedures_deletion_job.rb @@ -1,10 +1,7 @@ class Cron::DiscardedProceduresDeletionJob < Cron::CronJob self.schedule_expression = "every day at 1 am" - def perform(*args) - Procedure.discarded_expired.find_each do |procedure| - procedure.dossiers.with_discarded.destroy_all - procedure.destroy - end + def perform + Procedure.purge_discarded end end diff --git a/app/models/dossier.rb b/app/models/dossier.rb index 14d8243cf..287e64e0a 100644 --- a/app/models/dossier.rb +++ b/app/models/dossier.rb @@ -539,10 +539,6 @@ class Dossier < ApplicationRecord en_construction? || termine? end - def can_be_deleted_by_manager? - kept? && can_be_deleted_by_user? - end - def messagerie_available? !brouillon? && !user_deleted? && !archived end @@ -704,10 +700,6 @@ class Dossier < ApplicationRecord termine? && hidden_by_administration? && hidden_by_user? end - def can_be_restored_by_manager? - hidden_by_administration? || discarded? && !procedure.discarded? - end - def expose_legacy_carto_api? procedure.expose_legacy_carto_api? end diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 4bd0203f6..3558a42ad 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -649,7 +649,7 @@ class Procedure < ApplicationRecord end def can_be_deleted_by_administrateur? - brouillon? || dossiers.state_instruction_commencee.empty? + brouillon? || dossiers.state_en_instruction.empty? end def can_be_deleted_by_manager? @@ -663,18 +663,25 @@ class Procedure < ApplicationRecord close! end - dossiers.each do |dossier| + dossiers.termine.visible_by_administration.each do |dossier| dossier.discard_and_keep_track!(author, :procedure_removed) end discard! end + def purge_discarded + if !dossiers.with_discarded.exists? + destroy + end + end + + def self.purge_discarded + discarded_expired.find_each(&:purge_discarded) + end + def restore(author) if discarded? && undiscard - dossiers.with_discarded.discarded.find_each do |dossier| - dossier.restore(author) - end dossiers.hidden_by_administration.find_each do |dossier| dossier.restore(author) end diff --git a/app/views/manager/dossiers/show.html.erb b/app/views/manager/dossiers/show.html.erb index 6c2d85945..2e7454290 100644 --- a/app/views/manager/dossiers/show.html.erb +++ b/app/views/manager/dossiers/show.html.erb @@ -26,17 +26,6 @@ as well as a link to its edit page. (Supprimé) <% end %> - -
- <% if dossier.accepte? %> - <%= link_to 'Repasser en instruction', repasser_en_instruction_manager_dossier_path(dossier), method: :post, class: 'button', data: { confirm: "Confirmez vous le passage en instruction du dossier ?" } %> - <% end %> - <% if dossier.can_be_deleted_by_manager? %> - <%= link_to 'Supprimer le dossier', discard_manager_dossier_path(dossier), method: :post, class: 'button', data: { confirm: "Confirmez vous la suppression du dossier ?" } %> - <% elsif dossier.can_be_restored_by_manager? %> - <%= link_to 'Restaurer le dossier', restore_manager_dossier_path(dossier), method: :post, class: 'button', data: { confirm: "Confirmez vous la restauration du dossier ?" } %> - <% end %> -
diff --git a/spec/controllers/administrateurs/procedures_controller_spec.rb b/spec/controllers/administrateurs/procedures_controller_spec.rb index 378910d35..9927b1074 100644 --- a/spec/controllers/administrateurs/procedures_controller_spec.rb +++ b/spec/controllers/administrateurs/procedures_controller_spec.rb @@ -411,9 +411,21 @@ describe Administrateurs::ProceduresController, type: :controller do context 'when dossier is en_construction' do let(:dossier) { create(:dossier, :en_construction, procedure: procedure_published) } - it { expect(procedure.reload.close?).to be_truthy } - it { expect(procedure.reload.discarded?).to be_truthy } - it { expect(dossier.reload.discarded?).to be_truthy } + it do + expect(procedure.reload.close?).to be_truthy + expect(procedure.discarded?).to be_truthy + expect(dossier.reload.kept?).to be_truthy + end + end + + context 'when dossier is accepte' do + let(:dossier) { create(:dossier, :accepte, procedure: procedure_published) } + + it do + expect(procedure.reload.close?).to be_truthy + expect(procedure.discarded?).to be_truthy + expect(dossier.reload.hidden_by_administration?).to be_truthy + end end end @@ -427,8 +439,19 @@ describe Administrateurs::ProceduresController, type: :controller do context 'when dossier is en_construction' do let(:dossier) { create(:dossier, :en_construction, procedure: procedure_published) } - it { expect(procedure.reload.discarded?).to be_truthy } - it { expect(dossier.reload.discarded?).to be_truthy } + it do + expect(procedure.reload.discarded?).to be_truthy + expect(dossier.reload.kept?).to be_truthy + end + end + + context 'when dossier is accepte' do + let(:dossier) { create(:dossier, :accepte, procedure: procedure_published) } + + it do + expect(procedure.reload.discarded?).to be_truthy + expect(dossier.reload.hidden_by_administration?).to be_truthy + end end end diff --git a/spec/controllers/manager/dossiers_controller_spec.rb b/spec/controllers/manager/dossiers_controller_spec.rb deleted file mode 100644 index d70870371..000000000 --- a/spec/controllers/manager/dossiers_controller_spec.rb +++ /dev/null @@ -1,47 +0,0 @@ -describe Manager::DossiersController, type: :controller do - let(:super_admin) { create :super_admin } - let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier) } - let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) } - - before { sign_in super_admin } - - describe '#discard' do - let(:dossier) { create(:dossier, :en_construction) } - - before do - post :discard, params: { id: dossier.id } - dossier.reload - end - - it { expect(dossier.discarded?).to be_truthy } - it { expect(deleted_dossier).not_to be_nil } - it { expect(deleted_dossier.reason).to eq("manager_request") } - it { expect(operations).to eq([:supprimer]) } - end - - describe '#restore' do - let(:dossier) { create(:dossier, :en_construction, :with_individual) } - - before do - dossier.discard_and_keep_track!(super_admin, :manager_request) - - post :restore, params: { id: dossier.id } - dossier.reload - end - - it { expect(dossier.kept?).to be_truthy } - it { expect(deleted_dossier).to be_nil } - it { expect(operations).to eq([:supprimer, :restaurer]) } - end - - describe '#repasser_en_instruction' do - let(:dossier) { create(:dossier, :accepte) } - - before do - post :repasser_en_instruction, params: { id: dossier.id } - dossier.reload - end - - it { expect(dossier.en_instruction?).to be_truthy } - end -end diff --git a/spec/controllers/manager/procedures_controller_spec.rb b/spec/controllers/manager/procedures_controller_spec.rb index ad27b784a..5834190fd 100644 --- a/spec/controllers/manager/procedures_controller_spec.rb +++ b/spec/controllers/manager/procedures_controller_spec.rb @@ -27,10 +27,8 @@ describe Manager::ProceduresController, type: :controller do end describe '#discard' do - let(:dossier) { create(:dossier, :en_construction) } + let(:dossier) { create(:dossier, :accepte) } let(:procedure) { dossier.procedure } - let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier.id) } - let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) } before do post :discard, params: { id: procedure.id } @@ -39,17 +37,12 @@ describe Manager::ProceduresController, type: :controller do end it { expect(procedure.discarded?).to be_truthy } - it { expect(dossier.discarded?).to be_truthy } - it { expect(deleted_dossier).not_to be_nil } - it { expect(deleted_dossier.reason).to eq("procedure_removed") } - it { expect(operations).to eq([:supprimer]) } + it { expect(dossier.hidden_by_administration?).to be_truthy } end describe '#restore' do - let(:dossier) { create(:dossier, :en_construction, :with_individual) } + let(:dossier) { create(:dossier, :accepte, :with_individual) } let(:procedure) { dossier.procedure } - let(:deleted_dossier) { DeletedDossier.find_by(dossier_id: dossier.id) } - let(:operations) { dossier.dossier_operation_logs.map(&:operation).map(&:to_sym) } before do procedure.discard_and_keep_track!(super_admin) @@ -59,9 +52,7 @@ describe Manager::ProceduresController, type: :controller do end it { expect(procedure.kept?).to be_truthy } - it { expect(dossier.kept?).to be_truthy } - it { expect(deleted_dossier).to be_nil } - it { expect(operations).to eq([:supprimer, :restaurer]) } + it { expect(dossier.hidden_by_administration?).to be_falsey } end describe '#index' do diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 42a5ef2a9..1ca7ecb43 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -1327,29 +1327,31 @@ describe Dossier do end describe 'discarded_brouillon_expired and discarded_en_construction_expired' do - let(:super_admin) { create(:super_admin) } + let(:administrateur) { create(:administrateur) } + let(:user) { administrateur.user } + let(:reason) { DeletedDossier.reasons.fetch(:user_request) } before do - create(:dossier) - create(:dossier, :en_construction) - create(:dossier).discard! - create(:dossier, :en_construction).discard! + create(:dossier, user: user) + create(:dossier, :en_construction, user: user) + create(:dossier, user: user).discard_and_keep_track!(user, reason) + create(:dossier, :en_construction, user: user).discard_and_keep_track!(user, reason) Timecop.travel(2.months.ago) do - create(:dossier).discard! - create(:dossier, :en_construction).discard! + create(:dossier, user: user).discard_and_keep_track!(user, reason) + create(:dossier, :en_construction, user: user).discard_and_keep_track!(user, reason) - create(:dossier).procedure.discard_and_keep_track!(super_admin) - create(:dossier, :en_construction).procedure.discard_and_keep_track!(super_admin) + create(:dossier, user: user).procedure.discard_and_keep_track!(administrateur) + create(:dossier, :en_construction, user: user).procedure.discard_and_keep_track!(administrateur) end Timecop.travel(1.week.ago) do - create(:dossier).discard! - create(:dossier, :en_construction).discard! + create(:dossier, user: user).discard_and_keep_track!(user, reason) + create(:dossier, :en_construction, user: user).discard_and_keep_track!(user, reason) end end - it { expect(Dossier.discarded_brouillon_expired.count).to eq(3) } - it { expect(Dossier.discarded_en_construction_expired.count).to eq(3) } + it { expect(Dossier.discarded_brouillon_expired.count).to eq(2) } + it { expect(Dossier.discarded_en_construction_expired.count).to eq(0) } end describe "discarded procedure dossier should be able to access it's procedure" do