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