Skip to content

Instantly share code, notes, and snippets.

@babgyy
Last active March 1, 2022 09:08
Show Gist options
  • Save babgyy/c4f67e73426eb669d7e8c12fe16d8397 to your computer and use it in GitHub Desktop.
Save babgyy/c4f67e73426eb669d7e8c12fe16d8397 to your computer and use it in GitHub Desktop.
Export Enrollment ++
class EnrollmentsExportService
def self.export_to_excel scope = Enrollment.admin_viewable
workbook = FastExcel.open
bold = workbook.bold_cell_format
worksheet = workbook.add_worksheet
worksheet.auto_width = true
enrollments = scope.includes(:program, :doctor, :attendances, patient: [:spree_user], enrollment_payments: [:spree_order], spree_order: [line_items: [variant: [:option_values]]])
data = self.create_enrollment_lines(enrollments)
data.each_with_index do |datum, index|
is_bold = index == 0 || index == enrollments.size + 2
worksheet.append_row(datum, is_bold ? bold : nil)
end
workbook.read_string
end
def self.create_enrollment_lines enrollments
result = []
result << [
"Achat",
"Programme",
"Commande",
"Email",
"Nom",
"Etat",
"Etape courante",
"Jours écoulés",
"Docteur ",
"Patient charles?",
"Nb de paiements à faire",
"Nb de paiements faits",
"Total payé"
]
enrollments.each do |enrollment|
enrollment_payments = enrollment.enrollment_payments.completed
number_of_payments = enrollment.spree_order.line_items.first.variant.get_option_value("number_of_payments")&.name&.to_i
line = [
enrollment.spree_order.completed_at&.strftime("%d-%m-%Y %H:%M:%S"),
enrollment.program.short_name.upcase,
enrollment.spree_order.number,
enrollment.patient.email,
enrollment.patient.full_name,
I18n.t(enrollment.state, scope: 'spree.admin.enrollment.states'),
enrollment.current_attendance&.lesson&.formatted_lesson_number,
enrollment.current_attendance&.time_elapsed,
enrollment.doctor&.email,
enrollment.patient.is_consultation ? "P" : "NP",
number_of_payments,
enrollment_payments.size,
enrollment_payments.map(&:spree_order).map(&:total).inject(0, :+),
]
result << line
end
result << []
result << [
"Total patients charles",
"Total utilisateurs academy"
]
result << [
enrollments.only_charles_patients.count,
enrollments.only_academy_users.count
]
result
end
end
data = EnrollmentsExportService.export_to_excel;
context = "enrollments-exports"
filename ||= "#{context}.xlsx"
saved_export = ::SavedExport.create!(context: context)
saved_export.exported_file.attach(
io: StringIO.new(data),
filename: filename,
content_type: 'application/xlsx'
)
saved_export
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment