Compare commits

...

2 Commits

Author SHA1 Message Date
TheSilva7 bc1fb46352 Merge branch 'main' of http://187.216.152.151:9999/Damian_Aceves/PrestamosTecmm 2 weeks ago
TheSilva7 9c36f8c500 Revert "cambios" 3 weeks ago
  1. 8
      app/Http/Controllers/MarcaController.php
  2. 103
      app/Http/Controllers/PrestamoController.php
  3. 79
      resources/views/prestamos.blade.php

8
app/Http/Controllers/MarcaController.php

@ -80,14 +80,8 @@ class MarcaController extends Controller
public function update(Request $request, $id)
{
$request->validate([
'marca' => 'required|string|max:255|unique:marcas,marca', // Asegúrate de que 'marca' sea único
], [
'marca.required' => 'El campo marca es obligatorio.',
'marca.string' => 'El campo marca debe ser una cadena de texto.',
'marca.max' => 'El campo marca no puede tener más de 255 caracteres.',
'marca.unique' => 'La marca ya existe en la base de datos.',
'marca' => 'required|string|max:255|unique:marcas,marca', // Asegúrate de que 'marca' sea único
]);
$marca = Marca::findOrFail($id); // Encuentra la marca por ID
// Verifica si el nombre de la marca ha cambiado

103
app/Http/Controllers/PrestamoController.php

@ -21,15 +21,18 @@ class PrestamoController extends Controller
// Busca en la columna 'nombre_solicitante' de la tabla 'prestamos'
$prestamos = Prestamo::where('nombre_solicitante', 'LIKE', "%{$busqueda}%")
->where('eliminado', 0)
->where('estado', 'pendiente')
->get();
if ($prestamos->isEmpty()) {
return redirect()->route('prestamo.index')
return redirect()->route('prestamos.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();
// Si no hay búsqueda, mostrar todos los préstamos pendientes
$prestamos = Prestamo::where('eliminado', 0)
->where('estado', 'pendiente')
->get();
}
return view('prestamos', ['prestamos' => $prestamos]);
@ -131,98 +134,4 @@ class PrestamoController extends Controller
$pdf = PDF::loadView('exports.prestamos-pdf', ['prestamos' => $prestamos]);
return $pdf->download('prestamos.pdf');
}
public function aceptados(Request $request)
{
$busqueda = $request->busqueda;
$prestamos = Prestamo::when($busqueda, function($query) use ($busqueda) {
return $query->where(function($q) use ($busqueda) {
$q->where('nombre_solicitante', 'LIKE', "%{$busqueda}%")
->orWhere('destino', 'LIKE', "%{$busqueda}%")
->orWhere('motivo', 'LIKE', "%{$busqueda}%");
});
})
->orderBy('created_at', 'desc')
->get();
return view('prestamos.aceptar', ['prestamos' => $prestamos]);
}
public function aceptar($id)
{
$prestamo = Prestamo::findOrFail($id);
$prestamo->estado = 'aceptado';
$prestamo->save();
// Aquí puedes agregar notificaciones si lo deseas
return redirect()->route('prestamos.aceptados')
->with('success', 'Préstamo aceptado correctamente');
}
public function rechazar($id)
{
$prestamo = Prestamo::findOrFail($id);
$prestamo->estado = 'rechazado';
$prestamo->save();
// Aquí puedes agregar notificaciones si lo deseas
return redirect()->route('prestamos.aceptados')
->with('success', 'Préstamo rechazado correctamente');
}
public function historial(Request $request)
{
$query = Prestamo::query()
->whereIn('estado', ['aceptado', 'rechazado']);
// Aplicar filtros de búsqueda
if ($request->busqueda) {
$query->where(function($q) use ($request) {
$q->where('nombre_solicitante', 'LIKE', "%{$request->busqueda}%")
->orWhere('destino', 'LIKE', "%{$request->busqueda}%")
->orWhere('motivo', 'LIKE', "%{$request->busqueda}%");
});
}
// Filtro por estado
if ($request->estado) {
$query->where('estado', $request->estado);
}
// Filtro por fechas
if ($request->fecha_desde) {
$query->whereDate('created_at', '>=', $request->fecha_desde);
}
if ($request->fecha_hasta) {
$query->whereDate('created_at', '<=', $request->fecha_hasta);
}
// Ordenar por fecha de actualización
$query->orderBy('updated_at', 'desc');
// Paginar resultados
$prestamos = $query->paginate(10);
return view('prestamos.historial', ['prestamos' => $prestamos]);
}
public function export($format)
{
$prestamos = Prestamo::whereIn('estado', ['aceptado', 'rechazado'])
->orderBy('updated_at', 'desc')
->get();
switch($format) {
case 'excel':
return Excel::download(new PrestamosExport($prestamos), 'historial_prestamos.xlsx');
case 'pdf':
$pdf = PDF::loadView('exports.prestamos-pdf', ['prestamos' => $prestamos]);
return $pdf->download('historial_prestamos.pdf');
default:
return redirect()->back()->with('error', 'Formato no soportado');
}
}
}

