118 lines
3.6 KiB
PHP
118 lines
3.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers\Repuve;
|
|
|
|
use App\Http\Controllers\Controller;
|
|
use Barryvdh\DomPDF\Facade\Pdf;
|
|
use App\Http\Requests\Repuve\FileStoreRequest;
|
|
use Notsoweb\ApiResponse\Enums\ApiResponse;
|
|
use Illuminate\Support\Facades\Storage;
|
|
use App\Models\Record;
|
|
use App\Models\File;
|
|
|
|
class RecordController extends Controller
|
|
{
|
|
public function generatePdf($id)
|
|
{
|
|
$record = Record::with('vehicle')->findOrFail($id);
|
|
|
|
$pdf = Pdf::loadView('pdfs.record', compact('record'))
|
|
->setPaper('a4', 'portrait')
|
|
->setOptions([
|
|
'defaultFont' => 'sans-serif',
|
|
'isHtml5ParserEnabled' => true,
|
|
'isRemoteEnabled' => true,
|
|
]);
|
|
|
|
return $pdf->stream('record-' . $id . '.pdf');
|
|
}
|
|
|
|
public function uploadFile(FileStoreRequest $request){
|
|
try {
|
|
// Verificar que existe el record
|
|
$record = Record::findOrFail($request->record_id);
|
|
|
|
// Obtener el archivo
|
|
$uploadedFile = $request->file('file');
|
|
|
|
// Generar nombre único
|
|
$fileName = time() . '_' . $uploadedFile->getClientOriginalName();
|
|
|
|
// Guardar en storage
|
|
$path = $uploadedFile->storeAs('records', $fileName, 'public');
|
|
|
|
// Calcular MD5 del archivo
|
|
$md5 = md5_file($uploadedFile->getRealPath());
|
|
|
|
// Crear registro en la tabla files
|
|
$file = File::create([
|
|
'name' => $request->name,
|
|
'path' => $path,
|
|
'md5' => $md5,
|
|
'record_id' => $record->id,
|
|
]);
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Archivo subido exitosamente',
|
|
'file' => [
|
|
'id' => $file->id,
|
|
'name' => $file->name,
|
|
'path' => $file->path,
|
|
'md5' => $file->md5,
|
|
'url' => $file->url,
|
|
'record_id' => $file->record_id,
|
|
'created_at' => $file->created_at->toDateTimeString(),
|
|
],
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return ApiResponse::UNPROCESSABLE_CONTENT->response([
|
|
'message' => 'Error al subir el archivo',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function getFile($recordId) {
|
|
try {
|
|
$record = Record::with('files')->findOrFail($recordId);
|
|
|
|
return ApiResponse::OK->response([
|
|
'record_id' => $record->id,
|
|
'files' => $record->files,
|
|
'folio' => $record->folio,
|
|
]);
|
|
}catch(\Exception $e) {
|
|
return ApiResponse::NOT_FOUND->response([
|
|
'message' => 'No se encontró el expediente o no tiene archivos asociados.',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
|
|
public function deleteFile($fileId)
|
|
{
|
|
try {
|
|
$file = File::findOrFail($fileId);
|
|
|
|
// Eliminar archivo físico del storage
|
|
if (Storage::disk('public')->exists($file->path)) {
|
|
Storage::disk('public')->delete($file->path);
|
|
}
|
|
|
|
// Eliminar registro de la BD
|
|
$file->delete();
|
|
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Archivo eliminado exitosamente',
|
|
]);
|
|
|
|
} catch (\Exception $e) {
|
|
return ApiResponse::OK->response([
|
|
'message' => 'Error al eliminar el archivo',
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
}
|
|
}
|
|
}
|