summaryrefslogtreecommitdiff
path: root/app/models/time_tracking/timelog_category.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/time_tracking/timelog_category.rb')
-rw-r--r--app/models/time_tracking/timelog_category.rb35
1 files changed, 35 insertions, 0 deletions
diff --git a/app/models/time_tracking/timelog_category.rb b/app/models/time_tracking/timelog_category.rb
new file mode 100644
index 00000000000..26614f6fc44
--- /dev/null
+++ b/app/models/time_tracking/timelog_category.rb
@@ -0,0 +1,35 @@
+# frozen_string_literal: true
+
+module TimeTracking
+ class TimelogCategory < ApplicationRecord
+ include StripAttribute
+ include CaseSensitivity
+
+ self.table_name = "timelog_categories"
+
+ belongs_to :namespace, foreign_key: 'namespace_id'
+
+ strip_attributes! :name
+
+ validates :namespace, presence: true
+ validates :name, presence: true
+ validates :name, uniqueness: { case_sensitive: false, scope: [:namespace_id] }
+ validates :name, length: { maximum: 255 }
+ validates :description, length: { maximum: 1024 }
+ validates :color, color: true, allow_blank: false, length: { maximum: 7 }
+ validates :billing_rate,
+ if: :billable?,
+ presence: true,
+ numericality: { greater_than: 0 }
+
+ DEFAULT_COLOR = ::Gitlab::Color.of('#6699cc')
+
+ attribute :color, ::Gitlab::Database::Type::Color.new
+ default_value_for :color, DEFAULT_COLOR
+
+ def self.find_by_name(namespace_id, name)
+ where(namespace: namespace_id)
+ .iwhere(name: name)
+ end
+ end
+end