2022-08-27 11:52:29 +05:30
|
|
|
# frozen_string_literal: true
|
|
|
|
|
|
|
|
module Timelogs
|
|
|
|
class CreateService < Timelogs::BaseService
|
|
|
|
attr_accessor :issuable, :time_spent, :spent_at, :summary
|
|
|
|
|
|
|
|
def initialize(issuable, time_spent, spent_at, summary, user)
|
|
|
|
super(user)
|
|
|
|
|
|
|
|
@issuable = issuable
|
|
|
|
@time_spent = time_spent
|
|
|
|
@spent_at = spent_at
|
|
|
|
@summary = summary
|
|
|
|
end
|
|
|
|
|
|
|
|
def execute
|
|
|
|
unless can?(current_user, :create_timelog, issuable)
|
|
|
|
return error(
|
|
|
|
_("%{issuable_class_name} doesn't exist or you don't have permission to add timelog to it.") % {
|
|
|
|
issuable_class_name: issuable.nil? ? 'Issuable' : issuable.base_class_name
|
|
|
|
}, 404)
|
|
|
|
end
|
|
|
|
|
2023-03-04 22:38:38 +05:30
|
|
|
return error(_("Spent at can't be a future date and time."), 404) if spent_at.future?
|
|
|
|
return error(_("Time spent can't be zero."), 404) if time_spent == 0
|
|
|
|
|
2022-08-27 11:52:29 +05:30
|
|
|
issue = issuable if issuable.is_a?(Issue)
|
|
|
|
merge_request = issuable if issuable.is_a?(MergeRequest)
|
|
|
|
|
|
|
|
timelog = Timelog.new(
|
|
|
|
time_spent: time_spent,
|
|
|
|
spent_at: spent_at,
|
|
|
|
summary: summary,
|
|
|
|
user: current_user,
|
|
|
|
issue: issue,
|
|
|
|
merge_request: merge_request,
|
|
|
|
note: nil
|
|
|
|
)
|
|
|
|
|
|
|
|
if !timelog.save
|
|
|
|
error_in_save(timelog)
|
|
|
|
else
|
|
|
|
SystemNoteService.created_timelog(issuable, issuable.project, current_user, timelog)
|
|
|
|
success(timelog)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|