diff --git a/app/models/poll.rb b/app/models/poll.rb index 4733432c3..65d78446a 100644 --- a/app/models/poll.rb +++ b/app/models/poll.rb @@ -65,12 +65,32 @@ class Poll < ActiveRecord::Base .where('geozone_restricted = ? OR geozones_polls.geozone_id = ?', false, user.geozone_id) end - def votable_by?(user) - !document_has_voted?(user.document_number, user.document_type) + def self.votable_by(user) + answerable_by(user). + not_voted_by(user) end - def document_has_voted?(document_number, document_type) - voters.where(document_number: document_number, document_type: document_type).exists? + def votable_by?(user) + answerable_by?(user) && + not_voted_by?(user) + end + + def self.not_voted_by(user) + where("polls.id not in (?)", poll_ids_voted_by(user)) + end + + def self.poll_ids_voted_by(user) + return -1 if Poll::Voter.where(user: user).empty? + + Poll::Voter.where(user: user).pluck(:poll_id) + end + + def not_voted_by?(user) + Poll::Voter.where(poll: self, user: user).empty? + end + + def voted_by?(user) + Poll::Voter.where(poll: self, user: user).exists? end def voted_in_booth?(user) @@ -81,10 +101,6 @@ class Poll < ActiveRecord::Base Poll::Voter.where(poll: self, user: user, origin: "web").exists? end - def voted_by?(user) - Poll::Voter.where(poll: self, user: user).exists? - end - def date_range unless starts_at.present? && ends_at.present? && starts_at <= ends_at errors.add(:starts_at, I18n.t('errors.messages.invalid_date_range')) diff --git a/app/views/officing/_menu.html.erb b/app/views/officing/_menu.html.erb index 173c72582..17b57a087 100644 --- a/app/views/officing/_menu.html.erb +++ b/app/views/officing/_menu.html.erb @@ -1,7 +1,9 @@