From 45d91a7e502eaeb99062b088dba5213b2a24babb Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 19:27:26 +0200 Subject: [PATCH 01/12] Add Poll booth_assignments and :Poll::BoothAssignment manage routes, actions and views --- .../poll/booth_assignments_controller.rb | 4 +++ .../admin/poll/polls_controller.rb | 4 +++ app/models/abilities/administrator.rb | 4 +-- app/views/admin/_menu.html.erb | 7 +++++- .../poll/booth_assignments/manage.html.erb | 25 +++++++++++++++++++ .../poll/polls/booth_assignments.html.erb | 18 +++++++++++++ config/locales/en/admin.yml | 1 + config/locales/es/admin.yml | 1 + config/routes.rb | 4 ++- 9 files changed, 64 insertions(+), 4 deletions(-) create mode 100644 app/views/admin/poll/booth_assignments/manage.html.erb create mode 100644 app/views/admin/poll/polls/booth_assignments.html.erb diff --git a/app/controllers/admin/poll/booth_assignments_controller.rb b/app/controllers/admin/poll/booth_assignments_controller.rb index 7998f29a2..221a623ef 100644 --- a/app/controllers/admin/poll/booth_assignments_controller.rb +++ b/app/controllers/admin/poll/booth_assignments_controller.rb @@ -45,6 +45,10 @@ class Admin::Poll::BoothAssignmentsController < Admin::Poll::BaseController redirect_to admin_poll_booth_assignments_path(@booth_assignment.poll_id), notice: notice end + def manage + @booths = ::Poll::Booth.all + end + private def load_booth_assignment diff --git a/app/controllers/admin/poll/polls_controller.rb b/app/controllers/admin/poll/polls_controller.rb index 5103275fb..8ba6e934e 100644 --- a/app/controllers/admin/poll/polls_controller.rb +++ b/app/controllers/admin/poll/polls_controller.rb @@ -47,6 +47,10 @@ class Admin::Poll::PollsController < Admin::Poll::BaseController redirect_to admin_poll_path(@poll), notice: notice end + def booth_assignments + @polls = Poll.current_or_incoming + end + private def load_geozones diff --git a/app/models/abilities/administrator.rb b/app/models/abilities/administrator.rb index 1bc8d5e0c..704f9be24 100644 --- a/app/models/abilities/administrator.rb +++ b/app/models/abilities/administrator.rb @@ -56,10 +56,10 @@ module Abilities can [:index, :create, :edit, :update, :destroy], Geozone - can [:read, :create, :update, :destroy, :add_question, :search_booths, :search_officers], Poll + can [:read, :create, :update, :destroy, :add_question, :search_booths, :search_officers, :booth_assignments], Poll can [:read, :create, :update, :destroy, :available], Poll::Booth can [:search, :create, :index, :destroy], ::Poll::Officer - can [:create, :destroy], ::Poll::BoothAssignment + can [:create, :destroy, :manage], ::Poll::BoothAssignment can [:create, :destroy], ::Poll::OfficerAssignment can [:read, :create, :update], Poll::Question can :destroy, Poll::Question # , comments_count: 0, votes_up: 0 diff --git a/app/views/admin/_menu.html.erb b/app/views/admin/_menu.html.erb index f2af2c116..0518aa0e3 100644 --- a/app/views/admin/_menu.html.erb +++ b/app/views/admin/_menu.html.erb @@ -60,7 +60,8 @@ <%= t("admin.menu.title_polls") %> <% end %> diff --git a/app/views/admin/poll/booth_assignments/manage.html.erb b/app/views/admin/poll/booth_assignments/manage.html.erb new file mode 100644 index 000000000..65cec228a --- /dev/null +++ b/app/views/admin/poll/booth_assignments/manage.html.erb @@ -0,0 +1,25 @@ +

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

