From 951505ce7d8f4ac7a46c31ef9abf468b7379c152 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 7 Mar 2016 18:09:49 +0100 Subject: [PATCH 01/26] admins can tag spending proposals --- .../admin/spending_proposals_controller.rb | 20 +++++++++++ app/models/spending_proposal.rb | 1 + .../admin/spending_proposals/edit.html.erb | 24 +++++++++++++ .../admin/spending_proposals/show.html.erb | 3 ++ app/views/shared/_tags.html.erb | 4 +-- config/locales/admin.en.yml | 2 ++ config/locales/admin.es.yml | 2 ++ config/locales/responders.en.yml | 3 +- config/locales/responders.es.yml | 3 +- config/routes.rb | 2 +- .../features/admin/spending_proposals_spec.rb | 34 +++++++++++++++++++ 11 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 app/views/admin/spending_proposals/edit.html.erb diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 8956f7831..f3126b061 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -15,6 +15,20 @@ class Admin::SpendingProposalsController < Admin::BaseController @valuators = Valuator.includes(:user).all.order("users.username ASC") end + def edit + @spending_proposal = SpendingProposal.find(params[:id]) + @tags = ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings) + end + + def update + @spending_proposal = SpendingProposal.find(params[:id]) + if @spending_proposal.update(spending_proposal_params) + redirect_to admin_spending_proposal_path(@spending_proposal), notice: t("flash.actions.update.spending_proposal") + else + render :edit + end + end + def assign_admin @spending_proposal.update(params.require(:spending_proposal).permit(:administrator_id)) render nothing: true @@ -26,4 +40,10 @@ class Admin::SpendingProposalsController < Admin::BaseController @spending_proposal.update(params.require(:spending_proposal).permit(valuator_ids: [])) end + private + + def spending_proposal_params + params.require(:spending_proposal).permit(:tag_list) + end + end diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 48473640c..34873d6fb 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -1,6 +1,7 @@ class SpendingProposal < ActiveRecord::Base include Measurable include Sanitizable + include Taggable apply_simple_captcha diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb new file mode 100644 index 000000000..3812db0a7 --- /dev/null +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -0,0 +1,24 @@ +<%= form_for @spending_proposal, url: admin_spending_proposal_path(@spending_proposal) do |f| %> +
+ <%= f.label :tag_list, t("proposals.form.tags_label") %> +

<%= t("proposals.form.tags_instructions") %>

+ +
+ <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> + <% @tags.each do |tag| %> + <%= tag.name %> + <% end %> +
+ +
+ <%= f.text_field :tag_list, value: @spending_proposal.tag_list.to_s, + label: false, + placeholder: t("proposals.form.tags_placeholder"), + class: 'js-tag-list' %> +
+ +
+ <%= f.submit(class: "button", value: t("admin.spending_proposals.edit.submit_button")) %> +
+ +<% end %> \ No newline at end of file diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index cbdfbb2ad..65d2c6cd3 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -36,6 +36,9 @@ <% end %>

+<%= render 'shared/tags', taggable: @spending_proposal %> + +

<%= t("admin.spending_proposals.show.assigned_valuators") %>:

<%= render "assigned_valuators" %> diff --git a/app/views/shared/_tags.html.erb b/app/views/shared/_tags.html.erb index 8640a4d0c..a161a8228 100644 --- a/app/views/shared/_tags.html.erb +++ b/app/views/shared/_tags.html.erb @@ -3,12 +3,12 @@ <% if taggable.tags.any? %> <% taggable.tag_list_with_limit(limit).each do |tag| %> - <%= link_to sanitize(tag.name), send("#{taggable.class.to_s.downcase.pluralize}_path", tag: tag.name) %> + <%= link_to sanitize(tag.name), send("#{taggable.class.name.underscore.pluralize}_path", tag: tag.name) %> <% end %> <% if taggable.tags_count_out_of_limit(limit) > 0 %> <%= link_to "#{taggable.tags_count_out_of_limit(limit)}+", - send("#{taggable.class.to_s.downcase}_path", taggable) %> + send("#{taggable.class.name.underscore}_path", taggable) %> <% end %> <% end %> diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index bd31ad1ad..ae9f7ad08 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -186,6 +186,8 @@ en: assign_valuators: Assign valuators no_valuators: There is not any valuator user assign: Assign + edit: + submit_button: Update stats: show: stats_title: Stats diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 53f615c1a..f97ac9067 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -186,6 +186,8 @@ es: assign_valuators: Asignar evaluadores no_valuators: No hay ningún usuario evaluador assign: Asignar + edit: + submit_button: Actualizar stats: show: stats_title: Estadísticas diff --git a/config/locales/responders.en.yml b/config/locales/responders.en.yml index b2640c6ac..03a8f0ec8 100755 --- a/config/locales/responders.en.yml +++ b/config/locales/responders.en.yml @@ -12,4 +12,5 @@ en: update: notice: "%{resource_name} updated successfully." debate: "Debate updated successfully." - proposal: "Proposal updated successfully." \ No newline at end of file + proposal: "Proposal updated successfully." + spending_proposal: "Investment project updated succesfully." \ No newline at end of file diff --git a/config/locales/responders.es.yml b/config/locales/responders.es.yml index 5c22856cc..ee6e011f8 100644 --- a/config/locales/responders.es.yml +++ b/config/locales/responders.es.yml @@ -12,4 +12,5 @@ es: update: notice: "%{resource_name} actualizado correctamente." debate: "Debate actualizado correctamente." - proposal: "Propuesta actualizada correctamente." \ No newline at end of file + proposal: "Propuesta actualizada correctamente." + spending_proposal: "Propuesta de inversión actualizada correctamente." \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index e743e29d7..4a3c72427 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -130,7 +130,7 @@ Rails.application.routes.draw do end end - resources :spending_proposals, only: [:index, :show] do + resources :spending_proposals, only: [:index, :show, :edit, :update] do member do patch :assign_admin patch :assign_valuators diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index f4bd4582c..8d1877019 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -251,4 +251,38 @@ feature 'Admin spending proposals' do end end + scenario "Adds existing tags", :js do + create(:spending_proposal, tag_list: 'Education, Health') + + spending_proposal = create(:spending_proposal) + + visit edit_admin_spending_proposal_path(spending_proposal) + + find('.js-add-tag-link', text: 'Education').click + click_button 'Update' + + expect(page).to have_content 'Investment project updated succesfully.' + + within "#tags" do + expect(page).to have_content 'Education' + expect(page).to_not have_content 'Health' + end + end + + scenario "Adds non existent tags" do + spending_proposal = create(:spending_proposal) + + visit edit_admin_spending_proposal_path(spending_proposal) + + fill_in 'spending_proposal_tag_list', with: 'Refugees, Solidarity' + click_button 'Update' + + expect(page).to have_content 'Investment project updated succesfully.' + + within "#tags" do + expect(page).to have_content 'Refugees' + expect(page).to have_content 'Solidarity' + end + end + end From 07b99bb0171f8c666a2580c61f855da2b9038cf8 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 7 Mar 2016 18:35:26 +0100 Subject: [PATCH 02/26] adds administrator to spending proposal --- .../admin/spending_proposals_controller.rb | 3 ++- app/views/admin/spending_proposals/edit.html.erb | 7 +++++++ app/views/admin/spending_proposals/show.html.erb | 4 +--- spec/features/admin/spending_proposals_spec.rb | 13 +++++++++++++ 4 files changed, 23 insertions(+), 4 deletions(-) diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index f3126b061..5eb28d5b7 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -17,6 +17,7 @@ class Admin::SpendingProposalsController < Admin::BaseController def edit @spending_proposal = SpendingProposal.find(params[:id]) + @admins = Administrator.includes(:user).all @tags = ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings) end @@ -43,7 +44,7 @@ class Admin::SpendingProposalsController < Admin::BaseController private def spending_proposal_params - params.require(:spending_proposal).permit(:tag_list) + params.require(:spending_proposal).permit(:administrator_id, :tag_list) end end diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index 3812db0a7..d189b29c5 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -1,4 +1,11 @@ <%= form_for @spending_proposal, url: admin_spending_proposal_path(@spending_proposal) do |f| %> + + <%= f.select :administrator_id, + @admins.collect { |a| [ "#{a.name} (#{a.email})", a.id ] }, + { include_blank: t("admin.spending_proposals.show.undefined"), + label: false }, + class: "js-submit-on-change" %> +
<%= f.label :tag_list, t("proposals.form.tags_label") %>

<%= t("proposals.form.tags_instructions") %>

diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 65d2c6cd3..23a641bfb 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -31,9 +31,7 @@

<%= t("admin.spending_proposals.show.responsibles") %>

<%= t("admin.spending_proposals.show.assigned_admin") %>: - <%= form_for(@spending_proposal, url: assign_admin_admin_spending_proposal_path(@spending_proposal), remote: true, html: {id: 'administrator_assignment_form'}) do |f| %> - <%= f.select :administrator_id, @admins.collect { |a| [ "#{a.name} (#{a.email})", a.id ] }, {include_blank: t("admin.spending_proposals.show.undefined"), label: false}, class: "js-submit-on-change" %> - <% end %> + <%= @spending_proposal.administrator.try(:name) || t("admin.spending_proposals.show.undefined") %>

<%= render 'shared/tags', taggable: @spending_proposal %> diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 8d1877019..3b0aa646e 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -251,6 +251,19 @@ feature 'Admin spending proposals' do end end + scenario "Add administrator" do + spending_proposal = create(:spending_proposal) + administrator = create(:administrator, user: create(:user, username: 'Marta', email: 'marta@admins.org')) + + visit edit_admin_spending_proposal_path(spending_proposal) + + select 'Marta (marta@admins.org)', from: 'spending_proposal[administrator_id]' + click_button 'Update' + + expect(page).to have_content 'Investment project updated succesfully.' + expect(page).to have_content 'Assigned admin: Marta' + end + scenario "Adds existing tags", :js do create(:spending_proposal, tag_list: 'Education, Health') From 389b89970fa9d6426501b0fe60c12e3e9f69e0cf Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 7 Mar 2016 18:57:20 +0100 Subject: [PATCH 03/26] adds valuators to spending proposals Conflicts: app/views/admin/spending_proposals/show.html.erb --- .../admin/spending_proposals_controller.rb | 7 ++--- .../admin/spending_proposals/edit.html.erb | 16 ++++++++++++ .../admin/spending_proposals/show.html.erb | 26 +++++++------------ .../features/admin/spending_proposals_spec.rb | 26 +++++++++++++++++++ 4 files changed, 54 insertions(+), 21 deletions(-) diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 5eb28d5b7..8e23cc77a 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -11,18 +11,15 @@ class Admin::SpendingProposalsController < Admin::BaseController end def show - @admins = Administrator.includes(:user).all - @valuators = Valuator.includes(:user).all.order("users.username ASC") end def edit - @spending_proposal = SpendingProposal.find(params[:id]) @admins = Administrator.includes(:user).all + @valuators = Valuator.includes(:user).all.order("users.username ASC") @tags = ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings) end def update - @spending_proposal = SpendingProposal.find(params[:id]) if @spending_proposal.update(spending_proposal_params) redirect_to admin_spending_proposal_path(@spending_proposal), notice: t("flash.actions.update.spending_proposal") else @@ -44,7 +41,7 @@ class Admin::SpendingProposalsController < Admin::BaseController private def spending_proposal_params - params.require(:spending_proposal).permit(:administrator_id, :tag_list) + params.require(:spending_proposal).permit(:administrator_id, :tag_list, valuator_ids: []) end end diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index d189b29c5..022fdb0c9 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -6,6 +6,22 @@ label: false }, class: "js-submit-on-change" %> +
+ <% @valuators.each do |valuator| %> +
+ <%= check_box_tag "valuator_ids_#{valuator.id}", + valuator.id, @spending_proposal.valuators.include?(valuator), + name: 'spending_proposal[valuator_ids][]', + class: "js-submit-on-change" %> + <%= label_tag "valuator_ids_#{valuator.id}", truncate(valuator.name), class: "inline" %> +
+ <% end %> + + <% if @valuators.blank? %> +

<%= t("admin.spending_proposals.show.no_valuators") %>

+ <% end %> +
+
<%= f.label :tag_list, t("proposals.form.tags_label") %>

<%= t("proposals.form.tags_instructions") %>

diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 23a641bfb..fc826f747 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -39,25 +39,19 @@

