feat(GroupeInstructeurs.closed): add closed option to GroupeInstructeur in order to prevent usagers to submit dossier
This commit is contained in:
parent
511c646b46
commit
ab4d4c83a8
9 changed files with 54 additions and 20 deletions
|
@ -32,16 +32,16 @@ module Administrateurs
|
|||
def create
|
||||
@groupe_instructeur = procedure
|
||||
.groupe_instructeurs
|
||||
.new(label: label, instructeurs: [current_administrateur.instructeur])
|
||||
.new({ instructeurs: [current_administrateur.instructeur] }.merge(groupe_instructeur_params))
|
||||
|
||||
if @groupe_instructeur.save
|
||||
redirect_to admin_procedure_groupe_instructeur_path(procedure, @groupe_instructeur),
|
||||
notice: "Le groupe d’instructeurs « #{label} » a été créé."
|
||||
notice: "Le groupe d’instructeurs « #{@groupe_instructeur.label} » a été créé."
|
||||
else
|
||||
@procedure = procedure
|
||||
@groupes_instructeurs = paginated_groupe_instructeurs
|
||||
|
||||
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
|
||||
flash[:alert] = "le nom « #{@groupe_instructeur.label} » est déjà pris par un autre groupe."
|
||||
render :index
|
||||
end
|
||||
end
|
||||
|
@ -49,28 +49,29 @@ module Administrateurs
|
|||
def update
|
||||
@groupe_instructeur = groupe_instructeur
|
||||
|
||||
if @groupe_instructeur.update(label: label)
|
||||
if @groupe_instructeur.update(groupe_instructeur_params)
|
||||
redirect_to admin_procedure_groupe_instructeur_path(procedure, groupe_instructeur),
|
||||
notice: "Le nom est à présent « #{label} »."
|
||||
notice: "Le nom est à présent « #{@groupe_instructeur.label} »."
|
||||
else
|
||||
@procedure = procedure
|
||||
@instructeurs = paginated_instructeurs
|
||||
@available_instructeur_emails = available_instructeur_emails
|
||||
|
||||
flash[:alert] = "le nom « #{label} » est déjà pris par un autre groupe."
|
||||
flash[:alert] = "le nom « #{@groupe_instructeur.label} » est déjà pris par un autre groupe."
|
||||
render :show
|
||||
end
|
||||
end
|
||||
|
||||
def destroy
|
||||
if !groupe_instructeur.dossiers.empty?
|
||||
@groupe_instructeur = groupe_instructeur
|
||||
|
||||
if !@groupe_instructeur.dossiers.empty?
|
||||
flash[:alert] = "Impossible de supprimer un groupe avec des dossiers. Il faut le réaffecter avant"
|
||||
elsif procedure.groupe_instructeurs.one?
|
||||
flash[:alert] = "Suppression impossible : il doit y avoir au moins un groupe instructeur sur chaque procédure"
|
||||
else
|
||||
label = groupe_instructeur.label
|
||||
groupe_instructeur.destroy!
|
||||
flash[:notice] = "le groupe « #{label} » a été supprimé."
|
||||
@groupe_instructeur.destroy!
|
||||
flash[:notice] = "le groupe « #{@groupe_instructeur.label} » a été supprimé."
|
||||
end
|
||||
redirect_to admin_procedure_groupe_instructeurs_path(procedure)
|
||||
end
|
||||
|
@ -198,7 +199,7 @@ module Administrateurs
|
|||
|
||||
redirect_to admin_procedure_groupe_instructeurs_path(procedure),
|
||||
notice: "Le routage est #{procedure.routing_enabled? ? "activée" : "désactivée"}."
|
||||
end
|
||||
end
|
||||
|
||||
def update_instructeurs_self_management_enabled
|
||||
procedure.update!(instructeurs_self_management_enabled_params)
|
||||
|
@ -288,8 +289,8 @@ module Administrateurs
|
|||
params[:instructeur][:id]
|
||||
end
|
||||
|
||||
def label
|
||||
params[:groupe_instructeur][:label]
|
||||
def groupe_instructeur_params
|
||||
params.require(:groupe_instructeur).permit(:label, :closed)
|
||||
end
|
||||
|
||||
def paginated_groupe_instructeurs
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
# Table name: groupe_instructeurs
|
||||
#
|
||||
# id :bigint not null, primary key
|
||||
# closed :boolean default(FALSE)
|
||||
# label :text not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
|
|
|
@ -6,4 +6,11 @@
|
|||
|
||||
= f.label :label, 'Nom du groupe'
|
||||
= f.text_field :label, placeholder: 'Ville de Bordeaux', required: true
|
||||
= f.submit 'Renommer', class: 'button primary send'
|
||||
.editable-champ.editable-champ-checkbox
|
||||
= f.label :closed, 'Groupe inactif'
|
||||
.notice
|
||||
%p Si cette option est activé les usagers ne pourront plus séléctionné ce groupe d'instructeur
|
||||
= f.check_box :closed
|
||||
|
||||
%br
|
||||
= f.submit 'Valider', class: 'button primary send'
|
||||
|
|
|
@ -28,7 +28,7 @@
|
|||
= dossier.procedure.routing_criteria_name
|
||||
%span.mandatory *
|
||||
= f.select :groupe_instructeur_id,
|
||||
dossier.procedure.groupe_instructeurs.order(:label).map { |gi| [gi.label, gi.id] },
|
||||
dossier.procedure.groupe_instructeurs.where(closed: false).order(:label).map { |gi| [gi.label, gi.id] },
|
||||
{ include_blank: dossier.brouillon? }
|
||||
|
||||
- dossier.champs.each do |champ|
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
class AddColumnClosedToGroupeInstructeurs < ActiveRecord::Migration[6.1]
|
||||
def change
|
||||
add_column :groupe_instructeurs, :closed, :boolean, default: false
|
||||
end
|
||||
end
|
|
@ -0,0 +1,7 @@
|
|||
class AddIndexOnProcedureIdAndClosedToGroupeInstructeurs < ActiveRecord::Migration[6.1]
|
||||
include Database::MigrationHelpers
|
||||
disable_ddl_transaction!
|
||||
def up
|
||||
add_concurrent_index :groupe_instructeurs, [:closed, :procedure_id]
|
||||
end
|
||||
end
|
|
@ -10,7 +10,7 @@
|
|||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2022_06_17_142759) do
|
||||
ActiveRecord::Schema.define(version: 2022_06_20_141238) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "pgcrypto"
|
||||
|
@ -510,10 +510,12 @@ ActiveRecord::Schema.define(version: 2022_06_17_142759) do
|
|||
end
|
||||
|
||||
create_table "groupe_instructeurs", force: :cascade do |t|
|
||||
t.boolean "closed", default: false
|
||||
t.datetime "created_at", null: false
|
||||
t.text "label", null: false
|
||||
t.bigint "procedure_id", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["closed", "procedure_id"], name: "index_groupe_instructeurs_on_closed_and_procedure_id"
|
||||
t.index ["procedure_id", "label"], name: "index_groupe_instructeurs_on_procedure_id_and_label", unique: true
|
||||
t.index ["procedure_id"], name: "index_groupe_instructeurs_on_procedure_id"
|
||||
end
|
||||
|
|
|
@ -188,19 +188,21 @@ describe Administrateurs::GroupeInstructeursController, type: :controller do
|
|||
params: {
|
||||
procedure_id: procedure.id,
|
||||
id: gi_1_1.id,
|
||||
groupe_instructeur: { label: new_name }
|
||||
groupe_instructeur: { label: new_name, closed: true }
|
||||
}
|
||||
gi_1_1.reload
|
||||
end
|
||||
|
||||
it { expect(gi_1_1.reload.label).to eq(new_name) }
|
||||
it { expect(response).to redirect_to(admin_procedure_groupe_instructeur_path(procedure, gi_1_1)) }
|
||||
it { expect(gi_1_1.label).to eq(new_name) }
|
||||
it { expect(gi_1_1.closed).to eq(true) }
|
||||
it { expect(flash.notice).to be_present }
|
||||
|
||||
context 'when the name is already taken' do
|
||||
let!(:gi_1_2) { procedure.groupe_instructeurs.create(label: 'groupe instructeur 2') }
|
||||
let(:new_name) { gi_1_2.label }
|
||||
|
||||
it { expect(gi_1_1.reload.label).not_to eq(new_name) }
|
||||
it { expect(gi_1_1.label).not_to eq(new_name) }
|
||||
it { expect(flash.alert).to be_present }
|
||||
end
|
||||
end
|
||||
|
|
|
@ -25,7 +25,7 @@ describe 'The routing', js: true do
|
|||
# rename defaut groupe to littéraire
|
||||
click_on 'voir'
|
||||
fill_in 'Nom du groupe', with: 'littéraire'
|
||||
click_on 'Renommer'
|
||||
click_on 'Valider'
|
||||
expect(page).to have_text('Le nom est à présent « littéraire ».')
|
||||
expect(page).to have_field('Nom du groupe', with: 'littéraire')
|
||||
|
||||
|
@ -43,6 +43,13 @@ describe 'The routing', js: true do
|
|||
|
||||
superwoman = User.find_by(email: 'superwoman@inst.com').instructeur
|
||||
|
||||
# add inactive groupe
|
||||
click_on 'Groupes d’instructeurs'
|
||||
fill_in 'Ajouter un groupe', with: 'non visible car inactif'
|
||||
click_on 'Ajouter le groupe'
|
||||
check "Groupe inactif"
|
||||
click_on 'Valider'
|
||||
|
||||
# add scientifique groupe
|
||||
click_on 'Groupes d’instructeurs'
|
||||
fill_in 'Ajouter un groupe', with: 'scientifique'
|
||||
|
@ -203,6 +210,8 @@ describe 'The routing', js: true do
|
|||
visit dossiers_path
|
||||
click_on user.dossiers.first.id.to_s
|
||||
click_on "Modifier mon dossier"
|
||||
expect(page).to have_selector("option", text: "scientifique")
|
||||
expect(page).not_to have_selector("option", text: "Groupe inactif")
|
||||
|
||||
select(new_group, from: 'dossier_groupe_instructeur_id')
|
||||
click_on "Enregistrer les modifications du dossier"
|
||||
|
|
Loading…
Reference in a new issue