From 446889b3f0cbb8d66d5b72605b14518f01afd17c Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Thu, 16 Aug 2007 17:47:41 +0000 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 --- app/models/issue.rb | 10 ++++++++++ app/views/issues/change_status.rhtml | 2 +- app/views/issues/edit.rhtml | 2 +- app/views/projects/add_issue.rhtml | 2 +- app/views/roles/_form.rhtml | 2 ++ db/migrate/059_add_roles_assignable.rb | 9 +++++++++ lang/bg.yml | 1 + lang/de.yml | 1 + lang/en.yml | 1 + lang/es.yml | 1 + lang/fr.yml | 1 + lang/it.yml | 1 + lang/ja.yml | 1 + lang/nl.yml | 1 + lang/pt-br.yml | 1 + lang/pt.yml | 1 + lang/sv.yml | 1 + lang/zh.yml | 1 + 18 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 db/migrate/059_add_roles_assignable.rb diff --git a/app/models/issue.rb b/app/models/issue.rb index a73160e5..0e9e7745 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 550a5d6e..79a4412d 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 18d6e010..f131041e 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 d35f7f48..1793ef1d 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 a80d990f..d69fff13 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 00000000..a1ba7963 --- /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 337b167b..9f616532 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 32ad4bce..da9f7ff8 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 3488ee34..c7dd0d2e 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 26eca0bc..5bf61df6 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 36435978..ca1fb16b 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 d3f04b9c..b568873e 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 703652bc..87fe5eb3 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 29b7751c..b80467ae 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 7196db85..d7ac1ef5 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 face383c..b0b2210f 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 70cb15c3..8b025460 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 de8cfdb7..7a7ec7b3 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: 应用程序子标题