##// END OF EJS Templates
Do not display the magnifier for added files in email notifications (#4774)....
Do not display the magnifier for added files in email notifications (#4774). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@9333 e93f8b46-1217-0410-a6f0-8f06a7374b81

File last commit:

r9017:fef2e4b67252
r9199:331cf233457a
Show More
version.rb
271 lines | 8.1 KiB | text/x-ruby | RubyLexer
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 # Redmine - project management software
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761 # Copyright (C) 2006-2011 Jean-Philippe Lang
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 #
# 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.
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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.
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761 #
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 # 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
Jean-Philippe Lang
Prevent mass-assignment when adding/updating a version (#10390)....
r9017 include Redmine::SafeAttributes
Jean-Philippe Lang
Optimize issue updates when a version sharing changes....
r3021 after_update :update_issues_from_sharing_change
Jean-Philippe Lang
added svn:eol-style native property on /app files...
r330 belongs_to :project
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 has_many :fixed_issues, :class_name => 'Issue', :foreign_key => 'fixed_version_id', :dependent => :nullify
Jean-Philippe Lang
Adds custom fields for versions (#4219)....
r2950 acts_as_customizable
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
Jean-Philippe Lang
Adds version status to limit issue assignments (#1245)....
r2906 VERSION_STATUSES = %w(open locked closed)
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 VERSION_SHARINGS = %w(none descendants hierarchy tree system)
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Adds version status to limit issue assignments (#1245)....
r2906 validates_inclusion_of :status, :in => VERSION_STATUSES
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 validates_inclusion_of :sharing, :in => VERSION_SHARINGS
Jean-Philippe Lang
Adds version status to limit issue assignments (#1245)....
r2906
Jean-Philippe Lang
Fixed: Setting issue attributes from mail should be case-insensitive (#8759)....
r6079 named_scope :named, lambda {|arg| { :conditions => ["LOWER(#{table_name}.name) = LOWER(?)", arg.to_s.strip]}}
Jean-Philippe Lang
Adds version status to limit issue assignments (#1245)....
r2906 named_scope :open, :conditions => {:status => 'open'}
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 named_scope :visible, lambda {|*args| { :include => :project,
:conditions => Project.allowed_to_condition(args.first || User.current, :view_issues) } }
Jean-Philippe Lang
Prevent mass-assignment when adding/updating a version (#10390)....
r9017
safe_attributes 'name',
'description',
'effective_date',
'due_date',
'wiki_page_title',
'status',
'sharing',
'custom_field_values'
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009
# Returns true if +user+ or current user is allowed to view the version
def visible?(user=User.current)
user.allowed_to?(:view_issues, self.project)
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Fixed: version files in Files module cannot be downloaded if issue tracking is disabled (#9055)....
r7864 # Version files have same visibility as project files
def attachments_visible?(*args)
project.present? && project.attachments_visible?(*args)
end
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 def start_date
Jean-Philippe Lang
Makes Version#start_date return the minimum start_date of its issues....
r4460 @start_date ||= fixed_issues.minimum('start_date')
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Added versions due dates on gantt chart....
r425 def due_date
effective_date
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Makes Version REST API accept due_date attribute (#10013)....
r8566 def due_date=(arg)
self.effective_date=(arg)
end
Jean-Philippe Lang
Version details view changes:...
r1193 # Returns the total estimated time for this version
Jean-Philippe Lang
Fixes calculation of version estimated hours with subtasks (#5265)....
r3519 # (sum of leaves estimated_hours)
Jean-Philippe Lang
Version details view changes:...
r1193 def estimated_hours
Jean-Philippe Lang
Fixes calculation of version estimated hours with subtasks (#5265)....
r3519 @estimated_hours ||= fixed_issues.leaves.sum(:estimated_hours).to_f
Jean-Philippe Lang
Version details view changes:...
r1193 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Version details view changes:...
r1193 # Returns the total reported time for this version
def spent_hours
Jean-Philippe Lang
Use :joins instead of :include....
r8862 @spent_hours ||= TimeEntry.sum(:hours, :joins => :issue, :conditions => ["#{Issue.table_name}.fixed_version_id = ?", id]).to_f
Jean-Philippe Lang
Version details view changes:...
r1193 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Adds version status to limit issue assignments (#1245)....
r2906 def closed?
status == 'closed'
end
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009
def open?
status == 'open'
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Rewrite the Gantt chart. #6276...
r3958
def behind_schedule?
if completed_pourcent == 100
return false
Jean-Philippe Lang
Makes Version#start_date return the minimum start_date of its issues....
r4460 elsif due_date && start_date
Eric Davis
Rewrite the Gantt chart. #6276...
r3958 done_date = start_date + ((due_date - start_date+1)* completed_pourcent/100).floor
return done_date <= Date.today
else
false # No issues so it's not late
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 # Returns assigned issues count
def issues_count
Jean-Philippe Lang
Use a single query to retrieve issues_count, open_issues_count and closed_issues_count....
r8936 load_issue_counts
@issue_count
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Jean-Philippe Lang
Use a single query to retrieve issues_count, open_issues_count and closed_issues_count....
r8936 load_issue_counts
@open_issues_count
Jean-Philippe Lang
Overdue versions (date reached and open issues > 0) are now always displayed on the roadmap....
r601 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
Jean-Philippe Lang
Use a single query to retrieve issues_count, open_issues_count and closed_issues_count....
r8936 load_issue_counts
@closed_issues_count
Jean-Philippe Lang
Added an option to see all versions in the roadmap view (including completed ones)....
r513 end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Added custom fields in issue related mail notifications....
r811 def to_s; name end
Eric Davis
Add project names to the Versions in the Gantt export. #5904...
r3959
def to_s_with_project
"#{project} - #{name}"
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Eric Davis
Include the Project name when sorting versions....
r3647 # Versions are sorted by effective_date and "Project Name - Version name"
# Those with no effective_date are at the end, sorted by "Project Name - Version name"
Jean-Philippe Lang
Versions can now be created with no date....
r533 def <=>(version)
if self.effective_date
Eric Davis
Include the Project name when sorting versions....
r3647 if version.effective_date
if self.effective_date == version.effective_date
"#{self.project.name} - #{self.name}" <=> "#{version.project.name} - #{version.name}"
else
self.effective_date <=> version.effective_date
end
else
-1
end
Jean-Philippe Lang
Versions can now be created with no date....
r533 else
Eric Davis
Include the Project name when sorting versions....
r3647 if version.effective_date
1
else
"#{self.project.name} - #{self.name}" <=> "#{version.project.name} - #{version.name}"
end
Jean-Philippe Lang
Versions can now be created with no date....
r533 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 # Returns the sharings that +user+ can set the version to
def allowed_sharings(user = User.current)
VERSION_SHARINGS.select do |s|
if sharing == s
true
else
case s
when 'system'
# Only admin users can set a systemwide sharing
user.admin?
when 'hierarchy', 'tree'
# Only users allowed to manage versions of the root project can
# set sharing to hierarchy or tree
project.nil? || user.allowed_to?(:manage_versions, project.root)
else
true
end
end
end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
Jean-Philippe Lang
Do not raise an error when destroying a Version with assigned issues....
r3554 private
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009
Jean-Philippe Lang
Use a single query to retrieve issues_count, open_issues_count and closed_issues_count....
r8936 def load_issue_counts
unless @issue_count
@open_issues_count = 0
@closed_issues_count = 0
fixed_issues.count(:all, :group => :status).each do |status, count|
if status.is_closed?
@closed_issues_count += count
else
@open_issues_count += count
end
end
@issue_count = @open_issues_count + @closed_issues_count
end
end
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 # Update the issue's fixed versions. Used if a version's sharing changes.
Jean-Philippe Lang
Optimize issue updates when a version sharing changes....
r3021 def update_issues_from_sharing_change
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 if sharing_changed?
Jean-Philippe Lang
Optimize issue updates when a version sharing changes....
r3021 if VERSION_SHARINGS.index(sharing_was).nil? ||
VERSION_SHARINGS.index(sharing).nil? ||
VERSION_SHARINGS.index(sharing_was) > VERSION_SHARINGS.index(sharing)
Jean-Philippe Lang
Optimize updates of issue's shared versions....
r3023 Issue.update_versions_from_sharing_change self
Jean-Philippe Lang
Optimize issue updates when a version sharing changes....
r3021 end
Jean-Philippe Lang
Version sharing (#465) + optional inclusion of subprojects in the roadmap view (#2666)....
r3009 end
end
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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
Toshi MARUYAMA
remove trailing white-spaces from app/models/version.rb....
r6761
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}",
Jean-Philippe Lang
Fixed Version#issues_progress for Rails 3.1....
r8866 :joins => :status,
:conditions => ["#{IssueStatus.table_name}.is_closed = ?", !open]).to_f
Jean-Philippe Lang
Use estimated hours to weight issues in version completion calculation (#2182)....
r2347 progress = done / (estimated_average * issues_count)
end
progress
end
end
Jean-Philippe Lang
Initial commit...
r2 end