新增:父子关系判断以及可设置为父工作项的列表
This commit is contained in:
parent
48a446662f
commit
947117ac5f
|
@ -1,7 +1,7 @@
|
||||||
class Api::Pm::IssuesController < Api::Pm::BaseController
|
class Api::Pm::IssuesController < Api::Pm::BaseController
|
||||||
before_action :require_login, except: [:index]
|
before_action :require_login, except: [:index]
|
||||||
before_action :load_project
|
before_action :load_project
|
||||||
before_action :load_issue, only: %i[show update destroy link_index link_issues]
|
before_action :load_issue, only: %i[show update destroy link_index link_issues parent_issues]
|
||||||
before_action :load_issues, only: %i[batch_update batch_destroy]
|
before_action :load_issues, only: %i[batch_update batch_destroy]
|
||||||
before_action :check_issue_operate_permission, only: %i[update destroy]
|
before_action :check_issue_operate_permission, only: %i[update destroy]
|
||||||
|
|
||||||
|
@ -40,6 +40,19 @@ class Api::Pm::IssuesController < Api::Pm::BaseController
|
||||||
render 'api/v1/issues/index'
|
render 'api/v1/issues/index'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def parent_issues
|
||||||
|
@issues = Issue.where(pm_project_id: params[:pm_project_id])
|
||||||
|
.where.not(id: @issue.id)
|
||||||
|
.where.not(id: Issue.full_children_issues(@issue).map{|i|i.id})
|
||||||
|
if params[:only_name].present?
|
||||||
|
@issues = kaminary_select_paginate(
|
||||||
|
@issues.select(:id, :subject, :project_issues_index, :updated_on, :created_on))
|
||||||
|
else
|
||||||
|
@issues = @issues.includes(:priority, :issue_status, :user, :show_assigners, :show_issue_tags, :version, :comment_journals)
|
||||||
|
@issues = kaminari_paginate(@issues)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
@issue.associate_attachment_container
|
@issue.associate_attachment_container
|
||||||
render 'api/v1/issues/show'
|
render 'api/v1/issues/show'
|
||||||
|
|
|
@ -296,4 +296,12 @@ class Issue < ApplicationRecord
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def self.full_children_issues(issue, issues = [])
|
||||||
|
issue.children_issues.each do |i|
|
||||||
|
issues << i
|
||||||
|
full_children_issues(i, issues)
|
||||||
|
end
|
||||||
|
issues
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
|
@ -12,6 +12,10 @@ module Api::V1::Issues::Concerns::Checkable
|
||||||
raise ApplicationService::Error, "Milestone不存在!" unless Version.find_by_id(milestone_id).present?
|
raise ApplicationService::Error, "Milestone不存在!" unless Version.find_by_id(milestone_id).present?
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def check_root_issue(issue, root_id)
|
||||||
|
raise ApplicationService::Error, "父工作项与当前工作项已存在父子关系!" if Issue.full_children_issues(issue).map{|i| i.id}.include?(root_id)
|
||||||
|
end
|
||||||
|
|
||||||
def check_issue_tags(issue_tag_ids)
|
def check_issue_tags(issue_tag_ids)
|
||||||
raise ApplicationService::Error, "请输入正确的标记ID数组!" unless issue_tag_ids.is_a?(Array)
|
raise ApplicationService::Error, "请输入正确的标记ID数组!" unless issue_tag_ids.is_a?(Array)
|
||||||
raise ApplicationService::Error, "最多可选择3个标记" if issue_tag_ids.size > 3
|
raise ApplicationService::Error, "最多可选择3个标记" if issue_tag_ids.size > 3
|
||||||
|
|
|
@ -5,6 +5,7 @@ class Api::V1::Issues::UpdateService < ApplicationService
|
||||||
|
|
||||||
attr_reader :project, :issue, :current_user
|
attr_reader :project, :issue, :current_user
|
||||||
attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num
|
attr_reader :status_id, :priority_id, :milestone_id, :branch_name, :start_date, :due_date, :subject, :description, :blockchain_token_num
|
||||||
|
attr_reader :target_pm_project_id, :pm_sprint_id, :pm_issue_type, :root_id, :time_scale
|
||||||
attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id
|
attr_reader :issue_tag_ids, :assigner_ids, :attachment_ids, :receivers_login, :before_issue_tag_ids, :before_assigner_ids, :project_id
|
||||||
attr_accessor :add_assigner_ids, :previous_issue_changes, :updated_issue, :atme_receivers
|
attr_accessor :add_assigner_ids, :previous_issue_changes, :updated_issue, :atme_receivers
|
||||||
|
|
||||||
|
@ -46,6 +47,7 @@ class Api::V1::Issues::UpdateService < ApplicationService
|
||||||
check_issue_status(status_id) if status_id.present?
|
check_issue_status(status_id) if status_id.present?
|
||||||
check_issue_priority(priority_id) if priority_id.present?
|
check_issue_priority(priority_id) if priority_id.present?
|
||||||
check_milestone(milestone_id) if milestone_id.present?
|
check_milestone(milestone_id) if milestone_id.present?
|
||||||
|
check_root_issue(issue, root_id) if root_id.present?
|
||||||
check_issue_tags(issue_tag_ids) unless issue_tag_ids.nil?
|
check_issue_tags(issue_tag_ids) unless issue_tag_ids.nil?
|
||||||
check_assigners(assigner_ids) unless assigner_ids.nil?
|
check_assigners(assigner_ids) unless assigner_ids.nil?
|
||||||
check_attachments(attachment_ids) unless attachment_ids.nil?
|
check_attachments(attachment_ids) unless attachment_ids.nil?
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
json.total_count @issues.total_count
|
||||||
|
json.issues @issues.each do |issue|
|
||||||
|
if params[:only_name].present?
|
||||||
|
json.(issue, :id, :subject, :project_issues_index)
|
||||||
|
else
|
||||||
|
json.partial! "api/v1/issues/simple_detail", locals: {issue: issue}
|
||||||
|
end
|
||||||
|
end
|
|
@ -11,6 +11,7 @@ defaults format: :json do
|
||||||
end
|
end
|
||||||
member do
|
member do
|
||||||
get :link_index
|
get :link_index
|
||||||
|
get :parent_issues
|
||||||
end
|
end
|
||||||
|
|
||||||
resources :issue_links
|
resources :issue_links
|
||||||
|
|
Loading…
Reference in New Issue