]> source.dussan.org Git - redmine.git/commitdiff
Option to set a default assignee on each project (#482).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 8 Apr 2017 08:02:06 +0000 (08:02 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Sat, 8 Apr 2017 08:02:06 +0000 (08:02 +0000)
Patch by Felix Schäfer.

git-svn-id: http://svn.redmine.org/redmine/trunk@16525 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/projects_helper.rb
app/models/issue.rb
app/models/member.rb
app/models/principal.rb
app/models/project.rb
app/views/projects/_form.html.erb
config/locales/de.yml
config/locales/en.yml
config/locales/fr.yml
db/migrate/20170309214320_add_project_default_assigned_to_id.rb [new file with mode: 0644]

index 3e1f0d804a05ceac6c6dff1548533a4bce31a323..cd0d7840fa898c86687aac0269114776e8605a55 100644 (file)
@@ -89,6 +89,11 @@ module ProjectsHelper
     version_options_for_select(versions, project.default_version)
   end
 
+  def project_default_assigned_to_options(project)
+    assignable_users = (project.assignable_users.to_a + [project.default_assigned_to]).uniq.compact
+    principals_options_for_select(assignable_users, project.default_assigned_to)
+  end
+
   def format_version_sharing(sharing)
     sharing = 'none' unless Version::VERSION_SHARINGS.include?(sharing)
     l("label_version_sharing_#{sharing}")
index 4d3d1dbe17790de849f871837610ce4f83eec39d..3d8df790b55a197c5923be9a9e212a3d62cf9455 100644 (file)
@@ -1762,10 +1762,14 @@ class Issue < ActiveRecord::Base
     end
   end
 
-  # Default assignment based on category
+  # Default assignment based on project or category
   def default_assign
-    if assigned_to.nil? && category && category.assigned_to
-      self.assigned_to = category.assigned_to
+    if assigned_to.nil?
+      if category && category.assigned_to
+        self.assigned_to = category.assigned_to
+      elsif project && project.default_assigned_to
+        self.assigned_to = project.default_assigned_to
+      end
     end
   end
 
index 24376d3034e474e6362e1b2ec610aa31d16a0fd5..0911422c42d03f69ed3c080ef0c8cc1ffe5860f3 100644 (file)
@@ -27,7 +27,7 @@ class Member < ActiveRecord::Base
   validate :validate_role
   attr_protected :id
 
-  before_destroy :set_issue_category_nil
+  before_destroy :set_issue_category_nil, :remove_from_project_default_assigned_to
 
   scope :active, lambda { joins(:principal).where(:users => {:status => Principal::STATUS_ACTIVE})}
 
@@ -151,6 +151,13 @@ class Member < ActiveRecord::Base
     end
   end
 
+  def remove_from_project_default_assigned_to
+    if user_id && project && project.default_assigned_to_id == user_id
+      # remove project based auto assignments for this member
+      project.update_column(:default_assigned_to_id, nil)
+    end
+  end
+
   # Returns the roles that the member is allowed to manage
   # in the project the member belongs to
   def managed_roles
index b8ab4ea972f0ec996fc113c84bb2b268c5665217..324a74252a10fa44e2fd5300e7c3c465e2000b75 100644 (file)
@@ -105,6 +105,7 @@ class Principal < ActiveRecord::Base
   scope :sorted, lambda { order(*Principal.fields_for_order_statement)}
 
   before_create :set_default_empty_values
+  before_destroy :nullify_projects_default_assigned_to
 
   def reload(*args)
     @project_ids = nil
@@ -180,6 +181,10 @@ class Principal < ActiveRecord::Base
     principal
   end
 
+  def nullify_projects_default_assigned_to
+    Project.where(default_assigned_to: self).update_all(default_assigned_to_id: nil)
+  end
+
   protected
 
   # Make sure we don't try to insert NULL values (see #4632)
index ce68c725cfc5e854c7842b04708faba029e93377..4203068893753f53d7502ca665e53f8a395f488d 100644 (file)
@@ -39,6 +39,7 @@ class Project < ActiveRecord::Base
   has_many :issue_changes, :through => :issues, :source => :journals
   has_many :versions, :dependent => :destroy
   belongs_to :default_version, :class_name => 'Version'
+  belongs_to :default_assigned_to, :class_name => 'Principal'
   has_many :time_entries, :dependent => :destroy
   has_many :queries, :dependent => :delete_all
   has_many :documents, :dependent => :destroy
@@ -743,7 +744,8 @@ class Project < ActiveRecord::Base
     'tracker_ids',
     'issue_custom_field_ids',
     'parent_id',
-    'default_version_id'
+    'default_version_id',
+    'default_assigned_to_id'
 
   safe_attributes 'enabled_module_names',
     :if => lambda {|project, user|
index 1e5917e8811ebbba7e38373917444cf112e27563..0cbdf422ed51555102612f5818d76650fd12c673 100644 (file)
   <p><%= f.select :default_version_id, project_default_version_options(@project), :include_blank => true %></p>
 <% end %>
 
+<% if @project.safe_attribute?('default_assigned_to_id') && (default_assigned_to_options = project_default_assigned_to_options(@project)).present? %>
+  <p><%= f.select :default_assigned_to_id, default_assigned_to_options, include_blank: true %></p>
+<% end %>
+
 <%= wikitoolbar_for 'project_description' %>
 
 <% @project.custom_field_values.each do |value| %>
index 589de2a5f6a83a86f3c6c626adc06ea63a839582..a26e480e00753c29b2528838eed9dfccc880f4b2 100644 (file)
@@ -389,6 +389,7 @@ de:
   field_visible: Sichtbar
   field_warn_on_leaving_unsaved: Vor dem Verlassen einer Seite mit ungesichertem Text im Editor warnen
   field_watcher: Beobachter
+  field_default_assigned_to: Standardbearbeiter
 
   general_csv_decimal_separator: ','
   general_csv_encoding: ISO-8859-1
index 5adcb8f8f4f3ed731b41ada15da86bc9c4fb1898..58dad5646ff0e757f0507354ed5c2730ceeff545 100644 (file)
@@ -374,6 +374,7 @@ en:
   field_last_updated_by: Last updated by
   field_full_width_layout: Full width layout
   field_digest: Checksum
+  field_default_assigned_to: Default assignee
 
   setting_app_title: Application title
   setting_app_subtitle: Application subtitle
index b4a78b20a1762397513707e5145f5b20c2673c50..6a2e6105387b5fb34bb05a3e04726bb4bcb5a374 100644 (file)
@@ -386,6 +386,7 @@ fr:
   field_last_updated_by: Dernière mise à jour par
   field_full_width_layout: Afficher sur toute la largeur
   field_digest: Checksum
+  field_default_assigned_to: Assigné par défaut
 
   setting_app_title: Titre de l'application
   setting_app_subtitle: Sous-titre de l'application
diff --git a/db/migrate/20170309214320_add_project_default_assigned_to_id.rb b/db/migrate/20170309214320_add_project_default_assigned_to_id.rb
new file mode 100644 (file)
index 0000000..97a4b19
--- /dev/null
@@ -0,0 +1,13 @@
+class AddProjectDefaultAssignedToId < ActiveRecord::Migration
+  def up
+    add_column :projects, :default_assigned_to_id, :integer, :default => nil
+    # Try to copy existing settings from the plugin if redmine_default_assign plugin was used
+    if column_exists?(:projects, :default_assignee_id, :integer)
+      Project.update_all('default_assigned_to_id = default_assignee_id')
+    end
+  end
+
+  def down
+    remove_column :projects, :default_assigned_to_id
+  end
+end