getValidatedDates($request); $exporter = new ExportsSalesInvoiceReport($startDate, $endDate); return $this->handleExport($exporter, 'Exchange - Sales Invoice Report.xls'); } public function salesInvoicesWithRefund(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsSalesInvoiceWithRefundReport($startDate, $endDate); return $this->handleExport($exporter, 'Exchange - Sales Invoice Report (with refund).xls'); } public function companies(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsCompanies($startDate, $endDate); return $this->handleExport($exporter, 'Exchange - Customers Data Report.xls'); } public function arCreditNote(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsARCreditNoteReport($startDate, $endDate); return $this->handleExport($exporter, 'Exchange - AR Credit Note Report.xls'); } public function receivePaymentDepositEntry(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsReceivePaymentDepositEntryReport($startDate, $endDate); return $this->handleExport($exporter, '01D - EXCHANGE - RECEIVE PAYMENT (FULL PAYMENT) [AR DEPOSIT ENTRY].xls'); } public function receivePaymentDepositForBooking(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsReceivePaymentForBookingReport($startDate, $endDate); return $this->handleExport($exporter, '01R- RECEIVE PAYMENT (FULL PAYMENT) [AR RECEIVE PAYMENT].xls'); } public function walletTopUpDepositEntry(Request $request){ [$startDate, $endDate] = $this->getValidatedDates($request); $exporter = new ExportsWalletTopUpDepositEntryReport($startDate, $endDate); return $this->handleExport($exporter, 'Exchange Wallet Top Up - AR Deposit Entry.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; } }