79
resources/views/prestamos.blade.php

@ -15,44 +15,34 @@
</div>
@endif
@if($errors->any())
<div class="mb-6 bg-red-50 border-l-4 border-red-500 p-4 rounded-r-lg">
<div class="flex items-center">
<div class="text-red-700">
<ul>
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
</div>
</div>
@endif
<div class="bg-white rounded-lg shadow-lg">
<!-- Encabezado con título y botones de acción -->
<div class="p-4 border-b border-gray-200 flex justify-between items-center">
<h2 class="text-2xl font-bold">Gestión de Préstamos</h2>
<div class="flex items-center space-x-6">
<!-- Exportar a Excel -->
<a href="{{ route('prestamos.excel') }}"
class="text-green-600 hover:text-green-700 transition-colors duration-200"
title="Exportar a Excel">
<i class="fas fa-file-excel text-xl"></i>
</a>
<!-- Exportar a PDF -->
<a href="{{ route('prestamos.pdf') }}"
class="text-red-600 hover:text-red-700 transition-colors duration-200"
title="Exportar a PDF">
<i class="fas fa-file-pdf text-xl"></i>
</a>
<!-- Agregar nuevo préstamo -->
<a href="{{ route('prestamos.create') }}"
class="text-blue-500 hover:text-blue-600 transition-colors duration-200"
title="Agregar nuevo préstamo">
<i class="fas fa-plus text-xl"></i>
</a>
<!-- Íconos de exportación -->
<div class="flex space-x-4">
<!-- Exportar a Excel -->
<a href="{{ route('prestamos.excel') }}"
class="text-green-600 hover:text-green-700 transition-colors duration-200"
title="Exportar a Excel">
<i class="fas fa-file-excel text-xl"></i>
</a>
<!-- Exportar a PDF -->
<a href="{{ route('prestamos.pdf') }}"
class="text-red-600 hover:text-red-700 transition-colors duration-200"
title="Exportar a PDF">
<i class="fas fa-file-pdf text-xl"></i>
</a>
<!-- Agregar nuevo préstamo -->
<a href="{{ route('prestamos.create') }}"
class="text-blue-500 hover:text-blue-600 transition-colors duration-200"
title="Agregar nuevo préstamo">
<i class="fas fa-plus text-xl"></i>
</a>
</div>
</div>
</div>
@ -161,16 +151,28 @@
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm font-medium">
<div class="flex space-x-2">
<a href="{{ route('prestamos.edit', $prestamo->id) }}" class="text-yellow-600 hover:text-blue-900">
<a href="{{ route('prestamos.edit', $prestamo->id) }}" class="text-blue-600 hover:text-blue-900">
<i class="fas fa-edit"></i>
</a>
<form action="{{ route('prestamos.destroy', $prestamo->id) }}" method="POST" class="inline" onsubmit="return confirmarEliminacion(this);">
<form action="{{ route('prestamos.destroy', $prestamo->id) }}" method="POST" class="inline">
@csrf
@method('DELETE')
<button type="submit" class="text-red-600 hover:text-red-900">
<button type="submit" class="text-red-600 hover:text-red-900" onclick="return confirm('¿Estás seguro de que deseas eliminar este préstamo?')">
<i class="fas fa-trash"></i>
</button>
</form>
<form action="{{ route('prestamos.aceptar', $prestamo->id) }}" method="POST" class="inline">
@csrf
<button type="submit" class="text-green-600 hover:text-green-900" onclick="return confirm('¿Estás seguro de que deseas aceptar este préstamo?')">
<i class="fas fa-check"></i>
</button>
</form>
<form action="{{ route('prestamos.rechazar', $prestamo->id) }}" method="POST" class="inline">
@csrf
<button type="submit" class="text-yellow-600 hover:text-yellow-900" onclick="return confirm('¿Estás seguro de que deseas rechazar este préstamo?')">
<i class="fas fa-times"></i>
</button>
</form>
</div>
</td>
</tr>
@ -194,8 +196,8 @@
}
}, 3000);
function confirmarEliminacion(form) {
return Swal.fire({
function confirmarEliminacion(button) {
Swal.fire({
title: '¿Estás seguro?',
text: "Esta acción no se puede deshacer",
icon: 'warning',
@ -206,9 +208,8 @@
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
form.submit();
button.closest('form').submit();
}
return false; // Evitar el envío del formulario por defecto
});
}
</script>

Loading…
Cancel
Save