#-- # Copyright (C) 2008 Dimitrij Denissenko # Please read LICENSE document for more information. #++ class Milestone < ActiveRecord::Base has_many :tickets, :include => [:status], :dependent => :nullify belongs_to :project validates_presence_of :name, :project_id validates_uniqueness_of :name, :scope => :project_id def open_tickets ticket_count_by_state(1) end def closed_tickets ticket_count_by_state(3) end def total_tickets ticket_count_by_state(1, 2, 3) end def percent_completed return 0 if self.total_tickets.zero? (self.closed_tickets.to_f / self.total_tickets.to_f * 100).to_i end def completed? !self.finished_on.blank? end private def ticket_count_by_state(*state_ids) if tickets.loaded? tickets.select {|i| state_ids.include?(i.status.state_id) }.size else tickets.count(:all, :conditions => ['statuses.state_id IN (?)', state_ids]) end end end