diff --git a/app/controllers/administrateurs/groupe_instructeurs_controller.rb b/app/controllers/administrateurs/groupe_instructeurs_controller.rb index 80b651dab..fefcc681b 100644 --- a/app/controllers/administrateurs/groupe_instructeurs_controller.rb +++ b/app/controllers/administrateurs/groupe_instructeurs_controller.rb @@ -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 diff --git a/app/models/groupe_instructeur.rb b/app/models/groupe_instructeur.rb index 7c8775e82..a1b1da5a2 100644 --- a/app/models/groupe_instructeur.rb +++ b/app/models/groupe_instructeur.rb @@ -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 diff --git a/app/views/administrateurs/_groups_header.haml b/app/views/administrateurs/_groups_header.haml index 547a8d9ed..1ba3897a0 100644 --- a/app/views/administrateurs/_groups_header.haml +++ b/app/views/administrateurs/_groups_header.haml @@ -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' diff --git a/app/views/shared/dossiers/_edit.html.haml b/app/views/shared/dossiers/_edit.html.haml index 3b0002ddd..1d746dffc 100644 --- a/app/views/shared/dossiers/_edit.html.haml +++ b/app/views/shared/dossiers/_edit.html.haml @@ -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| diff --git a/db/migrate/20220620132646_add_column_closed_to_groupe_instructeurs.rb b/db/migrate/20220620132646_add_column_closed_to_groupe_instructeurs.rb new file mode 100644 index 000000000..b60d15746 --- /dev/null +++ b/db/migrate/20220620132646_add_column_closed_to_groupe_instructeurs.rb @@ -0,0 +1,5 @@ +class AddColumnClosedToGroupeInstructeurs < ActiveRecord::Migration[6.1] + def change + add_column :groupe_instructeurs, :closed, :boolean, default: false + end +end diff --git a/db/migrate/20220620141238_add_index_on_procedure_id_and_closed_to_groupe_instructeurs.rb b/db/migrate/20220620141238_add_index_on_procedure_id_and_closed_to_groupe_instructeurs.rb new file mode 100644 index 000000000..c89f95742 --- /dev/null +++ b/db/migrate/20220620141238_add_index_on_procedure_id_and_closed_to_groupe_instructeurs.rb @@ -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 diff --git a/db/schema.rb b/db/schema.rb index 290368762..da55bff30 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -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 diff --git a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb index a19bb76f7..a8ddcc97b 100644 --- a/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb +++ b/spec/controllers/administrateurs/groupe_instructeurs_controller_spec.rb @@ -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 diff --git a/spec/system/routing/full_scenario_spec.rb b/spec/system/routing/full_scenario_spec.rb index 30778b0c6..8af78a284 100644 --- a/spec/system/routing/full_scenario_spec.rb +++ b/spec/system/routing/full_scenario_spec.rb @@ -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"