'Download Booking Document', 'message' => 'You have successfully retrieved a Booking Document' ]; } /** * DownloadBookingDocumentLogic constructor. */ public function __construct() { } /** * @param Request $request * @return JsonResponse * @throws \App\Classes\Exceptions\AccessForbiddenException * @throws \App\Classes\Exceptions\RequestValidationException */ public function logic(Request $request): JsonResponse { Auth::login(User::findOrFail(1)); $zip_file = 'do_' . Carbon::yesterday()->format('Y_m_d') . '.zip'; $attachment = storage_path() . '/' . $zip_file; $zip = new ZipArchive(); if ($zip->open($attachment, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE)) { $bookings = Booking::where('status', ApprovalStatus::COMPLETED)->whereDate('updated_at', '>=', $request->input('startDate'))->whereDate('updated_at', '<=', $request->input('endDate')) ->whereHas('transactions', function ($query) { return $query->where('type', TransactionType::PAYMENT)->whereHas('transactions', function ($query) { return $query->where('issuer', 2); }); })->get(); if (!count($bookings)) throw new MalformedRequestException('No available file to download'); foreach ($bookings as $booking) { $file = $booking->documents()->where('document_type', $request->input('type'))->first()->files()->first(); $zip->addFile(Storage::disk('documents')->path($file->file->file_info->original->file), $booking->created_at->format('d_m_Y') . '_' . $booking->marking . '.pdf'); } $zip->close(); while (ob_get_level()) { ob_end_clean(); } ob_start(); header($_SERVER['SERVER_PROTOCOL'] . ' 200 OK'); header("Content-Type: application/zip"); header("Content-Transfer-Encoding: Binary"); header("Content-Length: " . filesize($attachment)); header('Pragma: no-cache'); header("Content-Disposition: attachment; filename=\"" . basename($attachment) . "\""); ob_flush(); ob_clean(); readfile($attachment); File::delete($attachment); exit; } } }