|
|
|
@ -6,7 +6,7 @@ class IssuesController < ApplicationController
|
|
|
|
|
before_action :set_issue, only: [:edit, :update, :destroy, :show, :copy, :index_chosen]
|
|
|
|
|
|
|
|
|
|
def index
|
|
|
|
|
issues = @project.issues.includes(:user,:tracker, :issue_tag, :version, :issue_status, :journals)
|
|
|
|
|
issues = @project.issues.includes(:user,:tracker, :priority, :version, :issue_status, :journals)
|
|
|
|
|
|
|
|
|
|
issues = issues.where(is_private: false) unless current_user.present? && (current_user.admin? || @project.member?(current_user))
|
|
|
|
|
@all_issues_size = issues.size
|
|
|
|
@ -41,6 +41,8 @@ class IssuesController < ApplicationController
|
|
|
|
|
issues = issues.where(priority_id: params[:priority_id]) if params[:priority_id].present?
|
|
|
|
|
issues = issues.where(fixed_version_id: params[:fixed_version_id]) if params[:fixed_version_id].present?
|
|
|
|
|
issues = issues.where(done_ratio: params[:done_ratio].to_i) if params[:done_ratio].present?
|
|
|
|
|
issues = issues.where(issue_type: params[:issue_type]) if params[:issue_type].present?
|
|
|
|
|
issues = issues.joins(:issue_tags).where(issue_tags: {id: params[:issue_tag_id].to_i}) if params[:issue_tag_id].present?
|
|
|
|
|
|
|
|
|
|
order_type = params[:order_type] || "desc" #或者"asc"
|
|
|
|
|
order_name = params[:order_name] || "created_on" #或者"updated_on"
|
|
|
|
@ -72,6 +74,8 @@ class IssuesController < ApplicationController
|
|
|
|
|
@all_issues_size = issues.size
|
|
|
|
|
@open_issues_size = issues.where.not(status_id: 5).size
|
|
|
|
|
@close_issues_size = issues.where(status_id: 5).size
|
|
|
|
|
@normal_issues_size = issues.where(issue_type: "1").size
|
|
|
|
|
@pay_issues_size = issues.where(issue_type: "2").size
|
|
|
|
|
|
|
|
|
|
status_type = params[:status_type].to_s
|
|
|
|
|
|
|
|
|
@ -79,6 +83,10 @@ class IssuesController < ApplicationController
|
|
|
|
|
issues = issues.where.not(status_id: 5)
|
|
|
|
|
elsif status_type.to_s == "2" #表示关闭中的
|
|
|
|
|
issues = issues.where(status_id: 5)
|
|
|
|
|
elsif status_type.to_s == "3" #普通
|
|
|
|
|
issues = issues.where(issue_type: "1")
|
|
|
|
|
elsif status_type.to_s == "4" #悬赏
|
|
|
|
|
issues = issues.where(issue_type: "2")
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@commit_issues = []
|
|
|
|
@ -121,6 +129,10 @@ class IssuesController < ApplicationController
|
|
|
|
|
def create
|
|
|
|
|
if params[:subject].blank?
|
|
|
|
|
normal_status(-1, "标题不能为空")
|
|
|
|
|
elsif params[:subject].to_s.size > 255
|
|
|
|
|
normal_status(-1, "标题不能超过255个字符")
|
|
|
|
|
elsif (params[:issue_type].to_s == "2") && params[:token].to_i == 0
|
|
|
|
|
normal_status(-1, "悬赏的奖金必须大于0")
|
|
|
|
|
else
|
|
|
|
|
issue_params = {
|
|
|
|
|
subject: params[:subject],
|
|
|
|
@ -134,7 +146,11 @@ class IssuesController < ApplicationController
|
|
|
|
|
start_date: params[:start_date].to_s.to_date,
|
|
|
|
|
due_date: params[:due_date].to_s.to_date,
|
|
|
|
|
estimated_hours: params[:estimated_hours],
|
|
|
|
|
done_ratio: params[:done_ratio]
|
|
|
|
|
done_ratio: params[:done_ratio],
|
|
|
|
|
issue_type: params[:issue_type],
|
|
|
|
|
token: params[:token],
|
|
|
|
|
issue_tags_value: params[:issue_tag_ids].present? ? params[:issue_tag_ids].join(",") : "",
|
|
|
|
|
closed_on: (params[:status_id].to_i == 5) ? Time.now : nil,
|
|
|
|
|
}
|
|
|
|
|
@issue = Issue.new(issue_params.merge(author_id: current_user.id, project_id: @project.id))
|
|
|
|
|
if @issue.save!
|
|
|
|
@ -147,6 +163,11 @@ class IssuesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if params[:issue_tag_ids].present?
|
|
|
|
|
params[:issue_tag_ids].each do |tag|
|
|
|
|
|
IssueTagsRelate.create!(issue_id: @issue.id, issue_tag_id: tag)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if params[:assigned_to_id].present?
|
|
|
|
|
Tiding.create!(user_id: params[:assigned_to_id], trigger_user_id: current_user.id,
|
|
|
|
|
container_id: @issue.id, container_type: 'Issue',
|
|
|
|
@ -180,7 +201,10 @@ class IssuesController < ApplicationController
|
|
|
|
|
due_date: params[:due_date].to_s.to_date,
|
|
|
|
|
estimated_hours: params[:estimated_hours],
|
|
|
|
|
done_ratio: params[:done_ratio],
|
|
|
|
|
closed_on: (params[:status_id].to_i == 5) ? Time.now : nil
|
|
|
|
|
closed_on: (params[:status_id].to_i == 5) ? Time.now : nil,
|
|
|
|
|
issue_type: params[:issue_type],
|
|
|
|
|
issue_tags_value: params[:issue_tag_ids].present? ? params[:issue_tag_ids].join(",").to_s : "",
|
|
|
|
|
token: params[:token]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if @issue.update_attributes(issue_params)
|
|
|
|
@ -207,6 +231,19 @@ class IssuesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
if params[:issue_tag_ids].present?
|
|
|
|
|
issue_current_tags = @issue&.issue_tags&.select(:id)&.pluck(:id)
|
|
|
|
|
new_tag_ids = params[:issue_tag_ids] - issue_current_tags
|
|
|
|
|
old_tag_ids = issue_current_tags - params[:issue_tag_ids]
|
|
|
|
|
if old_tag_ids.size > 0
|
|
|
|
|
@issue.issue_tags_relates.where(issue_tag_id: old_tag_ids).delete_all
|
|
|
|
|
end
|
|
|
|
|
if new_tag_ids.size > 0
|
|
|
|
|
new_tag_ids.each do |tag|
|
|
|
|
|
IssueTagsRelate.create(issue_id: @issue.id, issue_tag_id: tag)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
@issue.create_journal_detail(change_files, issue_files, issue_file_ids)
|
|
|
|
|
normal_status(0, "更新成功")
|
|
|
|
@ -267,9 +304,11 @@ class IssuesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def issue_left_chosen(project,issue_id)
|
|
|
|
|
issue_info = Array.new(9)
|
|
|
|
|
issue_info = Array.new(11)
|
|
|
|
|
use_tags = []
|
|
|
|
|
if issue_id.present?
|
|
|
|
|
select_arrays = [:assigned_to_id, :tracker_id, :status_id, :priority_id, :fixed_version_id, :start_date, :due_date, :estimated_hours, :done_ratio]
|
|
|
|
|
use_tags = Issue.find(issue_id).issue_tags.select(:id).pluck(:id)
|
|
|
|
|
select_arrays = [:assigned_to_id, :tracker_id, :status_id, :priority_id, :fixed_version_id, :start_date, :due_date, :estimated_hours, :done_ratio, :issue_type, :token]
|
|
|
|
|
issue_info = Issue.select(select_arrays).where(id: issue_id).pluck(select_arrays)
|
|
|
|
|
issue_info = issue_info[0]
|
|
|
|
|
end
|
|
|
|
@ -307,13 +346,12 @@ class IssuesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
issue_priority = project.issue_tags&.pluck(:id,:title, :color)
|
|
|
|
|
new_priority_info = [] #issue标签,(优先程度)
|
|
|
|
|
issue_priority = IssuePriority&.pluck(:id,:name, :position)
|
|
|
|
|
new_priority_info = [] #优先度
|
|
|
|
|
if issue_priority.size > 0
|
|
|
|
|
issue_priority.each do |t|
|
|
|
|
|
is_chosen = (t[0] == issue_info[3]) ? "1" : "0"
|
|
|
|
|
new_issue = {id: t[0], name: t[1], color: t[2], is_chosen: is_chosen}
|
|
|
|
|
new_issue = {id: t[0], name: t[1], position: t[2], is_chosen: is_chosen}
|
|
|
|
|
new_priority_info.push(new_issue)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
@ -339,27 +377,48 @@ class IssuesController < ApplicationController
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
issue_tags = project.issue_tags&.pluck(:id,:name, :color)
|
|
|
|
|
new_tags_info = [] #issue标签
|
|
|
|
|
if issue_tags.size > 0
|
|
|
|
|
issue_tags.each do |t|
|
|
|
|
|
is_chosen = (use_tags.size > 0 && use_tags.include?(t[0])) ? "1" : "0"
|
|
|
|
|
new_issue = {id: t[0], name: t[1], color: t[2], is_chosen: is_chosen}
|
|
|
|
|
new_tags_info.push(new_issue)
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
issue_types = %w(普通 悬赏)
|
|
|
|
|
new_types_info = [] #issue标签
|
|
|
|
|
issue_types.each_with_index do |i, index|
|
|
|
|
|
is_chosen = (issue_info[9] == "#{index+1}") ? "1" : "0"
|
|
|
|
|
is_token = (index.to_s == "1") ? issue_info[10] : nil
|
|
|
|
|
new_type_info = {id: index+1, name: i, token: is_token, is_chosen: is_chosen}
|
|
|
|
|
new_types_info.push(new_type_info)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
|
"assign_user": project_members_info,
|
|
|
|
|
"tracker": new_tracker_info,
|
|
|
|
|
"issue_status": new_status_info,
|
|
|
|
|
"issue_tag": new_priority_info,
|
|
|
|
|
"priority": new_priority_info,
|
|
|
|
|
"issue_version": new_version_info,
|
|
|
|
|
"start_date": issue_info[5],
|
|
|
|
|
"due_date": issue_info[6],
|
|
|
|
|
"estimated_hours": issue_info[7],
|
|
|
|
|
"done_ratio": new_done_info
|
|
|
|
|
"done_ratio": new_done_info,
|
|
|
|
|
"issue_tag": new_tags_info,
|
|
|
|
|
"issue_type": new_types_info
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
def export_issues(issues)
|
|
|
|
|
@table_columns = %w(ID 类型 标题 描述 状态 指派给 优先级 发布人 创建时间 里程碑 开始时间 截止时间 完成度)
|
|
|
|
|
@table_columns = %w(ID 类型 标题 描述 状态 指派给 优先级 标签 发布人 创建时间 里程碑 开始时间 截止时间 完成度 分类 金额)
|
|
|
|
|
@export_issues = []
|
|
|
|
|
issues.each do |i|
|
|
|
|
|
issue_array = [i.id, i.tracker.try(:name), i.subject, i.description, i.issue_status.try(:name),i.get_assign_user.try(:show_real_name),
|
|
|
|
|
i.issue_tag.try(:title), i.user.try(:show_real_name), format_time(i.created_on), i.version.try(:title), i.start_date.to_s, i.due_date.to_s, i.done_ratio.to_s + "%" ]
|
|
|
|
|
i.priority.try(:name), i.get_issue_tags_name, i.user.try(:show_real_name), format_time(i.created_on), i.version.try(:title),
|
|
|
|
|
i.start_date.to_s, i.due_date.to_s, i.done_ratio.to_s + "%", i.issue_type == "2" ? "悬赏" : "普通", i.token.to_s ]
|
|
|
|
|
|
|
|
|
|
@export_issues.push(issue_array)
|
|
|
|
|
|
|
|
|
|