##// END OF EJS Templates
Upgraded to Rails 2.3.4 (#3597)...
Upgraded to Rails 2.3.4 (#3597) * Ran the Rails upgrade * Upgraded to Rails Engines 2.3.2 * Added a plugin to let Engines override application views. * Converted tests to use the new classes: ** ActionController::TestCase for functional ** ActiveSupport::TestCase for units * Converted ActiveRecord::Error message to a string. * ActiveRecord grouping returns an ordered hash which doesn't have #sort! * Updated the I18n storage_units format. * Added some default initializers from a fresh rails app * Changed the order of check_box_tags and hidden_field_tags. The hidden tag needs to appear first in Rails 2.3, otherwise it will override any value in the check_box_tag. * Removed the custom handler for when the cookie store is tampered with. Rails 2.3 removed the TamperedWithCookie exception and instead Rails will not load the data from it when it's been tampered with (e.g. no user login). * Fixed mail layouts, 2.3 has problems with implicit multipart emails that use layouts. Also removed some custom Redmine mailer code. * Fixed a bug that occurred in tests where the "required" span tag would be added to the :field_status translation. This resulted in an email string of: <li>Status<span class="required"> *</span><span class="required"> *</span> Instead of: <li>Status: New</li> git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2887 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r2536:c2dfffd7f267
r2773:7b0cb6aba871
Show More
version.rb
153 lines | 5.1 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # redMine - project management software
# Copyright (C) 2006 Jean-Philippe Lang
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
class Version < ActiveRecord::Base
before_destroy :check_integrity
belongs_to :project
has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id'
Jean-Philippe Lang
AttachmentsController now handles attachments deletion....
r2114 acts_as_attachable :view_permission => :view_files,
:delete_permission => :manage_files
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
validates_presence_of :name
validates_uniqueness_of :name, :scope => [:project_id]
Jean-Philippe Lang
Allow longer version names (#711, closes #712)....
r1206 validates_length_of :name, :maximum => 60
Jean-Philippe Lang
Merged Rails 2.2 branch. Redmine now requires Rails 2.2.2....
r2430 validates_format_of :effective_date, :with => /^\d{4}-\d{2}-\d{2}$/, :message => :not_a_date, :allow_nil => true
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 def start_date
effective_date
end
def due_date
effective_date
end
Jean-Philippe Lang
Version details view changes:...
r1193 # Returns the total estimated time for this version
def estimated_hours
@estimated_hours ||= fixed_issues.sum(:estimated_hours).to_f
end
# Returns the total reported time for this version
def spent_hours
@spent_hours ||= TimeEntry.sum(:hours, :include => :issue, :conditions => ["#{Issue.table_name}.fixed_version_id = ?", id]).to_f
end
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 # Returns true if the version is completed: due date reached and no open issues
Jean-Philippe Lang
Added an option to see all versions in the roadmap view (including completed ones)....
r513 def completed?
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 effective_date && (effective_date <= Date.today) && (open_issues_count == 0)
end
Eric Davis
Added some RDoc documentation for some models....
r2536 # Returns the completion percentage of this version based on the amount of open/closed issues
# and the time spent on the open issues.
Jean-Philippe Lang
Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)....
r895 def completed_pourcent
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 if issues_count == 0
Jean-Philippe Lang
Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)....
r895 0
elsif open_issues_count == 0
100
else
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 issues_progress(false) + issues_progress(true)
Jean-Philippe Lang
Roadmap: more accurate completion percentage calculation (done ratio of open issues is now taken into account)....
r895 end
end
Eric Davis
Added some RDoc documentation for some models....
r2536 # Returns the percentage of issues that have been marked as 'closed'.
Jean-Philippe Lang
Roadmap progress bars now differentiate the progress due to closed issues from the open issues progress (2 different colors)....
r941 def closed_pourcent
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 if issues_count == 0
Jean-Philippe Lang
Roadmap progress bars now differentiate the progress due to closed issues from the open issues progress (2 different colors)....
r941 0
else
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 issues_progress(false)
Jean-Philippe Lang
Roadmap progress bars now differentiate the progress due to closed issues from the open issues progress (2 different colors)....
r941 end
end
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 # Returns true if the version is overdue: due date reached and some open issues
def overdue?
effective_date && (effective_date < Date.today) && (open_issues_count > 0)
end
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 # Returns assigned issues count
def issues_count
@issue_count ||= fixed_issues.count
end
Eric Davis
Added some RDoc documentation for some models....
r2536 # Returns the total amount of open issues for this version.
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 def open_issues_count
@open_issues_count ||= Issue.count(:all, :conditions => ["fixed_version_id = ? AND is_closed = ?", self.id, false], :include => :status)
end
Eric Davis
Added some RDoc documentation for some models....
r2536 # Returns the total amount of closed issues for this version.
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 def closed_issues_count
@closed_issues_count ||= Issue.count(:all, :conditions => ["fixed_version_id = ? AND is_closed = ?", self.id, true], :include => :status)
Jean-Philippe Lang
Added an option to see all versions in the roadmap view (including completed ones)....
r513 end
Jean-Philippe Lang
A wiki page can now be attached to each version....
r561 def wiki_page
if project.wiki && !wiki_page_title.blank?
@wiki_page ||= project.wiki.find_page(wiki_page_title)
end
@wiki_page
end
Jean-Philippe Lang
Added custom fields in issue related mail notifications....
r811 def to_s; name end
Jean-Philippe Lang
Make the versions with the same date sorted by name (#864)....
r1281 # Versions are sorted by effective_date and name
Jean-Philippe Lang
Versions can now be created with no date....
r533 # Those with no effective_date are at the end, sorted by name
def <=>(version)
if self.effective_date
Jean-Philippe Lang
Make the versions with the same date sorted by name (#864)....
r1281 version.effective_date ? (self.effective_date == version.effective_date ? self.name <=> version.name : self.effective_date <=> version.effective_date) : -1
Jean-Philippe Lang
Versions can now be created with no date....
r533 else
version.effective_date ? 1 : (self.name <=> version.name)
end
end
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 private
def check_integrity
raise "Can't delete version" if self.fixed_issues.find(:first)
end
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347
# Returns the average estimated time of assigned issues
# or 1 if no issue has an estimated time
# Used to weigth unestimated issues in progress calculation
def estimated_average
if @estimated_average.nil?
average = fixed_issues.average(:estimated_hours).to_f
if average == 0
average = 1
end
@estimated_average = average
end
@estimated_average
end
Eric Davis
Added some RDoc documentation for some models....
r2536 # Returns the total progress of open or closed issues. The returned percentage takes into account
# the amount of estimated time set for this version.
#
# Examples:
# issues_progress(true) => returns the progress percentage for open issues.
# issues_progress(false) => returns the progress percentage for closed issues.
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 def issues_progress(open)
@issues_progress ||= {}
@issues_progress[open] ||= begin
progress = 0
if issues_count > 0
ratio = open ? 'done_ratio' : 100
Eric Davis
Added some RDoc documentation for some models....
r2536
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 done = fixed_issues.sum("COALESCE(estimated_hours, #{estimated_average}) * #{ratio}",
:include => :status,
:conditions => ["is_closed = ?", !open]).to_f
progress = done / (estimated_average * issues_count)
end
progress
end
end
Jean-Philippe Lang
Initial commit...
r2 end