diff options
author | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-07-19 14:13:10 +0000 |
---|---|---|
committer | Jean-Philippe Lang <jp_lang@yahoo.fr> | 2017-07-19 14:13:10 +0000 |
commit | 7bd8280a83290e144b19c7ac614952d430e3e4b1 (patch) | |
tree | 14a9c754c93613a2c61f99a1a04f726325822401 /app | |
parent | a9d7f32da347a382d2f130cbc13187505f370fc7 (diff) | |
download | redmine-7bd8280a83290e144b19c7ac614952d430e3e4b1.tar.gz redmine-7bd8280a83290e144b19c7ac614952d430e3e4b1.zip |
Adds settings for time entry hours validation (#24005).
git-svn-id: http://svn.redmine.org/redmine/trunk@16832 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app')
-rw-r--r-- | app/models/time_entry.rb | 28 | ||||
-rw-r--r-- | app/views/settings/_timelog.html.erb | 3 |
2 files changed, 30 insertions, 1 deletions
diff --git a/app/models/time_entry.rb b/app/models/time_entry.rb index 1e0f5bc95..80d14ad15 100644 --- a/app/models/time_entry.rb +++ b/app/models/time_entry.rb @@ -122,7 +122,19 @@ class TimeEntry < ActiveRecord::Base end def validate_time_entry - errors.add :hours, :invalid if hours && (hours < 0 || hours >= 1000) + if hours + errors.add :hours, :invalid if hours < 0 + errors.add :hours, :invalid if hours == 0.0 && hours_changed? && !Setting.timelog_accept_0_hours? + + max_hours = Setting.timelog_max_hours_per_day.to_f + if hours_changed? && max_hours > 0.0 + logged_hours = other_hours_with_same_user_and_day + if logged_hours + hours > max_hours + errors.add :base, I18n.t(:error_exceeds_maximum_hours_per_day, + :logged_hours => format_hours(logged_hours), :max_hours => format_hours(max_hours)) + end + end + end errors.add :project_id, :invalid if project.nil? errors.add :issue_id, :invalid if (issue_id && !issue) || (issue && project!=issue.project) || @invalid_issue_id errors.add :activity_id, :inclusion if activity_id_changed? && project && !project.activities.include?(activity) @@ -166,4 +178,18 @@ class TimeEntry < ActiveRecord::Base def editable_custom_fields(user=nil) editable_custom_field_values(user).map(&:custom_field).uniq end + + private + + # Returns the hours that were logged in other time entries for the same user and the same day + def other_hours_with_same_user_and_day + if user_id && spent_on + TimeEntry. + where(:user_id => user_id, :spent_on => spent_on). + where.not(:id => id). + sum(:hours).to_f + else + 0.0 + end + end end diff --git a/app/views/settings/_timelog.html.erb b/app/views/settings/_timelog.html.erb index c4453a616..e3c0a5657 100644 --- a/app/views/settings/_timelog.html.erb +++ b/app/views/settings/_timelog.html.erb @@ -4,6 +4,9 @@ <p><%= setting_multiselect(:timelog_required_fields, [[l(:field_issue), 'issue_id'], [l(:field_comments), 'comments'] ]) %></p> +<p><%= setting_text_field :timelog_max_hours_per_day, :size => 6 %></p> + +<p><%= setting_check_box :timelog_accept_0_hours %></p> </div> <fieldset class="box"> |