From 81204b29c0cfd120c7f4c3e4f7696a7886bb79b0 Mon Sep 17 00:00:00 2001 From: Tom Beckmann Date: Fri, 20 Jan 2017 09:28:34 +0100 Subject: [PATCH] Add field to set contact person on request show page. Fixes #313. (#362) * Add field to set contact person on request show page * Allow unsetting contact --- app/controllers/requests_controller.rb | 14 ++++++++++++ app/views/requests/show.html.erb | 15 +++++++++++++ config/locales/de.requests.yml | 2 ++ config/routes.rb | 4 +++- ...19223355_add_contact_person_to_requests.rb | 5 +++++ db/schema.rb | 17 +++++++------- spec/controllers/requests_controller_spec.rb | 22 +++++++++++++++++++ spec/features/request_spec.rb | 12 ++++++++++ 8 files changed, 81 insertions(+), 10 deletions(-) create mode 100644 db/migrate/20170119223355_add_contact_person_to_requests.rb diff --git a/app/controllers/requests_controller.rb b/app/controllers/requests_controller.rb index 7aa778d0..9907b4ce 100644 --- a/app/controllers/requests_controller.rb +++ b/app/controllers/requests_controller.rb @@ -40,6 +40,16 @@ def update end end + def set_contact_person + @request = Request.find(params[:request_id]) + update_params = contact_person_params + if !update_params[:contact_person].nil? and @request.update(update_params) + redirect_to @request, notice: I18n.t('requests.notice.was_updated') + else + render :show + end + end + # DELETE /requests/1 def destroy @request.destroy @@ -63,4 +73,8 @@ def set_request def request_params params.require(:request).permit(:form_of_address, :first_name, :last_name, :phone_number, :street, :zip_code_city, :topic_of_workshop, :time_period, :email, :number_of_participants, :knowledge_level, :annotations) end + + def contact_person_params + params.require(:request).permit(:contact_person) + end end diff --git a/app/views/requests/show.html.erb b/app/views/requests/show.html.erb index f1c415f0..bd33d358 100644 --- a/app/views/requests/show.html.erb +++ b/app/views/requests/show.html.erb @@ -15,6 +15,21 @@
<%= model_class.human_attribute_name(:status) %>:
<%= t(@request.status, scope: 'activerecord.attributes.request.statuses') %>
+
+
<%= model_class.human_attribute_name(:contact_person) %>: +
+ <%= form_for @request, url: request_set_contact_person_path(@request), html: { class: 'form-inline' } do |f| %> +
+
+ <%= f.text_field :contact_person, class: 'form-control', placeholder: t('activerecord.attributes.request.contact_person') %> + + <%= f.submit t('requests.form.set_contact_person'), class: 'btn btn-default' %> + +
+
+ <% end %> +
+
<%= link_to t('.back', :default => t("helpers.links.back")), requests_path, :class => 'btn btn-default' %> diff --git a/config/locales/de.requests.yml b/config/locales/de.requests.yml index dd0279b1..0892052c 100644 --- a/config/locales/de.requests.yml +++ b/config/locales/de.requests.yml @@ -13,6 +13,7 @@ de: form: create_request: "Anfrage erstellen" accept: "Annehmen" + set_contact_person: "Ansprechpartner festlegen" hints: please_enter_two_topics: "Bitte 2 Wünsche angeben" notice: @@ -40,6 +41,7 @@ de: annotations: "Anmerkungen" id: "Nummer" created_at: "Erstellt am" + contact_person: "Ansprechpartner" status: "Status" statuses: open: "Noch nicht angenommen" diff --git a/config/routes.rb b/config/routes.rb index 5fd57734..56af5a10 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -2,7 +2,9 @@ post 'agreement_letters/create' get 'agreement_letters/show' - resources :requests + resources :requests do + patch 'contact_person' => 'requests#set_contact_person', as: :set_contact_person + end put 'applications/:id/status' => 'application_letters#update_status', as: :update_application_letter_status get 'applications/:id/check' => 'application_letters#check', as: :check_application_letter diff --git a/db/migrate/20170119223355_add_contact_person_to_requests.rb b/db/migrate/20170119223355_add_contact_person_to_requests.rb new file mode 100644 index 00000000..a4256219 --- /dev/null +++ b/db/migrate/20170119223355_add_contact_person_to_requests.rb @@ -0,0 +1,5 @@ +class AddContactPersonToRequests < ActiveRecord::Migration + def change + add_column :requests, :contact_person, :string + end +end diff --git a/db/schema.rb b/db/schema.rb index 4afff4d9..e389f56d 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,9 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. - -ActiveRecord::Schema.define(version: 20170118185870) do - +ActiveRecord::Schema.define(version: 20170119223355) do create_table "agreement_letters", force: :cascade do |t| t.integer "user_id", null: false @@ -28,11 +26,11 @@ create_table "application_letters", force: :cascade do |t| t.string "motivation" - t.integer "user_id", null: false - t.integer "event_id", null: false - t.datetime "created_at", null: false - t.datetime "updated_at", null: false - t.integer "status", default: 2, null: false + t.integer "user_id", null: false + t.integer "event_id", null: false + t.datetime "created_at", null: false + t.datetime "updated_at", null: false + t.integer "status", default: 2, null: false t.integer "grade" t.string "experience" t.string "coding_skills" @@ -85,8 +83,8 @@ t.string "knowledge_level" t.date "application_deadline" t.boolean "application_status_locked" - t.boolean "participants_are_unlimited", default: false t.text "custom_application_fields" + t.boolean "participants_are_unlimited", default: false end create_table "profiles", force: :cascade do |t| @@ -124,6 +122,7 @@ t.text "annotations" t.integer "status", default: 0 t.string "zip_code_city" + t.string "contact_person" end create_table "users", force: :cascade do |t| diff --git a/spec/controllers/requests_controller_spec.rb b/spec/controllers/requests_controller_spec.rb index 9307d6ea..5931b14e 100644 --- a/spec/controllers/requests_controller_spec.rb +++ b/spec/controllers/requests_controller_spec.rb @@ -125,6 +125,28 @@ end end + describe "PATCH #set_contact_person" do + before :each do + @a_request = Request.create! valid_attributes + end + + context "with valid params" do + it "saves the name" do + name = 'Me' + patch :set_contact_person, request_id: @a_request.to_param, request: {contact_person: name}, session: valid_session + @a_request.reload + expect(@a_request.contact_person).to eq(name) + end + end + + context "with invalid params" do + it "re-renders the 'show' template" do + patch :set_contact_person, request_id: @a_request.to_param, request: invalid_attributes, session: valid_session + expect(response).to render_template("show") + end + end + end + describe "POST #create" do context "with valid params" do it "creates a new Request" do diff --git a/spec/features/request_spec.rb b/spec/features/request_spec.rb index 8921e937..e51201cd 100644 --- a/spec/features/request_spec.rb +++ b/spec/features/request_spec.rb @@ -80,6 +80,18 @@ def fill_in_required_fields accepted_status = I18n.t 'activerecord.attributes.request.statuses.accepted' expect(page).to have_text(accepted_status) end + + it 'should allow me to enter an contact person' do + request = FactoryGirl.create(:request) + + visit(request_path(request)) + expect(page).to have_field('request_contact_person') + fill_in 'request_contact_person', with: 'Me' + click_button I18n.t('requests.form.set_contact_person') + + visit(request_path(request)) + expect(page).to have_field('request_contact_person', with: 'Me') + end end end end