diff --git a/app/controllers/admin/poll/officer_assignments_controller.rb b/app/controllers/admin/poll/officer_assignments_controller.rb index e52108645..b14f99a6a 100644 --- a/app/controllers/admin/poll/officer_assignments_controller.rb +++ b/app/controllers/admin/poll/officer_assignments_controller.rb @@ -1,11 +1,16 @@ class Admin::Poll::OfficerAssignmentsController < Admin::BaseController - before_action :redirect_if_blank_required_params, only: [:index] + before_action :load_poll + before_action :redirect_if_blank_required_params, only: [:by_officer] before_action :load_booth_assignment, only: [:create] def index - @poll = ::Poll.includes(:booths).find(officer_assignment_params[:poll]) - @officer = ::Poll::Officer.includes(:user).find(officer_assignment_params[:officer]) + @officers = @poll.officer_assignments.includes(officer: :user).select(:officer_id).distinct.map(&:officer) + end + + def by_officer + @poll = ::Poll.includes(:booths).find(params[:poll_id]) + @officer = ::Poll::Officer.includes(:user).find(officer_assignment_params[:officer_id]) @officer_assignments = ::Poll::OfficerAssignment. joins(:booth_assignment). includes(:recount, :final_recounts, booth_assignment: :booth). @@ -13,6 +18,15 @@ class Admin::Poll::OfficerAssignmentsController < Admin::BaseController order(:date) end + def search_officers + load_search + @officers = User.joins(:poll_officer).search(@search).order(username: :asc) + + respond_to do |format| + format.js + end + end + def create @officer_assignment = ::Poll::OfficerAssignment.new(booth_assignment: @booth_assignment, officer_id: create_params[:officer_id], @@ -24,7 +38,7 @@ class Admin::Poll::OfficerAssignmentsController < Admin::BaseController else notice = t("admin.poll_officer_assignments.flash.error_create") end - redirect_to admin_officer_assignments_path(officer: create_params[:officer_id], poll: create_params[:poll_id]), notice: notice + redirect_to by_officer_admin_poll_officer_assignments_path(poll_id: create_params[:poll_id], officer_id: create_params[:officer_id]), notice: notice end def destroy @@ -35,13 +49,13 @@ class Admin::Poll::OfficerAssignmentsController < Admin::BaseController else notice = t("admin.poll_officer_assignments.flash.error_destroy") end - redirect_to admin_officer_assignments_path(officer: @officer_assignment.officer_id, poll: @officer_assignment.poll_id), notice: notice + redirect_to by_officer_admin_poll_officer_assignments_path(poll_id: @officer_assignment.poll_id, officer_id: @officer_assignment.officer_id), notice: notice end private def officer_assignment_params - params.permit(:officer, :poll) + params.permit(:officer_id) end def create_params @@ -52,14 +66,22 @@ class Admin::Poll::OfficerAssignmentsController < Admin::BaseController @booth_assignment = ::Poll::BoothAssignment.includes(:poll).find_by(poll_id: create_params[:poll_id], booth_id: create_params[:booth_id]) end + def load_poll + @poll = ::Poll.find(params[:poll_id]) + end + def redirect_if_blank_required_params - if officer_assignment_params[:officer].blank? - if officer_assignment_params[:poll].blank? - redirect_to admin_polls_path - else - redirect_to admin_poll_path(officer_assignment_params[:poll]) - end + if officer_assignment_params[:officer_id].blank? + redirect_to admin_poll_path(@poll) end end + def search_params + params.permit(:poll_id, :search) + end + + def load_search + @search = search_params[:search] + end + end \ No newline at end of file diff --git a/app/controllers/admin/poll/polls_controller.rb b/app/controllers/admin/poll/polls_controller.rb index 340cbec71..9f5319f9d 100644 --- a/app/controllers/admin/poll/polls_controller.rb +++ b/app/controllers/admin/poll/polls_controller.rb @@ -9,11 +9,9 @@ class Admin::Poll::PollsController < Admin::BaseController def show @poll = Poll.includes(:questions, - booth_assignments: [:booth, - :final_recounts, - :recounts], - officers: [:user]). - order('poll_questions.title', 'poll_booths.name', 'users.username'). + booth_assignments: [:final_recounts, + :recounts]). + order('poll_questions.title'). find(params[:id]) end @@ -70,14 +68,6 @@ class Admin::Poll::PollsController < Admin::BaseController end end - def search_officers - @officers = User.joins(:poll_officer).search(@search).order(username: :asc) - - respond_to do |format| - format.js - end - end - private def load_geozones @geozones = Geozone.all.order(:name) diff --git a/app/views/admin/poll/polls/_search_officers.html.erb b/app/views/admin/poll/officer_assignments/_search_officers.html.erb similarity index 81% rename from app/views/admin/poll/polls/_search_officers.html.erb rename to app/views/admin/poll/officer_assignments/_search_officers.html.erb index b26c98d0c..7ed39f10d 100644 --- a/app/views/admin/poll/polls/_search_officers.html.erb +++ b/app/views/admin/poll/officer_assignments/_search_officers.html.erb @@ -1,6 +1,6 @@
- <%= form_tag(search_officers_admin_poll_path(@poll), method: :get, remote: true) do |f| %> + <%= form_tag(search_officers_admin_poll_officer_assignments_path(@poll), method: :get, remote: true) do |f| %>
<%= text_field_tag :search, @search, diff --git a/app/views/admin/poll/polls/_search_officers_results.html.erb b/app/views/admin/poll/officer_assignments/_search_officers_results.html.erb similarity index 60% rename from app/views/admin/poll/polls/_search_officers_results.html.erb rename to app/views/admin/poll/officer_assignments/_search_officers_results.html.erb index 1ccc60d6b..f665c6c0b 100644 --- a/app/views/admin/poll/polls/_search_officers_results.html.erb +++ b/app/views/admin/poll/officer_assignments/_search_officers_results.html.erb @@ -10,8 +10,8 @@ - - + + @@ -26,12 +26,12 @@ diff --git a/app/views/admin/poll/officer_assignments/by_officer.html.erb b/app/views/admin/poll/officer_assignments/by_officer.html.erb new file mode 100644 index 000000000..205692535 --- /dev/null +++ b/app/views/admin/poll/officer_assignments/by_officer.html.erb @@ -0,0 +1,127 @@ +<%= link_to admin_poll_officer_assignments_path(@poll) do %> + + <%= @poll.name %> +<% end %> + +

