Merge pull request #514 from sgmap/430_admin_can_delete_procedure

#430 admin can delete procedure
This commit is contained in:
Mathieu Magnin 2017-07-04 15:07:46 +02:00 committed by GitHub
commit 6357a112c6
12 changed files with 124 additions and 5 deletions

View file

@ -42,6 +42,14 @@ class Admin::ProceduresController < AdminController
def edit def edit
end end
def hide
procedure = Procedure.find(params[:id])
procedure.hide!
flash.notice = "Procédure supprimée, en cas d'erreur contactez nous : contact@tps.apientreprise.fr"
redirect_to admin_procedures_draft_path
end
def destroy def destroy
procedure = Procedure.find(params[:id]) procedure = Procedure.find(params[:id])

View file

@ -42,6 +42,7 @@ class Dossier < ActiveRecord::Base
belongs_to :procedure belongs_to :procedure
belongs_to :user belongs_to :user
default_scope { where(hidden_at: nil) }
scope :state_brouillon, -> { where(state: BROUILLON) } scope :state_brouillon, -> { where(state: BROUILLON) }
scope :state_not_brouillon, -> { where.not(state: BROUILLON) } scope :state_not_brouillon, -> { where.not(state: BROUILLON) }
scope :state_nouveaux, -> { where(state: NOUVEAUX) } scope :state_nouveaux, -> { where(state: NOUVEAUX) }

View file

@ -20,9 +20,13 @@ class Gestionnaire < ActiveRecord::Base
include CredentialsSyncableConcern include CredentialsSyncableConcern
def procedure_filter def procedure_filter
return nil unless assign_to.pluck(:procedure_id).include?(self[:procedure_filter]) procedure_id = self[:procedure_filter]
if procedures.find_by(id: procedure_id).present?
self[:procedure_filter] procedure_id
else
self.update_column(:procedure_filter, nil)
nil
end
end end
def can_view_dossier?(dossier_id) def can_view_dossier?(dossier_id)

View file

@ -31,12 +31,19 @@ class Procedure < ActiveRecord::Base
mount_uploader :logo, ProcedureLogoUploader mount_uploader :logo, ProcedureLogoUploader
default_scope { where(hidden_at: nil) }
scope :not_archived, -> { where(archived: false) } scope :not_archived, -> { where(archived: false) }
scope :by_libelle, -> { order(libelle: :asc) } scope :by_libelle, -> { order(libelle: :asc) }
validates :libelle, presence: true, allow_blank: false, allow_nil: false validates :libelle, presence: true, allow_blank: false, allow_nil: false
validates :description, presence: true, allow_blank: false, allow_nil: false validates :description, presence: true, allow_blank: false, allow_nil: false
def hide!
now = DateTime.now
self.update_attributes(hidden_at: now)
self.dossiers.update_all(hidden_at: now)
end
def path def path
procedure_path.path unless procedure_path.nil? procedure_path.path unless procedure_path.nil?
end end

View file

@ -129,3 +129,20 @@
Aucune statistique pour le moment Aucune statistique pour le moment
- else - else
= pie_chart @facade.dossiers_for_pie_highchart = pie_chart @facade.dossiers_for_pie_highchart
- if @facade.procedure.published? || @facade.procedure.archived?
%h3 Supprimer la procédure
.alert.alert-danger
%p
Attention : la suppression d'une procédure est définitive.
- dossiers_count = @facade.procedure.dossiers.count
- if dossiers_count > 0
%p
= pluralize(dossiers_count, "dossier est rattaché", "dossiers sont rattachés")
à cette procédure, la suppression de cette procédure entrainera également leur suppression.
%p.text-right
= link_to "J'ai compris, je supprime la procédure",
hide_admin_procedure_path(@facade.procedure),
method: :post,
class: "btn btn-danger",
data: { confirm: "Voulez-vous supprimer la procédure ?", disable_with: "Suppression..." }

View file

@ -114,6 +114,10 @@ Rails.application.routes.draw do
patch 'change_dossier_state' => 'change_dossier_state#change' patch 'change_dossier_state' => 'change_dossier_state#change'
resources :procedures do resources :procedures do
member do
post :hide
end
resources :types_de_champ, only: [:destroy] resources :types_de_champ, only: [:destroy]
resource :types_de_champ, only: [:show, :update] do resource :types_de_champ, only: [:show, :update] do
post '/:index/move_up' => 'types_de_champ#move_up', as: :move_up post '/:index/move_up' => 'types_de_champ#move_up', as: :move_up

