getValidatedDates($request); $exporter = new ExportsCompanies($startDate, $endDate); return $this->handleExport($exporter, 'IZYIM - Customers Data Report.xls'); } public function salesInvoices(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsSalesInvoicesReport($startDate, $endDate); return $this->handleExport($exporter, 'IZYIM - Sales Invoice Report.xls'); } private function getValidatedDates(Request $request): array { $validated = $request->validate([ 'startDate' => 'nullable|date_format:d-m-Y', 'endDate' => 'nullable|date_format:d-m-Y|after_or_equal:startDate', ]); $startDate = isset($validated['startDate']) && $validated['startDate'] ? Carbon::createFromFormat('d-m-Y', $validated['startDate'])->startOfDay() : Carbon::now()->subMonth()->startOfDay(); $endDate = isset($validated['endDate']) && $validated['endDate'] ? Carbon::createFromFormat('d-m-Y', $validated['endDate'])->endOfDay() : Carbon::now()->endOfDay(); return [$startDate, $endDate]; } private function handleExport($exporter, string $exportFileName) { $filesystemDriver = Storage::getDefaultDriver(); if ($filesystemDriver === 's3') { return response([ 'src' => AWSS3Helper::S3Exportable($exportFileName, $exporter) ]); } $response = $exporter->download( $exportFileName, Excel::XLS, ['Content-Type' => 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'] ); ob_end_clean(); // prevent corrupt download in some environments return $response; } }