<%= @officer.name %> - <%= @officer.email %>

+ +<%= form_tag(admin_poll_officer_assignments_path(@poll), {id: "officer_assignment_form"}) do %> +
+ <%= t("admin.poll_officer_assignments.by_officer.new_assignment") %> +
+ + <%= select_tag :date, + poll_dates_select_options(@poll) + poll_final_recount_option(@poll), + { prompt: t("admin.poll_officer_assignments.by_officer.select_date"), + label: false } %> +
+ +
+ + <%= select_tag :booth_id, + poll_booths_select_options(@poll), + { prompt: t("admin.poll_officer_assignments.by_officer.select_booth"), + label: false } %> +
+ +
+ <%= hidden_field_tag :officer_id, @officer.id %> + <%= hidden_field_tag :poll_id, @poll.id %> + <%= submit_tag t("admin.poll_officer_assignments.by_officer.add_assignment"), + class: "button expanded hollow margin-top" %> +
+
+<% end %> + + +<% if @officer_assignments.empty? %> +
+ <%= t("admin.poll_officer_assignments.by_officer.no_assignments") %> +
+<% else %> +

<%= t("admin.poll_officer_assignments.by_officer.assignments") %>

+
<%= t("admin.polls.show.table_name") %><%= t("admin.polls.show.table_email") %><%= t("admin.poll_officer_assignments.index.table_name") %><%= t("admin.poll_officer_assignments.index.table_email") %> <%= t("admin.polls.show.table_assignment") %>
<% if @poll.officer_ids.include?(user.poll_officer.id) %> - <%= link_to t("admin.polls.show.edit_officer_assignments"), - admin_officer_assignments_path(poll: @poll, officer: user.poll_officer), + <%= link_to t("admin.poll_officer_assignments.index.edit_officer_assignments"), + by_officer_admin_poll_officer_assignments_path(@poll, officer_id: user.poll_officer.id), class: "button hollow alert" %> <% else %> - <%= link_to t("admin.polls.show.add_officer_assignments"), - admin_officer_assignments_path(poll: @poll, officer: user.poll_officer), + <%= link_to t("admin.poll_officer_assignments.index.add_officer_assignments"), + by_officer_admin_poll_officer_assignments_path(@poll, officer_id: user.poll_officer.id), class: "button hollow" %> <% end %>
+ + + + + + + + + <% @officer_assignments.each do |officer_assignment| %> + + + + + + <% end %> + +
<%= t("admin.poll_officer_assignments.by_officer.date") %><%= t("admin.poll_officer_assignments.by_officer.booth") %><%= t("admin.poll_officer_assignments.by_officer.assignment") %>
<%= officer_assignment.final? ? t('polls.final_date') : l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %> + <%= link_to t("admin.poll_officer_assignments.by_officer.remove_assignment"), + admin_poll_officer_assignment_path(@poll, officer_assignment), + method: :delete, + class: "button hollow alert" %> +
+<% end %> + +<% voting_days_officer_assignments = @officer_assignments.select{|oa| oa.final == false} %> +<% if voting_days_officer_assignments.any? %> +

