Sha256: 48ec9f4befa7707d95bf3eed3f35616459bef452ec6f47e1b63f584579957b91
Contents?: true
Size: 1.9 KB
Versions: 8
Compression:
Stored size: 1.9 KB
Contents
# frozen_string_literal: true module Decidim module Votings module Admin class PublishResultsForm < Decidim::Elections::Admin::ActionForm def groups @groups ||= [nil, *election.questions].map { |question| groups_for(question) } end private def closurables @closurables ||= Decidim::Votings::PollingStationClosure.where(election:) + Decidim::Elections::BulletinBoardClosure.where(election:) end def groups_for(question) groups = {} aggregate_results_for(question).each do |key, total| update_group(groups, key[1, 2].join("."), key, total) end { question:, results: groups.values } end def aggregate_results_for(question) Decidim::Elections::Result.where(closurable: closurables, question:) .group(:closurable_type, :result_type, :decidim_elections_answer_id) .sum(:value) end def update_group(groups, group_id, key, total) closurable_type, result_type, answer_id = key groups[group_id] ||= { result_type:, answer: all_answers[answer_id], value: 0, polling_station: 0, bulletin_board: 0 } groups[group_id][closurable_type_key[closurable_type]] = total groups[group_id][:value] += total end def closurable_type_key @closurable_type_key ||= { "Decidim::Votings::PollingStationClosure" => :polling_station, "Decidim::Elections::BulletinBoardClosure" => :bulletin_board }.freeze end def all_answers @all_answers ||= Decidim::Elections::Answer.where(question: election.questions).index_by(&:id) end end end end end
Version data entries
8 entries across 8 versions & 1 rubygems