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 |