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