View file

@ -0,0 +1,6 @@
class AddHiddenAtToProcedures < ActiveRecord::Migration[5.0]
def change
add_column :procedures, :hidden_at, :datetime
add_index :procedures, :hidden_at
end
end

View file

@ -0,0 +1,6 @@
class AddHiddenAtToDossiers < ActiveRecord::Migration[5.0]
def change
add_column :dossiers, :hidden_at, :datetime
add_index :dossiers, :hidden_at
end
end

View file

@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20170627143701) do ActiveRecord::Schema.define(version: 20170627144046) do
# These are extensions that must be enabled in order to support this database # These are extensions that must be enabled in order to support this database
enable_extension "plpgsql" enable_extension "plpgsql"
@ -175,6 +175,8 @@ ActiveRecord::Schema.define(version: 20170627143701) do
t.datetime "received_at" t.datetime "received_at"
t.datetime "processed_at" t.datetime "processed_at"
t.text "motivation" t.text "motivation"
t.datetime "hidden_at"
t.index ["hidden_at"], name: "index_dossiers_on_hidden_at", using: :btree
t.index ["procedure_id"], name: "index_dossiers_on_procedure_id", using: :btree t.index ["procedure_id"], name: "index_dossiers_on_procedure_id", using: :btree
t.index ["user_id"], name: "index_dossiers_on_user_id", using: :btree t.index ["user_id"], name: "index_dossiers_on_user_id", using: :btree
end end
@ -381,7 +383,9 @@ ActiveRecord::Schema.define(version: 20170627143701) do
t.string "lien_notice" t.string "lien_notice"
t.boolean "for_individual", default: false t.boolean "for_individual", default: false
t.boolean "individual_with_siret", default: false t.boolean "individual_with_siret", default: false
t.datetime "auto_archive_on" t.date "auto_archive_on"
t.datetime "hidden_at"
t.index ["hidden_at"], name: "index_procedures_on_hidden_at", using: :btree
t.datetime "published_at" t.datetime "published_at"
t.datetime "archived_at" t.datetime "archived_at"
end end

View file

@ -928,4 +928,21 @@ describe Dossier do
end end
end end
end end
describe ".default_scope" do
let!(:dossier) { create(:dossier, hidden_at: hidden_at) }
context "when dossier is not hidden" do
let(:hidden_at) { nil }
it { expect(Dossier.count).to eq(1) }
it { expect(Dossier.all).to include(dossier) }
end
context "when dossier is hidden" do
let(:hidden_at) { 1.day.ago }
it { expect(Dossier.count).to eq(0) }
end
end
end end

View file

@ -260,6 +260,15 @@ describe Gestionnaire, type: :model do
it { expect(AssignTo.where(gestionnaire: gestionnaire, procedure: procedure_3).count).to eq 0 } it { expect(AssignTo.where(gestionnaire: gestionnaire, procedure: procedure_3).count).to eq 0 }
it { is_expected.to be_nil } it { is_expected.to be_nil }
end end
context "when procedure is hidden clear procedure_filter" do
before do
gestionnaire.update_column :procedure_filter, procedure_3.id
procedure_3.hide!
end
it { is_expected.to be_nil }
end
end end
end end

View file

@ -302,4 +302,40 @@ describe Procedure do
it { is_expected.to eq('a-long-libelle-with-accents-blabla-coucou-hello-un') } it { is_expected.to eq('a-long-libelle-with-accents-blabla-coucou-hello-un') }
end end
describe ".default_scope" do
let!(:procedure) { create(:procedure, hidden_at: hidden_at) }
context "when hidden_at is nil" do
let(:hidden_at) { nil }
it { expect(Procedure.count).to eq(1) }
it { expect(Procedure.all).to include(procedure) }
end
context "when hidden_at is not nil" do
let(:hidden_at) { 2.days.ago }
it { expect(Procedure.count).to eq(0) }
it { expect { Procedure.find(procedure.id) }.to raise_error(ActiveRecord::RecordNotFound) }
end
end
describe "#hide!" do
let(:procedure) { create(:procedure) }
let!(:dossier) { create(:dossier, procedure: procedure) }
let!(:dossier2) { create(:dossier, procedure: procedure) }
it { expect(Dossier.count).to eq(2) }
it { expect(Dossier.all).to include(dossier, dossier2) }
context "when hidding procedure" do
before do
procedure.hide!
end
it { expect(procedure.dossiers.count).to eq(0) }
it { expect(Dossier.count).to eq(0) }
end
end
end end