mirror of
https://github.com/redmine/redmine.git
synced 2025-12-16 05:20:28 +01:00
Adds settings to make the issue and/or comment fields mandatory for time logs (#24577).
Patch by Marius BALTEANU. git-svn-id: http://svn.redmine.org/redmine/trunk@16176 e93f8b46-1217-0410-a6f0-8f06a7374b81
This commit is contained in:
@@ -25,6 +25,7 @@ module SettingsHelper
|
|||||||
{:name => 'api', :partial => 'settings/api', :label => :label_api},
|
{:name => 'api', :partial => 'settings/api', :label => :label_api},
|
||||||
{:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
|
{:name => 'projects', :partial => 'settings/projects', :label => :label_project_plural},
|
||||||
{:name => 'issues', :partial => 'settings/issues', :label => :label_issue_tracking},
|
{: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 => 'attachments', :partial => 'settings/attachments', :label => :label_attachment_plural},
|
||||||
{:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification},
|
{:name => 'notifications', :partial => 'settings/notifications', :label => :field_mail_notification},
|
||||||
{:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails},
|
{:name => 'mail_handler', :partial => 'settings/mail_handler', :label => :label_incoming_emails},
|
||||||
|
|||||||
@@ -38,6 +38,8 @@ class TimeEntry < ActiveRecord::Base
|
|||||||
:scope => joins(:project).preload(:project)
|
:scope => joins(:project).preload(:project)
|
||||||
|
|
||||||
validates_presence_of :user_id, :activity_id, :project_id, :hours, :spent_on
|
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_numericality_of :hours, :allow_nil => true, :message => :invalid
|
||||||
validates_length_of :comments, :maximum => 1024, :allow_nil => true
|
validates_length_of :comments, :maximum => 1024, :allow_nil => true
|
||||||
validates :spent_on, :date => true
|
validates :spent_on, :date => true
|
||||||
|
|||||||
10
app/views/settings/_timelog.html.erb
Normal file
10
app/views/settings/_timelog.html.erb
Normal file
@@ -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 %>
|
||||||
@@ -12,14 +12,14 @@
|
|||||||
<% end %>
|
<% end %>
|
||||||
<% end %>
|
<% end %>
|
||||||
<p>
|
<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">
|
<span id="time_entry_issue">
|
||||||
<%= link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %>
|
<%= link_to_issue(@time_entry.issue) if @time_entry.issue.try(:visible?) %>
|
||||||
</span>
|
</span>
|
||||||
</p>
|
</p>
|
||||||
<p><%= f.date_field :spent_on, :size => 10, :required => true %><%= calendar_for('time_entry_spent_on') %></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.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>
|
<p><%= f.select :activity_id, activity_collection_for_select_options(@time_entry), :required => true %></p>
|
||||||
<% @time_entry.custom_field_values.each do |value| %>
|
<% @time_entry.custom_field_values.each do |value| %>
|
||||||
<p><%= custom_field_tag_with_label :time_entry, value %></p>
|
<p><%= custom_field_tag_with_label :time_entry, value %></p>
|
||||||
|
|||||||
@@ -454,6 +454,7 @@ en:
|
|||||||
setting_attachment_extensions_denied: Disallowed extensions
|
setting_attachment_extensions_denied: Disallowed extensions
|
||||||
setting_new_item_menu_tab: Project menu tab for creating new objects
|
setting_new_item_menu_tab: Project menu tab for creating new objects
|
||||||
setting_commit_logs_formatting: Apply text formatting to commit messages
|
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_project: Create project
|
||||||
permission_add_subprojects: Create subprojects
|
permission_add_subprojects: Create subprojects
|
||||||
|
|||||||
@@ -466,6 +466,7 @@ fr:
|
|||||||
setting_lost_password: Autoriser la réinitialisation par email de mot de passe perdu
|
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_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_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_project: Créer un projet
|
||||||
permission_add_subprojects: Créer des sous-projets
|
permission_add_subprojects: Créer des sous-projets
|
||||||
|
|||||||
@@ -283,3 +283,6 @@ non_working_week_days:
|
|||||||
- '7'
|
- '7'
|
||||||
new_item_menu_tab:
|
new_item_menu_tab:
|
||||||
default: 2
|
default: 2
|
||||||
|
timelog_required_fields:
|
||||||
|
serialized: true
|
||||||
|
default: []
|
||||||
|
|||||||
@@ -172,4 +172,13 @@ class TimeEntryTest < ActiveSupport::TestCase
|
|||||||
:activity => activity)
|
:activity => activity)
|
||||||
assert_equal project.id, te.project.id
|
assert_equal project.id, te.project.id
|
||||||
end
|
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
|
end
|
||||||
|
|||||||
Reference in New Issue
Block a user