Feature #24577 » settings_to_make_issue_id_comment_fields_mandatory.patch
app/helpers/settings_helper.rb | ||
---|---|---|
25 | 25 |
{:name => 'api', :partial => 'settings/api', :label => :label_api}, |
26 | 26 |
{:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural}, |
27 | 27 |
{:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking}, |
28 |
{:name => 'timelog', :partial => 'settings/timelog', :label => :label_time_tracking}, |
|
28 | 29 |
{:name => 'attachments', :partial => 'settings/attachments', :label => :label_attachment_plural}, |
29 | 30 |
{:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification}, |
30 | 31 |
{:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails}, |
app/models/time_entry.rb | ||
---|---|---|
38 | 38 |
:scope => joins(:project).preload(:project) |
39 | 39 | |
40 | 40 |
validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on |
41 |
validates_presence_of :issue_id, :if => lambda { Setting.timelog_required_fields.include?('issue_id') } |
|
42 |
validates_presence_of :comments, :if => lambda { Setting.timelog_required_fields.include?('comments') } |
|
41 | 43 |
validates_numericality_of :hours, :allow_nil => true, :message => :invalid |
42 | 44 |
validates_length_of :comments, :maximum => 1024, :allow_nil => true |
43 | 45 |
validates :spent_on, :date => true |
app/views/timelog/_form.html.erb | ||
---|---|---|
12 | 12 |
<% end %> |
13 | 13 |
<% end %> |
14 | 14 |
<p> |
15 |
<%= f.text_field :issue_id, :size => 6 %> |
|
15 |
<%= f.text_field :issue_id, :size => 6, :required => Setting.timelog_required_fields.include?('issue_id') %>
|
|
16 | 16 |
<span id="time_entry_issue"> |
17 | 17 |
<%= link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %> |
18 | 18 |
</span> |
19 | 19 |
</p> |
20 | 20 |
<p><%= f.date_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></p> |
21 | 21 |
<p><%= f.hours_field :hours, :size => 6, :required => true %></p> |
22 |
<p><%= f.text_field :comments, :size => 100, :maxlength => 1024 %></p> |
|
22 |
<p><%= f.text_field :comments, :size => 100, :maxlength => 1024, :required => Setting.timelog_required_fields.include?('comments') %></p>
|
|
23 | 23 |
<p><%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %></p> |
24 | 24 |
<% @time_entry.custom_field_values.each do |value| %> |
25 | 25 |
<p><%= custom_field_tag_with_label :time_entry, value %></p> |
config/locales/en.yml | ||
---|---|---|
448 | 448 |
setting_attachment_extensions_allowed: Allowed extensions |
449 | 449 |
setting_attachment_extensions_denied: Disallowed extensions |
450 | 450 |
setting_new_item_menu_tab: Project menu tab for creating new objects |
451 |
setting_timelog_required_fields: Required fields for time logs |
|
451 | 452 | |
452 | 453 |
permission_add_project: Create project |
453 | 454 |
permission_add_subprojects: Create subprojects |
config/settings.yml | ||
---|---|---|
279 | 279 |
- '7' |
280 | 280 |
new_item_menu_tab: |
281 | 281 |
default: 2 |
282 |
timelog_required_fields: |
|
283 |
serialized: true |
|
284 |
default: '' |
test/unit/time_entry_test.rb | ||
---|---|---|
172 | 172 |
:activity => activity) |
173 | 173 |
assert_equal project.id, te.project.id |
174 | 174 |
end |
175 | ||
176 |
def test_create_with_required_issue_id_and_comment_should_be_validated |
|
177 |
with_settings :timelog_required_fields => ['issue_id' , 'comments'] do |
|
178 |
entry = TimeEntry.new(:project => Project.find(1), :spent_on => Date.today, :user => User.find(1), :activity => TimeEntryActivity.first, :hours => 1) |
|
179 | ||
180 |
assert !entry.save |
|
181 |
assert_equal ["Comment cannot be blank", "Issue cannot be blank"], entry.errors.full_messages.sort |
|
182 |
end |
|
183 |
end |
|
175 | 184 |
end |