diff --git a/app/helpers/settings_helper.rb b/app/helpers/settings_helper.rb old mode 100644 new mode 100755 index 2c657f0..a89ce31 --- a/app/helpers/settings_helper.rb +++ b/app/helpers/settings_helper.rb @@ -25,6 +25,7 @@ module SettingsHelper {:name => 'api', :partial => 'settings/api', :label => :label_api}, {:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural}, {:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking}, + {:name => 'timelog', :partial => 'settings/timelog', :label => :label_time_tracking}, {:name => 'attachments', :partial => 'settings/attachments', :label => :label_attachment_plural}, {:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification}, {:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails}, diff --git a/app/models/time_entry.rb b/app/models/time_entry.rb old mode 100644 new mode 100755 index 431c1a5..09fcfa8 --- a/app/models/time_entry.rb +++ b/app/models/time_entry.rb @@ -38,6 +38,8 @@ class TimeEntry < ActiveRecord::Base :scope => joins(:project).preload(:project) validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on + validates_presence_of :issue_id, :if => lambda { Setting.timelog_required_fields.include?('issue_id') } + validates_presence_of :comments, :if => lambda { Setting.timelog_required_fields.include?('comments') } validates_numericality_of :hours, :allow_nil => true, :message => :invalid validates_length_of :comments, :maximum => 1024, :allow_nil => true validates :spent_on, :date => true diff --git a/app/views/settings/_timelog.html.erb b/app/views/settings/_timelog.html.erb new file mode 100755 index 0000000..4f92201 --- /dev/null +++ b/app/views/settings/_timelog.html.erb @@ -0,0 +1,10 @@ +<%= form_tag({:action => 'edit', :tab => 'timelog'}) do %> + +
+

<%= setting_multiselect(:timelog_required_fields, + [[l(:field_issue), 'issue_id'], [l(:field_comments), 'comments'] ]) %>

+ +
+ +<%= submit_tag l(:button_save) %> +<% end %> diff --git a/app/views/timelog/_form.html.erb b/app/views/timelog/_form.html.erb old mode 100644 new mode 100755 index f5bc151..d44a6bd --- a/app/views/timelog/_form.html.erb +++ b/app/views/timelog/_form.html.erb @@ -12,14 +12,14 @@ <% end %> <% end %>

- <%= f.text_field :issue_id, :size => 6 %> + <%= f.text_field :issue_id, :size => 6, :required => Setting.timelog_required_fields.include?('issue_id') %> <%= link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %>

<%= f.date_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %>

<%= f.hours_field :hours, :size => 6, :required => true %>

-

<%= f.text_field :comments, :size => 100, :maxlength => 1024 %>

+

<%= f.text_field :comments, :size => 100, :maxlength => 1024, :required => Setting.timelog_required_fields.include?('comments') %>

<%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %>

<% @time_entry.custom_field_values.each do |value| %>

<%= custom_field_tag_with_label :time_entry, value %>

diff --git a/config/locales/en.yml b/config/locales/en.yml old mode 100644 new mode 100755 index e0ebe3b..b8e390a --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -448,6 +448,7 @@ en: setting_attachment_extensions_allowed: Allowed extensions setting_attachment_extensions_denied: Disallowed extensions setting_new_item_menu_tab: Project menu tab for creating new objects + setting_timelog_required_fields: Required fields for time logs permission_add_project: Create project permission_add_subprojects: Create subprojects diff --git a/config/settings.yml b/config/settings.yml old mode 100644 new mode 100755 index b9a8258..51ebe4a --- a/config/settings.yml +++ b/config/settings.yml @@ -279,3 +279,6 @@ non_working_week_days: - '7' new_item_menu_tab: default: 2 +timelog_required_fields: + serialized: true + default: '' \ No newline at end of file diff --git a/test/unit/time_entry_test.rb b/test/unit/time_entry_test.rb old mode 100644 new mode 100755 index b86b1c5..78f7f5e --- a/test/unit/time_entry_test.rb +++ b/test/unit/time_entry_test.rb @@ -172,4 +172,13 @@ class TimeEntryTest < ActiveSupport::TestCase :activity => activity) assert_equal project.id, te.project.id end + + def test_create_with_required_issue_id_and_comment_should_be_validated + with_settings :timelog_required_fields => ['issue_id' , 'comments'] do + entry = TimeEntry.new(:project => Project.find(1), :spent_on => Date.today, :user => User.find(1), :activity => TimeEntryActivity.first, :hours => 1) + + assert !entry.save + assert_equal ["Comment cannot be blank", "Issue cannot be blank"], entry.errors.full_messages.sort + end + end end