diff --git a/app/controllers/api/settings_controller.rb b/app/controllers/api/settings_controller.rb index d792c94c8..7f64a2aee 100644 --- a/app/controllers/api/settings_controller.rb +++ b/app/controllers/api/settings_controller.rb @@ -11,7 +11,7 @@ class API::SettingsController < API::ApiController def update authorize Setting @setting = Setting.find_or_initialize_by(name: params[:name]) - if @setting.save && @setting.history_values.create(value: setting_params[:value], user: current_user) + if @setting.save && @setting.history_values.create(value: setting_params[:value], invoicing_profile: current_user.invoicing_profile) render status: :ok else render json: @setting.errors.full_messages, status: :unprocessable_entity diff --git a/app/models/history_value.rb b/app/models/history_value.rb index 389aa530e..3e3a60e8e 100644 --- a/app/models/history_value.rb +++ b/app/models/history_value.rb @@ -5,7 +5,7 @@ require 'checksum' # Setting values, kept history of modifications class HistoryValue < ActiveRecord::Base belongs_to :setting - belongs_to :user + belongs_to :invoicing_profile after_create :chain_record @@ -18,6 +18,10 @@ class HistoryValue < ActiveRecord::Base footprint == compute_footprint end + def user + invoicing_profile.user + end + private def compute_footprint diff --git a/app/models/invoicing_profile.rb b/app/models/invoicing_profile.rb index e574af6cd..1258f24d5 100644 --- a/app/models/invoicing_profile.rb +++ b/app/models/invoicing_profile.rb @@ -9,6 +9,8 @@ class InvoicingProfile < ActiveRecord::Base has_one :wallet, dependent: :destroy has_many :wallet_transactions, dependent: :destroy + has_many :history_values, dependent: :nullify + after_create :create_a_wallet diff --git a/app/models/setting.rb b/app/models/setting.rb index 2290e08af..8e07e6535 100644 --- a/app/models/setting.rb +++ b/app/models/setting.rb @@ -68,6 +68,6 @@ class Setting < ActiveRecord::Base def value=(val) admin = User.admins.first - save && history_values.create(user: admin, value: val) + save && history_values.create(invoicing_profile: admin.invoicing_profile, value: val) end end diff --git a/app/models/user.rb b/app/models/user.rb index 27330b046..574b4c9b7 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -54,8 +54,6 @@ class User < ActiveRecord::Base has_many :exports, dependent: :destroy - has_many :history_values, dependent: :nullify - # fix for create admin user before_save do email&.downcase! diff --git a/app/views/api/settings/show.json.jbuilder b/app/views/api/settings/show.json.jbuilder index dd9a8472d..e93ed0bb1 100644 --- a/app/views/api/settings/show.json.jbuilder +++ b/app/views/api/settings/show.json.jbuilder @@ -3,10 +3,10 @@ json.setting do if @show_history json.history @setting.history_values do |value| json.extract! value, :id, :value, :created_at - unless value.user_id.nil? + unless value.invoicing_profile.nil? json.user do - json.id value.user_id - json.name "#{value.user.first_name} #{value.user.last_name}" + json.id value.invoicing_profile.user_id + json.name value.invoicing_profile.full_name end end end diff --git a/db/migrate/20190603140740_add_invoicing_profile_to_history_value.rb b/db/migrate/20190603140740_add_invoicing_profile_to_history_value.rb new file mode 100644 index 000000000..6b5e004fc --- /dev/null +++ b/db/migrate/20190603140740_add_invoicing_profile_to_history_value.rb @@ -0,0 +1,5 @@ +class AddInvoicingProfileToHistoryValue < ActiveRecord::Migration + def change + add_reference :history_values, :invoicing_profile, index: true, foreign_key: true + end +end diff --git a/db/migrate/20190603140823_migrate_history_value_to_invoicing_profile.rb b/db/migrate/20190603140823_migrate_history_value_to_invoicing_profile.rb new file mode 100644 index 000000000..e6e60ee3c --- /dev/null +++ b/db/migrate/20190603140823_migrate_history_value_to_invoicing_profile.rb @@ -0,0 +1,19 @@ +class MigrateHistoryValueToInvoicingProfile < ActiveRecord::Migration + def up + HistoryValue.all.each do |hv| + user = User.find(hv.user_id) + hv.update_attributes( + invoicing_profile_id: user.invoicing_profile.id + ) + end + end + + def down + HistoryValue.all.each do |hv| + invoicing_profile = User.find(hv.invoicing_profile_id) + hv.update_attributes( + user_id: invoicing_profile.user_id + ) + end + end +end diff --git a/db/migrate/20190603141109_remove_user_id_from_history_value.rb b/db/migrate/20190603141109_remove_user_id_from_history_value.rb new file mode 100644 index 000000000..685b884a0 --- /dev/null +++ b/db/migrate/20190603141109_remove_user_id_from_history_value.rb @@ -0,0 +1,5 @@ +class RemoveUserIdFromHistoryValue < ActiveRecord::Migration + def change + remove_reference :history_values, :user, index: true, foreign_key: true + end +end diff --git a/db/schema.rb b/db/schema.rb index c066a8056..1e2c1d040 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,12 +11,12 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20190603130038) do +ActiveRecord::Schema.define(version: 20190603141109) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" - enable_extension "unaccent" enable_extension "pg_trgm" + enable_extension "unaccent" create_table "abuses", force: :cascade do |t| t.integer "signaled_id" @@ -44,14 +44,14 @@ ActiveRecord::Schema.define(version: 20190603130038) do end create_table "addresses", force: :cascade do |t| - t.string "address" - t.string "street_number" - t.string "route" - t.string "locality" - t.string "country" - t.string "postal_code" + t.string "address", limit: 255 + t.string "street_number", limit: 255 + t.string "route", limit: 255 + t.string "locality", limit: 255 + t.string "country", limit: 255 + t.string "postal_code", limit: 255 t.integer "placeable_id" - t.string "placeable_type" + t.string "placeable_type", limit: 255 t.datetime "created_at" t.datetime "updated_at" end @@ -67,9 +67,9 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "assets", force: :cascade do |t| t.integer "viewable_id" - t.string "viewable_type" - t.string "attachment" - t.string "type" + t.string "viewable_type", limit: 255 + t.string "attachment", limit: 255 + t.string "type", limit: 255 t.datetime "created_at" t.datetime "updated_at" end @@ -86,12 +86,12 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "availabilities", force: :cascade do |t| t.datetime "start_at" t.datetime "end_at" - t.string "available_type" + t.string "available_type", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.integer "nb_total_places" - t.boolean "destroying", default: false - t.boolean "lock", default: false + t.boolean "destroying", default: false + t.boolean "lock", default: false end create_table "availability_tags", force: :cascade do |t| @@ -105,7 +105,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "availability_tags", ["tag_id"], name: "index_availability_tags_on_tag_id", using: :btree create_table "categories", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.string "slug" @@ -114,7 +114,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "categories", ["slug"], name: "index_categories_on_slug", unique: true, using: :btree create_table "components", force: :cascade do |t| - t.string "name", null: false + t.string "name", limit: 255, null: false end create_table "coupons", force: :cascade do |t| @@ -132,7 +132,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "credits", force: :cascade do |t| t.integer "creditable_id" - t.string "creditable_type" + t.string "creditable_type", limit: 255 t.integer "plan_id" t.integer "hours" t.datetime "created_at" @@ -173,7 +173,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "event_themes", ["slug"], name: "index_event_themes_on_slug", unique: true, using: :btree create_table "events", force: :cascade do |t| - t.string "title" + t.string "title", limit: 255 t.text "description" t.datetime "created_at" t.datetime "updated_at" @@ -211,10 +211,10 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "exports", ["user_id"], name: "index_exports_on_user_id", using: :btree create_table "friendly_id_slugs", force: :cascade do |t| - t.string "slug", null: false - t.integer "sluggable_id", null: false + t.string "slug", limit: 255, null: false + t.integer "sluggable_id", null: false t.string "sluggable_type", limit: 50 - t.string "scope" + t.string "scope", limit: 255 t.datetime "created_at" end @@ -224,10 +224,10 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "friendly_id_slugs", ["sluggable_type"], name: "index_friendly_id_slugs_on_sluggable_type", using: :btree create_table "groups", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "slug" + t.string "slug", limit: 255 t.boolean "disabled" end @@ -235,19 +235,19 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "history_values", force: :cascade do |t| t.integer "setting_id" - t.integer "user_id" t.string "value" - t.datetime "created_at", null: false - t.datetime "updated_at", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false t.string "footprint" + t.integer "invoicing_profile_id" end + add_index "history_values", ["invoicing_profile_id"], name: "index_history_values_on_invoicing_profile_id", using: :btree add_index "history_values", ["setting_id"], name: "index_history_values_on_setting_id", using: :btree - add_index "history_values", ["user_id"], name: "index_history_values_on_user_id", using: :btree create_table "invoice_items", force: :cascade do |t| t.integer "invoice_id" - t.string "stp_invoice_item_id" + t.string "stp_invoice_item_id", limit: 255 t.integer "amount" t.datetime "created_at" t.datetime "updated_at" @@ -261,16 +261,16 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "invoices", force: :cascade do |t| t.integer "invoiced_id" - t.string "invoiced_type" - t.string "stp_invoice_id" + t.string "invoiced_type", limit: 255 + t.string "stp_invoice_id", limit: 255 t.integer "total" t.datetime "created_at" t.datetime "updated_at" - t.string "reference" - t.string "avoir_mode" + t.string "reference", limit: 255 + t.string "avoir_mode", limit: 255 t.datetime "avoir_date" t.integer "invoice_id" - t.string "type" + t.string "type", limit: 255 t.boolean "subscription_to_expire" t.text "description" t.integer "wallet_amount" @@ -299,17 +299,17 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "invoicing_profiles", ["user_id"], name: "index_invoicing_profiles_on_user_id", using: :btree create_table "licences", force: :cascade do |t| - t.string "name", null: false + t.string "name", limit: 255, null: false t.text "description" end create_table "machines", force: :cascade do |t| - t.string "name", null: false + t.string "name", limit: 255, null: false t.text "description" t.text "spec" t.datetime "created_at" t.datetime "updated_at" - t.string "slug" + t.string "slug", limit: 255 t.boolean "disabled" end @@ -326,14 +326,14 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "notifications", force: :cascade do |t| t.integer "receiver_id" t.integer "attached_object_id" - t.string "attached_object_type" + t.string "attached_object_type", limit: 255 t.integer "notification_type_id" - t.boolean "is_read", default: false + t.boolean "is_read", default: false t.datetime "created_at" t.datetime "updated_at" t.string "receiver_type" - t.boolean "is_send", default: false - t.jsonb "meta_data", default: {} + t.boolean "is_send", default: false + t.jsonb "meta_data", default: {} end add_index "notifications", ["notification_type_id"], name: "index_notifications_on_notification_type_id", using: :btree @@ -402,20 +402,20 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "organizations", ["invoicing_profile_id"], name: "index_organizations_on_invoicing_profile_id", using: :btree create_table "plans", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.integer "amount" - t.string "interval" + t.string "interval", limit: 255 t.integer "group_id" - t.string "stp_plan_id" + t.string "stp_plan_id", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.integer "training_credit_nb", default: 0 - t.boolean "is_rolling", default: true + t.integer "training_credit_nb", default: 0 + t.boolean "is_rolling", default: true t.text "description" t.string "type" t.string "base_name" - t.integer "ui_weight", default: 0 - t.integer "interval_count", default: 1 + t.integer "ui_weight", default: 0 + t.integer "interval_count", default: 1 t.string "slug" t.boolean "disabled" end @@ -445,11 +445,11 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "profiles", force: :cascade do |t| t.integer "user_id" - t.string "first_name" - t.string "last_name" + t.string "first_name", limit: 255 + t.string "last_name", limit: 255 t.boolean "gender" t.date "birthday" - t.string "phone" + t.string "phone", limit: 255 t.text "interest" t.text "software_mastered" t.datetime "created_at" @@ -479,7 +479,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do t.integer "project_id" t.datetime "created_at" t.datetime "updated_at" - t.string "title" + t.string "title", limit: 255 t.integer "step_nb" end @@ -490,27 +490,27 @@ ActiveRecord::Schema.define(version: 20190603130038) do t.integer "user_id" t.datetime "created_at" t.datetime "updated_at" - t.boolean "is_valid", default: false - t.string "valid_token" + t.boolean "is_valid", default: false + t.string "valid_token", limit: 255 end add_index "project_users", ["project_id"], name: "index_project_users_on_project_id", using: :btree add_index "project_users", ["user_id"], name: "index_project_users_on_user_id", using: :btree create_table "projects", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.text "description" t.datetime "created_at" t.datetime "updated_at" t.integer "author_id" t.text "tags" t.integer "licence_id" - t.string "state" - t.string "slug" + t.string "state", limit: 255 + t.string "slug", limit: 255 t.datetime "published_at" end - add_index "projects", ["slug"], name: "index_projects_on_slug", unique: true, using: :btree + add_index "projects", ["slug"], name: "index_projects_on_slug", using: :btree create_table "projects_components", force: :cascade do |t| t.integer "project_id" @@ -550,19 +550,19 @@ ActiveRecord::Schema.define(version: 20190603130038) do t.datetime "created_at" t.datetime "updated_at" t.integer "reservable_id" - t.string "reservable_type" - t.string "stp_invoice_id" + t.string "reservable_type", limit: 255 + t.string "stp_invoice_id", limit: 255 t.integer "nb_reserve_places" end - add_index "reservations", ["reservable_type", "reservable_id"], name: "index_reservations_on_reservable_type_and_reservable_id", using: :btree + add_index "reservations", ["reservable_id", "reservable_type"], name: "index_reservations_on_reservable_id_and_reservable_type", using: :btree add_index "reservations", ["stp_invoice_id"], name: "index_reservations_on_stp_invoice_id", using: :btree add_index "reservations", ["user_id"], name: "index_reservations_on_user_id", using: :btree create_table "roles", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.integer "resource_id" - t.string "resource_type" + t.string "resource_type", limit: 255 t.datetime "created_at" t.datetime "updated_at" end @@ -636,18 +636,18 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "statistic_fields", force: :cascade do |t| t.integer "statistic_index_id" - t.string "key" - t.string "label" + t.string "key", limit: 255 + t.string "label", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.string "data_type" + t.string "data_type", limit: 255 end add_index "statistic_fields", ["statistic_index_id"], name: "index_statistic_fields_on_statistic_index_id", using: :btree create_table "statistic_graphs", force: :cascade do |t| t.integer "statistic_index_id" - t.string "chart_type" + t.string "chart_type", limit: 255 t.integer "limit" t.datetime "created_at" t.datetime "updated_at" @@ -656,17 +656,17 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "statistic_graphs", ["statistic_index_id"], name: "index_statistic_graphs_on_statistic_index_id", using: :btree create_table "statistic_indices", force: :cascade do |t| - t.string "es_type_key" - t.string "label" + t.string "es_type_key", limit: 255 + t.string "label", limit: 255 t.datetime "created_at" t.datetime "updated_at" - t.boolean "table", default: true - t.boolean "ca", default: true + t.boolean "table", default: true + t.boolean "ca", default: true end create_table "statistic_sub_types", force: :cascade do |t| - t.string "key" - t.string "label" + t.string "key", limit: 255 + t.string "label", limit: 255 t.datetime "created_at" t.datetime "updated_at" end @@ -683,8 +683,8 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "statistic_types", force: :cascade do |t| t.integer "statistic_index_id" - t.string "key" - t.string "label" + t.string "key", limit: 255 + t.string "label", limit: 255 t.boolean "graph" t.datetime "created_at" t.datetime "updated_at" @@ -702,7 +702,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do create_table "subscriptions", force: :cascade do |t| t.integer "plan_id" t.integer "user_id" - t.string "stp_subscription_id" + t.string "stp_subscription_id", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.datetime "expiration_date" @@ -721,7 +721,7 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "tags", ["name"], name: "index_tags_on_name", unique: true, using: :btree create_table "themes", force: :cascade do |t| - t.string "name", null: false + t.string "name", limit: 255, null: false end create_table "tickets", force: :cascade do |t| @@ -736,13 +736,13 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "tickets", ["reservation_id"], name: "index_tickets_on_reservation_id", using: :btree create_table "trainings", force: :cascade do |t| - t.string "name" + t.string "name", limit: 255 t.datetime "created_at" t.datetime "updated_at" t.integer "nb_total_places" - t.string "slug" + t.string "slug", limit: 255 t.text "description" - t.boolean "public_page", default: true + t.boolean "public_page", default: true t.boolean "disabled" end @@ -798,31 +798,31 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_index "user_trainings", ["user_id"], name: "index_user_trainings_on_user_id", using: :btree create_table "users", force: :cascade do |t| - t.string "email", default: "", null: false - t.string "encrypted_password", default: "", null: false - t.string "reset_password_token" + t.string "email", limit: 255, default: "", null: false + t.string "encrypted_password", limit: 255, default: "", null: false + t.string "reset_password_token", limit: 255 t.datetime "reset_password_sent_at" t.datetime "remember_created_at" - t.integer "sign_in_count", default: 0, null: false + t.integer "sign_in_count", default: 0, null: false t.datetime "current_sign_in_at" t.datetime "last_sign_in_at" - t.string "current_sign_in_ip" - t.string "last_sign_in_ip" - t.string "confirmation_token" + t.string "current_sign_in_ip", limit: 255 + t.string "last_sign_in_ip", limit: 255 + t.string "confirmation_token", limit: 255 t.datetime "confirmed_at" t.datetime "confirmation_sent_at" - t.string "unconfirmed_email" - t.integer "failed_attempts", default: 0, null: false - t.string "unlock_token" + t.string "unconfirmed_email", limit: 255 + t.integer "failed_attempts", default: 0, null: false + t.string "unlock_token", limit: 255 t.datetime "locked_at" t.datetime "created_at" t.datetime "updated_at" - t.boolean "is_allow_contact", default: true + t.boolean "is_allow_contact", default: true t.integer "group_id" - t.string "stp_customer_id" - t.string "username" - t.string "slug" - t.boolean "is_active", default: true + t.string "stp_customer_id", limit: 255 + t.string "username", limit: 255 + t.string "slug", limit: 255 + t.boolean "is_active", default: true t.string "provider" t.string "uid" t.string "auth_token" @@ -892,8 +892,8 @@ ActiveRecord::Schema.define(version: 20190603130038) do add_foreign_key "events_event_themes", "event_themes" add_foreign_key "events_event_themes", "events" add_foreign_key "exports", "users" + add_foreign_key "history_values", "invoicing_profiles" add_foreign_key "history_values", "settings" - add_foreign_key "history_values", "users" add_foreign_key "invoices", "coupons" add_foreign_key "invoices", "invoicing_profiles" add_foreign_key "invoices", "users", column: "operator_id" diff --git a/test/fixtures/history_values.yml b/test/fixtures/history_values.yml index 7565e8ee6..0d71747be 100644 --- a/test/fixtures/history_values.yml +++ b/test/fixtures/history_values.yml @@ -2,7 +2,7 @@ value_history_1: id: 1 setting_id: 1 - user_id: 1 + invoicing_profile_id: 1 value: '

Le Fab Lab de La Casemate est un atelier de fabrication numérique où l’on peut utiliser des machines de découpe, des imprimantes 3D,… permettant de travailler sur des matériaux variés @@ -22,7 +22,7 @@ value_history_1: value_history_2: id: 2 setting_id: 2 - user_id: 1 + invoicing_profile_id: 1 value: Imaginer, Fabriquer,
Partager au Fab Lab
de La Casemate created_at: 2018-12-17 11:23:01.565164000 Z updated_at: 2018-12-17 11:23:01.565164000 Z @@ -31,7 +31,7 @@ value_history_2: value_history_3: id: 3 setting_id: 3 - user_id: 1 + invoicing_profile_id: 1 value: "

Manager Fab Lab :
jean-michel.molenaar@lacasemate.fr
\
Responsable médiation :
catherine.demarcq@lacasemate.fr
Animateur scientifique :
diego.scharager@lacasemate.fr


Règle sur la date de début des abonnements