Files
exchange-2.0/app/Classes/Modules/Bookings/ControllersLogic/DownloadBookingDocumentLogic.php
T
2022-03-02 04:27:58 +08:00

60 lines
2.1 KiB
PHP

<?php
namespace App\Classes\Modules\Bookings\ControllersLogic;
use ZipArchive;
use Carbon\Carbon;
use App\Models\User;
use App\Models\Booking;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\Storage;
use App\Classes\Exceptions\MalformedRequestException;
use App\Classes\ValueObjects\Constants\ApprovalStatus;
class DownloadBookingDocumentLogic
{
/**
* @param Request $request
* @return \Symfony\Component\HttpFoundation\BinaryFileResponse
* @throws MalformedRequestException
*/
public function execute(Request $request)
{
Auth::login(User::findOrFail(1));
$zip_file = $request->input('type').'.zip';
$attachment = storage_path().'/app/documents/collections/' . $zip_file;
$zip = new ZipArchive();
if ($zip->open($attachment, ZIPARCHIVE::CREATE | ZipArchive::OVERWRITE)) {
$bookings = Booking::where('status', ApprovalStatus::COMPLETED)
->whereDate('created_at', '>=', Carbon::parse($request->input('startDate')))
->whereDate('created_at', '<=', Carbon::parse($request->input('endDate')))->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();
$headers = array('Content-Type'=>'application/octet-stream',);
$zip_new_name = $request->input('type').".zip";
return response()->download($attachment,$zip_new_name,$headers)->deleteFileAfterSend(true);
// header('Content-Type: application/zip');
// header('Content-Length: ' . filesize($attachment));
// readfile($attachment);
// unlink($attachment);
}
}
}