Class: Decidim::ActionDelegator::ElectionsQuestionWeightedResponses

Inherits:
Object
  • Object
show all
Defined in:
app/queries/decidim/action_delegator/elections_question_weighted_responses.rb

Instance Method Summary collapse

Constructor Details

#initialize(question, settings) ⇒ ElectionsQuestionWeightedResponses

Returns a new instance of ElectionsQuestionWeightedResponses.



6
7
8
9
# File 'app/queries/decidim/action_delegator/elections_question_weighted_responses.rb', line 6

def initialize(question, settings)
  @question = question
  @settings = settings
end

Instance Method Details

#queryObject



11
12
13
14
15
16
17
18
19
20
21
# File 'app/queries/decidim/action_delegator/elections_question_weighted_responses.rb', line 11

def query
  return Decidim::Elections::ResponseOption.none if question.blank? || settings.blank?

  subquery = ElectionsQuestionResponsesByType.new(question, settings).query
  Decidim::Elections::ResponseOption.unscoped
                                    .joins("INNER JOIN (#{subquery.to_sql}) AS subquery ON subquery.id = #{Decidim::Elections::ResponseOption.table_name}.id")
                                    .select(
                                      "#{Decidim::Elections::ResponseOption.table_name}.*, SUM(subquery.votes_total * subquery.ponderation_weight) AS weighted_votes_total"
                                    )
                                    .group("#{Decidim::Elections::ResponseOption.table_name}.id")
end