<%= t("admin.poll_officer_assignments.by_officer.recounts") %>

+ + + + + + + + + + <% voting_days_officer_assignments.each do |officer_assignment| %> + + + + + + <% end %> + +
<%= t("admin.poll_officer_assignments.by_officer.date") %><%= t("admin.poll_officer_assignments.by_officer.booth") %><%= t("admin.poll_officer_assignments.by_officer.recount") %>
<%= l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %> + <% if officer_assignment.recount.present? %> + <%= officer_assignment.recount.count %> + <% else %> + - + <% end %> +
+<% end %> + +<% final_officer_assignments = @officer_assignments.select{|oa| oa.final == true} %> +<% if final_officer_assignments.any? %> +

<%= t("admin.poll_officer_assignments.by_officer.final_recounts") %>

+ + + + + + + + + + <% final_officer_assignments.each do |officer_assignment| %> + + + + + + <% end %> + +
<%= t("admin.poll_officer_assignments.by_officer.date") %><%= t("admin.poll_officer_assignments.by_officer.booth") %><%= t("admin.poll_officer_assignments.by_officer.final_recount") %>
<%= l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %> + <% if officer_assignment.final_recounts.any? %> + <%= officer_assignment.final_recounts.to_a.sum(&:count) %> + <% else %> + - + <% end %> +
+<% end %> + + + diff --git a/app/views/admin/poll/officer_assignments/index.html.erb b/app/views/admin/poll/officer_assignments/index.html.erb index 3379e1c3a..db3dfd6db 100644 --- a/app/views/admin/poll/officer_assignments/index.html.erb +++ b/app/views/admin/poll/officer_assignments/index.html.erb @@ -1,127 +1,40 @@ -<%= link_to admin_poll_path(@poll, anchor: 'tab-officers') do %> - - <%= @poll.name %> -<% end %> +<%= render "/admin/poll/polls/poll_header" %> +
+ <%= render "/admin/poll/polls/filter_subnav" %> + <%= render "search_officers" %> -

<%= @officer.name %> - <%= @officer.email %>

+

<%= t("admin.poll_officer_assignments.index.officers_title") %>

-<%= form_tag(admin_officer_assignments_path, {id: "officer_assignment_form"}) do %> -
- <%= t("admin.poll_officer_assignments.index.new_assignment") %> -
- - <%= select_tag :date, - poll_dates_select_options(@poll) + poll_final_recount_option(@poll), - { prompt: t("admin.poll_officer_assignments.index.select_date"), - label: false } %> + <% if @officers.empty? %> +
+ <%= t("admin.poll_officer_assignments.index.no_officers") %>
- -
- - <%= select_tag :booth_id, - poll_booths_select_options(@poll), - { prompt: t("admin.poll_officer_assignments.index.select_booth"), - label: false } %> -
- -
- <%= hidden_field_tag :officer_id, @officer.id %> - <%= hidden_field_tag :poll_id, @poll.id %> - <%= submit_tag t("admin.poll_officer_assignments.index.add_assignment"), - class: "button expanded hollow margin-top" %> -
-
-<% end %> - - -<% if @officer_assignments.empty? %> -
- <%= t("admin.poll_officer_assignments.index.no_assignments") %> -
-<% else %> -

<%= t("admin.poll_officer_assignments.index.assignments") %>

