Commit 0dc84db9 by Tấn Trần Thanh

cover case data column equal nil and refactor code

parent 63e50323
Pipeline #1564 failed with stages
in 0 seconds
...@@ -19,10 +19,9 @@ class WorkflowReportController < ApplicationController ...@@ -19,10 +19,9 @@ class WorkflowReportController < ApplicationController
2023, 2023,
3, 3,
DateTime.new(2023, 3).beginning_of_day, DateTime.new(2023, 3).beginning_of_day,
DateTime.new(2023, 3, -1).end_of_day DateTime.new(2023, 3, -1).end_of_day])
])
.distinct.pluck(:root_id) .distinct.pluck(:root_id)
return unless root_ids.length > 0 return unless root_ids.length.positive?
sum_hours_records = Issue.select('issues.root_id, sum(time_entries.hours) as hours, max(IFNULL(c1.value,-1)) as testcases, max(IFNULL(c2.value,-1)) as bugs,max(IFNULL(stg.value,-1)) as stg_bugs, max(IFNULL(prod.value,-1)) as prod_bugs') sum_hours_records = Issue.select('issues.root_id, sum(time_entries.hours) as hours, max(IFNULL(c1.value,-1)) as testcases, max(IFNULL(c2.value,-1)) as bugs,max(IFNULL(stg.value,-1)) as stg_bugs, max(IFNULL(prod.value,-1)) as prod_bugs')
.joins('INNER JOIN time_entries ON issues.id = time_entries.issue_id') .joins('INNER JOIN time_entries ON issues.id = time_entries.issue_id')
...@@ -57,47 +56,36 @@ class WorkflowReportController < ApplicationController ...@@ -57,47 +56,36 @@ class WorkflowReportController < ApplicationController
@result[2] << record.first[:subject].gsub(/[^[:print:]]/, '') @result[2] << record.first[:subject].gsub(/[^[:print:]]/, '')
@result[3] << record.first[:target_version] @result[3] << record.first[:target_version]
issue_created_on = record.min_by { |i| i[:created_on] if i[:created_on].present? } issue_created_on = record.min_by { |i| i[:created_on] if i[:created_on].present? }
if issue_created_on.present? @result[4].push(issue_created_on.present? ? issue_created_on[:created_on]&.strftime('%Y-%m-%d %H:%M:%S') : '')
@result[4] << issue_created_on[:created_on]&.strftime('%Y-%m-%d %H:%M:%S')
else
@result[4] << nil
end
issue_closed_on = record.max_by { |i| i[:closed_on] if i[:closed_on].present? } issue_closed_on = record.max_by { |i| i[:closed_on] if i[:closed_on].present? }
if issue_closed_on.present? @result[5].push(issue_closed_on.present? ? issue_closed_on[:closed_on]&.strftime('%Y-%m-%d %H:%M:%S') : '')
@result[5] << issue_closed_on[:closed_on]&.strftime('%Y-%m-%d %H:%M:%S')
else
@result[5] << nil
end
issue_due_dates = record.map(&:due_date).compact
issue_due_dates = record.map(&:due_date).compact
issue_due_date = issue_due_dates.max_by { |a| a } issue_due_date = issue_due_dates.max_by { |a| a }
if issue_due_date.present?
@result[6] << issue_due_date&.strftime('%Y-%m-%d %H:%M:%S') @result[6].push(issue_due_date.present? ? issue_due_date&.strftime('%Y-%m-%d %H:%M:%S') : '')
else @result[7].push(record.first[:status].present? ? record.first[:status] : '')
@result[6] << nil
end
@result[7] << record.first[:status]
sum_estimated_hours = record.map { |i| i[:estimated_hours] }.compact.sum sum_estimated_hours = record.map { |i| i[:estimated_hours] }.compact.sum
@result[8] << sum_estimated_hours @result[8] << sum_estimated_hours
if sum_hours_record.present? if sum_hours_record.present?
@result[9] << sum_hours_record[:hours] @result[9] << sum_hours_record[:hours]
@result[10] << (sum_hours_record[:hours] - sum_estimated_hours) @result[10] << (sum_hours_record[:hours] - sum_estimated_hours)
else else
@result[9] << nil @result[9] << ''
@result[10] << nil @result[10] << ''
end end
if journals.length > 0 if journals.length.positive?
number_of_est_changes = journals.count { |j| !j[1].nil? } || nil number_of_est_changes = journals.count { |j| !j[1].nil? } || ''
est_changes = journals.reject { |j| j[1].nil? }.select { |e| e[4].present? } est_changes = journals.reject { |j| j[1].nil? }.select { |e| e[4].present? }
notes = est_changes.inject("") { |all, i| all + i[4] + "\n" } || nil notes = est_changes.inject('') { |all, i| "#{all}#{i[4]}\n" } || ''
original_est_hours = journals.group_by(&:shift).inject(0) { |sum, i| sum + i[1][0][1].to_f unless i.nil? } original_est_hours = journals.group_by(&:shift).inject(0) { |sum, i| sum + i[1][0][1].to_f unless i.nil? } || ''
@result[11] << original_est_hours @result[11] << original_est_hours
@result[12] << number_of_est_changes @result[12] << number_of_est_changes
@result[13] << notes @result[13] << notes
else else
@result[11] << nil @result[11] << ''
@result[12] << nil @result[12] << ''
@result[13] << nil @result[13] << ''
end end
pull_request = '' pull_request = ''
jp_request = '' jp_request = ''
...@@ -109,53 +97,41 @@ class WorkflowReportController < ApplicationController ...@@ -109,53 +97,41 @@ class WorkflowReportController < ApplicationController
process = get_process(issue.subject.gsub(/[^[:print:]]/, '')) process = get_process(issue.subject.gsub(/[^[:print:]]/, ''))
index_1 = 14 # first index for estimation detail index_1 = 14 # first index for estimation detail
index_2 = 21 # first index for actual detail index_2 = 21 # first index for actual detail
case process case process
when '1. Requirement' when '1. Requirement'
@result[index_1] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2] << +issue.spent_hours if issue.spent_hours > 0 @result[index_2].push(issue.spent_hours.positive? ? issue.spent_hours : '')
when '2. Design' when '2. Design'
@result[index_1 + 1] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1 + 1].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2 + 1] << issue.spent_hours if issue.spent_hours > 0 @result[index_2 + 1].push(issue.spent_hours.positive? ? issue.spent_hours : '')
when '3. Coding' when '3. Coding'
@result[index_1 + 2] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1 + 2].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2 + 2] << issue.spent_hours if issue.spent_hours > 0 @result[index_2 + 2].push(issue.spent_hours.positive? ? issue.spent_hours : '')
when '4. Testing' when '4. Testing'
@result[index_1 + 3] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1 + 3].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2 + 3] << issue.spent_hours if issue.spent_hours > 0 @result[index_2 + 3].push(issue.spent_hours.positive? ? issue.spent_hours : '')
when '5. Bug fixing' when '5. Bug fixing'
@result[index_1 + 4] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1 + 4].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2 + 4] << issue.spent_hours if issue.spent_hours > 0 @result[index_2 + 4].push(issue.spent_hours.positive? ? issue.spent_hours : '')
when '6. Release' when '6. Release'
@result[index_1 + 5] << issue.estimated_hours if issue.estimated_hours.present? @result[index_1 + 5].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
@result[index_2 + 5] << issue.spent_hours if issue.spent_hours > 0 @result[index_2 + 5].push(issue.spent_hours.positive? ? issue.spent_hours : '')
else else
if issue.estimated_hours.present? @result[index_1 + 6].push(issue.estimated_hours.present? ? issue.estimated_hours : '')
# if @result[index_1+ 6 ].present? // recheck @result[index_2 + 6].push(issue.spent_hours.positive? ? issue.spent_hours : '')
# @result[index_1+ 6 ] << worksheet[row, index_1 + 6].to_f + issue.estimated_hours
# else
@result[index_1 + 6] << issue.estimated_hours
# end
end
if issue.spent_hours > 0
# if @result[index_2 + 6].present?
# @result[index_2 + 6] << worksheet[row, index_2 + 6].to_f + issue.spent_hours
# else
@result[index_2 + 6] << issue.spent_hours
# end
end
end end
end end
if sum_hours_record.nil? if sum_hours_record.nil?
# testcases # testcases
@result[28] << nil @result[28] << ''
# internal bug # internal bug
@result[29] << nil @result[29] << ''
# stg bug # stg bug
@result[30] << nil @result[30] << ''
# prod bug # prod bug
@result[31] << nil @result[31] << ''
else else
# testcases # testcases
@result[28] << sum_hours_record[:testcases] if sum_hours_record[:testcases].to_i >= 0 @result[28] << sum_hours_record[:testcases] if sum_hours_record[:testcases].to_i >= 0
# internal bug # internal bug
...@@ -164,48 +140,49 @@ class WorkflowReportController < ApplicationController ...@@ -164,48 +140,49 @@ class WorkflowReportController < ApplicationController
@result[30] << sum_hours_record[:stg_bugs] if sum_hours_record[:stg_bugs].to_i >= 0 @result[30] << sum_hours_record[:stg_bugs] if sum_hours_record[:stg_bugs].to_i >= 0
# prod bug # prod bug
@result[31] << sum_hours_record[:prod_bugs] if sum_hours_record[:prod_bugs].to_i >= 0 @result[31] << sum_hours_record[:prod_bugs] if sum_hours_record[:prod_bugs].to_i >= 0
end
if jp_request.present? if jp_request.present?
jp_request = jp_request.strip jp_request = jp_request.strip
@result[32] << jp_request @result[32] << jp_request
jp_request_arr = URI(jp_request).path.split('/').reject { |element| element.blank? } jp_request_arr = URI(jp_request).path.split('/').reject(&:blank?)
next unless jp_request_arr.length == 4 && jp_request_arr[3].to_i > 0 if jp_request_arr.length == 4 && jp_request_arr[3].to_i.positive?
issue_detail = github.issues.find user: jp_request_arr[0], repo: jp_request_arr[1], number: jp_request_arr[3] issue_detail = github.issues.find user: jp_request_arr[0], repo: jp_request_arr[1], number: jp_request_arr[3]
@result[33] << issue_detail.comments if issue_detail.success? @result[33].push(issue_detail.success? ? issue_detail.comments : '')
end end
# pr detail else
if pull_request.present? @result[32] << ''
pr_comments = 0 @result[33] << ''
pr_review_comments = 0 end
pr_commits = 0 # pr detail
pr_additions = 0 next unless pull_request.present?
pr_deletions = 0 pr_comments = 0
pr_changed_files = 0 pr_review_comments = 0
prs = pull_request.split("\r\n").compact pr_commits = 0
pr_additions = 0
prs.each do |link| pr_deletions = 0
pr_link_arr = URI(link.strip).path.split('/').compact_blank pr_changed_files = 0
next unless pr_link_arr.length == 4 prs = pull_request.split("\r\n").compact
pr_detail = github.pull_requests.find user: pr_link_arr[0], repo: pr_link_arr[1], number: pr_link_arr[3] prs.each do |link|
if pr_detail.success? pr_link_arr = URI(link.strip).path.split('/').compact_blank
pr_comments += pr_detail.comments next unless pr_link_arr.length == 4
pr_review_comments += pr_detail.review_comments
pr_commits += pr_detail.commits
pr_additions += pr_detail.additions
pr_deletions += pr_detail.deletions
pr_changed_files += pr_detail.changed_files
end
@result[34] << pr_comments pr_detail = github.pull_requests.find user: pr_link_arr[0], repo: pr_link_arr[1], number: pr_link_arr[3]
@result[35] << pr_review_comments if pr_detail.success?
@result[36] << pr_commits pr_comments += pr_detail.comments
@result[37] << pr_changed_files pr_review_comments += pr_detail.review_comments
@result[38] << pr_additions pr_commits += pr_detail.commits
@result[39] << pr_deletions pr_additions += pr_detail.additions
end pr_deletions += pr_detail.deletions
pr_changed_files += pr_detail.changed_files
end end
@result[34] << pr_comments
@result[35] << pr_review_comments
@result[36] << pr_commits
@result[37] << pr_changed_files
@result[38] << pr_additions
@result[39] << pr_deletions
end end
end end
end end
...@@ -219,30 +196,27 @@ class WorkflowReportController < ApplicationController ...@@ -219,30 +196,27 @@ class WorkflowReportController < ApplicationController
id = subject[0, 1] id = subject[0, 1]
name = subject[0, index] name = subject[0, index]
if id.to_i != 0 if id.to_i != 0
if ["3. Code review"].include? name if ['3. Code review'].include? name
name = "3. Coding" name = '3. Coding'
elsif ["4. Create Test case"].include? name elsif ['4. Create Test case'].include? name
name = "4. Testing" name = '4. Testing'
else else
name name
end end
else elsif name.include? 'Requirement'
if name.include? "Requirement" name = "1. #{name}"
name = "1. " + name elsif name.include? 'Design'
elsif name.include? "Design" name = "2. #{name}"
name = "2. " + name elsif ['Coding', 'Code review'].include? name
elsif ["Coding", "Code review"].include? name name = '3. Coding'
name = "3. Coding" elsif ['Testing', 'Create Test case'].include? name
elsif ["Testing", "Create Test case"].include? name name = '4. Testing'
name = "4. Testing" elsif name.include? 'Bug fixing'
elsif name.include? "Bug fixing" name = "5. #{name}"
name = "5. " + name elsif name.include? 'Release'
elsif name.include? "Release" name = "6. #{name}"
name = "6. " + name
end
end end
end end
name.strip name.strip
end end
end
end \ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment