From 446889b3f0cbb8d66d5b72605b14518f01afd17c 2007-08-16 17:47:41 From: Jean-Philippe Lang Date: 2007-08-16 17:47:41 Subject: [PATCH] Added a 'Assignable' boolean on Role model. If unchecked, issues can not be assigned to users having this role. git-svn-id: http://redmine.rubyforge.org/svn/trunk@649 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- diff --git a/app/models/issue.rb b/app/models/issue.rb index a73160e..0e9e774 100644 --- a/app/models/issue.rb +++ b/app/models/issue.rb @@ -59,6 +59,11 @@ class Issue < ActiveRecord::Base if start_date && soonest_start && start_date < soonest_start errors.add :start_date, :activerecord_error_invalid end + + # validate assignment + if assigned_to && !assignable_users.include?(assigned_to) + errors.add :assigned_to_id, :activerecord_error_invalid + end end def before_create @@ -105,6 +110,11 @@ class Issue < ActiveRecord::Base @current_journal end + # Users the issue can be assigned to + def assignable_users + project.members.select {|m| m.role.assignable?}.collect {|m| m.user} + end + def spent_hours @spent_hours ||= time_entries.sum(:hours) || 0 end diff --git a/app/views/issues/change_status.rhtml b/app/views/issues/change_status.rhtml index 550a5d6..79a4412 100644 --- a/app/views/issues/change_status.rhtml +++ b/app/views/issues/change_status.rhtml @@ -10,7 +10,7 @@

<%= @new_status.name %>

-

<%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %>

+

<%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %>

<%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %>

<%= f.select :fixed_version_id, (@project.versions.sort.collect {|v| [v.name, v.id]}), { :include_blank => true } %>

diff --git a/app/views/issues/edit.rhtml b/app/views/issues/edit.rhtml index 18d6e01..f131041 100644 --- a/app/views/issues/edit.rhtml +++ b/app/views/issues/edit.rhtml @@ -7,7 +7,7 @@

<%= @issue.status.name %>

<%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %>

-

<%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %>

+

<%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %>

