From f025e08336d0d25390304512b3d97a38d8df3151 Mon Sep 17 00:00:00 2001 From: Kara Diaby Date: Sun, 29 Sep 2024 17:11:10 +0200 Subject: [PATCH] Ajoute la table procedure tags et la liaison entre procedure et procedures tags --- .../manager/procedure_tags_controller.rb | 6 ++ app/dashboards/procedure_tag_dashboard.rb | 63 +++++++++++++++++++ app/models/procedure.rb | 1 + app/models/procedure_tag.rb | 7 +++ config/routes.rb | 2 + .../20240929124802_create_procedure_tags.rb | 12 ++++ ...te_join_table_procedures_procedure_tags.rb | 10 +++ db/schema.rb | 17 ++++- 8 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 app/controllers/manager/procedure_tags_controller.rb create mode 100644 app/dashboards/procedure_tag_dashboard.rb create mode 100644 app/models/procedure_tag.rb create mode 100644 db/migrate/20240929124802_create_procedure_tags.rb create mode 100644 db/migrate/20240929141825_create_join_table_procedures_procedure_tags.rb diff --git a/app/controllers/manager/procedure_tags_controller.rb b/app/controllers/manager/procedure_tags_controller.rb new file mode 100644 index 000000000..b314bd71d --- /dev/null +++ b/app/controllers/manager/procedure_tags_controller.rb @@ -0,0 +1,6 @@ +# frozen_string_literal: true + +module Manager + class ProcedureTagsController < Manager::ApplicationController + end +end diff --git a/app/dashboards/procedure_tag_dashboard.rb b/app/dashboards/procedure_tag_dashboard.rb new file mode 100644 index 000000000..0d898a750 --- /dev/null +++ b/app/dashboards/procedure_tag_dashboard.rb @@ -0,0 +1,63 @@ +# frozen_string_literal: true + +require "administrate/base_dashboard" + +class ProcedureTagDashboard < Administrate::BaseDashboard + # ATTRIBUTE_TYPES + # a hash that describes the type of each of the model's fields. + # + # Each different type represents an Administrate::Field object, + # which determines how the attribute is displayed + # on pages throughout the dashboard. + ATTRIBUTE_TYPES = { + id: Field::Number, + name: Field::String, + created_at: Field::DateTime, + updated_at: Field::DateTime + }.freeze + + # COLLECTION_ATTRIBUTES + # an array of attributes that will be displayed on the model's index page. + # + # By default, it's limited to four items to reduce clutter on index pages. + # Feel free to add, remove, or rearrange items. + COLLECTION_ATTRIBUTES = [ + :id, + :name + ].freeze + + # SHOW_PAGE_ATTRIBUTES + # an array of attributes that will be displayed on the model's show page. + SHOW_PAGE_ATTRIBUTES = [ + :id, + :name, + :created_at, + :updated_at + ].freeze + + # FORM_ATTRIBUTES + # an array of attributes that will be displayed + # on the model's form (`new` and `edit`) pages. + FORM_ATTRIBUTES = [ + :name + ].freeze + + # COLLECTION_FILTERS + # a hash that defines filters that can be used while searching via the search + # field of the dashboard. + # + # For example to add an option to search for open resources by typing "open:" + # in the search field: + # + # COLLECTION_FILTERS = { + # open: ->(resources) { resources.where(open: true) } + # }.freeze + COLLECTION_FILTERS = {}.freeze + + # Overwrite this method to customize how procedure tags are displayed + # across all pages of the admin dashboard. + # + def display_resource(procedure_tag) + "ProcedureTag ##{procedure_tag.id}" + end +end diff --git a/app/models/procedure.rb b/app/models/procedure.rb index 10377d4ff..d959e4b39 100644 --- a/app/models/procedure.rb +++ b/app/models/procedure.rb @@ -56,6 +56,7 @@ class Procedure < ApplicationRecord belongs_to :service, optional: true belongs_to :zone, optional: true has_and_belongs_to_many :zones + has_and_belongs_to_many :procedure_tags has_many :bulk_messages, dependent: :destroy diff --git a/app/models/procedure_tag.rb b/app/models/procedure_tag.rb new file mode 100644 index 000000000..37d770b43 --- /dev/null +++ b/app/models/procedure_tag.rb @@ -0,0 +1,7 @@ +# frozen_string_literal: true + +class ProcedureTag < ApplicationRecord + has_and_belongs_to_many :procedures + + validates :name, presence: true, uniqueness: { case_sensitive: false } +end diff --git a/config/routes.rb b/config/routes.rb index d414b1cd5..fc64cd041 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -33,6 +33,8 @@ Rails.application.routes.draw do resources :administrateur_confirmations, only: [:new, :create] end + resources :procedure_tags, only: [:index, :show, :new, :create, :edit, :update, :destroy] + resources :archives, only: [:index, :show] resources :dossiers, only: [:index, :show] do diff --git a/db/migrate/20240929124802_create_procedure_tags.rb b/db/migrate/20240929124802_create_procedure_tags.rb new file mode 100644 index 000000000..96466ba45 --- /dev/null +++ b/db/migrate/20240929124802_create_procedure_tags.rb @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +class CreateProcedureTags < ActiveRecord::Migration[7.0] + def change + create_table :procedure_tags do |t| + t.string :name, null: false + t.timestamps + end + + add_index :procedure_tags, :name, unique: true + end +end diff --git a/db/migrate/20240929141825_create_join_table_procedures_procedure_tags.rb b/db/migrate/20240929141825_create_join_table_procedures_procedure_tags.rb new file mode 100644 index 000000000..5cd970db0 --- /dev/null +++ b/db/migrate/20240929141825_create_join_table_procedures_procedure_tags.rb @@ -0,0 +1,10 @@ +# frozen_string_literal: true + +class CreateJoinTableProceduresProcedureTags < ActiveRecord::Migration[7.0] + def change + create_join_table :procedures, :procedure_tags do |t| + t.index [:procedure_id, :procedure_tag_id], name: 'index_procedures_tags_on_procedure_id_and_tag_id' + t.index [:procedure_tag_id, :procedure_id], name: 'index_procedures_tags_on_tag_id_and_procedure_id' + end + end +end diff --git a/db/schema.rb b/db/schema.rb index e55fcb86b..f8f7dca89 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[7.0].define(version: 2024_09_23_125619) do +ActiveRecord::Schema[7.0].define(version: 2024_09_29_141825) do # These are extensions that must be enabled in order to support this database enable_extension "pg_buffercache" enable_extension "pg_stat_statements" @@ -913,6 +913,21 @@ ActiveRecord::Schema[7.0].define(version: 2024_09_23_125619) do t.index ["procedure_id"], name: "index_procedure_revisions_on_procedure_id" end + create_table "procedure_tags", force: :cascade do |t| + t.datetime "created_at", null: false + t.text "description" + t.string "name", null: false + t.datetime "updated_at", null: false + t.index ["name"], name: "index_procedure_tags_on_name", unique: true + end + + create_table "procedure_tags_procedures", id: false, force: :cascade do |t| + t.bigint "procedure_id", null: false + t.bigint "procedure_tag_id", null: false + t.index ["procedure_id", "procedure_tag_id"], name: "index_procedures_tags_on_procedure_id_and_tag_id" + t.index ["procedure_tag_id", "procedure_id"], name: "index_procedures_tags_on_tag_id_and_procedure_id" + end + create_table "procedures", id: :serial, force: :cascade do |t| t.string "aasm_state", default: "brouillon" t.boolean "accuse_lecture", default: false, null: false