Sha256: 7f866b8198448f2b381b6adb8fd5939338f5aed2c3ddfc993850c6b9fab48696

Contents?: true

Size: 1.94 KB

Versions: 31

Compression:

Stored size: 1.94 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: election) +
                           Decidim::Elections::BulletinBoardClosure.where(election: 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: question,
            results: groups.values
          }
        end

        def aggregate_results_for(question)
          Decidim::Elections::Result.where(closurable: closurables, question: 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: 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

31 entries across 31 versions & 1 rubygems

Version Path
decidim-elections-0.27.9 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.8 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.7 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.6 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.10 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.9 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.5 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.8 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.4 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.3 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.7 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.5 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.2 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.1 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.4 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.0 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.3 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.0.rc2 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.27.0.rc1 app/forms/decidim/votings/admin/publish_results_form.rb
decidim-elections-0.26.2 app/forms/decidim/votings/admin/publish_results_form.rb