Chris@909: # Redmine - project management software Chris@1494: # Copyright (C) 2006-2014 Jean-Philippe Lang Chris@0: # Chris@0: # This program is free software; you can redistribute it and/or Chris@0: # modify it under the terms of the GNU General Public License Chris@0: # as published by the Free Software Foundation; either version 2 Chris@0: # of the License, or (at your option) any later version. Chris@909: # Chris@0: # This program is distributed in the hope that it will be useful, Chris@0: # but WITHOUT ANY WARRANTY; without even the implied warranty of Chris@0: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the Chris@0: # GNU General Public License for more details. Chris@909: # Chris@0: # You should have received a copy of the GNU General Public License Chris@0: # along with this program; if not, write to the Free Software Chris@0: # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. Chris@0: Chris@0: class IssuePriority < Enumeration Chris@0: has_many :issues, :foreign_key => 'priority_id' Chris@0: Chris@1115: after_destroy {|priority| priority.class.compute_position_names} Chris@1115: after_save {|priority| priority.class.compute_position_names if priority.position_changed? && priority.position} Chris@1115: Chris@0: OptionName = :enumeration_issue_priorities Chris@0: Chris@0: def option_name Chris@0: OptionName Chris@0: end Chris@0: Chris@0: def objects_count Chris@0: issues.count Chris@0: end Chris@0: Chris@0: def transfer_relations(to) Chris@0: issues.update_all("priority_id = #{to.id}") Chris@0: end Chris@1115: Chris@1115: def css_classes Chris@1115: "priority-#{id} priority-#{position_name}" Chris@1115: end Chris@1115: Chris@1115: # Clears position_name for all priorities Chris@1115: # Called from migration 20121026003537_populate_enumerations_position_name Chris@1115: def self.clear_position_names Chris@1115: update_all :position_name => nil Chris@1115: end Chris@1115: Chris@1115: # Updates position_name for active priorities Chris@1115: # Called from migration 20121026003537_populate_enumerations_position_name Chris@1115: def self.compute_position_names Chris@1517: priorities = where(:active => true).sort_by(&:position) Chris@1115: if priorities.any? Chris@1115: default = priorities.detect(&:is_default?) || priorities[(priorities.size - 1) / 2] Chris@1115: priorities.each_with_index do |priority, index| Chris@1115: name = case Chris@1115: when priority.position == default.position Chris@1115: "default" Chris@1115: when priority.position < default.position Chris@1115: index == 0 ? "lowest" : "low#{index+1}" Chris@1115: else Chris@1115: index == (priorities.size - 1) ? "highest" : "high#{priorities.size - index}" Chris@1115: end Chris@1115: Chris@1517: where(:id => priority.id).update_all({:position_name => name}) Chris@1115: end Chris@1115: end Chris@1115: end Chris@0: end