<%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %> <%= prompt_to_remote(l(:label_issue_category_new), l(:label_issue_category_new), 'category[name]', diff --git a/app/views/projects/add_issue.rhtml b/app/views/projects/add_issue.rhtml index d35f7f4..1793ef1 100644 --- a/app/views/projects/add_issue.rhtml +++ b/app/views/projects/add_issue.rhtml @@ -9,7 +9,7 @@

<%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %>

<%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %>

-

<%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %>

+

<%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %>

<%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %> <%= prompt_to_remote(l(:label_issue_category_new), l(:label_issue_category_new), 'category[name]', diff --git a/app/views/roles/_form.rhtml b/app/views/roles/_form.rhtml index a80d990..d69fff1 100644 --- a/app/views/roles/_form.rhtml +++ b/app/views/roles/_form.rhtml @@ -2,6 +2,8 @@

<%= f.text_field :name, :required => true %>

+

<%= f.check_box :assignable %>

+

<%=l(:label_permissions)%>

<% permissions = @permissions.group_by {|p| p.group_id } %> diff --git a/db/migrate/059_add_roles_assignable.rb b/db/migrate/059_add_roles_assignable.rb new file mode 100644 index 0000000..a1ba796 --- /dev/null +++ b/db/migrate/059_add_roles_assignable.rb @@ -0,0 +1,9 @@ +class AddRolesAssignable < ActiveRecord::Migration + def self.up + add_column :roles, :assignable, :boolean, :default => true + end + + def self.down + remove_column :roles, :assignable + end +end diff --git a/lang/bg.yml b/lang/bg.yml index 337b167..9f61653 100644 --- a/lang/bg.yml +++ b/lang/bg.yml @@ -155,6 +155,7 @@ field_identifier: Идентификатор field_is_filter: Използва се за филтър field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Заглавие setting_app_subtitle: Описание diff --git a/lang/de.yml b/lang/de.yml index 32ad4bc..da9f7ff 100644 --- a/lang/de.yml +++ b/lang/de.yml @@ -155,6 +155,7 @@ field_identifier: Identifier field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Applikation Titel setting_app_subtitle: Applikation Untertitel diff --git a/lang/en.yml b/lang/en.yml index 3488ee3..c7dd0d2 100644 --- a/lang/en.yml +++ b/lang/en.yml @@ -155,6 +155,7 @@ field_identifier: Identifier field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Application title setting_app_subtitle: Application subtitle diff --git a/lang/es.yml b/lang/es.yml index 26eca0b..5bf61df 100644 --- a/lang/es.yml +++ b/lang/es.yml @@ -155,6 +155,7 @@ field_identifier: Identifier field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Título del aplicación setting_app_subtitle: Subtítulo del aplicación diff --git a/lang/fr.yml b/lang/fr.yml index 3643597..ca1fb16 100644 --- a/lang/fr.yml +++ b/lang/fr.yml @@ -155,6 +155,7 @@ field_identifier: Identifiant field_is_filter: Utilisé comme filtre field_issue_to_id: Demande liée field_delay: Retard +field_assignable: Demandes assignables à ce rôle setting_app_title: Titre de l'application setting_app_subtitle: Sous-titre de l'application diff --git a/lang/it.yml b/lang/it.yml index d3f04b9..b568873 100644 --- a/lang/it.yml +++ b/lang/it.yml @@ -155,6 +155,7 @@ field_identifier: Identifier field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Titolo applicazione setting_app_subtitle: Sottotitolo applicazione diff --git a/lang/ja.yml b/lang/ja.yml index 703652b..87fe5eb 100644 --- a/lang/ja.yml +++ b/lang/ja.yml @@ -156,6 +156,7 @@ field_identifier: 識別子 field_is_filter: フィルタとして使う field_issue_to_id: 関連する問題 field_delay: 遅延 +field_assignable: Issues can be assigned to this role setting_app_title: アプリケーションのタイトル setting_app_subtitle: アプリケーションのサブタイトル diff --git a/lang/nl.yml b/lang/nl.yml index 29b7751..b80467a 100644 --- a/lang/nl.yml +++ b/lang/nl.yml @@ -155,6 +155,7 @@ field_identifier: Identificatiecode field_is_filter: Gebruikt als een filter field_issue_to_id: Gerelateerd issue field_delay: Vertraging +field_assignable: Issues can be assigned to this role setting_app_title: Applicatie titel setting_app_subtitle: Applicatie ondertitel diff --git a/lang/pt-br.yml b/lang/pt-br.yml index 7196db8..d7ac1ef 100644 --- a/lang/pt-br.yml +++ b/lang/pt-br.yml @@ -155,6 +155,7 @@ field_identifier: Identificador field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Titulo da aplicacao setting_app_subtitle: Sub-titulo da aplicacao diff --git a/lang/pt.yml b/lang/pt.yml index face383..b0b2210 100644 --- a/lang/pt.yml +++ b/lang/pt.yml @@ -155,6 +155,7 @@ field_identifier: Identificador field_is_filter: Usado como filtro field_issue_to_id: Tarefa relacionada field_delay: Atraso +field_assignable: Issues can be assigned to this role setting_app_title: Título da aplicação setting_app_subtitle: Sub-título da aplicação diff --git a/lang/sv.yml b/lang/sv.yml index 70cb15c..8b02546 100644 --- a/lang/sv.yml +++ b/lang/sv.yml @@ -155,6 +155,7 @@ field_identifier: Identifierare field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: Applikationstitel setting_app_subtitle: Applicationsunderrubrik diff --git a/lang/zh.yml b/lang/zh.yml index de8cfdb..7a7ec7b 100644 --- a/lang/zh.yml +++ b/lang/zh.yml @@ -158,6 +158,7 @@ field_identifier: Identifier field_is_filter: Used as a filter field_issue_to_id: Related issue field_delay: Delay +field_assignable: Issues can be assigned to this role setting_app_title: 应用程序标题 setting_app_subtitle: 应用程序子标题