Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/timelog.rb')
-rw-r--r--app/models/timelog.rb12
1 files changed, 12 insertions, 0 deletions
diff --git a/app/models/timelog.rb b/app/models/timelog.rb
index eb72456b435..08d56d0a93a 100644
--- a/app/models/timelog.rb
+++ b/app/models/timelog.rb
@@ -1,6 +1,10 @@
# frozen_string_literal: true
class Timelog < ApplicationRecord
+ # Gitlab::TimeTrackingFormatter.parse("1y") == 31557600 seconds
+ # 31557600 slightly deviates from (365 days * 24 hours/day * 60 minutes/hour * 60 seconds/minute)
+ MAX_TOTAL_TIME_SPENT = 31557600.seconds.to_i # a year
+
include Importable
include IgnorableColumns
include Sortable
@@ -12,6 +16,7 @@ class Timelog < ApplicationRecord
validates :time_spent, :user, presence: true
validates :summary, length: { maximum: 255 }
validate :issuable_id_is_present, unless: :importing?
+ validate :check_total_time_spent_is_within_range, on: :create, unless: :importing?, if: :time_spent
belongs_to :issue, touch: true
belongs_to :merge_request, touch: true
@@ -58,6 +63,13 @@ class Timelog < ApplicationRecord
private
+ def check_total_time_spent_is_within_range
+ total_time_spent = issuable.timelogs.sum(:time_spent) + time_spent
+
+ errors.add(:base, _("Total time spent cannot be negative.")) if total_time_spent < 0
+ errors.add(:base, _("Total time spent cannot exceed a year.")) if total_time_spent > MAX_TOTAL_TIME_SPENT
+ end
+
def issuable_id_is_present
if issue_id && merge_request_id
errors.add(:base, _('Only Issue ID or merge request ID is required'))