- - - - - - - - - - <% @officer_assignments.each do |officer_assignment| %> - - - - - - <% end %> - -
<%= t("admin.poll_officer_assignments.index.date") %><%= t("admin.poll_officer_assignments.index.booth") %><%= t("admin.poll_officer_assignments.index.assignment") %>
<%= officer_assignment.final? ? t('polls.final_date') : l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %> - <%= link_to t("admin.poll_officer_assignments.index.remove_assignment"), - admin_officer_assignment_path(officer_assignment), - method: :delete, - class: "button hollow alert" %> -
-<% end %> - -<% voting_days_officer_assignments = @officer_assignments.select{|oa| oa.final == false} %> -<% if voting_days_officer_assignments.any? %> -

<%= t("admin.poll_officer_assignments.index.recounts") %>

- - - - - - - - - - <% voting_days_officer_assignments.each do |officer_assignment| %> - - - - - - <% end %> - -
<%= t("admin.poll_officer_assignments.index.date") %><%= t("admin.poll_officer_assignments.index.booth") %><%= t("admin.poll_officer_assignments.index.recount") %>
<%= l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %> - <% if officer_assignment.recount.present? %> - <%= officer_assignment.recount.count %> - <% else %> - - - <% end %> -
-<% end %> - -<% final_officer_assignments = @officer_assignments.select{|oa| oa.final == true} %> -<% if final_officer_assignments.any? %> -

<%= t("admin.poll_officer_assignments.index.final_recounts") %>

