Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def sent_at(p_session)
- p_session.created_at.humanize_datetime
- end
- def completed_at(p_session)
- return 'N/A' unless p_session.status_complete?
- (p_session.status_trackings.find_by(status_update: :session_completed)&.created_at || p_session.status_set_at)&.humanize_datetime || 'N/A'
- end
- def started_at(p_session)
- p_session.status_trackings.find_by(status_update: :session_started)&.created_at&.humanize_datetime || 'N/A'
- end
- def by_email(p_session)
- return 'N/A' if p_session.created_by_unknown? || p_session.created_by.nil?
- (p_session.created_by_onsite? || p_session.created_by_schedule?) ? 'YES' : 'NO'
- end
- def reminder_sent?(p_session)
- return 'N/A' if p_session.status_trackings.empty?
- p_session.status_trackings.find_by(status_update: :reminder_sent).present? ? 'YES' : 'NO'
- end
- def partial_report_generated?(p_session)
- completed_scores_count = p_session.reports.sum{ |r| r.test_scores.status_complete.count }
- total_scores_count = p_session.reports.sum{ |r| r.batch.tests.count }
- (completed_scores_count < total_scores_count) ? 'YES' : 'NO'
- end
- scope = ::Health::ProtocolSession.includes(reports: :test_scores).includes(reports: { batch: :test_scores }).includes(:status_trackings).includes(:user, :protocol)
- size = scope.size
- puts size
- p_bar = ProgressBar.new(size)
- limit = 100
- offset = 0
- CSV.open('tmp/CS-1325.csv', 'w') do |csv|
- csv << ['Admin ID', 'Patient ID', 'Session ID', 'Session Sent/Started', 'Session Completed Time (if completed)', 'Sent by email?', 'Reminder sent?', 'Partial Report Generated']
- while offset < size do
- scope.limit(limit).offset(offset).find_in_batches do |p_sessions|
- p_bar.puts(offset)
- p_sessions.each do |p_session|
- p_bar.increment!
- next if p_session.protocol.nil? || p_session.user.nil?
- row = [p_session.protocol.owner_id, p_session.user.client_id, p_session.id,
- "#{sent_at(p_session)} / #{started_at(p_session)}", completed_at(p_session),
- by_email(p_session), reminder_sent?(p_session), partial_report_generated?(p_session)]
- p_bar.puts(row)
- csv << row
- csv.flush
- end
- offset += limit
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement