diff --git a/app/controllers/account_controller.rb b/app/controllers/account_controller.rb index 625452196..b0bd18e5b 100644 --- a/app/controllers/account_controller.rb +++ b/app/controllers/account_controller.rb @@ -23,7 +23,7 @@ class AccountController < ApplicationController def account_params if @account.organization? - params.require(:account).permit(:phone_number, :email_on_debate_comment, :email_on_comment_reply, organization_attributes: [:name]) + params.require(:account).permit(:phone_number, :email_on_debate_comment, :email_on_comment_reply, organization_attributes: [:name, :responsible_name]) else params.require(:account).permit(:username, :email_on_debate_comment, :email_on_comment_reply) end diff --git a/app/controllers/organizations/registrations_controller.rb b/app/controllers/organizations/registrations_controller.rb index 0341ef4ed..c0f69da33 100644 --- a/app/controllers/organizations/registrations_controller.rb +++ b/app/controllers/organizations/registrations_controller.rb @@ -29,7 +29,7 @@ class Organizations::RegistrationsController < Devise::RegistrationsController private def sign_up_params - params.require(:user).permit(:email, :password, :phone_number, :password_confirmation, :captcha, :captcha_key, :terms_of_service, organization_attributes: [:name]) + params.require(:user).permit(:email, :password, :phone_number, :password_confirmation, :captcha, :captcha_key, :terms_of_service, organization_attributes: [:name, :responsible_name]) end end diff --git a/app/controllers/verification_controller.rb b/app/controllers/verification_controller.rb index 6d1945af4..adb3ee345 100644 --- a/app/controllers/verification_controller.rb +++ b/app/controllers/verification_controller.rb @@ -11,7 +11,9 @@ class VerificationController < ApplicationController private def next_step_path(user = current_user) - if user.level_three_verified? + if user.organization? + { path: account_path } + elsif user.level_three_verified? { path: account_path, notice: t('verification.redirect_notices.already_verified') } elsif user.verification_letter_sent? { path: edit_letter_path } diff --git a/app/models/organization.rb b/app/models/organization.rb index 0797849e7..069afc27f 100644 --- a/app/models/organization.rb +++ b/app/models/organization.rb @@ -3,7 +3,9 @@ class Organization < ActiveRecord::Base validates :name, presence: true validates :name, uniqueness: true - validate :validate_name_length + validate :validate_name_length + validates :responsible_name, presence: true + validate :validate_responsible_name_length delegate :email, :phone_number, to: :user @@ -37,6 +39,10 @@ class Organization < ActiveRecord::Base @@name_max_length ||= self.columns.find { |c| c.name == 'name' }.limit || 60 end + def self.responsible_name_max_length + @@responsible_name_max_length ||= self.columns.find { |c| c.name == 'responsible_name' }.limit || 60 + end + private def validate_name_length @@ -46,4 +52,11 @@ class Organization < ActiveRecord::Base validator.validate(self) end + def validate_responsible_name_length + validator = ActiveModel::Validations::LengthValidator.new( + attributes: :responsible_name, + maximum: Organization.responsible_name_max_length) + validator.validate(self) + end + end diff --git a/app/models/user.rb b/app/models/user.rb index 3ddf4df54..723f92458 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -32,7 +32,7 @@ class User < ActiveRecord::Base validates_associated :organization, message: false - accepts_nested_attributes_for :organization + accepts_nested_attributes_for :organization, update_only: true scope :administrators, -> { joins(:administrators) } scope :moderators, -> { joins(:moderator) } diff --git a/app/views/account/show.html.erb b/app/views/account/show.html.erb index d580052e2..e43c424de 100644 --- a/app/views/account/show.html.erb +++ b/app/views/account/show.html.erb @@ -1,22 +1,22 @@
<%= link_to t("account.show.change_credentials_link"), edit_user_registration_path, class: "button radius small secondary right" %> - -
- -
- + <% unless @account.organization? %> +
+ +
+ <% end %>

<%= t("account.show.title") %>