- - - - - - - - - - <% final_officer_assignments.each do |officer_assignment| %> - - - + <% else %> +
<%= t("admin.poll_officer_assignments.index.date") %><%= t("admin.poll_officer_assignments.index.booth") %><%= t("admin.poll_officer_assignments.index.final_recount") %>
<%= l(officer_assignment.date.to_date) %><%= booth_name_with_location(officer_assignment.booth_assignment.booth) %>
+ + + + + + + <% @officers.each do |officer| %> + + + - <% end %> - -
<%= t("admin.poll_officer_assignments.index.table_name") %><%= t("admin.poll_officer_assignments.index.table_email") %><%= t("admin.actions.actions") %>
+ + <%= link_to officer.name, by_officer_admin_poll_officer_assignments_path(@poll, officer_id: officer.id) %> + + + <%= officer.email %> + - <% if officer_assignment.final_recounts.any? %> - <%= officer_assignment.final_recounts.to_a.sum(&:count) %> - <% else %> - - - <% end %> + <%= link_to t("admin.poll_officer_assignments.index.edit_officer_assignments"), + by_officer_admin_poll_officer_assignments_path(@poll, officer_id: officer.id), + class: "button hollow" %>
-<% end %> - - - + <% end %> + + + <% end %> +
\ No newline at end of file diff --git a/app/views/admin/poll/polls/search_officers.js.erb b/app/views/admin/poll/officer_assignments/search_officers.js.erb similarity index 100% rename from app/views/admin/poll/polls/search_officers.js.erb rename to app/views/admin/poll/officer_assignments/search_officers.js.erb diff --git a/app/views/admin/poll/polls/_filter_subnav.html.erb b/app/views/admin/poll/polls/_filter_subnav.html.erb index a209cf761..39781de37 100644 --- a/app/views/admin/poll/polls/_filter_subnav.html.erb +++ b/app/views/admin/poll/polls/_filter_subnav.html.erb @@ -12,7 +12,7 @@ <% end %>
  • - <%= link_to "#tab-officers" do %> + <%= link_to admin_poll_officer_assignments_path(@poll) do %> <%= t("admin.polls.show.officers_tab") %> (<%= @poll.officer_assignments.select(:officer_id).distinct.count %>) <% end %> diff --git a/app/views/admin/poll/polls/_officers.html.erb b/app/views/admin/poll/polls/_officers.html.erb deleted file mode 100644 index 1ef6f32cc..000000000 --- a/app/views/admin/poll/polls/_officers.html.erb +++ /dev/null @@ -1,34 +0,0 @@ -

    <%= t("admin.polls.show.officers_title") %>

    - -<% if @poll.officers.empty? %> -
    - <%= t("admin.polls.show.no_officers") %> -
    -<% else %> - - - - - - - - <% @poll.officers.uniq.each do |officer| %> - - - - - - <% end %> - -
    <%= t("admin.polls.show.table_name") %><%= t("admin.polls.show.table_email") %><%= t("admin.actions.actions") %>
    - - <%= link_to officer.name, admin_officer_assignments_path(officer: officer, poll: @poll) %> - - - <%= officer.email %> - - <%= link_to t("admin.polls.show.edit_officer_assignments"), - admin_officer_assignments_path(officer: officer, poll: @poll), - class: "button hollow" %> -
    -<% end %> \ No newline at end of file diff --git a/app/views/admin/poll/polls/show.html.erb b/app/views/admin/poll/polls/show.html.erb index 9155cc70a..835dd155b 100644 --- a/app/views/admin/poll/polls/show.html.erb +++ b/app/views/admin/poll/polls/show.html.erb @@ -8,11 +8,6 @@ <%= render "questions" %>
  • -
    - <%= render "search_officers" %> - <%= render 'officers' %> -
    -
    <%= render 'recounting' %>
    diff --git a/config/locales/admin.en.yml b/config/locales/admin.en.yml index 87eb096e3..fabc18019 100755 --- a/config/locales/admin.en.yml +++ b/config/locales/admin.en.yml @@ -271,6 +271,13 @@ en: error_destroy: "An error ocurred when removing officer assignment" error_create: "An error ocurred when adding officer assignment" index: + officers_title: "List of officers" + no_officers: "There are no officers assigned to this poll." + table_name: "Name" + table_email: "Email" + add_officer_assignments: "Add shifts as officer" + edit_officer_assignments: "Edit officing shifts" + by_officer: new_assignment: "New shift" date: "Date" booth: "Booth" @@ -331,21 +338,16 @@ en: recounts_tab: Recounting results_tab: Results no_questions: "There are no questions assigned to this poll." - no_officers: "There are no officers assigned to this poll." no_recounts: "There is nothing to be recounted" no_results: "There are no results" - officers_title: "List of officers" questions_title: "List of questions" recounting_title: "Recounts" results_title: "Results" remove_question: "Remove question from poll" add_question: "Include question" - add_officer_assignments: "Add shifts as officer" - edit_officer_assignments: "Edit officing shifts" table_title: "Title" table_assignment: "Assignment" table_name: "Name" - table_email: "Email" table_booth_name: "Booth" table_final_recount: "Final recount (by officer)" table_recounts: "Accumulated daily recounts (by officer)" diff --git a/config/locales/admin.es.yml b/config/locales/admin.es.yml index 36ccda68b..5650b7ef2 100644 --- a/config/locales/admin.es.yml +++ b/config/locales/admin.es.yml @@ -271,6 +271,13 @@ es: error_destroy: "Se ha producido un error al eliminar el turno" error_create: "Se ha producido un error al intentar crear el turno" index: + officers_title: "Listado de presidentes de mesa asignados" + no_officers: "No hay presidentes de mesa asignados a esta votación." + table_name: "Nombre" + table_email: "Email" + add_officer_assignments: "Añadir turnos como presidente de mesa" + edit_officer_assignments: "Editar turnos" + by_officer: new_assignment: "Nuevo turno" date: "Fecha" booth: "Urna" @@ -331,21 +338,16 @@ es: recounts_tab: Recuentos results_tab: Resultados no_questions: "No hay preguntas asignadas a esta votación." - no_officers: "No hay presidentes de mesa asignados a esta votación." no_recounts: "No hay nada de lo que hacer recuento" no_results: "No hay resultados" - officers_title: "Listado de presidentes de mesa asignados" questions_title: "Listado de preguntas asignadas" recounting_title: "Recuentos" results_title: "Resultados" remove_question: "Desasignar pregunta" add_question: "Incluir pregunta" - add_officer_assignments: "Añadir turnos como presidente de mesa" - edit_officer_assignments: "Editar turnos" table_title: "Título" table_assignment: "Asignación" table_name: "Nombre" - table_email: "Email" table_booth_name: "Urna" table_final_recount: "Recuento final (presidente de mesa)" table_recounts: "Recuentos diarios acumulados (presidente de mesa)" diff --git a/config/routes.rb b/config/routes.rb index 3f51abeb6..3bcefd29a 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -216,6 +216,11 @@ Rails.application.routes.draw do resources :booth_assignments, only: [:index, :show, :create, :destroy] do get :search_booths, on: :collection end + + resources :officer_assignments, only: [:index, :create, :destroy] do + get :search_officers, on: :collection + get :by_officer, on: :collection + end end resources :officers do @@ -223,7 +228,6 @@ Rails.application.routes.draw do end resources :booths - resources :officer_assignments, only: [:index, :create, :destroy] resources :questions end