diff --git a/app/Http/Controllers/PrestamoController.php b/app/Http/Controllers/PrestamoController.php index da28249..7c4cfbe 100644 --- a/app/Http/Controllers/PrestamoController.php +++ b/app/Http/Controllers/PrestamoController.php @@ -2,17 +2,37 @@ namespace App\Http\Controllers; -use App\Models\prestamo; +use App\Models\Prestamo; // Asegúrate de que el modelo esté correctamente nombrado use Illuminate\Http\Request; +use App\Exports\PrestamosExport; // Asegúrate de tener esta clase de exportación +use Maatwebsite\Excel\Facades\Excel; +use PDF; class PrestamoController extends Controller { /** * Display a listing of the resource. */ - public function index() + public function index(Request $request) { - // + $busqueda = $request->busqueda; + + if ($busqueda) { + // Busca en la columna 'nombre_solicitante' de la tabla 'prestamos' + $prestamos = Prestamo::where('nombre_solicitante', 'LIKE', "%{$busqueda}%") + ->where('eliminado', 0) + ->get(); + + if ($prestamos->isEmpty()) { + return redirect()->route('prestamo.index') + ->with('error', 'No existe ningún préstamo con el solicitante "' . $busqueda . '". Por favor, inténtalo de nuevo.'); + } + } else { + // Si no hay búsqueda, mostrar todos los préstamos + $prestamos = Prestamo::where('eliminado', 0)->get(); + } + + return view('prestamos', ['prestamos' => $prestamos]); } /** @@ -20,7 +40,7 @@ class PrestamoController extends Controller */ public function create() { - // + return view('prestamosCrearEditar', ['prestamo' => null]); // No se necesita pasar préstamos } /** @@ -28,38 +48,102 @@ class PrestamoController extends Controller */ public function store(Request $request) { - // - } + // Validación de datos + $request->validate([ + 'nombre_solicitante' => 'required|string|max:255', + 'destino' => 'required|string|max:255', + 'fecha_hora_salida' => 'required|date', + 'fecha_hora_llegada' => 'required|date', + 'motivo' => 'required|string|max:255', + 'domicilio' => 'required|string|max:255', + 'numero_personas' => 'required|integer', + + ]); + + // Crea un nuevo préstamo + $prestamo = new Prestamo(); + $prestamo->nombre_solicitante = $request->nombre_solicitante; + $prestamo->destino = $request->destino; + $prestamo->fecha_hora_salida = $request->fecha_hora_salida; + $prestamo->fecha_hora_llegada = $request->fecha_hora_llegada; + $prestamo->motivo = $request->motivo; + $prestamo->domicilio = $request->domicilio; + $prestamo->numero_personas = $request->numero_personas; + $prestamo->chofer = $request->has('chofer') ? 1 : 0; // Manejo del checkbox + $prestamo->eliminado = 0; // Marca como activo por defecto + $prestamo->save(); + return redirect()->route('prestamos.index')->with('success', 'Préstamo creado exitosamente.'); + } /** - * Display the specified resource. + * Show the form for editing the specified resource. */ - public function show(prestamo $prestamo) + public function edit($id) { - // + $prestamo = Prestamo::findOrFail($id); // Busca el préstamo por ID + return view('prestamosCrearEditar', ['prestamo' => $prestamo]); // Pasa el préstamo a la vista } /** - * Show the form for editing the specified resource. + * Update the specified resource in storage. + */ + public function update(Request $request, $id) +{ + // Validación de datos + $request->validate([ + 'nombre_solicitante' => 'required|string|max:255', + 'destino' => 'required|string|max:255', + 'fecha_hora_salida' => 'required|date', + 'fecha_hora_llegada' => 'required|date', + 'motivo' => 'required|string|max:255', + 'domicilio' => 'required|string|max:255', + 'numero_personas' => 'required|integer', + + + ]); + + $prestamo = Prestamo::findOrFail($id); // Encuentra el préstamo por ID + $prestamo->nombre_solicitante = $request->nombre_solicitante; // Actualiza el nombre del solicitante + $prestamo->destino = $request->destino; // Actualiza el destino + $prestamo->fecha_hora_salida = $request->fecha_hora_salida; // Actualiza la fecha y hora de salida + $prestamo->fecha_hora_llegada = $request->fecha_hora_llegada; // Actualiza la fecha y hora de llegada + $prestamo->motivo = $request->motivo; // Actualiza el motivo + $prestamo->domicilio = $request->domicilio; // Actualiza el domicilio + $prestamo->numero_personas = $request->numero_personas; // Actualiza el número de personas + $prestamo->chofer = $request->has('chofer') ? 1 : 0; // Manejo del checkbox + $prestamo->eliminado = 0; // Cambia el estado a activo si se está editando + $prestamo->save(); // Guarda los cambios + + return redirect()->route('prestamos.index')->with('success', 'Préstamo actualizado correctamente.'); +} + + /** + * Remove the specified resource from storage. */ - public function edit(prestamo $prestamo) + public function destroy($id) { - // + $prestamo = Prestamo::findOrFail($id); // Encuentra el préstamo por ID + $prestamo->eliminado = 1; // Cambia el estado a inactivo + $prestamo->save(); // Guarda los cambios + + return redirect()->route('prestamos.index')->with('success', 'Préstamo inactivado correctamente.'); } /** - * Update the specified resource in storage. + * Export to Excel. */ - public function update(Request $request, prestamo $prestamo) + public function exportExcel() { - // + return Excel::download(new PrestamosExport, 'prestamos.xlsx'); } /** - * Remove the specified resource from storage. + * Export to PDF. */ - public function destroy(prestamo $prestamo) + public function exportPDF() { - // + $prestamos = Prestamo::where('eliminado', 0)->get(); + $pdf = PDF::loadView('exports.prestamos-pdf', ['prestamos' => $prestamos]); + return $pdf->download('prestamos.pdf'); } -} +} \ No newline at end of file diff --git a/app/Models/prestamo.php b/app/Models/prestamo.php index d763045..beab890 100644 --- a/app/Models/prestamo.php +++ b/app/Models/prestamo.php @@ -8,4 +8,17 @@ use Illuminate\Database\Eloquent\Model; class prestamo extends Model { use HasFactory; +protected $table = 'prestamos'; + +protected $fillable = [ + 'nombre_solicitante', + 'destino', + 'fecha_hora_salida', + 'fecha_hora_llegada', + 'motivo', + 'domicilio', + 'numero_personas', + 'chofer', + +]; } diff --git a/database/migrations/2025_03_27_174121_create_prestamos_table.php b/database/migrations/2025_03_27_174121_create_prestamos_table.php index 1428b4e..2ceb81f 100644 --- a/database/migrations/2025_03_27_174121_create_prestamos_table.php +++ b/database/migrations/2025_03_27_174121_create_prestamos_table.php @@ -13,6 +13,14 @@ return new class extends Migration { Schema::create('prestamos', function (Blueprint $table) { $table->id(); + $table->string('nombre_solicitante'); + $table->string('destino'); + $table->dateTime('fecha_hora_salida'); + $table->dateTime('fecha_hora_llegada'); + $table->text('motivo'); + $table->string('domicilio'); + $table->integer('numero_personas'); + $table->boolean('chofer')->default(false); // Opción de sí (true) o no (false) $table->timestamps(); }); } diff --git a/database/migrations/2025_03_27_183714_add_columneliminado_toprestamos.php b/database/migrations/2025_03_27_183714_add_columneliminado_toprestamos.php new file mode 100644 index 0000000..239f581 --- /dev/null +++ b/database/migrations/2025_03_27_183714_add_columneliminado_toprestamos.php @@ -0,0 +1,28 @@ +boolean('eliminado')->default(false); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::table('prestamos', function (Blueprint $table) { + $table->dropColumn('eliminado'); + }); + } +}; diff --git a/resources/views/layouts/dashboard.blade.php b/resources/views/layouts/dashboard.blade.php index 01bd240..fee27d3 100644 --- a/resources/views/layouts/dashboard.blade.php +++ b/resources/views/layouts/dashboard.blade.php @@ -73,7 +73,7 @@ class="pl-4 mt-2 space-y-1 text-sm">
ID | +Nombre Solicitante | +Destino | +Fecha y Hora Salida | +Fecha y Hora Llegada | +Motivo | +Domicilio | +Numero de personas | +Chofer | +Estado | +Acciones | +
---|---|---|---|---|---|---|---|---|---|---|
{{ $prestamo->id }} | +{{ $prestamo->nombre_solicitante }} | +{{ $prestamo->destino }} | +{{ $prestamo->fecha_hora_salida }} | +{{ $prestamo->fecha_hora_llegada }} | +{{ $prestamo->motivo }} | +{{ $prestamo->domicilio }} | +{{ $prestamo->numero_perosonas}} | +{{ $prestamo->cofer }} | + + + + ++ + + + + | +