<%= t("admin.spending_proposals.show.assigned_valuators") %>:

- <%= render "assigned_valuators" %> +
    + <% if @spending_proposal.valuators.any? %> + <% @spending_proposal.valuators.each do |valuator| %> +
  • <%= valuator.name %> (<%= valuator.email %>)
  • + <% end %> + <% else %> +
  • <%= t("admin.spending_proposals.show.undefined") %>
  • + <% end %> +
<%= link_to t("admin.spending_proposals.show.assign_valuators"), "", class: "js-toggle-link", data: {"toggle-selector" => "#valuators-assign-list"} %> - -

<%= t("admin.spending_proposals.show.dossier") %>

<%= t("admin.spending_proposals.show.price") %> (<%= t("admin.spending_proposals.show.currency") %>): @@ -77,4 +71,4 @@ <% if @spending_proposal.internal_comments.present? %>

<%= t("admin.spending_proposals.show.internal_comments") %>

<%= simple_format(safe_html_with_links(@spending_proposal.internal_comments.html_safe), {}, sanitize: false) %> -<% end %> \ No newline at end of file +<% end %> diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 3b0aa646e..f7c53cd7a 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -264,6 +264,32 @@ feature 'Admin spending proposals' do expect(page).to have_content 'Assigned admin: Marta' end + scenario "Add valuators" do + spending_proposal = create(:spending_proposal) + + valuator1 = create(:valuator, user: create(:user, username: 'Valentina', email: 'v1@valuators.org')) + valuator2 = create(:valuator, user: create(:user, username: 'Valerian', email: 'v2@valuators.org')) + valuator3 = create(:valuator, user: create(:user, username: 'Val', email: 'v3@valuators.org')) + + visit edit_admin_spending_proposal_path(spending_proposal) + + within('#valuators-assign-list') do + check "valuator_ids_#{valuator1.id}" + check "valuator_ids_#{valuator3.id}" + end + + click_button 'Update' + + expect(page).to have_content 'Investment project updated succesfully.' + + within('#assigned_valuators') do + expect(page).to have_content('Valentina (v1@valuators.org)') + expect(page).to have_content('Val (v3@valuators.org)') + expect(page).to_not have_content('Undefined') + expect(page).to_not have_content('Valerian (v2@valuators.org)') + end + end + scenario "Adds existing tags", :js do create(:spending_proposal, tag_list: 'Education, Health') From 65d430b1d9a19f7c3fd124b9bc1f3e8c48f31d74 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Mon, 7 Mar 2016 19:15:57 +0100 Subject: [PATCH 04/26] simplifies valuator checkboxes --- .../admin/spending_proposals/edit.html.erb | 18 ++++-------------- spec/features/admin/spending_proposals_spec.rb | 6 ++---- 2 files changed, 6 insertions(+), 18 deletions(-) diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index 022fdb0c9..502c9baae 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -6,20 +6,10 @@ label: false }, class: "js-submit-on-change" %> -
- <% @valuators.each do |valuator| %> -
- <%= check_box_tag "valuator_ids_#{valuator.id}", - valuator.id, @spending_proposal.valuators.include?(valuator), - name: 'spending_proposal[valuator_ids][]', - class: "js-submit-on-change" %> - <%= label_tag "valuator_ids_#{valuator.id}", truncate(valuator.name), class: "inline" %> -
- <% end %> - - <% if @valuators.blank? %> -

<%= t("admin.spending_proposals.show.no_valuators") %>

- <% end %> +
+
+ <%= f.collection_check_boxes :valuator_ids, @valuators, :id, :name %> +
diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index f7c53cd7a..d291c3680 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -273,10 +273,8 @@ feature 'Admin spending proposals' do visit edit_admin_spending_proposal_path(spending_proposal) - within('#valuators-assign-list') do - check "valuator_ids_#{valuator1.id}" - check "valuator_ids_#{valuator3.id}" - end + check "spending_proposal_valuator_ids_#{valuator1.id}" + check "spending_proposal_valuator_ids_#{valuator3.id}" click_button 'Update' From 543870062f70422f139f1d76413d5cb5a5258423 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 12:56:09 +0100 Subject: [PATCH 05/26] removes duplicate spending proposal specs --- .../features/admin/spending_proposals_spec.rb | 60 +------------------ 1 file changed, 1 insertion(+), 59 deletions(-) diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index d291c3680..186d411cb 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -186,71 +186,13 @@ feature 'Admin spending proposals' do expect(page).to have_content('1234.56') expect(page).to have_content('Not feasible') expect(page).to have_content('It is impossible') - expect(page).to have_select('spending_proposal[administrator_id]', selected: 'Ana (ana@admins.org)') + expect(page).to have_content('Ana (ana@admins.org)') within('#assigned_valuators') do expect(page).to have_content('Rachel (rachel@valuators.org)') end end - scenario 'Administrator assigment', :js do - spending_proposal = create(:spending_proposal) - - administrator = create(:administrator, user: create(:user, username: 'Ana', email: 'ana@admins.org')) - - visit admin_spending_proposal_path(spending_proposal) - - expect(page).to have_select('spending_proposal[administrator_id]', selected: 'Undefined') - select 'Ana (ana@admins.org)', from: 'spending_proposal[administrator_id]' - - visit admin_spending_proposals_path - click_link spending_proposal.title - - expect(page).to have_select('spending_proposal[administrator_id]', selected: 'Ana (ana@admins.org)') - end - - scenario 'Valuators assignments', :js do - spending_proposal = create(:spending_proposal) - - valuator1 = create(:valuator, user: create(:user, username: 'Valentina', email: 'v1@valuators.org')) - valuator2 = create(:valuator, user: create(:user, username: 'Valerian', email: 'v2@valuators.org')) - valuator3 = create(:valuator, user: create(:user, username: 'Val', email: 'v3@valuators.org')) - - visit admin_spending_proposal_path(spending_proposal) - - within('#assigned_valuators') do - expect(page).to have_content('Undefined') - expect(page).to_not have_content('Valentina (v1@valuators.org)') - expect(page).to_not have_content('Valerian (v2@valuators.org)') - expect(page).to_not have_content('Val (v3@valuators.org)') - end - - visit admin_spending_proposal_path(spending_proposal) - - click_link "Assign valuators" - - within('#valuators-assign-list') do - check "valuator_ids_#{valuator1.id}" - check "valuator_ids_#{valuator3.id}" - end - - within('#assigned_valuators') do - expect(page).to have_content('Valentina (v1@valuators.org)') - expect(page).to have_content('Val (v3@valuators.org)') - expect(page).to_not have_content('Undefined') - expect(page).to_not have_content('Valerian (v2@valuators.org)') - end - - visit admin_spending_proposal_path(spending_proposal) - - within('#assigned_valuators') do - expect(page).to have_content('Valentina (v1@valuators.org)') - expect(page).to have_content('Val (v3@valuators.org)') - expect(page).to_not have_content('Undefined') - expect(page).to_not have_content('Valerian (v2@valuators.org)') - end - end - scenario "Add administrator" do spending_proposal = create(:spending_proposal) administrator = create(:administrator, user: create(:user, username: 'Marta', email: 'marta@admins.org')) From df454f12111dbd4fe2949052ce2aefea2e6fe1d5 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 12:58:48 +0100 Subject: [PATCH 06/26] fixes specs displaying admin name and email --- app/models/administrator.rb | 4 ++++ app/views/admin/spending_proposals/show.html.erb | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/app/models/administrator.rb b/app/models/administrator.rb index 8a34fa349..fbf27ec7a 100644 --- a/app/models/administrator.rb +++ b/app/models/administrator.rb @@ -3,4 +3,8 @@ class Administrator < ActiveRecord::Base delegate :name, :email, to: :user validates :user_id, presence: true, uniqueness: true + + def name_and_email + "#{name} (#{email})" + end end diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index fc826f747..d85181f55 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -31,7 +31,7 @@

<%= t("admin.spending_proposals.show.responsibles") %>

<%= t("admin.spending_proposals.show.assigned_admin") %>: - <%= @spending_proposal.administrator.try(:name) || t("admin.spending_proposals.show.undefined") %> + <%= @spending_proposal.administrator.try(:name_and_email) || t("admin.spending_proposals.show.undefined") %>

<%= render 'shared/tags', taggable: @spending_proposal %> From 57386349a2225f88243294fe96006e1abdf46d83 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 13:00:57 +0100 Subject: [PATCH 07/26] removes unused code --- .../admin/spending_proposals_controller.rb | 11 ----------- .../spending_proposals/assign_valuators.js.coffee | 1 - 2 files changed, 12 deletions(-) delete mode 100644 app/views/admin/spending_proposals/assign_valuators.js.coffee diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 8e23cc77a..c013d5a2d 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -27,17 +27,6 @@ class Admin::SpendingProposalsController < Admin::BaseController end end - def assign_admin - @spending_proposal.update(params.require(:spending_proposal).permit(:administrator_id)) - render nothing: true - end - - def assign_valuators - params[:spending_proposal] ||= {} - params[:spending_proposal][:valuator_ids] ||= [] - @spending_proposal.update(params.require(:spending_proposal).permit(valuator_ids: [])) - end - private def spending_proposal_params diff --git a/app/views/admin/spending_proposals/assign_valuators.js.coffee b/app/views/admin/spending_proposals/assign_valuators.js.coffee deleted file mode 100644 index afe581e59..000000000 --- a/app/views/admin/spending_proposals/assign_valuators.js.coffee +++ /dev/null @@ -1 +0,0 @@ -$('#assigned_valuators').html("<%= j(render 'assigned_valuators') %>") \ No newline at end of file From 837ad5fb1bd3a4b5206c59b6f2d21daa20e70bbe Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 8 Mar 2016 13:55:28 +0100 Subject: [PATCH 08/26] Improves the visual aspect of app/views/spending_proposals/show --- app/models/user.rb | 4 + .../admin/spending_proposals/show.html.erb | 85 ++++++++++++------- config/locales/admin.en.yml | 13 +-- config/locales/admin.es.yml | 11 +-- 4 files changed, 69 insertions(+), 44 deletions(-) diff --git a/app/models/user.rb b/app/models/user.rb index 1316c1348..3bf54b3ca 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -204,6 +204,10 @@ class User < ActiveRecord::Base self.update(oauth_email: nil) if oauth_email.present? end + def name_and_email + "#{name} (#{email})" + end + def save_requiring_finish_signup self.update(registering_with_oauth: true) end diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index d85181f55..c5d7d92a5 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -1,18 +1,37 @@ -<%= link_to t("admin.spending_proposals.show.back"), :back, class: 'back' %> -

<%= t("admin.spending_proposals.show.heading") %> <%= @spending_proposal.id %>

-

<%= @spending_proposal.title %>

- -<%= safe_html_with_links @spending_proposal.description %> - -<% if @spending_proposal.external_url.present? %> -

<%= text_with_links @spending_proposal.external_url %>

+<%= link_to :back, class: 'back' do %> + <%= t("admin.spending_proposals.show.back") %> <% end %> -

<%= t("admin.spending_proposals.show.info") %>

-

<%= t("admin.spending_proposals.show.by") %>: - <%= link_to @spending_proposal.author.name, admin_user_path(@spending_proposal.author) %> -

+ +

<%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %> + +

+

<%= @spending_proposal.title %>

+ +
+
+

+ <%= t("admin.spending_proposals.show.geozone") %>: + <%= geozone_name(@spending_proposal) %> +

+
+ +
+

+ <%= t("admin.spending_proposals.show.by") %>: + <%= link_to @spending_proposal.author.name, admin_user_path(@spending_proposal.author) %> +

+
+ +
+

+ <%= t("admin.spending_proposals.show.sent") %>: + <%= l @spending_proposal.created_at, format: :datetime %> +

+
+ +
<% if @spending_proposal.association_name.present? %>

<%= t("admin.spending_proposals.show.association_name") %>: @@ -20,37 +39,37 @@

<% end %> -

<%= t("admin.spending_proposals.show.geozone") %>: - <%= geozone_name(@spending_proposal) %> -

+<% if @spending_proposal.external_url.present? %> +

<%= text_with_links @spending_proposal.external_url %>

+<% end %> -

<%= t("admin.spending_proposals.show.sent") %>: - <%= l @spending_proposal.created_at, format: :datetime %> -

+<%= safe_html_with_links @spending_proposal.description %> -

<%= t("admin.spending_proposals.show.responsibles") %>

+

<%= t("admin.spending_proposals.show.classification") %>

<%= t("admin.spending_proposals.show.assigned_admin") %>: <%= @spending_proposal.administrator.try(:name_and_email) || t("admin.spending_proposals.show.undefined") %>

-<%= render 'shared/tags', taggable: @spending_proposal %> +

+ <%= t("admin.spending_proposals.show.tags") %>: + <%= render 'shared/tags', taggable: @spending_proposal %> +

+

+ <%= t("admin.spending_proposals.show.assigned_valuators") %>: + <% if @spending_proposal.valuators.any? %> + <% @spending_proposal.valuators.collect(&:name_and_email).join(', ') %> + <% else %> + <%= t("admin.spending_proposals.show.undefined") %> + <% end %> +

-

<%= t("admin.spending_proposals.show.assigned_valuators") %>:

-
-
    - <% if @spending_proposal.valuators.any? %> - <% @spending_proposal.valuators.each do |valuator| %> -
  • <%= valuator.name %> (<%= valuator.email %>)
  • - <% end %> - <% else %> -
  • <%= t("admin.spending_proposals.show.undefined") %>
  • - <% end %> -
-
+<%= link_to t("admin.spending_proposals.show.edit_button"), + edit_admin_spending_proposal_path(@spending_proposal), + class: "button" %> -<%= link_to t("admin.spending_proposals.show.assign_valuators"), "", class: "js-toggle-link", data: {"toggle-selector" => "#valuators-assign-list"} %> +

<%= t("admin.spending_proposals.show.dossier") %>

diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index ae9f7ad08..f625d45e5 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -165,11 +165,11 @@ en: no_valuators_assigned: No valuators assigned show: back: Back - heading: Investment project - info: Author info - association_name: Asociación - by: Sent by - sent: Sent at + heading: "Investment project %{id}" + edit_button: Update + association_name: Association + by: By + sent: Sent geozone: Scope dossier: Dossier price: Price @@ -180,12 +180,13 @@ en: undefined: Undefined valuation_finished: Valuation finished internal_comments: Internal comments - responsibles: Responsibles + classification: Clasificación assigned_admin: Assigned admin assigned_valuators: Assigned valuators assign_valuators: Assign valuators no_valuators: There is not any valuator user assign: Assign + tags: Tags edit: submit_button: Update stats: diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index f97ac9067..05ec213f0 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -165,11 +165,11 @@ es: no_valuators_assigned: Sin evaluador show: back: Volver - heading: Propuesta de inversión - info: Datos de envío + heading: Propuesta de inversión %{id} + edit_button: Editar association_name: Asociación - by: Enviada por - sent: Fecha de creación + by: Autor + sent: Fecha geozone: Ámbito dossier: Informe price: Coste @@ -180,12 +180,13 @@ es: undefined: Sin definir valuation_finished: Informe finalizado internal_comments: Commentarios internos - responsibles: Responsables + classification: Clasificación assigned_admin: Administrador asignado assigned_valuators: Evaluadores asignados assign_valuators: Asignar evaluadores no_valuators: No hay ningún usuario evaluador assign: Asignar + tags: Etiquetas edit: submit_button: Actualizar stats: From cd8cbef389dd3e4e73e3ff7419b0df1251b2cf3e Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 13:57:58 +0100 Subject: [PATCH 09/26] adds filtering of tags for spending proposals --- .../admin/spending_proposals_controller.rb | 2 +- app/helpers/spending_proposals_helper.rb | 6 ++++++ app/models/spending_proposal.rb | 5 +++++ .../admin/spending_proposals/index.html.erb | 9 ++++++++- config/initializers/acts_as_taggable_on.rb | 4 ++++ config/locales/admin.en.yml | 1 + config/locales/admin.es.yml | 1 + .../features/admin/spending_proposals_spec.rb | 20 +++++++++++++++++++ 8 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 app/helpers/spending_proposals_helper.rb diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index c013d5a2d..2ef48f320 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -16,7 +16,7 @@ class Admin::SpendingProposalsController < Admin::BaseController def edit @admins = Administrator.includes(:user).all @valuators = Valuator.includes(:user).all.order("users.username ASC") - @tags = ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings) + @tags = ActsAsTaggableOn::Tag.spending_proposal_tags end def update diff --git a/app/helpers/spending_proposals_helper.rb b/app/helpers/spending_proposals_helper.rb new file mode 100644 index 000000000..43ef7311a --- /dev/null +++ b/app/helpers/spending_proposals_helper.rb @@ -0,0 +1,6 @@ +module SpendingProposalsHelper + + def spending_proposal_tags_select_options + ActsAsTaggableOn::Tag.spending_proposal_tags.pluck(:name) + end +end \ No newline at end of file diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 34873d6fb..3716c4086 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -35,6 +35,7 @@ class SpendingProposal < ActiveRecord::Base results = self results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present? results = results.by_administrator(params[:administrator_id]) if params[:administrator_id].present? + results = results.by_tag(params[:tag_name]) if params[:tag_name].present? results = results.send(current_filter) if current_filter.present? results.for_render end @@ -51,6 +52,10 @@ class SpendingProposal < ActiveRecord::Base where(administrator_id: administrator.presence) end + def self.by_tag(tag_name) + tagged_with(tag_name) + end + def feasibility case feasible when true diff --git a/app/views/admin/spending_proposals/index.html.erb b/app/views/admin/spending_proposals/index.html.erb index 7c8bca37f..b40c63ab4 100644 --- a/app/views/admin/spending_proposals/index.html.erb +++ b/app/views/admin/spending_proposals/index.html.erb @@ -2,6 +2,13 @@
<%= form_tag admin_spending_proposals_path, method: :get, enforce_utf8: false do %> +
+ <%= select_tag :tag_name, + options_for_select(spending_proposal_tags_select_options, params[:tag_name]), + { prompt: t("admin.spending_proposals.index.tags_filter_all"), + label: false, + class: "js-submit-on-change" } %> +
<%= select_tag :geozone_id, options_for_select(geozone_select_options.unshift([t("geozones.none"), "all"]), params[:geozone_id]), @@ -25,7 +32,7 @@ <% @spending_proposals.each do |spending_proposal| %> - + diff --git a/config/initializers/acts_as_taggable_on.rb b/config/initializers/acts_as_taggable_on.rb index 40a0a5949..d9882dff8 100644 --- a/config/initializers/acts_as_taggable_on.rb +++ b/config/initializers/acts_as_taggable_on.rb @@ -38,6 +38,10 @@ module ActsAsTaggableOn Tag.where("kind = 'category'").pluck(:name) end + def self.spending_proposal_tags + ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings).uniq + end + private def custom_counter_field_name_for(taggable_type) "#{taggable_type.underscore.pluralize}_count" diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index f625d45e5..f46fd806c 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -150,6 +150,7 @@ en: index: geozone_filter_all: All zones administrator_filter_all: All administrators + tags_filter_all: All tags filters: valuation_open: Open without_admin: Without assigned admin diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 05ec213f0..a247eb6a6 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -150,6 +150,7 @@ es: index: geozone_filter_all: Todos los ámbitos de actuación administrator_filter_all: Todos los administradores + tags_filter_all: Todas las etiquetas filters: valuation_open: Abiertas without_admin: Sin administrador asignado diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 186d411cb..22e16bb93 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -162,6 +162,26 @@ feature 'Admin spending proposals' do expect(page).to have_content("Old idea") end + scenario "Index filtering by tag" do + create(:spending_proposal, title: 'Educate the children', tag_list: 'Education') + create(:spending_proposal, title: 'More schools', tag_list: 'Education') + create(:spending_proposal, title: 'More hospitals', tag_list: 'Health') + + visit admin_spending_proposals_path + + expect(page).to have_css(".spending_proposal", count: 3) + expect(page).to have_content("Educate the children") + expect(page).to have_content("More schools") + expect(page).to have_content("More hospitals") + + visit admin_spending_proposals_path(tag_name: 'Education') + + expect(page).to have_css(".spending_proposal", count: 2) + expect(page).to have_content("Educate the children") + expect(page).to have_content("More schools") + expect(page).to_not have_content("More hospitals") + end + scenario 'Show' do administrator = create(:administrator, user: create(:user, username: 'Ana', email: 'ana@admins.org')) valuator = create(:valuator, user: create(:user, username: 'Rachel', email: 'rachel@valuators.org')) From fb2505d1b0cc2513b7e61490836e006e698fb399 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:08:41 +0100 Subject: [PATCH 10/26] adds name and email for valuators --- app/models/valuator.rb | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/models/valuator.rb b/app/models/valuator.rb index 9e18d2cca..4b7d1031f 100644 --- a/app/models/valuator.rb +++ b/app/models/valuator.rb @@ -6,4 +6,8 @@ class Valuator < ActiveRecord::Base has_many :spending_proposals, through: :valuation_assignments validates :user_id, presence: true, uniqueness: true + + def name_and_email + "#{name} (#{email})" + end end From e1917123eb1e9c04464cc11b09d1995c029244c5 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:28:31 +0100 Subject: [PATCH 11/26] fixes specs --- app/views/admin/spending_proposals/show.html.erb | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index c5d7d92a5..29ba0b958 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -2,8 +2,6 @@ <%= t("admin.spending_proposals.show.back") %> <% end %> - -

<%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %>

@@ -58,11 +56,13 @@

<%= t("admin.spending_proposals.show.assigned_valuators") %>: - <% if @spending_proposal.valuators.any? %> - <% @spending_proposal.valuators.collect(&:name_and_email).join(', ') %> - <% else %> - <%= t("admin.spending_proposals.show.undefined") %> - <% end %> +

+ <% if @spending_proposal.valuators.any? %> + <%= @spending_proposal.valuators.collect(&:name_and_email).join(', ') %> + <% else %> + <%= t("admin.spending_proposals.show.undefined") %> + <% end %> +

<%= link_to t("admin.spending_proposals.show.edit_button"), From 0d8c3796fe3ff629fc3cfeafee26461a9050df29 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:28:51 +0100 Subject: [PATCH 12/26] updates edit button text for spending proposals --- config/locales/admin.en.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index f46fd806c..a57a1cec1 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -167,7 +167,7 @@ en: show: back: Back heading: "Investment project %{id}" - edit_button: Update + edit_button: Edit association_name: Association by: By sent: Sent From dc3cd01f92417becd494b5b6a5d30c756b2cdc45 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:29:11 +0100 Subject: [PATCH 13/26] makes spending proposal specs more robust --- spec/features/admin/spending_proposals_spec.rb | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 22e16bb93..aedf6042f 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -217,7 +217,8 @@ feature 'Admin spending proposals' do spending_proposal = create(:spending_proposal) administrator = create(:administrator, user: create(:user, username: 'Marta', email: 'marta@admins.org')) - visit edit_admin_spending_proposal_path(spending_proposal) + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' select 'Marta (marta@admins.org)', from: 'spending_proposal[administrator_id]' click_button 'Update' @@ -233,7 +234,8 @@ feature 'Admin spending proposals' do valuator2 = create(:valuator, user: create(:user, username: 'Valerian', email: 'v2@valuators.org')) valuator3 = create(:valuator, user: create(:user, username: 'Val', email: 'v3@valuators.org')) - visit edit_admin_spending_proposal_path(spending_proposal) + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' check "spending_proposal_valuator_ids_#{valuator1.id}" check "spending_proposal_valuator_ids_#{valuator3.id}" @@ -255,7 +257,8 @@ feature 'Admin spending proposals' do spending_proposal = create(:spending_proposal) - visit edit_admin_spending_proposal_path(spending_proposal) + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' find('.js-add-tag-link', text: 'Education').click click_button 'Update' @@ -271,7 +274,8 @@ feature 'Admin spending proposals' do scenario "Adds non existent tags" do spending_proposal = create(:spending_proposal) - visit edit_admin_spending_proposal_path(spending_proposal) + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' fill_in 'spending_proposal_tag_list', with: 'Refugees, Solidarity' click_button 'Update' From 4e4f3ea9226c54d87e89f9cb73fe5c272ff9c206 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:40:25 +0100 Subject: [PATCH 14/26] refactors scopes for spending proposals --- app/models/spending_proposal.rb | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) diff --git a/app/models/spending_proposal.rb b/app/models/spending_proposal.rb index 6c8c3c8a1..27842fa91 100644 --- a/app/models/spending_proposal.rb +++ b/app/models/spending_proposal.rb @@ -19,13 +19,17 @@ class SpendingProposal < ActiveRecord::Base validates :description, length: { maximum: SpendingProposal.description_max_length } validates :terms_of_service, acceptance: { allow_nil: false }, on: :create - scope :valuation_open, -> { where(valuation_finished: false) } - scope :without_admin, -> { valuation_open.where(administrator_id: nil) } - scope :managed, -> { valuation_open.where(valuation_assignments_count: 0).where("administrator_id IS NOT ?", nil) } - scope :valuating, -> { valuation_open.where("valuation_assignments_count > 0 AND valuation_finished = ?", false) } - scope :valuation_finished, -> { where(valuation_finished: true) } + scope :valuation_open, -> { where(valuation_finished: false) } + scope :without_admin, -> { valuation_open.where(administrator_id: nil) } + scope :managed, -> { valuation_open.where(valuation_assignments_count: 0).where("administrator_id IS NOT ?", nil) } + scope :valuating, -> { valuation_open.where("valuation_assignments_count > 0 AND valuation_finished = ?", false) } + scope :valuation_finished, -> { where(valuation_finished: true) } - scope :for_render, -> { includes(:geozone, administrator: :user, valuators: :user) } + scope :by_admin, -> (admin) { where(administrator_id: admin.presence) } + scope :by_tag, -> (tag_name) { tagged_with(tag_name) } + scope :by_valuator, -> (valuator) { where("valuation_assignments.valuator_id = ?", valuator.presence).joins(:valuation_assignments) } + + scope :for_render, -> { includes(:geozone, administrator: :user, valuators: :user) } def description super.try :html_safe @@ -34,7 +38,7 @@ class SpendingProposal < ActiveRecord::Base def self.search(params, current_filter) results = self results = results.by_geozone(params[:geozone_id]) if params[:geozone_id].present? - results = results.by_administrator(params[:administrator_id]) if params[:administrator_id].present? + results = results.by_admin(params[:administrator_id]) if params[:administrator_id].present? results = results.by_tag(params[:tag_name]) if params[:tag_name].present? results = results.by_valuator(params[:valuator_id]) if params[:valuator_id].present? results = results.send(current_filter) if current_filter.present? @@ -49,19 +53,6 @@ class SpendingProposal < ActiveRecord::Base end end - def self.by_administrator(administrator) - where(administrator_id: administrator.presence) - end - - - def self.by_tag(tag_name) - tagged_with(tag_name) - end - - def self.by_valuator(valuator) - joins(:valuation_assignments).includes(:valuators).where("valuation_assignments.valuator_id = ?", valuator.presence) - end - def feasibility case feasible when true From fb9d72a401c7617c3b0b056d6433e083023a4543 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 14:46:29 +0100 Subject: [PATCH 15/26] organizes scenarios into contexts for spending proposals --- .../features/admin/spending_proposals_spec.rb | 406 +++++++++--------- 1 file changed, 209 insertions(+), 197 deletions(-) diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 54102a9f6..0035af8ae 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -7,179 +7,187 @@ feature 'Admin spending proposals' do login_as(admin.user) end - scenario 'Disabled with a feature flag' do - Setting['feature.spending_proposals'] = nil - expect{ visit admin_spending_proposals_path }.to raise_exception(FeatureFlags::FeatureDisabled) - end + context "Feature flag" do - scenario 'Index shows spending proposals' do - spending_proposal = create(:spending_proposal) - visit admin_spending_proposals_path - - expect(page).to have_content(spending_proposal.title) - end - - scenario 'Index shows assignments info' do - spending_proposal1 = create(:spending_proposal) - spending_proposal2 = create(:spending_proposal) - spending_proposal3 = create(:spending_proposal) - - valuator1 = create(:valuator, user: create(:user, username: 'Olga')) - valuator2 = create(:valuator, user: create(:user, username: 'Miriam')) - admin = create(:administrator, user: create(:user, username: 'Gema')) - - spending_proposal1.valuators << valuator1 - spending_proposal2.valuator_ids = [valuator1.id, valuator2.id] - spending_proposal3.update({administrator_id: admin.id}) - - visit admin_spending_proposals_path - - within("#spending_proposal_#{spending_proposal1.id}") do - expect(page).to have_content("No admin assigned") - expect(page).to have_content("Olga") + scenario 'Disabled with a feature flag' do + Setting['feature.spending_proposals'] = nil + expect{ visit admin_spending_proposals_path }.to raise_exception(FeatureFlags::FeatureDisabled) end - within("#spending_proposal_#{spending_proposal2.id}") do - expect(page).to have_content("No admin assigned") - expect(page).to have_content("2 valuators assigned") + end + + context "Index" do + + scenario 'Displaying spending proposals' do + spending_proposal = create(:spending_proposal) + visit admin_spending_proposals_path + + expect(page).to have_content(spending_proposal.title) end - within("#spending_proposal_#{spending_proposal3.id}") do - expect(page).to have_content("Gema") - expect(page).to have_content("No valuators assigned") - end - end + scenario 'Displaying assignments info' do + spending_proposal1 = create(:spending_proposal) + spending_proposal2 = create(:spending_proposal) + spending_proposal3 = create(:spending_proposal) - scenario "Index filtering by geozone", :js do - geozone = create(:geozone, name: "District 9") - create(:spending_proposal, title: "Realocate visitors", geozone: geozone) - create(:spending_proposal, title: "Destroy the city") + valuator1 = create(:valuator, user: create(:user, username: 'Olga')) + valuator2 = create(:valuator, user: create(:user, username: 'Miriam')) + admin = create(:administrator, user: create(:user, username: 'Gema')) - visit admin_spending_proposals_path - expect(page).to have_link("Realocate visitors") - expect(page).to have_link("Destroy the city") + spending_proposal1.valuators << valuator1 + spending_proposal2.valuator_ids = [valuator1.id, valuator2.id] + spending_proposal3.update({administrator_id: admin.id}) - select "District 9", from: "geozone_id" + visit admin_spending_proposals_path - expect(page).to have_link("Realocate visitors") - expect(page).to_not have_link("Destroy the city") + within("#spending_proposal_#{spending_proposal1.id}") do + expect(page).to have_content("No admin assigned") + expect(page).to have_content("Olga") + end - select "All city", from: "geozone_id" + within("#spending_proposal_#{spending_proposal2.id}") do + expect(page).to have_content("No admin assigned") + expect(page).to have_content("2 valuators assigned") + end - expect(page).to have_link("Destroy the city") - expect(page).to_not have_link("Realocate visitors") - - select "All zones", from: "geozone_id" - expect(page).to have_link("Realocate visitors") - expect(page).to have_link("Destroy the city") - end - - scenario "Index filtering by admin", :js do - user = create(:user, username: 'Admin 1') - administrator = create(:administrator, user: user) - - create(:spending_proposal, title: "Realocate visitors", administrator: administrator) - create(:spending_proposal, title: "Destroy the city") - - visit admin_spending_proposals_path - expect(page).to have_link("Realocate visitors") - expect(page).to have_link("Destroy the city") - - select "Admin 1", from: "administrator_id" - - expect(page).to have_link("Realocate visitors") - expect(page).to_not have_link("Destroy the city") - - select "All administrators", from: "administrator_id" - - expect(page).to have_link("Destroy the city") - expect(page).to have_link("Realocate visitors") - end - - scenario "Current filter is properly highlighted" do - filters_links = {'valuation_open' => 'Open', - 'without_admin' => 'Without assigned admin', - 'managed' => 'Managed', - 'valuating' => 'Under valuation', - 'valuation_finished' => 'Valuation finished'} - - visit admin_spending_proposals_path - - expect(page).to_not have_link(filters_links.values.first) - filters_links.keys.drop(1).each { |filter| expect(page).to have_link(filters_links[filter]) } - - filters_links.each_pair do |current_filter, link| - visit admin_spending_proposals_path(filter: current_filter) - - expect(page).to_not have_link(link) - - (filters_links.keys - [current_filter]).each do |filter| - expect(page).to have_link(filters_links[filter]) + within("#spending_proposal_#{spending_proposal3.id}") do + expect(page).to have_content("Gema") + expect(page).to have_content("No valuators assigned") end end - end - scenario "Index filtering by assignment status" do - assigned = create(:spending_proposal, title: "Assigned idea", administrator: create(:administrator)) - valuating = create(:spending_proposal, title: "Evaluating...") - valuating.valuators << create(:valuator) + scenario "Filtering by geozone", :js do + geozone = create(:geozone, name: "District 9") + create(:spending_proposal, title: "Realocate visitors", geozone: geozone) + create(:spending_proposal, title: "Destroy the city") - visit admin_spending_proposals_path(filter: 'valuation_open') + visit admin_spending_proposals_path + expect(page).to have_link("Realocate visitors") + expect(page).to have_link("Destroy the city") - expect(page).to have_content("Assigned idea") - expect(page).to have_content("Evaluating...") + select "District 9", from: "geozone_id" - visit admin_spending_proposals_path(filter: 'without_admin') + expect(page).to have_link("Realocate visitors") + expect(page).to_not have_link("Destroy the city") - expect(page).to have_content("Evaluating...") - expect(page).to_not have_content("Assigned idea") + select "All city", from: "geozone_id" - visit admin_spending_proposals_path(filter: 'managed') + expect(page).to have_link("Destroy the city") + expect(page).to_not have_link("Realocate visitors") - expect(page).to have_content("Assigned idea") - expect(page).to_not have_content("Evaluating...") - end + select "All zones", from: "geozone_id" + expect(page).to have_link("Realocate visitors") + expect(page).to have_link("Destroy the city") + end - scenario "Index filtering by valuation status" do - valuating = create(:spending_proposal, title: "Ongoing valuation") - valuated = create(:spending_proposal, title: "Old idea", valuation_finished: true) - valuating.valuators << create(:valuator) - valuated.valuators << create(:valuator) + scenario "Filtering by admin", :js do + user = create(:user, username: 'Admin 1') + administrator = create(:administrator, user: user) - visit admin_spending_proposals_path(filter: 'valuation_open') + create(:spending_proposal, title: "Realocate visitors", administrator: administrator) + create(:spending_proposal, title: "Destroy the city") - expect(page).to have_content("Ongoing valuation") - expect(page).to_not have_content("Old idea") + visit admin_spending_proposals_path + expect(page).to have_link("Realocate visitors") + expect(page).to have_link("Destroy the city") - visit admin_spending_proposals_path(filter: 'valuating') + select "Admin 1", from: "administrator_id" - expect(page).to have_content("Ongoing valuation") - expect(page).to_not have_content("Old idea") + expect(page).to have_link("Realocate visitors") + expect(page).to_not have_link("Destroy the city") - visit admin_spending_proposals_path(filter: 'valuation_finished') + select "All administrators", from: "administrator_id" - expect(page).to_not have_content("Ongoing valuation") - expect(page).to have_content("Old idea") - end + expect(page).to have_link("Destroy the city") + expect(page).to have_link("Realocate visitors") + end - scenario "Index filtering by tag" do - create(:spending_proposal, title: 'Educate the children', tag_list: 'Education') - create(:spending_proposal, title: 'More schools', tag_list: 'Education') - create(:spending_proposal, title: 'More hospitals', tag_list: 'Health') + scenario "Current filter is properly highlighted" do + filters_links = {'valuation_open' => 'Open', + 'without_admin' => 'Without assigned admin', + 'managed' => 'Managed', + 'valuating' => 'Under valuation', + 'valuation_finished' => 'Valuation finished'} - visit admin_spending_proposals_path + visit admin_spending_proposals_path - expect(page).to have_css(".spending_proposal", count: 3) - expect(page).to have_content("Educate the children") - expect(page).to have_content("More schools") - expect(page).to have_content("More hospitals") + expect(page).to_not have_link(filters_links.values.first) + filters_links.keys.drop(1).each { |filter| expect(page).to have_link(filters_links[filter]) } - visit admin_spending_proposals_path(tag_name: 'Education') + filters_links.each_pair do |current_filter, link| + visit admin_spending_proposals_path(filter: current_filter) + + expect(page).to_not have_link(link) + + (filters_links.keys - [current_filter]).each do |filter| + expect(page).to have_link(filters_links[filter]) + end + end + end + + scenario "Filtering by assignment status" do + assigned = create(:spending_proposal, title: "Assigned idea", administrator: create(:administrator)) + valuating = create(:spending_proposal, title: "Evaluating...") + valuating.valuators << create(:valuator) + + visit admin_spending_proposals_path(filter: 'valuation_open') + + expect(page).to have_content("Assigned idea") + expect(page).to have_content("Evaluating...") + + visit admin_spending_proposals_path(filter: 'without_admin') + + expect(page).to have_content("Evaluating...") + expect(page).to_not have_content("Assigned idea") + + visit admin_spending_proposals_path(filter: 'managed') + + expect(page).to have_content("Assigned idea") + expect(page).to_not have_content("Evaluating...") + end + + scenario "Filtering by valuation status" do + valuating = create(:spending_proposal, title: "Ongoing valuation") + valuated = create(:spending_proposal, title: "Old idea", valuation_finished: true) + valuating.valuators << create(:valuator) + valuated.valuators << create(:valuator) + + visit admin_spending_proposals_path(filter: 'valuation_open') + + expect(page).to have_content("Ongoing valuation") + expect(page).to_not have_content("Old idea") + + visit admin_spending_proposals_path(filter: 'valuating') + + expect(page).to have_content("Ongoing valuation") + expect(page).to_not have_content("Old idea") + + visit admin_spending_proposals_path(filter: 'valuation_finished') + + expect(page).to_not have_content("Ongoing valuation") + expect(page).to have_content("Old idea") + end + + scenario "Filtering by tag" do + create(:spending_proposal, title: 'Educate the children', tag_list: 'Education') + create(:spending_proposal, title: 'More schools', tag_list: 'Education') + create(:spending_proposal, title: 'More hospitals', tag_list: 'Health') + + visit admin_spending_proposals_path + + expect(page).to have_css(".spending_proposal", count: 3) + expect(page).to have_content("Educate the children") + expect(page).to have_content("More schools") + expect(page).to have_content("More hospitals") + + visit admin_spending_proposals_path(tag_name: 'Education') + + expect(page).to have_css(".spending_proposal", count: 2) + expect(page).to have_content("Educate the children") + expect(page).to have_content("More schools") + expect(page).to_not have_content("More hospitals") + end - expect(page).to have_css(".spending_proposal", count: 2) - expect(page).to have_content("Educate the children") - expect(page).to have_content("More schools") - expect(page).to_not have_content("More hospitals") end scenario 'Show' do @@ -215,79 +223,83 @@ feature 'Admin spending proposals' do end end - scenario "Add administrator" do - spending_proposal = create(:spending_proposal) - administrator = create(:administrator, user: create(:user, username: 'Marta', email: 'marta@admins.org')) + context "Edit" do - visit admin_spending_proposal_path(spending_proposal) - click_link 'Edit' + scenario "Add administrator" do + spending_proposal = create(:spending_proposal) + administrator = create(:administrator, user: create(:user, username: 'Marta', email: 'marta@admins.org')) - select 'Marta (marta@admins.org)', from: 'spending_proposal[administrator_id]' - click_button 'Update' + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' - expect(page).to have_content 'Investment project updated succesfully.' - expect(page).to have_content 'Assigned admin: Marta' - end + select 'Marta (marta@admins.org)', from: 'spending_proposal[administrator_id]' + click_button 'Update' - scenario "Add valuators" do - spending_proposal = create(:spending_proposal) - - valuator1 = create(:valuator, user: create(:user, username: 'Valentina', email: 'v1@valuators.org')) - valuator2 = create(:valuator, user: create(:user, username: 'Valerian', email: 'v2@valuators.org')) - valuator3 = create(:valuator, user: create(:user, username: 'Val', email: 'v3@valuators.org')) - - visit admin_spending_proposal_path(spending_proposal) - click_link 'Edit' - - check "spending_proposal_valuator_ids_#{valuator1.id}" - check "spending_proposal_valuator_ids_#{valuator3.id}" - - click_button 'Update' - - expect(page).to have_content 'Investment project updated succesfully.' - - within('#assigned_valuators') do - expect(page).to have_content('Valentina (v1@valuators.org)') - expect(page).to have_content('Val (v3@valuators.org)') - expect(page).to_not have_content('Undefined') - expect(page).to_not have_content('Valerian (v2@valuators.org)') + expect(page).to have_content 'Investment project updated succesfully.' + expect(page).to have_content 'Assigned admin: Marta' end - end - scenario "Adds existing tags", :js do - create(:spending_proposal, tag_list: 'Education, Health') + scenario "Add valuators" do + spending_proposal = create(:spending_proposal) - spending_proposal = create(:spending_proposal) + valuator1 = create(:valuator, user: create(:user, username: 'Valentina', email: 'v1@valuators.org')) + valuator2 = create(:valuator, user: create(:user, username: 'Valerian', email: 'v2@valuators.org')) + valuator3 = create(:valuator, user: create(:user, username: 'Val', email: 'v3@valuators.org')) - visit admin_spending_proposal_path(spending_proposal) - click_link 'Edit' + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' - find('.js-add-tag-link', text: 'Education').click - click_button 'Update' + check "spending_proposal_valuator_ids_#{valuator1.id}" + check "spending_proposal_valuator_ids_#{valuator3.id}" - expect(page).to have_content 'Investment project updated succesfully.' + click_button 'Update' - within "#tags" do - expect(page).to have_content 'Education' - expect(page).to_not have_content 'Health' + expect(page).to have_content 'Investment project updated succesfully.' + + within('#assigned_valuators') do + expect(page).to have_content('Valentina (v1@valuators.org)') + expect(page).to have_content('Val (v3@valuators.org)') + expect(page).to_not have_content('Undefined') + expect(page).to_not have_content('Valerian (v2@valuators.org)') + end end - end - scenario "Adds non existent tags" do - spending_proposal = create(:spending_proposal) + scenario "Adds existing tags", :js do + create(:spending_proposal, tag_list: 'Education, Health') - visit admin_spending_proposal_path(spending_proposal) - click_link 'Edit' + spending_proposal = create(:spending_proposal) - fill_in 'spending_proposal_tag_list', with: 'Refugees, Solidarity' - click_button 'Update' + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' - expect(page).to have_content 'Investment project updated succesfully.' + find('.js-add-tag-link', text: 'Education').click + click_button 'Update' - within "#tags" do - expect(page).to have_content 'Refugees' - expect(page).to have_content 'Solidarity' + expect(page).to have_content 'Investment project updated succesfully.' + + within "#tags" do + expect(page).to have_content 'Education' + expect(page).to_not have_content 'Health' + end end + + scenario "Adds non existent tags" do + spending_proposal = create(:spending_proposal) + + visit admin_spending_proposal_path(spending_proposal) + click_link 'Edit' + + fill_in 'spending_proposal_tag_list', with: 'Refugees, Solidarity' + click_button 'Update' + + expect(page).to have_content 'Investment project updated succesfully.' + + within "#tags" do + expect(page).to have_content 'Refugees' + expect(page).to have_content 'Solidarity' + end + end + end -end +end \ No newline at end of file From ffd09bc49006bd05f3c7caad6c101230e92126e3 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 15:23:01 +0100 Subject: [PATCH 16/26] fixes specs --- spec/models/spending_proposal_spec.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spec/models/spending_proposal_spec.rb b/spec/models/spending_proposal_spec.rb index 9ed96da59..2a10851b6 100644 --- a/spec/models/spending_proposal_spec.rb +++ b/spec/models/spending_proposal_spec.rb @@ -61,15 +61,15 @@ describe SpendingProposal do end end - describe "by_administrator" do + describe "by_admin" do it "should return spending proposals assigned to specific administrator" do spending_proposal1 = create(:spending_proposal, administrator_id: 33) spending_proposal2 = create(:spending_proposal) - by_administrator = SpendingProposal.by_administrator(33) + by_admin = SpendingProposal.by_admin(33) - expect(by_administrator.size).to eq(1) - expect(by_administrator.first).to eq(spending_proposal1) + expect(by_admin.size).to eq(1) + expect(by_admin.first).to eq(spending_proposal1) end end From 35b296cf0e417f528c037f7e51256d549ab2d0f4 Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 8 Mar 2016 15:16:05 +0100 Subject: [PATCH 17/26] Refactor Valuator#name_and_email --- app/models/valuator.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/models/valuator.rb b/app/models/valuator.rb index 4b7d1031f..ab0ea6ece 100644 --- a/app/models/valuator.rb +++ b/app/models/valuator.rb @@ -1,13 +1,9 @@ class Valuator < ActiveRecord::Base belongs_to :user, touch: true - delegate :name, :email, to: :user + delegate :name, :email, :name_and_email, to: :user has_many :valuation_assignments, dependent: :destroy has_many :spending_proposals, through: :valuation_assignments validates :user_id, presence: true, uniqueness: true - - def name_and_email - "#{name} (#{email})" - end end From 2ac12ef4a95f621a38287064aedfbbbdf701fdaa Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 8 Mar 2016 15:26:03 +0100 Subject: [PATCH 18/26] makes admin/spending_proposal/edit visually pleasant --- .../admin/spending_proposals_controller.rb | 2 +- ...g_proposal_data_written_by_author.html.erb | 38 +++++++++ ...roposal_data_written_by_valuators.html.erb | 23 +++++ .../admin/spending_proposals/edit.html.erb | 62 +++++++------- .../admin/spending_proposals/show.html.erb | 84 +++---------------- config/initializers/acts_as_taggable_on.rb | 2 +- config/locales/activerecord.en.yml | 2 + config/locales/activerecord.es.yml | 2 + config/locales/admin.en.yml | 5 ++ config/locales/admin.es.yml | 5 ++ 10 files changed, 121 insertions(+), 104 deletions(-) create mode 100644 app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb create mode 100644 app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb diff --git a/app/controllers/admin/spending_proposals_controller.rb b/app/controllers/admin/spending_proposals_controller.rb index 2ef48f320..3ae4872db 100644 --- a/app/controllers/admin/spending_proposals_controller.rb +++ b/app/controllers/admin/spending_proposals_controller.rb @@ -21,7 +21,7 @@ class Admin::SpendingProposalsController < Admin::BaseController def update if @spending_proposal.update(spending_proposal_params) - redirect_to admin_spending_proposal_path(@spending_proposal), notice: t("flash.actions.update.spending_proposal") + redirect_to admin_spending_proposal_path(@spending_proposal, anchor: 'classification'), notice: t("flash.actions.update.spending_proposal") else render :edit end diff --git a/app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb b/app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb new file mode 100644 index 000000000..dec203ca9 --- /dev/null +++ b/app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb @@ -0,0 +1,38 @@ +

<%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %>

+

<%= @spending_proposal.title %>

+ +
+
+

+ <%= t("admin.spending_proposals.show.geozone") %>: + <%= geozone_name(@spending_proposal) %> +

+
+ +
+

+ <%= t("admin.spending_proposals.show.by") %>: + <%= link_to @spending_proposal.author.name, admin_user_path(@spending_proposal.author) %> +

+
+ +
+

+ <%= t("admin.spending_proposals.show.sent") %>: + <%= l @spending_proposal.created_at, format: :datetime %> +

+
+ +
+ +<% if @spending_proposal.association_name.present? %> +

<%= t("admin.spending_proposals.show.association_name") %>: + <%= @spending_proposal.association_name %> +

+<% end %> + +<% if @spending_proposal.external_url.present? %> +

<%= text_with_links @spending_proposal.external_url %>

+<% end %> + +<%= safe_html_with_links @spending_proposal.description %> diff --git a/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb b/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb new file mode 100644 index 000000000..e231d1d23 --- /dev/null +++ b/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb @@ -0,0 +1,23 @@ +

<%= t("admin.spending_proposals.show.dossier") %>

+ +

<%= t("admin.spending_proposals.show.price") %> (<%= t("admin.spending_proposals.show.currency") %>): + <%= @spending_proposal.price.present? ? @spending_proposal.price : t("admin.spending_proposals.show.undefined") %> +

+

<%= t("admin.spending_proposals.show.price_first_year") %> (<%= t("admin.spending_proposals.show.currency") %>): + <%= @spending_proposal.price_first_year.present? ? @spending_proposal.price_first_year : t("admin.spending_proposals.show.undefined") %> +

+<%= simple_format(safe_html_with_links(@spending_proposal.price_explanation.html_safe), {}, sanitize: false) if @spending_proposal.price_explanation.present? %> + +

<%= t("admin.spending_proposals.show.feasibility") %>: + <%= t("admin.spending_proposals.show.#{@spending_proposal.feasibility}") %> +

+<%= simple_format(safe_html_with_links(@spending_proposal.feasible_explanation.html_safe), {}, sanitize: false) if @spending_proposal.feasible_explanation.present? %> + +<% if @spending_proposal.valuation_finished %> +

<%= t("admin.spending_proposals.show.valuation_finished") %> +<% end %> + +<% if @spending_proposal.internal_comments.present? %> +

<%= t("admin.spending_proposals.show.internal_comments") %>

+ <%= simple_format(safe_html_with_links(@spending_proposal.internal_comments.html_safe), {}, sanitize: false) %> +<% end %> diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index 502c9baae..64148f04b 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -1,37 +1,41 @@ +<%= link_to admin_spending_proposals_path(@spending_proposal), class: 'back' do %> + <%= t("admin.spending_proposals.show.back") %> +<% end %> + +<%= render 'admin/spending_proposals/spending_proposal_data_written_by_author' %> + +

<%= t("admin.spending_proposals.edit.classification") %>

+ <%= form_for @spending_proposal, url: admin_spending_proposal_path(@spending_proposal) do |f| %> - <%= f.select :administrator_id, - @admins.collect { |a| [ "#{a.name} (#{a.email})", a.id ] }, - { include_blank: t("admin.spending_proposals.show.undefined"), - label: false }, - class: "js-submit-on-change" %> + <%= f.select(:administrator_id, + @admins.collect{ |a| [a.name_and_email, a.id ] }, + { include_blank: t("admin.spending_proposals.edit.undefined") }, + class: "small-12 medium-6") %> -
-
- <%= f.collection_check_boxes :valuator_ids, @valuators, :id, :name %> -
+ <%= f.label :valuator_ids, t("admin.spending_proposals.edit.assigned_valuators") %> + <%= f.collection_check_boxes :valuator_ids, @valuators, :id, :name_and_email %> + + + <%= f.label :tag_list, t("admin.spending_proposals.edit.tags") %> +
+ <% @tags.each do |tag| %> + <%= tag.name %> + <% end %>
-
- <%= f.label :tag_list, t("proposals.form.tags_label") %> -

<%= t("proposals.form.tags_instructions") %>

+ <%= f.text_field :tag_list, value: @spending_proposal.tag_list.to_s, + label: false, + placeholder: t("admin.spending_proposals.edit.tags_placeholder"), + class: 'js-tag-list' %> -
- <%= f.label :category_tag_list, t("proposals.form.tag_category_label") %> - <% @tags.each do |tag| %> - <%= tag.name %> - <% end %> -
- -
- <%= f.text_field :tag_list, value: @spending_proposal.tag_list.to_s, - label: false, - placeholder: t("proposals.form.tags_placeholder"), - class: 'js-tag-list' %> -
- -
+

<%= f.submit(class: "button", value: t("admin.spending_proposals.edit.submit_button")) %> -

+

+ +<% end %> + +
+ +<%= render 'admin/spending_proposals/spending_proposal_data_written_by_valuators' %> -<% end %> \ No newline at end of file diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 18e3eec5e..65cf5daf4 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -1,49 +1,10 @@ -<%= link_to :back, class: 'back' do %> +<%= link_to admin_spending_proposals_path, class: 'back' do %> <%= t("admin.spending_proposals.show.back") %> <% end %> -

<%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %> +<%= render 'admin/spending_proposals/spending_proposal_data_written_by_author' %> -

-

<%= @spending_proposal.title %>

- -
-
-

- <%= t("admin.spending_proposals.show.geozone") %>: - <%= geozone_name(@spending_proposal) %> -

-
- -
-

- <%= t("admin.spending_proposals.show.by") %>: - <%= link_to @spending_proposal.author.name, admin_user_path(@spending_proposal.author) %> -

-
- -
-

- <%= t("admin.spending_proposals.show.sent") %>: - <%= l @spending_proposal.created_at, format: :datetime %> -

-
- -
- -<% if @spending_proposal.association_name.present? %> -

<%= t("admin.spending_proposals.show.association_name") %>: - <%= @spending_proposal.association_name %> -

-<% end %> - -<% if @spending_proposal.external_url.present? %> -

<%= text_with_links @spending_proposal.external_url %>

-<% end %> - -<%= safe_html_with_links @spending_proposal.description %> - -

<%= t("admin.spending_proposals.show.classification") %>

+

<%= t("admin.spending_proposals.show.classification") %>

<%= t("admin.spending_proposals.show.assigned_admin") %>: <%= @spending_proposal.administrator.try(:name_and_email) || t("admin.spending_proposals.show.undefined") %> @@ -54,44 +15,21 @@ <%= render 'shared/tags', taggable: @spending_proposal %>

-

+

<%= t("admin.spending_proposals.show.assigned_valuators") %>: -

- <% if @spending_proposal.valuators.any? %> - <%= @spending_proposal.valuators.collect(&:name_and_email).join(', ') %> - <% else %> - <%= t("admin.spending_proposals.show.undefined") %> - <% end %> -
+ <% if @spending_proposal.valuators.any? %> + <%= @spending_proposal.valuators.collect(&:name_and_email).join(', ') %> + <% else %> + <%= t("admin.spending_proposals.show.undefined") %> + <% end %>

<%= link_to t("admin.spending_proposals.show.edit_button"), - edit_admin_spending_proposal_path(@spending_proposal), + edit_admin_spending_proposal_path(@spending_proposal, anchor: "form"), class: "button" %>
-

<%= t("admin.spending_proposals.show.dossier") %>

+<%= render 'admin/spending_proposals/spending_proposal_data_written_by_valuators' %> -

<%= t("admin.spending_proposals.show.price") %> (<%= t("admin.spending_proposals.show.currency") %>): - <%= @spending_proposal.price.present? ? @spending_proposal.price : t("admin.spending_proposals.show.undefined") %> -

-

<%= t("admin.spending_proposals.show.price_first_year") %> (<%= t("admin.spending_proposals.show.currency") %>): - <%= @spending_proposal.price_first_year.present? ? @spending_proposal.price_first_year : t("admin.spending_proposals.show.undefined") %> -

-<%= simple_format(safe_html_with_links(@spending_proposal.price_explanation.html_safe), {}, sanitize: false) if @spending_proposal.price_explanation.present? %> - -

<%= t("admin.spending_proposals.show.feasibility") %>: - <%= t("admin.spending_proposals.show.#{@spending_proposal.feasibility}") %> -

-<%= simple_format(safe_html_with_links(@spending_proposal.feasible_explanation.html_safe), {}, sanitize: false) if @spending_proposal.feasible_explanation.present? %> - -<% if @spending_proposal.valuation_finished %> -

<%= t("admin.spending_proposals.show.valuation_finished") %> -<% end %> - -<% if @spending_proposal.internal_comments.present? %> -

<%= t("admin.spending_proposals.show.internal_comments") %>

- <%= simple_format(safe_html_with_links(@spending_proposal.internal_comments.html_safe), {}, sanitize: false) %> -<% end %> diff --git a/config/initializers/acts_as_taggable_on.rb b/config/initializers/acts_as_taggable_on.rb index d9882dff8..7b534897a 100644 --- a/config/initializers/acts_as_taggable_on.rb +++ b/config/initializers/acts_as_taggable_on.rb @@ -39,7 +39,7 @@ module ActsAsTaggableOn end def self.spending_proposal_tags - ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings).uniq + ActsAsTaggableOn::Tag.where('taggings.taggable_type' => 'SpendingProposal').includes(:taggings).order(:name).uniq end private diff --git a/config/locales/activerecord.en.yml b/config/locales/activerecord.en.yml index 9451a2875..faebcb449 100644 --- a/config/locales/activerecord.en.yml +++ b/config/locales/activerecord.en.yml @@ -77,3 +77,5 @@ en: attributes: tag_list: less_than_or_equal_to: "tags must be less than or equal to %{count}" + spending_proposal: + administrator_id: "Administrator" diff --git a/config/locales/activerecord.es.yml b/config/locales/activerecord.es.yml index c18288bdc..50dd53006 100644 --- a/config/locales/activerecord.es.yml +++ b/config/locales/activerecord.es.yml @@ -67,6 +67,8 @@ es: organization: name: "Nombre de organización" responsible_name: "Persona responsable del colectivo" + spending_proposal: + administrator_id: "Administrador" errors: models: debate: diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 9b5d8f5c5..b86c01a23 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -190,7 +190,12 @@ en: assign: Assign tags: Tags edit: + classification: Clasification + assigned_valuators: Valuators submit_button: Update + tags: Tags + tags_placeholder: "Write the tags you want separated by commas (,)" + undefined: Undefined stats: show: stats_title: Stats diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 8b8624bde..a0ce036e4 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -190,7 +190,12 @@ es: assign: Asignar tags: Etiquetas edit: + classification: Clasificación + assigned_valuators: Evaluadores submit_button: Actualizar + tags: Etiquetas + tags_placeholder: "Escribe las etiquetas que desees separadas por comas (,)" + undefined: Sin definir stats: show: stats_title: Estadísticas From 13fea09613b9234b90fdd16ba0ea09a1908fcce1 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 15:43:13 +0100 Subject: [PATCH 19/26] adds indentation to spending proposals show --- ...roposal_data_written_by_valuators.html.erb | 23 ---------- ...r.html.erb => _written_by_author.html.erb} | 0 .../_written_by_valuators.html.erb | 46 +++++++++++++++++++ .../admin/spending_proposals/edit.html.erb | 6 +-- .../admin/spending_proposals/show.html.erb | 6 +-- .../spending_proposals/show.html.erb | 39 ++++++++++++---- 6 files changed, 80 insertions(+), 40 deletions(-) delete mode 100644 app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb rename app/views/admin/spending_proposals/{_spending_proposal_data_written_by_author.html.erb => _written_by_author.html.erb} (100%) create mode 100644 app/views/admin/spending_proposals/_written_by_valuators.html.erb diff --git a/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb b/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb deleted file mode 100644 index e231d1d23..000000000 --- a/app/views/admin/spending_proposals/_spending_proposal_data_written_by_valuators.html.erb +++ /dev/null @@ -1,23 +0,0 @@ -

<%= t("admin.spending_proposals.show.dossier") %>

- -

<%= t("admin.spending_proposals.show.price") %> (<%= t("admin.spending_proposals.show.currency") %>): - <%= @spending_proposal.price.present? ? @spending_proposal.price : t("admin.spending_proposals.show.undefined") %> -

-

<%= t("admin.spending_proposals.show.price_first_year") %> (<%= t("admin.spending_proposals.show.currency") %>): - <%= @spending_proposal.price_first_year.present? ? @spending_proposal.price_first_year : t("admin.spending_proposals.show.undefined") %> -

-<%= simple_format(safe_html_with_links(@spending_proposal.price_explanation.html_safe), {}, sanitize: false) if @spending_proposal.price_explanation.present? %> - -

<%= t("admin.spending_proposals.show.feasibility") %>: - <%= t("admin.spending_proposals.show.#{@spending_proposal.feasibility}") %> -

-<%= simple_format(safe_html_with_links(@spending_proposal.feasible_explanation.html_safe), {}, sanitize: false) if @spending_proposal.feasible_explanation.present? %> - -<% if @spending_proposal.valuation_finished %> -

<%= t("admin.spending_proposals.show.valuation_finished") %> -<% end %> - -<% if @spending_proposal.internal_comments.present? %> -

<%= t("admin.spending_proposals.show.internal_comments") %>

- <%= simple_format(safe_html_with_links(@spending_proposal.internal_comments.html_safe), {}, sanitize: false) %> -<% end %> diff --git a/app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb b/app/views/admin/spending_proposals/_written_by_author.html.erb similarity index 100% rename from app/views/admin/spending_proposals/_spending_proposal_data_written_by_author.html.erb rename to app/views/admin/spending_proposals/_written_by_author.html.erb diff --git a/app/views/admin/spending_proposals/_written_by_valuators.html.erb b/app/views/admin/spending_proposals/_written_by_valuators.html.erb new file mode 100644 index 000000000..1361a5dc1 --- /dev/null +++ b/app/views/admin/spending_proposals/_written_by_valuators.html.erb @@ -0,0 +1,46 @@ +

<%= t("admin.spending_proposals.show.dossier") %>

+ +

+ + <%= t("admin.spending_proposals.show.price") %> + (<%= t("admin.spending_proposals.show.currency") %>): + + <% if @spending_proposal.price.present? %> + <%= @spending_proposal.price %> + <% else %> + <%= t("admin.spending_proposals.show.undefined") %> + <% end %> +

