]> git.openstreetmap.org Git - rails.git/blob - app/models/issue.rb
a9e2d240568e4c515be2ca5aaef64d8cb4e9f389
[rails.git] / app / models / issue.rb
1 class Issue < ActiveRecord::Base
2         belongs_to :reportable, :polymorphic => true
3         belongs_to :user, :class_name => "User", :foreign_key => :reported_user_id
4
5         has_many :reports
6         has_many :comments, :class_name => "IssueComment"
7         
8         validates :reportable_id, :uniqueness => { :scope => [ :reportable_type ] }
9         validates :reported_user_id, :presence => true
10
11         # Check if more statuses are needed
12         enum status: %w( open ignored resolved )
13
14         scope :with_status, -> (issue_status) { where(:status => statuses[issue_status])}
15
16         def read_reports
17                 resolved_at.present? ? reports.where("created_at < ?", resolved_at) : nil
18         end
19
20         def unread_reports
21     resolved_at.present? ? reports.where("created_at >= ?", resolved_at) : reports
22         end
23
24         include AASM
25         aasm :column => :status, :no_direct_assignment => true do
26                 state :open, :initial => true
27                 state :ignored
28                 state :resolved
29
30                 event :ignore do
31                         transitions :from => :open, :to => :ignored 
32                 end
33
34                 event :resolve do
35                         transitions :from => :open, :to => :resolved
36                         after do
37                                 self.resolved_at = Time.now.getutc
38                         end
39                 end
40
41                 event :reopen do
42                         transitions :from => :resolved, :to => :open
43                 end
44
45         end
46
47 end