<%= form_for @account, as: :account, url: account_path do |f| %> @@ -33,6 +33,7 @@ <% if @account.organization? %> <%= f.fields_for :organization do |fo| %> <%= fo.text_field :name, autofocus: true, maxlength: Organization.name_max_length, placeholder: t("account.show.organization_name_label") %> + <%= fo.text_field :responsible_name, autofocus: true, maxlength: Organization.responsible_name_max_length, placeholder: t("account.show.organization_responsible_name_placeholder") %> <% end %> <%= f.text_field :phone_number, placeholder: t("account.show.phone_number_label") %> diff --git a/app/views/admin/organizations/index.html.erb b/app/views/admin/organizations/index.html.erb index 51a8dd959..aebcbea54 100644 --- a/app/views/admin/organizations/index.html.erb +++ b/app/views/admin/organizations/index.html.erb @@ -25,6 +25,7 @@ <%= organization.name %> <%= organization.email %> <%= organization.phone_number %> + <%= organization.responsible_name %> <% if organization.verified? %> diff --git a/app/views/admin/organizations/search.html.erb b/app/views/admin/organizations/search.html.erb index 3bc8ccedc..99f2a1f81 100644 --- a/app/views/admin/organizations/search.html.erb +++ b/app/views/admin/organizations/search.html.erb @@ -21,6 +21,7 @@ <%= organization.name %> <%= organization.email %> <%= organization.phone_number %> + <%= organization.responsible_name %> <% if organization.verified? %> diff --git a/app/views/organizations/registrations/new.html.erb b/app/views/organizations/registrations/new.html.erb index 1b95a2d5d..b9bc32f4a 100644 --- a/app/views/organizations/registrations/new.html.erb +++ b/app/views/organizations/registrations/new.html.erb @@ -7,9 +7,12 @@ <%= f.fields_for :organization do |fo| %> <%= fo.text_field :name, autofocus: true, maxlength: Organization.name_max_length, placeholder: t("devise_views.organizations.registrations.new.organization_name_label") %> + <%= fo.label t("devise_views.organizations.registrations.new.responsible_name_label") %> + <%= t("devise_views.organizations.registrations.new.responsible_name_note") %> + <%= fo.text_field :responsible_name, maxlength: Organization.responsible_name_max_length, label: false %> <% end %> - <%= f.email_field :email, placeholder: t("devise_views.organizations.registrations.new.email_label") %> + <%= f.email_field :email, placeholder: t("devise_views.organizations.registrations.new.email_label") %> <%= f.text_field :phone_number, placeholder: t("devise_views.organizations.registrations.new.phone_number_label") %> diff --git a/app/views/organizations/registrations/success.html.erb b/app/views/organizations/registrations/success.html.erb index 89f5c75cc..66a1918e9 100644 --- a/app/views/organizations/registrations/success.html.erb +++ b/app/views/organizations/registrations/success.html.erb @@ -1,15 +1,9 @@ -
-
-
-

<%= t("devise_views.organizations.registrations.success.title") %>

-

<%= t("devise_views.organizations.registrations.success.thank_you_html") %>

-

<%= t("devise_views.organizations.registrations.success.instructions_1_html") %>

-

<%= t("devise_views.organizations.registrations.success.instructions_2_html") %>

-

<%= t("devise_views.organizations.registrations.success.instructions_3_html") %>

-

- <%= link_to t("devise_views.organizations.registrations.success.back_to_index"), - root_path, class: "button radius small margin-top" %> -

-
-
-
+

<%= t("devise_views.organizations.registrations.success.title") %>

+

<%= t("devise_views.organizations.registrations.success.thank_you_html") %>

+

<%= t("devise_views.organizations.registrations.success.instructions_1_html") %>

+

<%= t("devise_views.organizations.registrations.success.instructions_2_html") %>

+

<%= t("devise_views.organizations.registrations.success.instructions_3_html") %>

+

+ <%= link_to t("devise_views.organizations.registrations.success.back_to_index"), + root_path, class: "button radius small margin-top expand" %> +

diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index 94b1fa0c9..7967520e9 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -25,3 +25,4 @@ en: official_level: Official level organization: name: Organization name + responsible_name: Person in charge diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index f566026de..695c72df6 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -25,3 +25,4 @@ es: official_level: Nivel del cargo organization: name: Nombre de organización + responsible_name: Persona responsable del colectivo diff --git a/config/locales/devise_views.en.yml b/config/locales/devise_views.en.yml index 632caf3a9..39136e18a 100644 --- a/config/locales/devise_views.en.yml +++ b/config/locales/devise_views.en.yml @@ -74,6 +74,8 @@ en: new: title: "Sign up as organization / collective" organization_name_label: "Organization name" + responsible_name_label: "Name and surname of the person in charge" + responsible_name_note: "The responsible representative of the organization" email_label: "Email" password_label: "Password" phone_number_label: "Phone number" diff --git a/config/locales/devise_views.es.yml b/config/locales/devise_views.es.yml index 970be1ea8..54e23911c 100644 --- a/config/locales/devise_views.es.yml +++ b/config/locales/devise_views.es.yml @@ -74,6 +74,8 @@ es: new: title: "Registrarse como organización / colectivo" organization_name_label: "Nombre de la organización" + responsible_name_label: "Nombre y apellidos de la persona responsable del colectivo" + responsible_name_note: "Será la persona representante de la asociación/colectivo en cuyo nombre se presenten las propuestas" email_label: "Email" password_label: "Contraseña" phone_number_label: "Teléfono" diff --git a/config/locales/en.yml b/config/locales/en.yml index 5a48149b9..a476a7ef7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -175,6 +175,7 @@ en: username_label: "Username" phone_number_label: "Phone number" organization_name_label: "Organization name" + organization_responsible_name_placeholder: "The responsible representative of the organization" notifications: Notifications finish_verification: "Finish verification" verified_account: Verified account diff --git a/config/locales/es.yml b/config/locales/es.yml index 5a502045c..a0e575cc4 100644 --- a/config/locales/es.yml +++ b/config/locales/es.yml @@ -175,6 +175,7 @@ es: username_label: "Nombre de usuario" phone_number_label: "Teléfono" organization_name_label: "Nombre de la organización" + organization_responsible_name_placeholder: "Representante de la asociación/colectivo" notifications: Notificaciones finish_verification: "Finalizar verificación" verified_account: Cuenta verificada diff --git a/db/dev_seeds.rb b/db/dev_seeds.rb index 64cc190cd..93474c7b3 100644 --- a/db/dev_seeds.rb +++ b/db/dev_seeds.rb @@ -27,7 +27,8 @@ moderator.create_moderator (1..10).each do |i| org_name = Faker::Company.name org_user = create_user("org#{i}@madrid.es", org_name) - org = org_user.create_organization(name: org_name) + org_responsible_name = Faker::Name.name + org = org_user.create_organization(name: org_name, responsible_name: org_responsible_name) verified = [true, false].sample if verified then diff --git a/db/migrate/20150912145218_add_responsible_name_to_organizations.rb b/db/migrate/20150912145218_add_responsible_name_to_organizations.rb new file mode 100644 index 000000000..08598e7c4 --- /dev/null +++ b/db/migrate/20150912145218_add_responsible_name_to_organizations.rb @@ -0,0 +1,13 @@ +class AddResponsibleNameToOrganizations < ActiveRecord::Migration + def up + add_column :organizations, :responsible_name, :string, limit: 60 + + Organization.find_each do |org| + org.update(responsible_name: org.name) if org.responsible_name.blank? + end + end + + def down + remove_column :organizations, :responsible_name + end +end diff --git a/db/schema.rb b/db/schema.rb index fde03fe30..dca1e8354 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20150910152734) do +ActiveRecord::Schema.define(version: 20150912145218) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -165,7 +165,7 @@ ActiveRecord::Schema.define(version: 20150910152734) do create_table "locks", force: :cascade do |t| t.integer "user_id" t.integer "tries", default: 0 - t.datetime "locked_until", default: '2015-09-10 13:46:11', null: false + t.datetime "locked_until", default: '2015-09-11 17:24:30', null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end @@ -180,9 +180,10 @@ ActiveRecord::Schema.define(version: 20150910152734) do create_table "organizations", force: :cascade do |t| t.integer "user_id" - t.string "name", limit: 60 + t.string "name", limit: 60 t.datetime "verified_at" t.datetime "rejected_at" + t.string "responsible_name", limit: 60 end add_index "organizations", ["user_id"], name: "index_organizations_on_user_id", using: :btree @@ -246,7 +247,7 @@ ActiveRecord::Schema.define(version: 20150910152734) do t.integer "official_level", default: 0 t.datetime "hidden_at" t.string "sms_confirmation_code" - t.string "username", limit: 60 + t.string "username", limit: 60 t.string "document_number" t.string "document_type" t.datetime "residence_verified_at" diff --git a/spec/factories.rb b/spec/factories.rb index ff3f60540..8513d4d16 100644 --- a/spec/factories.rb +++ b/spec/factories.rb @@ -149,6 +149,7 @@ FactoryGirl.define do factory :organization do user + responsible_name "Johnny Utah" sequence(:name) { |n| "org#{n}" } trait :verified do diff --git a/spec/features/organizations_spec.rb b/spec/features/organizations_spec.rb index 15cd4b41b..a42e78dad 100644 --- a/spec/features/organizations_spec.rb +++ b/spec/features/organizations_spec.rb @@ -9,6 +9,7 @@ feature 'Organizations' do visit new_organization_registration_path fill_in 'user_organization_attributes_name', with: 'Greenpeace' + fill_in 'user_organization_attributes_responsible_name', with: 'Dorothy Stowe' fill_in 'user_email', with: 'green@peace.com' fill_in 'user_password', with: 'greenpeace' fill_in 'user_password_confirmation', with: 'greenpeace' diff --git a/spec/features/verification/verification_path_spec.rb b/spec/features/verification/verification_path_spec.rb index 2967f5e2f..bfd284500 100644 --- a/spec/features/verification/verification_path_spec.rb +++ b/spec/features/verification/verification_path_spec.rb @@ -2,6 +2,16 @@ require 'rails_helper' feature 'Verification path' do + scenario "User is an organization" do + user = create(:user, verified_at: Time.now) + create(:organization, user: user) + + login_as(user) + visit verification_path + + expect(current_path).to eq account_path + end + scenario "User is verified" do user = create(:user, verified_at: Time.now) diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index e8e710dd0..756810395 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -161,11 +161,12 @@ describe User do end describe "organization_attributes" do - before(:each) { subject.organization_attributes = {name: 'org'} } + before(:each) { subject.organization_attributes = {name: 'org', responsible_name: 'julia'} } it "triggers the creation of an associated organization" do expect(subject.organization).to be expect(subject.organization.name).to eq('org') + expect(subject.organization.responsible_name).to eq('julia') end it "deactivates the validation of username, and activates the validation of organization" do