8 changed files with 329 additions and 17 deletions
@ -0,0 +1,28 @@ |
|||
<?php |
|||
|
|||
use Illuminate\Database\Migrations\Migration; |
|||
use Illuminate\Database\Schema\Blueprint; |
|||
use Illuminate\Support\Facades\Schema; |
|||
|
|||
return new class extends Migration |
|||
{ |
|||
/** |
|||
* Run the migrations. |
|||
*/ |
|||
public function up(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
// |
|||
}); |
|||
} |
|||
|
|||
/** |
|||
* Reverse the migrations. |
|||
*/ |
|||
public function down(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
// |
|||
}); |
|||
} |
|||
}; |
@ -0,0 +1,28 @@ |
|||
<?php |
|||
|
|||
use Illuminate\Database\Migrations\Migration; |
|||
use Illuminate\Database\Schema\Blueprint; |
|||
use Illuminate\Support\Facades\Schema; |
|||
|
|||
return new class extends Migration |
|||
{ |
|||
/** |
|||
* Run the migrations. |
|||
*/ |
|||
public function up(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
// |
|||
}); |
|||
} |
|||
|
|||
/** |
|||
* Reverse the migrations. |
|||
*/ |
|||
public function down(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
// |
|||
}); |
|||
} |
|||
}; |
@ -0,0 +1,28 @@ |
|||
<?php |
|||
|
|||
use Illuminate\Database\Migrations\Migration; |
|||
use Illuminate\Database\Schema\Blueprint; |
|||
use Illuminate\Support\Facades\Schema; |
|||
|
|||
return new class extends Migration |
|||
{ |
|||
/** |
|||
* Run the migrations. |
|||
*/ |
|||
public function up(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
$table->string('estado')->default('pendiente'); // pendiente, aceptado, rechazado |
|||
}); |
|||
} |
|||
|
|||
/** |
|||
* Reverse the migrations. |
|||
*/ |
|||
public function down(): void |
|||
{ |
|||
Schema::table('prestamos', function (Blueprint $table) { |
|||
$table->dropColumn('estado'); |
|||
}); |
|||
} |
|||
}; |
@ -0,0 +1,6 @@ |
|||
<x-nav-link :href="route('prestamos.index')" :active="request()->routeIs('prestamos.index')"> |
|||
{{ __('Préstamos') }} |
|||
</x-nav-link> |
|||
<x-nav-link :href="route('prestamos.aceptados')" :active="request()->routeIs('prestamos.aceptados')"> |
|||
{{ __('Préstamos Aceptados') }} |
|||
</x-nav-link> |
@ -0,0 +1,163 @@ |
|||
@extends('layouts.dashboard') |
|||
|
|||
@section('content') |
|||
<div class="container mx-auto px-4 py-6"> |
|||
<!-- Mensajes de éxito y error --> |
|||
@if(session('success')) |
|||
<div id="success-message" class="bg-green-100 border border-green-400 text-green-700 px-4 py-3 rounded relative mb-4" role="alert"> |
|||
<span class="block sm:inline">{{ session('success') }}</span> |
|||
</div> |
|||
@endif |
|||
|
|||
@if(session('error')) |
|||
<div class="bg-red-100 border border-red-400 text-red-700 px-4 py-3 rounded relative mb-4" role="alert"> |
|||
<span class="block sm:inline">{{ session('error') }}</span> |
|||
</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">Préstamos Aceptados</h2> |
|||
<div class="flex items-center space-x-6"> |
|||
<!-- Íconos de exportación --> |
|||
<div class="flex space-x-4"> |
|||
<!-- Exportar a Excel --> |
|||
<a href="{{ route('prestamos.excel') }}?estado=aceptado" class="text-green-600 hover:text-green-800 text-2xl"> |
|||
<i class="fas fa-file-excel"></i> |
|||
</a> |
|||
<!-- Exportar a PDF --> |
|||
<a href="{{ route('prestamos.pdf') }}?estado=aceptado" class="text-red-600 hover:text-red-800 text-2xl"> |
|||
<i class="fas fa-file-pdf"></i> |
|||
</a> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<!-- Barra de búsqueda --> |
|||
<div class="p-4 border-b border-gray-200 bg-gray-50"> |
|||
<form action="{{ route('prestamos.aceptados') }}" method="GET" class="flex gap-2"> |
|||
<div class="relative w-full sm:w-64"> |
|||
<input type="text" |
|||
name="busqueda" |
|||
placeholder="Buscar préstamo..." |
|||
value="{{ request('busqueda') }}" |
|||
class="w-full pl-10 pr-4 py-2 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-blue-500"> |
|||
<div class="absolute left-3 top-2.5 text-gray-400"> |
|||
<i class="fas fa-search"></i> |
|||
</div> |
|||
</div> |
|||
<button type="submit" class="px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600"> |
|||
Buscar |
|||
</button> |
|||
@if(request('busqueda')) |
|||
<a href="{{ route('prestamos.aceptados') }}" class="px-4 py-2 bg-gray-500 text-white rounded-lg hover:bg-gray-600"> |
|||
Limpiar |
|||
</a> |
|||
@endif |
|||
</form> |
|||
</div> |
|||
|
|||
<!-- Tabla de préstamos --> |
|||
<div class="overflow-x-auto"> |
|||
<table class="min-w-full divide-y divide-gray-200"> |
|||
<thead class="bg-gray-50"> |
|||
<tr> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Número</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Nombre Solicitante</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Destino</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Fecha y Hora Salida</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Fecha y Hora Llegada</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Motivo</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Domicilio</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Número de Personas</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Chofer</th> |
|||
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Acciones</th> |
|||
</tr> |
|||
</thead> |
|||
<tbody class="bg-white divide-y divide-gray-200"> |
|||
@foreach($prestamos as $index => $prestamo) |
|||
<tr class="hover:bg-gray-50"> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500"> |
|||
<span class="font-medium">{{ $index + 1 }}</span> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-user text-blue-500 mr-2"></i> |
|||
{{ $prestamo->nombre_solicitante }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-map-marker-alt text-red-500 mr-2"></i> |
|||
{{ $prestamo->destino }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-clock text-green-500 mr-2"></i> |
|||
{{ \Carbon\Carbon::parse($prestamo->fecha_hora_salida)->format('d/m/Y H:i') }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-clock text-red-500 mr-2"></i> |
|||
{{ \Carbon\Carbon::parse($prestamo->fecha_hora_llegada)->format('d/m/Y H:i') }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-info-circle text-blue-500 mr-2"></i> |
|||
{{ $prestamo->motivo }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-home text-purple-500 mr-2"></i> |
|||
{{ $prestamo->domicilio }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-users text-yellow-500 mr-2"></i> |
|||
{{ $prestamo->numero_personas }} |
|||
</div> |
|||
</td> |
|||
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900"> |
|||
<div class="flex items-center"> |
|||
<i class="fas fa-id-card text-gray-500 mr-2"></i> |
|||
{{ $prestamo->chofer ? 'Sí' : 'No' }} |
|||
</div> |
|||
</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-blue-600 hover:text-blue-900"> |
|||
<i class="fas fa-edit"></i> |
|||
</a> |
|||
<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" onclick="return confirm('¿Estás seguro de que deseas eliminar este préstamo?')"> |
|||
<i class="fas fa-trash"></i> |
|||
</button> |
|||
</form> |
|||
</div> |
|||
</td> |
|||
</tr> |
|||
@endforeach |
|||
</tbody> |
|||
</table> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
|
|||
<script> |
|||
// Ocultar el mensaje de éxito después de 3 segundos |
|||
setTimeout(function() { |
|||
const successMessage = document.getElementById('success-message'); |
|||
if (successMessage) { |
|||
successMessage.style.display = 'none'; |
|||
} |
|||
}, 3000); |
|||
</script> |
|||
@endsection |
Loading…
Reference in new issue