+ +<% if controller_name == "booths" && action_name != "available" %> + <%= link_to t("admin.booths.index.add_booth"), new_admin_booth_path, class: "button success float-right" %> +<% end %> + +<% if @booths.empty? %> +
+ <%= t("admin.booths.index.no_booths") %> +
+<% end %> + +<% if @booths.any? %> + + + + + + + <% @booths.each do |booth| %> + <% end %> + +
<%= t("admin.booths.index.name") %><%= t("admin.actions.actions") %>
+ +<% end %> diff --git a/app/views/admin/poll/polls/booth_assignments.html.erb b/app/views/admin/poll/polls/booth_assignments.html.erb new file mode 100644 index 000000000..0d9bf98ce --- /dev/null +++ b/app/views/admin/poll/polls/booth_assignments.html.erb @@ -0,0 +1,18 @@ +

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

+ +<% if @polls.any? %> + + + + + + + + <%= render @polls %> + +
<%= t("admin.polls.index.name") %><%= t("admin.polls.index.dates") %><%= t("admin.actions.actions") %>
+<% else %> +
+ <%= t("admin.polls.index.no_polls") %> +
+<% end %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 38abe6f56..a2657a2b3 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -409,6 +409,7 @@ en: poll_officers: Poll officers polls: Polls poll_booths: Booths location + poll_booth_assignments: Booths Assignments poll_shifts: Manage shifts officials: Officials organizations: Organisations diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 3336cdc5b..4c56e131c 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -420,6 +420,7 @@ es: poll_officers: Presidentes de mesa polls: Votaciones poll_booths: Ubicación de urnas + poll_booth_assignments: Asignación de urnas poll_shifts: Asignar turnos officials: Cargos públicos organizations: Organizaciones diff --git a/config/routes.rb b/config/routes.rb index ae4f7280c..6f94594a3 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -111,7 +111,7 @@ Rails.application.routes.draw do resources :annotations do get :search, on: :collection end - + resources :polls, only: [:show, :index] do resources :questions, controller: 'polls/questions', shallow: true do post :answer, on: :member @@ -273,10 +273,12 @@ Rails.application.routes.draw do scope module: :poll do resources :polls do + get :booth_assignments, on: :collection patch :add_question, on: :member resources :booth_assignments, only: [:index, :show, :create, :destroy] do get :search_booths, on: :collection + get :manage, on: :collection end resources :officer_assignments, only: [:index, :create, :destroy] do From c52c0a5452f8e1170401dc871834b7c531870dd7 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 19:42:00 +0200 Subject: [PATCH 02/12] Complete Poll list with booth assigment management links --- .../admin/poll/polls/booth_assignments.html.erb | 16 +++++++++++++++- config/locales/en/admin.yml | 2 ++ config/locales/es/admin.yml | 2 ++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/app/views/admin/poll/polls/booth_assignments.html.erb b/app/views/admin/poll/polls/booth_assignments.html.erb index 0d9bf98ce..819474852 100644 --- a/app/views/admin/poll/polls/booth_assignments.html.erb +++ b/app/views/admin/poll/polls/booth_assignments.html.erb @@ -8,7 +8,21 @@ <%= t("admin.actions.actions") %> - <%= render @polls %> + <% @polls.each do |poll| %> + + + <%= poll.name %> + + + <%= l poll.starts_at.to_date %> - <%= l poll.ends_at.to_date %> + + + <%= link_to t("admin.booth_assignments.manage_assignments"), + manage_admin_poll_booth_assignments_path(poll), + class: "button hollow" %> + + + <% end %> <% else %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index a2657a2b3..863ae8688 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -525,6 +525,8 @@ en: date_missing: "A date must be selected" vote_collection: Collect Votes recount_scrutiny: Recount & Scrutiny + booth_assignments: + manage_assignments: Manage assignments poll_booth_assignments: flash: destroy: "Booth not assigned anymore" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 4c56e131c..a7d4d2c81 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -525,6 +525,8 @@ es: date_missing: "Debe seleccionarse una fecha" vote_collection: Recoger Votos recount_scrutiny: Recuento & Escrutinio + booth_assignments: + manage_assignments: Gestionar asignaciones poll_booth_assignments: flash: destroy: "Urna desasignada" From f8839434f77d37a2243f3af77ba1f8239248148d Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 20:10:51 +0200 Subject: [PATCH 03/12] Complete booth assignment view list without actions yet --- .../admin/poll/booth_assignments_controller.rb | 1 + .../_booth_assignment.html.erb | 17 +++++++++++++++++ .../poll/booth_assignments/manage.html.erb | 16 ++++++++-------- config/locales/en/admin.yml | 9 +++++++++ config/locales/es/admin.yml | 9 +++++++++ 5 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 app/views/admin/poll/booth_assignments/_booth_assignment.html.erb diff --git a/app/controllers/admin/poll/booth_assignments_controller.rb b/app/controllers/admin/poll/booth_assignments_controller.rb index 221a623ef..ab3f52d11 100644 --- a/app/controllers/admin/poll/booth_assignments_controller.rb +++ b/app/controllers/admin/poll/booth_assignments_controller.rb @@ -47,6 +47,7 @@ class Admin::Poll::BoothAssignmentsController < Admin::Poll::BaseController def manage @booths = ::Poll::Booth.all + @poll = Poll.find(params[:poll_id]) end private diff --git a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb new file mode 100644 index 000000000..06188df9c --- /dev/null +++ b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb @@ -0,0 +1,17 @@ + + + <%= link_to booth.name, admin_booth_path(booth) %> + + + <%= t("admin.booth_assignments.status.assigned") %> + <%= t("admin.booth_assignments.status.unassigned") %> + + + <%= link_to t("admin.booth_assignments.manage.assign"), + new_admin_booth_shift_path(booth), + class: "button" %> + <%= link_to t("admin.booth_assignments.manage.unassign"), + new_admin_booth_shift_path(booth), + class: "button hollow" %> + + diff --git a/app/views/admin/poll/booth_assignments/manage.html.erb b/app/views/admin/poll/booth_assignments/manage.html.erb index 65cec228a..c76485cc9 100644 --- a/app/views/admin/poll/booth_assignments/manage.html.erb +++ b/app/views/admin/poll/booth_assignments/manage.html.erb @@ -1,25 +1,25 @@ -

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

