You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ExportService.php 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Services;
  3. use App\Contracts\ExportableReport;
  4. use App\Models\Company;
  5. use Barryvdh\DomPDF\Facade\Pdf;
  6. use Illuminate\Support\Carbon;
  7. use Symfony\Component\HttpFoundation\StreamedResponse;
  8. class ExportService
  9. {
  10. public function exportToCsv(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
  11. {
  12. $filename = $company->name . ' ' . $report->getTitle() . ' ' . $startDate . ' to ' . $endDate . '.csv';
  13. $headers = [
  14. 'Content-Type' => 'text/csv',
  15. 'Content-Disposition' => 'attachment; filename="' . $filename . '"',
  16. ];
  17. $callback = function () use ($report, $company, $startDate, $endDate) {
  18. $file = fopen('php://output', 'wb');
  19. fputcsv($file, [$report->getTitle()]);
  20. fputcsv($file, [$company->name]);
  21. fputcsv($file, ['Date Range: ' . $startDate . ' to ' . $endDate]);
  22. fputcsv($file, []);
  23. fputcsv($file, $report->getHeaders());
  24. foreach ($report->getData() as $row) {
  25. fputcsv($file, $row);
  26. }
  27. fputcsv($file, $report->getOverallTotals());
  28. fclose($file);
  29. };
  30. return response()->streamDownload($callback, $filename, $headers);
  31. }
  32. public function exportToPdf(Company $company, ExportableReport $report, string $startDate, string $endDate): StreamedResponse
  33. {
  34. $pdf = Pdf::loadView('components.company.reports.report-pdf', [
  35. 'company' => $company,
  36. 'report' => $report,
  37. 'startDate' => Carbon::parse($startDate)->format('M d, Y'),
  38. 'endDate' => Carbon::parse($endDate)->format('M d, Y'),
  39. ])->setPaper('a4');
  40. return response()->streamDownload(function () use ($pdf) {
  41. echo $pdf->stream();
  42. }, strtolower(str_replace(' ', '-', $company->name . '-' . $report->getTitle())) . '.pdf');
  43. }
  44. }