+ +

+ + <%= t("admin.spending_proposals.show.price_first_year") %> + (<%= t("admin.spending_proposals.show.currency") %>): + + + <% if @spending_proposal.price_first_year.present? %> + <%= @spending_proposal.price_first_year %> + <% else %> + <%= t("admin.spending_proposals.show.undefined") %> + <% end %> +

+ +<%= explanation_field @spending_proposal.price_explanation %> + +

+ <%= t("admin.spending_proposals.show.feasibility") %>: + <%= t("admin.spending_proposals.show.#{@spending_proposal.feasibility}") %> +

+ +<%= explanation_field @spending_proposal.feasible_explanation %> + +<% if @spending_proposal.valuation_finished %> +

+ <%= t("admin.spending_proposals.show.valuation_finished") %> +

+<% end %> + +<% if @spending_proposal.internal_comments.present? %> +

<%= t("admin.spending_proposals.show.internal_comments") %>

+ <%= explanation_field @spending_proposal.internal_comments %> +<% end %> diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index 64148f04b..a2e45dd04 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -2,7 +2,7 @@ <%= t("admin.spending_proposals.show.back") %> <% end %> -<%= render 'admin/spending_proposals/spending_proposal_data_written_by_author' %> +<%= render 'written_by_author' %>

<%= t("admin.spending_proposals.edit.classification") %>

@@ -36,6 +36,4 @@ <% end %>
- -<%= render 'admin/spending_proposals/spending_proposal_data_written_by_valuators' %> - +<%= render 'written_by_valuators' %> \ No newline at end of file diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 65cf5daf4..7c8e943af 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -2,7 +2,7 @@ <%= t("admin.spending_proposals.show.back") %> <% end %> -<%= render 'admin/spending_proposals/spending_proposal_data_written_by_author' %> +<%= render 'written_by_author' %>

<%= t("admin.spending_proposals.show.classification") %>

@@ -30,6 +30,4 @@
-<%= render 'admin/spending_proposals/spending_proposal_data_written_by_valuators' %> - - +<%= render 'written_by_valuators' %> \ No newline at end of file diff --git a/app/views/valuation/spending_proposals/show.html.erb b/app/views/valuation/spending_proposals/show.html.erb index 16f83dbe4..7abb62452 100644 --- a/app/views/valuation/spending_proposals/show.html.erb +++ b/app/views/valuation/spending_proposals/show.html.erb @@ -32,7 +32,7 @@

<%= t("valuation.spending_proposals.show.assigned_admin") %>: <% if @spending_proposal.administrator.present? %> - <%= @spending_proposal.administrator.name %> (<%= @spending_proposal.administrator.email %>) + <%= @spending_proposal.administrator.name_and_email %> <% else %> <%= t("valuation.spending_proposals.show.undefined") %> <% end %> @@ -42,7 +42,7 @@

    <% @spending_proposal.valuators.each do |valuator| %> -
  • <%= valuator.name %> (<%= valuator.email %>)
  • +
  • <%= valuator.name_and_email %>
  • <% end %> <% if @spending_proposal.valuators.empty? %> @@ -58,19 +58,40 @@

    - <%= t("valuation.spending_proposals.show.price") %> (<%= t("valuation.spending_proposals.show.currency") %>): - <%= @spending_proposal.price.presence or t("valuation.spending_proposals.show.undefined") %> + + <%= t("valuation.spending_proposals.show.price") %> + (<%= t("valuation.spending_proposals.show.currency") %>): + + + <% if @spending_proposal.price.present? %> + <%= @spending_proposal.price %> + <% else %> + <% t("valuation.spending_proposals.show.undefined") %> + <% end %>

    +

    - <%= t("valuation.spending_proposals.show.price_first_year") %> (<%= t("valuation.spending_proposals.show.currency") %>): - <%= @spending_proposal.price_first_year.presence or t("valuation.spending_proposals.show.undefined") %> + + <%= t("valuation.spending_proposals.show.price_first_year") %> + (<%= t("valuation.spending_proposals.show.currency") %>): + + + <% if @spending_proposal.price_first_year.present? %> + <%= @spending_proposal.price_first_year %> + <% else %> + <%= t("valuation.spending_proposals.show.undefined") %> + <% end %>

    <%= explanation_field @spending_proposal.price_explanation %>

    <%= t("valuation.spending_proposals.show.time_scope") %>: - <%= @spending_proposal.time_scope.presence or t("valuation.spending_proposals.show.undefined") %> + <% if @spending_proposal.time_scope.present? %> + <%= @spending_proposal.time_scope %> + <% else %> + <%= t("valuation.spending_proposals.show.undefined") %> + <% end %>

    @@ -81,12 +102,12 @@ <%= explanation_field @spending_proposal.feasible_explanation %> <% if @spending_proposal.valuation_finished %> -

    +

    <%= t("valuation.spending_proposals.show.valuation_finished") %>

    <% end %> <% if @spending_proposal.internal_comments.present? %>

    <%= t("valuation.spending_proposals.show.internal_comments") %>

    - <%= simple_format_no_tags_no_sanitize(safe_html_with_links(@spending_proposal.internal_comments.html_safe)) %> + <%= explanation_field @spending_proposal.internal_comments %> <% end %> From 37c1c31bfe5c21fa11af7007ddd61da952656127 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 15:45:58 +0100 Subject: [PATCH 20/26] refactors Admin#name_and_email --- app/models/administrator.rb | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/app/models/administrator.rb b/app/models/administrator.rb index fbf27ec7a..6cfafe8d9 100644 --- a/app/models/administrator.rb +++ b/app/models/administrator.rb @@ -1,10 +1,6 @@ class Administrator < ActiveRecord::Base belongs_to :user, touch: true - delegate :name, :email, to: :user + delegate :name, :email, :name_and_email, to: :user validates :user_id, presence: true, uniqueness: true - - def name_and_email - "#{name} (#{email})" - end end From a646d5ae6b919bc698781893f0be356732f4ac79 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 16:07:24 +0100 Subject: [PATCH 21/26] removes duplication between admin and valuators spending proposals --- .../admin/spending_proposals/edit.html.erb | 2 +- .../admin/spending_proposals/show.html.erb | 2 +- .../_written_by_valuators.html.erb | 0 .../spending_proposals/show.html.erb | 55 +------------------ 4 files changed, 3 insertions(+), 56 deletions(-) rename app/views/{admin => valuation}/spending_proposals/_written_by_valuators.html.erb (100%) diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index a2e45dd04..e695c3a97 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -36,4 +36,4 @@ <% end %>
    -<%= render 'written_by_valuators' %> \ No newline at end of file +<%= render 'valuation/spending_proposals/written_by_valuators' %> \ No newline at end of file diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 7c8e943af..bb0288fae 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -30,4 +30,4 @@
    -<%= render 'written_by_valuators' %> \ No newline at end of file +<%= render 'valuation/spending_proposals/written_by_valuators' %> \ No newline at end of file diff --git a/app/views/admin/spending_proposals/_written_by_valuators.html.erb b/app/views/valuation/spending_proposals/_written_by_valuators.html.erb similarity index 100% rename from app/views/admin/spending_proposals/_written_by_valuators.html.erb rename to app/views/valuation/spending_proposals/_written_by_valuators.html.erb diff --git a/app/views/valuation/spending_proposals/show.html.erb b/app/views/valuation/spending_proposals/show.html.erb index 7abb62452..b5b71fcdf 100644 --- a/app/views/valuation/spending_proposals/show.html.erb +++ b/app/views/valuation/spending_proposals/show.html.erb @@ -57,57 +57,4 @@ <%= link_to t("valuation.spending_proposals.show.edit_dossier"), edit_valuation_spending_proposal_path(@spending_proposal) %>

    -

    - - <%= t("valuation.spending_proposals.show.price") %> - (<%= t("valuation.spending_proposals.show.currency") %>): - - - <% if @spending_proposal.price.present? %> - <%= @spending_proposal.price %> - <% else %> - <% t("valuation.spending_proposals.show.undefined") %> - <% end %> -

    - -

    - - <%= t("valuation.spending_proposals.show.price_first_year") %> - (<%= t("valuation.spending_proposals.show.currency") %>): - - - <% if @spending_proposal.price_first_year.present? %> - <%= @spending_proposal.price_first_year %> - <% else %> - <%= t("valuation.spending_proposals.show.undefined") %> - <% end %> -

    - -<%= explanation_field @spending_proposal.price_explanation %> - -

    - <%= t("valuation.spending_proposals.show.time_scope") %>: - <% if @spending_proposal.time_scope.present? %> - <%= @spending_proposal.time_scope %> - <% else %> - <%= t("valuation.spending_proposals.show.undefined") %> - <% end %> -

    - -

    - <%= t("valuation.spending_proposals.show.feasibility") %>: - <%= t("valuation.spending_proposals.show.#{@spending_proposal.feasibility}") %> -

    - -<%= explanation_field @spending_proposal.feasible_explanation %> - -<% if @spending_proposal.valuation_finished %> -

    - <%= t("valuation.spending_proposals.show.valuation_finished") %> -

    -<% end %> - -<% if @spending_proposal.internal_comments.present? %> -

    <%= t("valuation.spending_proposals.show.internal_comments") %>

    - <%= explanation_field @spending_proposal.internal_comments %> -<% end %> +<%= render 'written_by_valuators' %> \ No newline at end of file From 3b0cec558714800a1593154c6f84b0ea81fcf047 Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 8 Mar 2016 16:21:11 +0100 Subject: [PATCH 22/26] displays tags as strings instead of links in admin/s_p/show --- app/views/admin/spending_proposals/show.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index bb0288fae..3a7595017 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -12,7 +12,8 @@

    <%= t("admin.spending_proposals.show.tags") %>: - <%= render 'shared/tags', taggable: @spending_proposal %> + + <%= @spending_proposal.tags.pluck(:name).join(', ') %>

    @@ -30,4 +31,4 @@


    -<%= render 'valuation/spending_proposals/written_by_valuators' %> \ No newline at end of file +<%= render 'valuation/spending_proposals/written_by_valuators' %> From 0eca4d5d48f5fb0df5b40ba0ba2ef5fad52c24e1 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 16:26:02 +0100 Subject: [PATCH 23/26] fixes specs --- .../admin/spending_proposals/show.html.erb | 3 +- .../_written_by_valuators.html.erb | 31 ++++++++++++------- config/locales/admin.en.yml | 16 ---------- config/locales/admin.es.yml | 16 ---------- 4 files changed, 21 insertions(+), 45 deletions(-) diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 3a7595017..8584c34ec 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -31,4 +31,5 @@
    -<%= render 'valuation/spending_proposals/written_by_valuators' %> +

    <%= t("admin.spending_proposals.show.dossier") %>

    +<%= render 'valuation/spending_proposals/written_by_valuators' %> \ No newline at end of file diff --git a/app/views/valuation/spending_proposals/_written_by_valuators.html.erb b/app/views/valuation/spending_proposals/_written_by_valuators.html.erb index 1361a5dc1..8b704950e 100644 --- a/app/views/valuation/spending_proposals/_written_by_valuators.html.erb +++ b/app/views/valuation/spending_proposals/_written_by_valuators.html.erb @@ -1,46 +1,53 @@ -

    <%= t("admin.spending_proposals.show.dossier") %>

    -

    - <%= t("admin.spending_proposals.show.price") %> - (<%= t("admin.spending_proposals.show.currency") %>): + <%= t("valuation.spending_proposals.show.price") %> + (<%= t("valuation.spending_proposals.show.currency") %>): <% if @spending_proposal.price.present? %> <%= @spending_proposal.price %> <% else %> - <%= t("admin.spending_proposals.show.undefined") %> + <%= t("valuation.spending_proposals.show.undefined") %> <% end %>

    - <%= t("admin.spending_proposals.show.price_first_year") %> - (<%= t("admin.spending_proposals.show.currency") %>): + <%= t("valuation.spending_proposals.show.price_first_year") %> + (<%= t("valuation.spending_proposals.show.currency") %>): <% if @spending_proposal.price_first_year.present? %> <%= @spending_proposal.price_first_year %> <% else %> - <%= t("admin.spending_proposals.show.undefined") %> + <%= t("valuation.spending_proposals.show.undefined") %> <% end %>

    <%= explanation_field @spending_proposal.price_explanation %> +

    + <%= t("valuation.spending_proposals.show.time_scope") %>: + <% if @spending_proposal.time_scope.present? %> + <%= @spending_proposal.time_scope %> + <% else %> + <%= t("valuation.spending_proposals.show.undefined") %> + <% end %> +

    +

    - <%= t("admin.spending_proposals.show.feasibility") %>: - <%= t("admin.spending_proposals.show.#{@spending_proposal.feasibility}") %> + <%= t("valuation.spending_proposals.show.feasibility") %>: + <%= t("valuation.spending_proposals.show.#{@spending_proposal.feasibility}") %>

    <%= explanation_field @spending_proposal.feasible_explanation %> <% if @spending_proposal.valuation_finished %>

    - <%= t("admin.spending_proposals.show.valuation_finished") %> + <%= t("valuation.spending_proposals.show.valuation_finished") %>

    <% end %> <% if @spending_proposal.internal_comments.present? %> -

    <%= t("admin.spending_proposals.show.internal_comments") %>

    +

    <%= t("valuation.spending_proposals.show.internal_comments") %>

    <%= explanation_field @spending_proposal.internal_comments %> <% end %> diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index b86c01a23..1ee1f72a4 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -173,22 +173,6 @@ en: sent: Sent geozone: Scope dossier: Dossier - price: Price - price_first_year: Cost during the first year - currency: "€" - feasibility: Feasibility - feasible: Feasible - not_feasible: Not feasible - undefined: Undefined - valuation_finished: Valuation finished - internal_comments: Internal comments - classification: Clasificación - assigned_admin: Assigned admin - assigned_valuators: Assigned valuators - assign_valuators: Assign valuators - no_valuators: There is not any valuator user - assign: Assign - tags: Tags edit: classification: Clasification assigned_valuators: Valuators diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index a0ce036e4..993a3269a 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -173,22 +173,6 @@ es: sent: Fecha geozone: Ámbito dossier: Informe - price: Coste - price_first_year: Coste en el primer año - currency: "€" - feasibility: Viabilidad - feasible: Viable - not_feasible: No viable - undefined: Sin definir - valuation_finished: Informe finalizado - internal_comments: Commentarios internos - classification: Clasificación - assigned_admin: Administrador asignado - assigned_valuators: Evaluadores asignados - assign_valuators: Asignar evaluadores - no_valuators: No hay ningún usuario evaluador - assign: Asignar - tags: Etiquetas edit: classification: Clasificación assigned_valuators: Evaluadores From 7cf66f2b5d299401d2c4404f0a34611206bef610 Mon Sep 17 00:00:00 2001 From: rgarcia Date: Tue, 8 Mar 2016 16:30:29 +0100 Subject: [PATCH 24/26] displays one valuator per line --- app/views/admin/spending_proposals/edit.html.erb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/views/admin/spending_proposals/edit.html.erb b/app/views/admin/spending_proposals/edit.html.erb index e695c3a97..10b99acce 100644 --- a/app/views/admin/spending_proposals/edit.html.erb +++ b/app/views/admin/spending_proposals/edit.html.erb @@ -14,8 +14,9 @@ class: "small-12 medium-6") %> <%= f.label :valuator_ids, t("admin.spending_proposals.edit.assigned_valuators") %> - <%= f.collection_check_boxes :valuator_ids, @valuators, :id, :name_and_email %> - + <%= f.collection_check_boxes :valuator_ids, @valuators, :id, :name_and_email do |b| %> + <%= b.label { b.check_box + b.text } %> + <% end %> <%= f.label :tag_list, t("admin.spending_proposals.edit.tags") %>
    From dee52c279f136139fc506973b7a3cacae965df4f Mon Sep 17 00:00:00 2001 From: Alberto Garcia Cabeza Date: Tue, 8 Mar 2016 17:13:08 +0100 Subject: [PATCH 25/26] Improves styles --- app/assets/stylesheets/admin.scss | 7 +++- .../_written_by_author.html.erb | 18 ++++---- .../admin/spending_proposals/index.html.erb | 41 ++++++++----------- config/locales/admin.en.yml | 10 +++-- config/locales/admin.es.yml | 10 +++-- 5 files changed, 46 insertions(+), 40 deletions(-) diff --git a/app/assets/stylesheets/admin.scss b/app/assets/stylesheets/admin.scss index 4f6d1f7a4..0771f0ee1 100644 --- a/app/assets/stylesheets/admin.scss +++ b/app/assets/stylesheets/admin.scss @@ -332,7 +332,7 @@ body.admin { } } -.account-info, .login-as { +.account-info, .login-as, .info { background-color: #e7e7e7; border-radius: rem-calc(3); font-size: rem-calc(16); @@ -344,3 +344,8 @@ body.admin { font-size: rem-calc(18); } } + +.info p { + margin-bottom: 0; +} + diff --git a/app/views/admin/spending_proposals/_written_by_author.html.erb b/app/views/admin/spending_proposals/_written_by_author.html.erb index dec203ca9..a8eb9e758 100644 --- a/app/views/admin/spending_proposals/_written_by_author.html.erb +++ b/app/views/admin/spending_proposals/_written_by_author.html.erb @@ -1,22 +1,26 @@ -

    <%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %>

    -

    <%= @spending_proposal.title %>

    +
    + <%= t "admin.spending_proposals.show.heading", id: @spending_proposal.id %> +
    -
    -
    +
    +

    <%= @spending_proposal.title %>

    + +
    +

    <%= t("admin.spending_proposals.show.geozone") %>: <%= geozone_name(@spending_proposal) %>

    -
    +

    <%= t("admin.spending_proposals.show.by") %>: <%= link_to @spending_proposal.author.name, admin_user_path(@spending_proposal.author) %>

    -
    +

    <%= t("admin.spending_proposals.show.sent") %>: <%= l @spending_proposal.created_at, format: :datetime %> @@ -32,7 +36,7 @@ <% end %> <% if @spending_proposal.external_url.present? %> -

    <%= text_with_links @spending_proposal.external_url %>

    +

    <%= text_with_links @spending_proposal.external_url %> 

    <% end %> <%= safe_html_with_links @spending_proposal.description %> diff --git a/app/views/admin/spending_proposals/index.html.erb b/app/views/admin/spending_proposals/index.html.erb index b40c63ab4..83903cc2e 100644 --- a/app/views/admin/spending_proposals/index.html.erb +++ b/app/views/admin/spending_proposals/index.html.erb @@ -1,27 +1,27 @@

    <%= t("admin.spending_proposals.index.title") %>

    -
    +
    <%= form_tag admin_spending_proposals_path, method: :get, enforce_utf8: false do %> -
    - <%= select_tag :tag_name, - options_for_select(spending_proposal_tags_select_options, params[:tag_name]), - { prompt: t("admin.spending_proposals.index.tags_filter_all"), - label: false, - class: "js-submit-on-change" } %> +
    + <%= select_tag :administrator_id, + options_for_select(admin_select_options, params[:administrator_id]), + { prompt: t("admin.spending_proposals.index.administrator_filter_all"), + label: false, + class: "js-submit-on-change" } %>
    -
    +
    <%= select_tag :geozone_id, options_for_select(geozone_select_options.unshift([t("geozones.none"), "all"]), params[:geozone_id]), { prompt: t("admin.spending_proposals.index.geozone_filter_all"), label: false, class: "js-submit-on-change" } %>
    -
    - <%= select_tag :administrator_id, - options_for_select(admin_select_options, params[:administrator_id]), - { prompt: t("admin.spending_proposals.index.administrator_filter_all"), - label: false, - class: "js-submit-on-change" } %> +
    + <%= select_tag :tag_name, + options_for_select(spending_proposal_tags_select_options, params[:tag_name]), + { prompt: t("admin.spending_proposals.index.tags_filter_all"), + label: false, + class: "js-submit-on-change" } %>
    <% end %>
    @@ -41,23 +41,16 @@
<%= spending_proposal.id %> <% if spending_proposal.administrator.present? %> - <%= spending_proposal.administrator.name %> + <%= spending_proposal.administrator.name %> <% else %> <%= t("admin.spending_proposals.index.no_admin_assigned") %> <% end %> - <% case spending_proposal.valuators.size %> - <% when 0 %> + <% if spending_proposal.valuators.size == 0 %> <%= t("admin.spending_proposals.index.no_valuators_assigned") %> - <% when 1 %> - - <%= spending_proposal.valuators.first.name %> - <% else %> - - <%= t('admin.spending_proposals.index.valuators_assigned', count: spending_proposal.valuators.size) %> - + <%= spending_proposal.valuators.collect(&:name).join(', ') %> <% end %> diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 1ee1f72a4..3a8d1bf84 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -158,14 +158,14 @@ en: valuating: Under valuation valuation_finished: Valuation finished title: Investment projects for participatory budgeting - admin_assigned: Assigned administrator + assigned_admin: Assigned administrator no_admin_assigned: No admin assigned - valuators_assigned: - one: Assigned valuator - other: "%{count} valuators assigned" no_valuators_assigned: No valuators assigned show: + assigned_admin: Assigned administrator + assigned_valuators: Assigned valuators back: Back + classification: Clasification heading: "Investment project %{id}" edit_button: Edit association_name: Association @@ -173,6 +173,8 @@ en: sent: Sent geozone: Scope dossier: Dossier + tags: Tags + undefined: Undefined edit: classification: Clasification assigned_valuators: Valuators diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 993a3269a..81af24d36 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -158,14 +158,14 @@ es: valuating: En evaluación valuation_finished: Evaluación finalizada title: Propuestas de inversión para presupuestos participativos - admin_assigned: Administrador asignado + assigned_admin: Administrador asignado no_admin_assigned: Sin admin asignado - valuators_assigned: - one: Evaluador asignado - other: "%{count} evaluadores asignados" no_valuators_assigned: Sin evaluador show: + assigned_admin: Administrador asignado + assigned_valuators: Evaluadores asignados back: Volver + classification: Clasificación heading: Propuesta de inversión %{id} edit_button: Editar association_name: Asociación @@ -173,6 +173,8 @@ es: sent: Fecha geozone: Ámbito dossier: Informe + tags: Etiquetas + undefined: Sin definir edit: classification: Clasificación assigned_valuators: Evaluadores From 8db6b3fa696c4f437c8b4e4d72422c8ae96004b9 Mon Sep 17 00:00:00 2001 From: kikito Date: Tue, 8 Mar 2016 17:38:52 +0100 Subject: [PATCH 26/26] fixes specs --- app/views/admin/spending_proposals/show.html.erb | 4 ++-- spec/features/admin/spending_proposals_spec.rb | 7 ++++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/app/views/admin/spending_proposals/show.html.erb b/app/views/admin/spending_proposals/show.html.erb index 8584c34ec..304e6f792 100644 --- a/app/views/admin/spending_proposals/show.html.erb +++ b/app/views/admin/spending_proposals/show.html.erb @@ -10,7 +10,7 @@ <%= @spending_proposal.administrator.try(:name_and_email) || t("admin.spending_proposals.show.undefined") %>

-

+

<%= t("admin.spending_proposals.show.tags") %>: <%= @spending_proposal.tags.pluck(:name).join(', ') %> @@ -32,4 +32,4 @@


<%= t("admin.spending_proposals.show.dossier") %>

-<%= render 'valuation/spending_proposals/written_by_valuators' %> \ No newline at end of file +<%= render 'valuation/spending_proposals/written_by_valuators' %> diff --git a/spec/features/admin/spending_proposals_spec.rb b/spec/features/admin/spending_proposals_spec.rb index 0035af8ae..776f55d45 100644 --- a/spec/features/admin/spending_proposals_spec.rb +++ b/spec/features/admin/spending_proposals_spec.rb @@ -47,7 +47,8 @@ feature 'Admin spending proposals' do within("#spending_proposal_#{spending_proposal2.id}") do expect(page).to have_content("No admin assigned") - expect(page).to have_content("2 valuators assigned") + expect(page).to have_content("Olga") + expect(page).to have_content("Miriam") end within("#spending_proposal_#{spending_proposal3.id}") do @@ -236,7 +237,7 @@ feature 'Admin spending proposals' do click_button 'Update' expect(page).to have_content 'Investment project updated succesfully.' - expect(page).to have_content 'Assigned admin: Marta' + expect(page).to have_content 'Assigned administrator: Marta' end scenario "Add valuators" do @@ -302,4 +303,4 @@ feature 'Admin spending proposals' do end -end \ No newline at end of file +end