- -<% if controller_name == "booths" && action_name != "available" %> - <%= link_to t("admin.booths.index.add_booth"), new_admin_booth_path, class: "button success float-right" %> +<%= link_to booth_assignments_admin_polls_path do %> + <%= t("shared.back") %> <% end %> +
+ +

<%= t("admin.booth_assignments.manage.assignments_list", poll: @poll.name) %>

<% if @booths.empty? %>
<%= t("admin.booths.index.no_booths") %>
-<% end %> - -<% if @booths.any? %> +<% else %> + <% @booths.each do |booth| %> + <%= render partial: "booth_assignment", locals: { booth: booth } %> <% end %>
<%= t("admin.booths.index.name") %><%= t("admin.booth_assignments.status.assign_status") %> <%= t("admin.actions.actions") %>
- <% end %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 863ae8688..398744720 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -527,6 +527,15 @@ en: recount_scrutiny: Recount & Scrutiny booth_assignments: manage_assignments: Manage assignments + manage: + assignments_list: "Assignments for poll '%{poll}'" + status: + assign_status: Assignment + assigned: Assigned + unassigned: Unassigned + actions: + assign: Assign booth + unassign: Unassign booth poll_booth_assignments: flash: destroy: "Booth not assigned anymore" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index a7d4d2c81..7169d6017 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -527,6 +527,15 @@ es: recount_scrutiny: Recuento & Escrutinio booth_assignments: manage_assignments: Gestionar asignaciones + manage: + assignments_list: "Asignaciones para la votación '%{poll}'" + status: + assign_status: Asignación + assigned: Asignada + unassigned: No asignada + actions: + assign: Assign booth + unassign: Unassign booth poll_booth_assignments: flash: destroy: "Urna desasignada" From e6efd8ad7d7c385ea5f97a7252dd8a283ac5d0f7 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 20:54:42 +0200 Subject: [PATCH 04/12] Remove assign/unassign booth to poll from poll booth assigments list --- .../booth_assignments/_search_booths_results.html.erb | 9 --------- app/views/admin/poll/booth_assignments/index.html.erb | 7 ------- config/locales/en/admin.yml | 2 -- config/locales/es/admin.yml | 2 -- 4 files changed, 20 deletions(-) diff --git a/app/views/admin/poll/booth_assignments/_search_booths_results.html.erb b/app/views/admin/poll/booth_assignments/_search_booths_results.html.erb index 3fa7fc080..cebde154c 100644 --- a/app/views/admin/poll/booth_assignments/_search_booths_results.html.erb +++ b/app/views/admin/poll/booth_assignments/_search_booths_results.html.erb @@ -12,7 +12,6 @@ <%= t("admin.poll_booth_assignments.index.table_name") %> <%= t("admin.poll_booth_assignments.index.table_location") %> - <%= t("admin.poll_booth_assignments.index.table_assignment") %> @@ -24,14 +23,6 @@ <%= booth.location %> - - <% unless @poll.booth_ids.include?(booth.id) %> - <%= link_to t("admin.poll_booth_assignments.index.add_booth"), - admin_poll_booth_assignments_path(@poll, booth_id: booth.id), - method: :post, - class: "button hollow" %> - <% end %> - <% end %> diff --git a/app/views/admin/poll/booth_assignments/index.html.erb b/app/views/admin/poll/booth_assignments/index.html.erb index f14e59ef1..fcedaec79 100644 --- a/app/views/admin/poll/booth_assignments/index.html.erb +++ b/app/views/admin/poll/booth_assignments/index.html.erb @@ -14,7 +14,6 @@ <%= t("admin.poll_booth_assignments.index.table_name") %> <%= t("admin.poll_booth_assignments.index.table_location") %> - <%= t("admin.poll_booth_assignments.index.table_assignment") %> <% @booth_assignments.each do |booth_assignment| %> @@ -27,12 +26,6 @@ <%= booth_assignment.booth.location %> - - <%= link_to t("admin.poll_booth_assignments.index.remove_booth"), - admin_poll_booth_assignment_path(@poll, booth_assignment), - method: :delete, - class: "button hollow alert" %> - <% end %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 398744720..d991ad85f 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -559,8 +559,6 @@ en: no_booths: "There are no booths assigned to this poll." table_name: "Name" table_location: "Location" - table_assignment: "Assignment" - remove_booth: "Remove booth from poll" add_booth: "Assign booth" polls: index: diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 7169d6017..1ac21c633 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -559,8 +559,6 @@ es: no_booths: "No hay urnas asignadas a esta votación." table_name: "Nombre" table_location: "Ubicación" - table_assignment: "Asignación" - remove_booth: "Desasignar urna" add_booth: "Asignar urna" polls: index: From 7507f43ea813a63ac56cd71936ff4097fbeb1d2c Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 21:30:31 +0200 Subject: [PATCH 05/12] Add helper method on Booth model to get booth assigment for a given poll --- app/models/poll/booth.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/models/poll/booth.rb b/app/models/poll/booth.rb index 04f9d3dea..07e7d2456 100644 --- a/app/models/poll/booth.rb +++ b/app/models/poll/booth.rb @@ -15,5 +15,8 @@ class Poll where(polls: { id: Poll.current_or_incoming }).includes(:polls) end + def assignment_on_poll(poll) + booth_assignments.where(poll: poll).first + end end -end \ No newline at end of file +end From ca9e807cd4134aa4677848fa16c8d08b2d5d4288 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 21:30:57 +0200 Subject: [PATCH 06/12] Add link to booth assignment management at poll booth assigments list --- app/views/admin/poll/booth_assignments/index.html.erb | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/views/admin/poll/booth_assignments/index.html.erb b/app/views/admin/poll/booth_assignments/index.html.erb index fcedaec79..39435254b 100644 --- a/app/views/admin/poll/booth_assignments/index.html.erb +++ b/app/views/admin/poll/booth_assignments/index.html.erb @@ -1,10 +1,16 @@ <%= render "/admin/poll/polls/poll_header" %> + +
<%= render "/admin/poll/polls/subnav" %> <%= render "search_booths" %>

