Sha256: 215b08e8fb7c664a20d2735d8b805b6d80b7a1199070d3059ef0f27bd816a831

Contents?: true

Size: 1.78 KB

Versions: 19

Compression:

Stored size: 1.78 KB

Contents

# frozen_string_literal: true

module Decidim
  module Elections
    # The data store for an Answer in the Decidim::Elections component. It stores a
    # title, description and related resources and attachments.
    class Answer < ApplicationRecord
      include Decidim::Resourceable
      include Decidim::HasAttachments
      include Decidim::HasAttachmentCollections
      include Traceable
      include Loggable

      delegate :organization, :participatory_space, to: :component

      belongs_to :question, foreign_key: "decidim_elections_question_id", class_name: "Decidim::Elections::Question", inverse_of: :answers
      has_one :election, through: :question, foreign_key: "decidim_elections_election_id", class_name: "Decidim::Elections::Election"
      has_one :component, through: :election, foreign_key: "decidim_component_id", class_name: "Decidim::Component"
      has_many :results, foreign_key: "decidim_elections_answer_id", class_name: "Decidim::Elections::Result", dependent: :destroy

      default_scope { order(weight: :asc, id: :asc) }

      # Public: Get all the proposals related to the answer
      #
      # Returns an ActiveRecord::Relation.
      def proposals
        linked_resources(:proposals, "related_proposals")
      end

      def slug
        "answer-#{id}"
      end

      # Sum all valid results from different origins (PollingStations or BulletinBoard)
      def results_total
        @results_total ||= results.valid_answers.sum(:value)
      end

      # A result percentage relative to the question
      # Returns a Float.
      def results_percentage
        @results_percentage ||= begin
          return 0 unless results_total.positive?

          result = results_total.to_f / question.results_total * 100.0
          result.round
        end
      end
    end
  end
end

Version data entries

19 entries across 19 versions & 1 rubygems

Version Path
decidim-elections-0.26.10 app/models/decidim/elections/answer.rb
decidim-elections-0.26.9 app/models/decidim/elections/answer.rb
decidim-elections-0.26.8 app/models/decidim/elections/answer.rb
decidim-elections-0.26.7 app/models/decidim/elections/answer.rb
decidim-elections-0.26.5 app/models/decidim/elections/answer.rb
decidim-elections-0.26.4 app/models/decidim/elections/answer.rb
decidim-elections-0.26.3 app/models/decidim/elections/answer.rb
decidim-elections-0.26.2 app/models/decidim/elections/answer.rb
decidim-elections-0.26.1 app/models/decidim/elections/answer.rb
decidim-elections-0.26.0 app/models/decidim/elections/answer.rb
decidim-elections-0.26.0.rc2 app/models/decidim/elections/answer.rb
decidim-elections-0.26.0.rc1 app/models/decidim/elections/answer.rb
decidim-elections-0.25.2 app/models/decidim/elections/answer.rb
decidim-elections-0.25.1 app/models/decidim/elections/answer.rb
decidim-elections-0.25.0 app/models/decidim/elections/answer.rb
decidim-elections-0.25.0.rc4 app/models/decidim/elections/answer.rb
decidim-elections-0.25.0.rc3 app/models/decidim/elections/answer.rb
decidim-elections-0.25.0.rc2 app/models/decidim/elections/answer.rb
decidim-elections-0.25.0.rc1 app/models/decidim/elections/answer.rb