]> source.dussan.org Git - redmine.git/commitdiff
Adds settings to make the issue and/or comment fields mandatory for time logs (#24577).
authorJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 12 Jan 2017 23:09:18 +0000 (23:09 +0000)
committerJean-Philippe Lang <jp_lang@yahoo.fr>
Thu, 12 Jan 2017 23:09:18 +0000 (23:09 +0000)
Patch by Marius BALTEANU.

git-svn-id: http://svn.redmine.org/redmine/trunk@16176 e93f8b46-1217-0410-a6f0-8f06a7374b81

app/helpers/settings_helper.rb
app/models/time_entry.rb
app/views/settings/_timelog.html.erb [new file with mode: 0644]
app/views/timelog/_form.html.erb
config/locales/en.yml
config/locales/fr.yml
config/settings.yml
test/unit/time_entry_test.rb

index 1bba0f9facc7c7fa5d1f815e81b51f4dded1c630..3736715bac34a7c0eabee660e96a656e1f319550 100644 (file)
@@ -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},
index 431c1a55423ec29c631cbd3e2712e814be8c1283..09fcfa8a01fe15f101158b7455df0c714752381d 100644 (file)
@@ -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 100644 (file)
index 0000000..4f92201
--- /dev/null
@@ -0,0 +1,10 @@
+<%= form_tag({:action => 'edit', :tab => 'timelog'}) do %>
+
+<div class="box tabular settings">
+<p><%= setting_multiselect(:timelog_required_fields,
+        [[l(:field_issue), 'issue_id'], [l(:field_comments), 'comments'] ]) %></p>
+
+</div>
+
+<%= submit_tag l(:button_save) %>
+<% end %>
index 712c7bde7db2b6e6b1d102670f5b62c3b9c060ac..2d1134c4cbb6c0c14e0865e14c246b3e84ca4123 100644 (file)
     <% end %>
   <% end %>
   <p>
-    <%= f.text_field :issue_id, :size => 6 %>
+    <%= f.text_field :issue_id, :size => 6, :required => Setting.timelog_required_fields.include?('issue_id') %>
     <span id="time_entry_issue">
       <%=  link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %>
     </span>
   </p>
   <p><%= f.date_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></p>
   <p><%= f.hours_field :hours, :size => 6, :required => true %></p>
-  <p><%= f.text_field :comments, :size => 100, :maxlength => 1024 %></p>
+  <p><%= f.text_field :comments, :size => 100, :maxlength => 1024, :required => Setting.timelog_required_fields.include?('comments') %></p>
   <p><%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %></p>
   <% @time_entry.custom_field_values.each do |value| %>
     <p><%= custom_field_tag_with_label :time_entry, value %></p>
index deece3a1744caf1f1c16e6618732fcf34e2c87fd..d6201b9c7d67a2a01c4c095e111c9de89b3388f1 100644 (file)
@@ -454,6 +454,7 @@ en:
   setting_attachment_extensions_denied: Disallowed extensions
   setting_new_item_menu_tab: Project menu tab for creating new objects
   setting_commit_logs_formatting: Apply text formatting to commit messages
+  setting_timelog_required_fields: Required fields for time logs
 
   permission_add_project: Create project
   permission_add_subprojects: Create subprojects
index 3996eccacd2c6a60bb1e67eb013f09ee73095665..555dd6e01cbb30c52d0621ce276ff97260c153a6 100644 (file)
@@ -466,6 +466,7 @@ fr:
   setting_lost_password: Autoriser la réinitialisation par email de mot de passe perdu
   setting_new_item_menu_tab: Onglet de création d'objets dans le menu du project
   setting_commit_logs_formatting: Appliquer le formattage de texte aux messages de commit
+  setting_timelog_required_fields: Champs obligatoire pour les temps passés
 
   permission_add_project: Créer un projet
   permission_add_subprojects: Créer des sous-projets
index 1411a0143a08fc81abe26af29ef21beba728941f..c44da32594b29be731a2929369ba5123d0cec494 100644 (file)
@@ -283,3 +283,6 @@ non_working_week_days:
   - '7'
 new_item_menu_tab:
   default: 2
+timelog_required_fields:
+  serialized: true
+  default: []
index b86b1c53a0b2583f2235115d893b6adcf2e6a2ff..78f7f5e10a33746d473decd46a7aa5a6743a3f3e 100644 (file)
@@ -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