<%= t("admin.poll_booth_assignments.index.booths_title") %>

+ <%= link_to t("admin.booth_assignments.manage_assignments"), + manage_admin_poll_booth_assignments_path(@poll), + class: "button hollow float-right" %> + <% if @booth_assignments.empty? %>
<%= t("admin.poll_booth_assignments.index.no_booths") %> From 68b7528bab4f7a44967c01a1bae988d684050482 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 21:31:36 +0200 Subject: [PATCH 07/12] Complete booth assigment partial with assign/unassign buttons and status --- .../_booth_assignment.html.erb | 37 ++++++++++++------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb index 06188df9c..5956b5342 100644 --- a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb +++ b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb @@ -1,17 +1,28 @@ - + + <%= link_to booth.name, admin_booth_path(booth) %> + +<% if booth_assignment.present? %> - <%= link_to booth.name, admin_booth_path(booth) %> - - - <%= t("admin.booth_assignments.status.assigned") %> - <%= t("admin.booth_assignments.status.unassigned") %> + <%= t("admin.booth_assignments.status.assigned") %> - <%= link_to t("admin.booth_assignments.manage.assign"), - new_admin_booth_shift_path(booth), - class: "button" %> - <%= link_to t("admin.booth_assignments.manage.unassign"), - new_admin_booth_shift_path(booth), - class: "button hollow" %> + <%= link_to t("admin.booth_assignments.manage.actions.unassign"), + admin_poll_booth_assignment_path(@poll, booth_assignment, booth_id: booth.id), + method: :delete, + remote: true, + title: t("admin.booth_assignments.manage.actions.unassign"), + class: "button hollow alert" %> - +<% else %> + + <%= t("admin.booth_assignments.status.unassigned") %> + + + <%= link_to t("admin.booth_assignments.manage.actions.assign"), + admin_poll_booth_assignments_path(@poll, booth_id: booth.id), + method: :post, + remote: true, + title: t("admin.booth_assignments.manage.actions.assign"), + class: "button" %> + +<% end %> From ce25780f70f122bd52796b6ce12c5c4decea5b36 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 21:32:09 +0200 Subject: [PATCH 08/12] Use booth assigment partial correctly --- app/views/admin/poll/booth_assignments/manage.html.erb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/views/admin/poll/booth_assignments/manage.html.erb b/app/views/admin/poll/booth_assignments/manage.html.erb index c76485cc9..fab5b8487 100644 --- a/app/views/admin/poll/booth_assignments/manage.html.erb +++ b/app/views/admin/poll/booth_assignments/manage.html.erb @@ -18,7 +18,9 @@ <% @booths.each do |booth| %> - <%= render partial: "booth_assignment", locals: { booth: booth } %> + + <%= render partial: "booth_assignment", locals: { booth: booth, booth_assignment: booth.assignment_on_poll(@poll) } %> + <% end %> From 085e6ecba4c6d19856c2168067cb746cd6dc9718 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 21:32:37 +0200 Subject: [PATCH 09/12] Complete booth assigment create/destroy methods to work with ajax --- .../admin/poll/booth_assignments_controller.rb | 16 ++++++++++++---- .../admin/poll/booth_assignments/create.js.erb | 1 + .../admin/poll/booth_assignments/destroy.js.erb | 1 + 3 files changed, 14 insertions(+), 4 deletions(-) create mode 100644 app/views/admin/poll/booth_assignments/create.js.erb create mode 100644 app/views/admin/poll/booth_assignments/destroy.js.erb diff --git a/app/controllers/admin/poll/booth_assignments_controller.rb b/app/controllers/admin/poll/booth_assignments_controller.rb index ab3f52d11..5b9ea9d7b 100644 --- a/app/controllers/admin/poll/booth_assignments_controller.rb +++ b/app/controllers/admin/poll/booth_assignments_controller.rb @@ -23,18 +23,24 @@ class Admin::Poll::BoothAssignmentsController < Admin::Poll::BaseController end def create - @booth_assignment = ::Poll::BoothAssignment.new(poll_id: booth_assignment_params[:poll_id], - booth_id: booth_assignment_params[:booth_id]) + @poll = Poll.find(booth_assignment_params[:poll_id]) + @booth = Poll::Booth.find(booth_assignment_params[:booth_id]) + @booth_assignment = ::Poll::BoothAssignment.new(poll: @poll, + booth: @booth) if @booth_assignment.save notice = t("admin.poll_booth_assignments.flash.create") else notice = t("admin.poll_booth_assignments.flash.error_create") end - redirect_to admin_poll_booth_assignments_path(@booth_assignment.poll_id), notice: notice + respond_to do |format| + format.js { render layout: false } + end end def destroy + @poll = Poll.find(booth_assignment_params[:poll_id]) + @booth = Poll::Booth.find(booth_assignment_params[:booth_id]) @booth_assignment = ::Poll::BoothAssignment.find(params[:id]) if @booth_assignment.destroy @@ -42,7 +48,9 @@ class Admin::Poll::BoothAssignmentsController < Admin::Poll::BaseController else notice = t("admin.poll_booth_assignments.flash.error_destroy") end - redirect_to admin_poll_booth_assignments_path(@booth_assignment.poll_id), notice: notice + respond_to do |format| + format.js { render layout: false } + end end def manage diff --git a/app/views/admin/poll/booth_assignments/create.js.erb b/app/views/admin/poll/booth_assignments/create.js.erb new file mode 100644 index 000000000..8b278f7b3 --- /dev/null +++ b/app/views/admin/poll/booth_assignments/create.js.erb @@ -0,0 +1 @@ +$("#<%= dom_id(@booth) %>").html('<%= j render("booth_assignment", booth: @booth, booth_assignment: @booth.assignment_on_poll(@poll)) %>'); diff --git a/app/views/admin/poll/booth_assignments/destroy.js.erb b/app/views/admin/poll/booth_assignments/destroy.js.erb new file mode 100644 index 000000000..8b278f7b3 --- /dev/null +++ b/app/views/admin/poll/booth_assignments/destroy.js.erb @@ -0,0 +1 @@ +$("#<%= dom_id(@booth) %>").html('<%= j render("booth_assignment", booth: @booth, booth_assignment: @booth.assignment_on_poll(@poll)) %>'); From 9b70b90e6a0d5dd295429c480ae6aa12b1367a26 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 22:05:02 +0200 Subject: [PATCH 10/12] Fix texts for booth assignment management --- .../admin/poll/booth_assignments/_booth_assignment.html.erb | 4 ++-- app/views/admin/poll/booth_assignments/manage.html.erb | 2 +- config/locales/en/admin.yml | 1 - config/locales/es/admin.yml | 1 - 4 files changed, 3 insertions(+), 5 deletions(-) diff --git a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb index 5956b5342..7865b201e 100644 --- a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb +++ b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb @@ -3,7 +3,7 @@ <% if booth_assignment.present? %> - <%= t("admin.booth_assignments.status.assigned") %> + <%= t("admin.booth_assignments.manage.status.assigned") %> <%= link_to t("admin.booth_assignments.manage.actions.unassign"), @@ -15,7 +15,7 @@ <% else %> - <%= t("admin.booth_assignments.status.unassigned") %> + <%= t("admin.booth_assignments.manage.status.unassigned") %> <%= link_to t("admin.booth_assignments.manage.actions.assign"), diff --git a/app/views/admin/poll/booth_assignments/manage.html.erb b/app/views/admin/poll/booth_assignments/manage.html.erb index fab5b8487..f55e85c74 100644 --- a/app/views/admin/poll/booth_assignments/manage.html.erb +++ b/app/views/admin/poll/booth_assignments/manage.html.erb @@ -13,7 +13,7 @@ - + diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index d991ad85f..3826e9764 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -559,7 +559,6 @@ en: no_booths: "There are no booths assigned to this poll." table_name: "Name" table_location: "Location" - add_booth: "Assign booth" polls: index: title: "List of polls" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 1ac21c633..9bc97c35f 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -559,7 +559,6 @@ es: no_booths: "No hay urnas asignadas a esta votación." table_name: "Nombre" table_location: "Ubicación" - add_booth: "Asignar urna" polls: index: title: "Listado de votaciones" From 17e6a66b80a9e8573c5e82dc031d0d3b8ab7bffe Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 22:33:00 +0200 Subject: [PATCH 11/12] Refactor booth assigment management feature specs to test new assign/unassign feature --- .../admin/poll/booth_assigments_spec.rb | 139 ++++++++++++------ 1 file changed, 91 insertions(+), 48 deletions(-) diff --git a/spec/features/admin/poll/booth_assigments_spec.rb b/spec/features/admin/poll/booth_assigments_spec.rb index 5813e2dac..cceec1a3e 100644 --- a/spec/features/admin/poll/booth_assigments_spec.rb +++ b/spec/features/admin/poll/booth_assigments_spec.rb @@ -7,66 +7,109 @@ feature 'Admin booths assignments' do login_as(admin.user) end - scenario 'Assign booth to poll', :js do - poll = create(:poll) - booth = create(:poll_booth) + feature 'Admin Booth Assignment management' do - visit admin_poll_path(poll) - within('#poll-resources') do - click_link 'Booths (0)' + let!(:poll) { create(:poll) } + let!(:booth) { create(:poll_booth) } + + scenario 'List Polls and Booths to manage', :js do + second_poll = create(:poll) + second_booth = create(:poll_booth) + + visit booth_assignments_admin_polls_path + + expect(page).to have_content(poll.name) + expect(page).to have_content(second_poll.name) + + within("#poll_#{second_poll.id}") do + click_link 'Manage assignments' + end + + expect(page).to have_content "Assignments for poll '#{second_poll.name}'" + + expect(page).to have_content(booth.name) + expect(page).to have_content(second_booth.name) end - expect(page).to have_content 'There are no booths assigned to this poll.' + scenario 'Assign booth to poll', :js do + visit admin_poll_path(poll) + within('#poll-resources') do + click_link 'Booths (0)' + end - fill_in 'search-booths', with: booth.name - click_button 'Search' - expect(page).to have_content(booth.name) + expect(page).to have_content 'There are no booths assigned to this poll.' + expect(page).to_not have_content booth.name - within('#search-booths-results') do - click_link 'Assign booth' + fill_in 'search-booths', with: booth.name + click_button 'Search' + expect(page).to have_content(booth.name) + + visit manage_admin_poll_booth_assignments_path(poll) + + expect(page).to have_content "Assignments for poll '#{poll.name}'" + + within("#poll_booth_#{booth.id}") do + expect(page).to have_content(booth.name) + expect(page).to have_content "Unassigned" + + click_link 'Assign booth' + + expect(page).not_to have_content "Unassigned" + expect(page).to have_content "Assigned" + expect(page).to have_link "Unassign booth" + end + + visit admin_poll_path(poll) + within('#poll-resources') do + click_link 'Booths (1)' + end + + expect(page).to_not have_content 'There are no booths assigned to this poll.' + expect(page).to have_content booth.name end - expect(page).to have_content 'Booth assigned' + scenario 'Unassign booth from poll', :js do + assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - visit admin_poll_path(poll) - within('#poll-resources') do - click_link 'Booths (1)' + visit admin_poll_path(poll) + within('#poll-resources') do + click_link 'Booths (1)' + end + + expect(page).not_to have_content 'There are no booths assigned to this poll.' + expect(page).to have_content booth.name + + fill_in 'search-booths', with: booth.name + click_button 'Search' + expect(page).to have_content(booth.name) + + visit manage_admin_poll_booth_assignments_path(poll) + + expect(page).to have_content "Assignments for poll '#{poll.name}'" + + within("#poll_booth_#{booth.id}") do + expect(page).to have_content(booth.name) + expect(page).to have_content "Assigned" + + click_link 'Unassign booth' + + expect(page).to have_content "Unassigned" + expect(page).not_to have_content "Assigned" + expect(page).to have_link "Assign booth" + end + + visit admin_poll_path(poll) + within('#poll-resources') do + click_link 'Booths (0)' + end + + expect(page).to have_content 'There are no booths assigned to this poll.' + expect(page).not_to have_content booth.name end - - expect(page).to_not have_content 'There are no booths assigned to this poll.' - expect(page).to have_content booth.name - end - - scenario 'Remove booth from poll', :js do - poll = create(:poll) - booth = create(:poll_booth) - assignment = create(:poll_booth_assignment, poll: poll, booth: booth) - - visit admin_poll_path(poll) - within('#poll-resources') do - click_link 'Booths (1)' - end - - expect(page).to_not have_content 'There are no booths assigned to this poll.' - expect(page).to have_content booth.name - - within("#poll_booth_assignment_#{assignment.id}") do - click_link 'Remove booth from poll' - end - - expect(page).to have_content 'Booth not assigned anymore' - - visit admin_poll_path(poll) - within('#poll-resources') do - click_link 'Booths (0)' - end - - expect(page).to have_content 'There are no booths assigned to this poll.' - expect(page).to_not have_content booth.name end feature 'Show' do - scenario 'Lists all assigned poll oficers' do + scenario 'Lists all assigned poll officers' do poll = create(:poll) booth = create(:poll_booth) booth_assignment = create(:poll_booth_assignment, poll: poll, booth: booth) From 995289304e24530533dbc8b4f2eaa4402b9559f8 Mon Sep 17 00:00:00 2001 From: Bertocq Date: Thu, 19 Oct 2017 22:41:54 +0200 Subject: [PATCH 12/12] Add booth location on booth assigment management list, plus poll links on list --- .../admin/poll/booth_assignments/_booth_assignment.html.erb | 3 +++ app/views/admin/poll/booth_assignments/index.html.erb | 3 +-- app/views/admin/poll/booth_assignments/manage.html.erb | 1 + app/views/admin/poll/polls/booth_assignments.html.erb | 2 +- config/locales/en/admin.yml | 1 + config/locales/es/admin.yml | 1 + 6 files changed, 8 insertions(+), 3 deletions(-) diff --git a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb index 7865b201e..d78f7be8b 100644 --- a/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb +++ b/app/views/admin/poll/booth_assignments/_booth_assignment.html.erb @@ -1,6 +1,9 @@ + <% if booth_assignment.present? %> <% end %> diff --git a/app/views/admin/poll/booth_assignments/manage.html.erb b/app/views/admin/poll/booth_assignments/manage.html.erb index f55e85c74..a24fac478 100644 --- a/app/views/admin/poll/booth_assignments/manage.html.erb +++ b/app/views/admin/poll/booth_assignments/manage.html.erb @@ -13,6 +13,7 @@
<%= t("admin.booths.index.name") %><%= t("admin.booth_assignments.status.assign_status") %><%= t("admin.booth_assignments.manage.status.assign_status") %> <%= t("admin.actions.actions") %>
<%= link_to booth.name, admin_booth_path(booth) %> + <%= booth.location || t("admin.booths.index.no_location") %> + <%= t("admin.booth_assignments.manage.status.assigned") %> diff --git a/app/views/admin/poll/booth_assignments/index.html.erb b/app/views/admin/poll/booth_assignments/index.html.erb index 39435254b..75cbe889f 100644 --- a/app/views/admin/poll/booth_assignments/index.html.erb +++ b/app/views/admin/poll/booth_assignments/index.html.erb @@ -1,6 +1,5 @@ <%= render "/admin/poll/polls/poll_header" %> -
<%= render "/admin/poll/polls/subnav" %> <%= render "search_booths" %> @@ -30,7 +29,7 @@
- <%= booth_assignment.booth.location %> + <%= booth_assignment.booth.location || t("admin.booths.index.no_location") %>
+ diff --git a/app/views/admin/poll/polls/booth_assignments.html.erb b/app/views/admin/poll/polls/booth_assignments.html.erb index 819474852..ad5dc6211 100644 --- a/app/views/admin/poll/polls/booth_assignments.html.erb +++ b/app/views/admin/poll/polls/booth_assignments.html.erb @@ -11,7 +11,7 @@ <% @polls.each do |poll| %>
<%= t("admin.booths.index.name") %><%= t("admin.booths.index.location") %> <%= t("admin.booth_assignments.manage.status.assign_status") %> <%= t("admin.actions.actions") %>
- <%= poll.name %> + <%= link_to poll.name, admin_poll_path(poll) %> <%= l poll.starts_at.to_date %> - <%= l poll.ends_at.to_date %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 3826e9764..aa0fc0f8a 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -675,6 +675,7 @@ en: add_booth: "Add booth" name: "Name" location: "Location" + no_location: "No Location" new: title: "New booth" name: "Name" diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index 9bc97c35f..2ff4449ec 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -677,6 +677,7 @@ es: add_booth: "Añadir urna" name: "Nombre" location: "Ubicación" + no_location: "Sin Ubicación" new: title: "Nueva urna" name: "Nombre"