Advertisement
andrey_zavyalov

Untitled

Dec 3rd, 2023
32
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. def sent_at(p_session)
  2. p_session.created_at.humanize_datetime
  3. end
  4.  
  5. def completed_at(p_session)
  6. return 'N/A' unless p_session.status_complete?
  7.  
  8. (p_session.status_trackings.find_by(status_update: :session_completed)&.created_at || p_session.status_set_at)&.humanize_datetime || 'N/A'
  9. end
  10.  
  11. def started_at(p_session)
  12. p_session.status_trackings.find_by(status_update: :session_started)&.created_at&.humanize_datetime || 'N/A'
  13. end
  14.  
  15. def by_email(p_session)
  16. return 'N/A' if p_session.created_by_unknown? || p_session.created_by.nil?
  17.  
  18. (p_session.created_by_onsite? || p_session.created_by_schedule?) ? 'YES' : 'NO'
  19. end
  20.  
  21. def reminder_sent?(p_session)
  22. return 'N/A' if p_session.status_trackings.empty?
  23. p_session.status_trackings.find_by(status_update: :reminder_sent).present? ? 'YES' : 'NO'
  24. end
  25.  
  26. def partial_report_generated?(p_session)
  27. completed_scores_count = p_session.reports.sum{ |r| r.test_scores.status_complete.count }
  28. total_scores_count = p_session.reports.sum{ |r| r.batch.tests.count }
  29. (completed_scores_count < total_scores_count) ? 'YES' : 'NO'
  30. end
  31.  
  32.  
  33. scope = ::Health::ProtocolSession.includes(reports: :test_scores).includes(reports: { batch: :test_scores }).includes(:status_trackings).includes(:user, :protocol)
  34. size = scope.size
  35. puts size
  36. p_bar = ProgressBar.new(size)
  37. limit = 100
  38. offset = 0
  39.  
  40. CSV.open('tmp/CS-1325.csv', 'w') do |csv|
  41. csv << ['Admin ID', 'Patient ID', 'Session ID', 'Session Sent/Started', 'Session Completed Time (if completed)', 'Sent by email?', 'Reminder sent?', 'Partial Report Generated']
  42. while offset < size do
  43. scope.limit(limit).offset(offset).find_in_batches do |p_sessions|
  44. p_bar.puts(offset)
  45. p_sessions.each do |p_session|
  46. p_bar.increment!
  47.  
  48. next if p_session.protocol.nil? || p_session.user.nil?
  49.  
  50. row = [p_session.protocol.owner_id, p_session.user.client_id, p_session.id,
  51. "#{sent_at(p_session)} / #{started_at(p_session)}", completed_at(p_session),
  52. by_email(p_session), reminder_sent?(p_session), partial_report_generated?(p_session)]
  53. p_bar.puts(row)
  54. csv << row
  55. csv.flush
  56. end
  57. offset += limit
  58. end
  59. end
  60. end
  61.  
  62.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement