1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
# frozen_string_literal: true
module WorkItems
module DataSync
module Widgets
class Milestone < Base
def before_create
return unless target_work_item.get_widget(:milestone)
return if work_item.milestone_id.blank?
target_work_item.milestone = matching_milestone
end
def post_move_cleanup
work_item.update_column(:milestone_id, nil)
end
private
def matching_milestone
params = { project_ids: target_work_item.project&.id, group_ids: ancestors }
milestone = by_id(params)
return milestone if milestone.present?
by_title(params)
end
def by_id(params)
return if work_item.milestone_id.blank?
find_milestone(params.merge(ids: work_item.milestone_id))
end
def by_title(params)
return if work_item.milestone&.title.blank?
find_milestone(params.merge(title: work_item.milestone&.title))
end
def find_milestone(params)
milestones = MilestonesFinder.new(params).execute
milestones.first
end
def ancestors
case target_work_item.namespace
when Group
target_work_item.namespace.self_and_ancestors
else
target_work_item.project.ancestors
end
end
end
end
end
end
|