##// END OF EJS Templates
Added a 'Assignable' boolean on Role model....
Jean-Philippe Lang -
r643:446889b3f0cb
parent child
Show More
@@ -0,0 +1,9
1 class AddRolesAssignable < ActiveRecord::Migration
2 def self.up
3 add_column :roles, :assignable, :boolean, :default => true
4 end
5
6 def self.down
7 remove_column :roles, :assignable
8 end
9 end
@@ -59,6 +59,11 class Issue < ActiveRecord::Base
59 if start_date && soonest_start && start_date < soonest_start
59 if start_date && soonest_start && start_date < soonest_start
60 errors.add :start_date, :activerecord_error_invalid
60 errors.add :start_date, :activerecord_error_invalid
61 end
61 end
62
63 # validate assignment
64 if assigned_to && !assignable_users.include?(assigned_to)
65 errors.add :assigned_to_id, :activerecord_error_invalid
66 end
62 end
67 end
63
68
64 def before_create
69 def before_create
@@ -105,6 +110,11 class Issue < ActiveRecord::Base
105 @current_journal
110 @current_journal
106 end
111 end
107
112
113 # Users the issue can be assigned to
114 def assignable_users
115 project.members.select {|m| m.role.assignable?}.collect {|m| m.user}
116 end
117
108 def spent_hours
118 def spent_hours
109 @spent_hours ||= time_entries.sum(:hours) || 0
119 @spent_hours ||= time_entries.sum(:hours) || 0
110 end
120 end
@@ -10,7 +10,7
10 <div class="box">
10 <div class="box">
11 <div class="splitcontentleft">
11 <div class="splitcontentleft">
12 <p><label><%=l(:label_issue_status_new)%></label> <%= @new_status.name %></p>
12 <p><label><%=l(:label_issue_status_new)%></label> <%= @new_status.name %></p>
13 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
13 <p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
14 <p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
14 <p><%= f.select :done_ratio, ((0..10).to_a.collect {|r| ["#{r*10} %", r*10] }) %></p>
15 <p><%= f.select :fixed_version_id, (@project.versions.sort.collect {|v| [v.name, v.id]}), { :include_blank => true } %></p>
15 <p><%= f.select :fixed_version_id, (@project.versions.sort.collect {|v| [v.name, v.id]}), { :include_blank => true } %></p>
16 </div>
16 </div>
@@ -7,7 +7,7
7 <div class="splitcontentleft">
7 <div class="splitcontentleft">
8 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
8 <p><label><%=l(:field_status)%></label> <%= @issue.status.name %></p>
9 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
9 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
10 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
10 <p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
11 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
11 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
12 <%= prompt_to_remote(l(:label_issue_category_new),
12 <%= prompt_to_remote(l(:label_issue_category_new),
13 l(:label_issue_category_new), 'category[name]',
13 l(:label_issue_category_new), 'category[name]',
@@ -9,7 +9,7
9 <div class="splitcontentleft">
9 <div class="splitcontentleft">
10 <p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
10 <p><%= f.select :status_id, (@allowed_statuses.collect {|p| [p.name, p.id]}), :required => true %></p>
11 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
11 <p><%= f.select :priority_id, (@priorities.collect {|p| [p.name, p.id]}), :required => true %></p>
12 <p><%= f.select :assigned_to_id, (@issue.project.members.collect {|m| [m.name, m.user_id]}), :include_blank => true %></p>
12 <p><%= f.select :assigned_to_id, (@issue.assignable_users.collect {|m| [m.name, m.id]}), :include_blank => true %></p>
13 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
13 <p><%= f.select :category_id, (@project.issue_categories.collect {|c| [c.name, c.id]}), :include_blank => true %>
14 <%= prompt_to_remote(l(:label_issue_category_new),
14 <%= prompt_to_remote(l(:label_issue_category_new),
15 l(:label_issue_category_new), 'category[name]',
15 l(:label_issue_category_new), 'category[name]',
@@ -2,6 +2,8
2 <div class="box">
2 <div class="box">
3 <!--[form:role]-->
3 <!--[form:role]-->
4 <p><%= f.text_field :name, :required => true %></p>
4 <p><%= f.text_field :name, :required => true %></p>
5 <p><%= f.check_box :assignable %></p>
6 <div class="clear"></div>
5
7
6 <h3><%=l(:label_permissions)%></h3>
8 <h3><%=l(:label_permissions)%></h3>
7 <% permissions = @permissions.group_by {|p| p.group_id } %>
9 <% permissions = @permissions.group_by {|p| p.group_id } %>
@@ -155,6 +155,7 field_identifier: Идентификатор
155 field_is_filter: Използва се за филтър
155 field_is_filter: Използва се за филтър
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Заглавие
160 setting_app_title: Заглавие
160 setting_app_subtitle: Описание
161 setting_app_subtitle: Описание
@@ -155,6 +155,7 field_identifier: Identifier
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Applikation Titel
160 setting_app_title: Applikation Titel
160 setting_app_subtitle: Applikation Untertitel
161 setting_app_subtitle: Applikation Untertitel
@@ -155,6 +155,7 field_identifier: Identifier
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Application title
160 setting_app_title: Application title
160 setting_app_subtitle: Application subtitle
161 setting_app_subtitle: Application subtitle
@@ -155,6 +155,7 field_identifier: Identifier
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Título del aplicación
160 setting_app_title: Título del aplicación
160 setting_app_subtitle: Subtítulo del aplicación
161 setting_app_subtitle: Subtítulo del aplicación
@@ -155,6 +155,7 field_identifier: Identifiant
155 field_is_filter: Utilisé comme filtre
155 field_is_filter: Utilisé comme filtre
156 field_issue_to_id: Demande liée
156 field_issue_to_id: Demande liée
157 field_delay: Retard
157 field_delay: Retard
158 field_assignable: Demandes assignables à ce rôle
158
159
159 setting_app_title: Titre de l'application
160 setting_app_title: Titre de l'application
160 setting_app_subtitle: Sous-titre de l'application
161 setting_app_subtitle: Sous-titre de l'application
@@ -155,6 +155,7 field_identifier: Identifier
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Titolo applicazione
160 setting_app_title: Titolo applicazione
160 setting_app_subtitle: Sottotitolo applicazione
161 setting_app_subtitle: Sottotitolo applicazione
@@ -156,6 +156,7 field_identifier: 識別子
156 field_is_filter: フィルタとして使う
156 field_is_filter: フィルタとして使う
157 field_issue_to_id: 関連する問題
157 field_issue_to_id: 関連する問題
158 field_delay: 遅延
158 field_delay: 遅延
159 field_assignable: Issues can be assigned to this role
159
160
160 setting_app_title: アプリケーションのタイトル
161 setting_app_title: アプリケーションのタイトル
161 setting_app_subtitle: アプリケーションのサブタイトル
162 setting_app_subtitle: アプリケーションのサブタイトル
@@ -155,6 +155,7 field_identifier: Identificatiecode
155 field_is_filter: Gebruikt als een filter
155 field_is_filter: Gebruikt als een filter
156 field_issue_to_id: Gerelateerd issue
156 field_issue_to_id: Gerelateerd issue
157 field_delay: Vertraging
157 field_delay: Vertraging
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Applicatie titel
160 setting_app_title: Applicatie titel
160 setting_app_subtitle: Applicatie ondertitel
161 setting_app_subtitle: Applicatie ondertitel
@@ -155,6 +155,7 field_identifier: Identificador
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Titulo da aplicacao
160 setting_app_title: Titulo da aplicacao
160 setting_app_subtitle: Sub-titulo da aplicacao
161 setting_app_subtitle: Sub-titulo da aplicacao
@@ -155,6 +155,7 field_identifier: Identificador
155 field_is_filter: Usado como filtro
155 field_is_filter: Usado como filtro
156 field_issue_to_id: Tarefa relacionada
156 field_issue_to_id: Tarefa relacionada
157 field_delay: Atraso
157 field_delay: Atraso
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Título da aplicação
160 setting_app_title: Título da aplicação
160 setting_app_subtitle: Sub-título da aplicação
161 setting_app_subtitle: Sub-título da aplicação
@@ -155,6 +155,7 field_identifier: Identifierare
155 field_is_filter: Used as a filter
155 field_is_filter: Used as a filter
156 field_issue_to_id: Related issue
156 field_issue_to_id: Related issue
157 field_delay: Delay
157 field_delay: Delay
158 field_assignable: Issues can be assigned to this role
158
159
159 setting_app_title: Applikationstitel
160 setting_app_title: Applikationstitel
160 setting_app_subtitle: Applicationsunderrubrik
161 setting_app_subtitle: Applicationsunderrubrik
@@ -158,6 +158,7 field_identifier: Identifier
158 field_is_filter: Used as a filter
158 field_is_filter: Used as a filter
159 field_issue_to_id: Related issue
159 field_issue_to_id: Related issue
160 field_delay: Delay
160 field_delay: Delay
161 field_assignable: Issues can be assigned to this role
161
162
162 setting_app_title: 应用程序标题
163 setting_app_title: 应用程序标题
163 setting_app_subtitle: 应用程序子标题
164 setting_app_subtitle: 应用程序子标题
General Comments 0
You need to be logged in to leave comments. Login now