Merge pull request #6810 from tchak/feat-demarche-only-if-no-dossiers
feat(procedure): only purge procedures without dossiers
This commit is contained in:
commit
dbac42665b
9 changed files with 61 additions and 140 deletions
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -26,17 +26,6 @@ as well as a link to its edit page.
|
|||
(Supprimé)
|
||||
<% end %>
|
||||
</h1>
|
||||
|
||||
<div>
|
||||
<% 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 %>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="main-content__body">
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue