Browse Source

fulll

ya quedo todo bien habia muchas correciones pero ya quedaron ahora necesito  solo la paginaciones de las tablas
main
sergiomarquez778 10 months ago
parent
commit
c9e44266f8
  1. 21
      app/Http/Controllers/usuariosController.php
  2. 8
      app/Models/User.php
  3. 11
      app/Models/puesto.php
  4. 32
      database/migrations/2013_03_27_235747_create_puestos_table.php
  5. 4
      database/migrations/2014_10_12_000000_create_users_table.php
  6. 25
      resources/views/marcas.blade.php
  7. 26
      resources/views/prestamos.blade.php
  8. 8
      resources/views/usuarios.blade.php
  9. 15
      resources/views/usuariosCrearEditar.blade.php
  10. 2
      routes/web.php

21
app/Http/Controllers/usuariosController.php

@ -7,6 +7,7 @@ use Illuminate\Http\Request;
use App\Exports\UsuariosExport;
use Maatwebsite\Excel\Facades\Excel;
use PDF; // Asegúrate de incluir la clase PDF
use App\Models\Puesto;
class usuariosController extends Controller
{
@ -38,7 +39,8 @@ class usuariosController extends Controller
*/
public function create()
{
return view('usuariosCrearEditar'); // Vista para crear usuario
$puestos = Puesto::all();
return view('usuariosCrearEditar', ['usuario' => null, 'puestos' => $puestos]);
}
@ -52,18 +54,18 @@ class usuariosController extends Controller
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
'apellido' => 'required|string|max:255',
'puesto' => 'required|string|max:255',
'puesto_id' => 'required|exists:puestos,id',
'carrera' => 'required|string|max:255',
'telefono' => 'required|string|max:255',
'password' => 'required|string|min:8|confirmed',
]);
// Crear nuevo usuario
// Si la validación pasa, crea el usuario
$usuario = new User();
$usuario->name = $request->name;
$usuario->email = $request->email;
$usuario->apellido = $request->apellido;
$usuario->puesto = $request->puesto;
$usuario->puesto_id = $request->puesto_id;
$usuario->carrera = $request->carrera;
$usuario->telefono = $request->telefono;
$usuario->password = bcrypt($request->password);
@ -83,11 +85,14 @@ class usuariosController extends Controller
/**
* Show the form for editing the specified resource.
*/
// ... existing code ...
public function edit($id)
{
$usuario = User::findOrFail($id);
return view('usuariosCrearEditar', compact('usuario')); // Vista para editar usuario
$user = User::findOrFail($id);
$puestos = Puesto::all();
return view('usuariosCrearEditar',['usuario' => $user, 'puestos' => $puestos]); // Asegúrate de que la clave sea 'usuario'
}
// ... existing code ...
/**
@ -100,7 +105,7 @@ class usuariosController extends Controller
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255',
'apellido' => 'required|string|max:255',
'puesto' => 'required|string|max:255',
//'puesto_id' => 'required|exists:puesto_id',
'carrera' => 'required|string|max:255',
'telefono' => 'required|string|max:255',
'password' => 'nullable|string|min:8|confirmed',
@ -111,7 +116,7 @@ class usuariosController extends Controller
$usuario->name = $request->name;
$usuario->email = $request->email;
$usuario->apellido = $request->apellido;
$usuario->puesto = $request->puesto;
$usuario->puesto_id = $request->puesto_id;
$usuario->carrera = $request->carrera;
$usuario->telefono = $request->telefono;

8
app/Models/User.php

@ -7,6 +7,7 @@ use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use Laravel\Sanctum\HasApiTokens;
use Illuminate\Database\Eloquent\Relations\HasOne;
class User extends Authenticatable
{
@ -21,12 +22,13 @@ class User extends Authenticatable
'name',
'email',
'apellido',
'puesto',
'puesto_id',
'carrera',
'telefono',
'password',
];
/**
* The attributes that should be hidden for serialization.
*
@ -45,4 +47,8 @@ class User extends Authenticatable
protected $casts = [
'email_verified_at' => 'datetime',
];
public function puesto():HasOne{
return $this->hasOne(Puesto::class, 'id','puesto_id');
}
}

11
app/Models/puesto.php

@ -0,0 +1,11 @@
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
class puesto extends Model
{
use HasFactory;
}

32
database/migrations/2013_03_27_235747_create_puestos_table.php

@ -0,0 +1,32 @@
<?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::create('puestos', function (Blueprint $table) {
$table->id();
$table->string('nombre');
$table->timestamps();
});
DB::table('puestos')->insert(['nombre'=> 'Administrativo']);
DB::table('puestos')->insert(['nombre'=> 'docente']);
DB::table('puestos')->insert(['nombre'=> 'coordinador']);
DB::table('puestos')->insert(['nombre'=> 'personal general']);
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::dropIfExists('puestos');
}
};

4
database/migrations/2014_10_12_000000_create_users_table.php

@ -17,12 +17,14 @@ return new class extends Migration
$table->string('email')->unique();
$table->timestamp('email_verified_at')->nullable();
$table->string('apellido')->nullable();
$table->string('puesto')->nullable();
$table->unsignedBigInteger('puesto_id')->nullable();
$table->string('carrera')->nullable();
$table->string('telefono')->nullable();
$table->string('password');
$table->rememberToken();
$table->timestamps();
$table->foreign('puesto_id')->references('id')->on('puestos');
});
DB::table('users')->insert([
'name'=> 'Administrador',

25
resources/views/marcas.blade.php

@ -75,16 +75,16 @@
<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">ID</th>
<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">Marca</th>
<th class="px-6 py-3 text-left text-xs font-medium text-gray-500 uppercase tracking-wider">Estado</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($marcas as $marca)
@foreach($marcas as $index => $marca)
<tr class="hover:bg-gray-50">
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ $marca->id }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-500">{{ $index + 1 }}</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">
<i class="fas fa-car text-blue-500 mr-2"></i>
{{ $marca->marca }}
@ -121,7 +121,7 @@
<form action="{{ route('marca.destroy', $marca->id) }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<a href="#" onclick="event.preventDefault(); this.closest('form').submit();"
<a href="#" onclick="event.preventDefault(); confirmarEliminacion(this);"
class="text-red-600 hover:text-red-700 transition-colors duration-200"
title="Eliminar marca">
<i class="fas fa-trash"></i>
@ -149,5 +149,22 @@
}, 500);
}
}, 3000);
function confirmarEliminacion(button) {
Swal.fire({
title: '¿Estás seguro?',
text: "Esta acción no se puede deshacer",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí, eliminar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
button.closest('form').submit();
}
});
}
</script>
@endsection

26
resources/views/prestamos.blade.php

@ -21,7 +21,6 @@
<h2 class="text-2xl font-bold">Gestión de Préstamos</h2>
<div class="flex items-center space-x-6">
<!-- Íconos de exportación -->
<div class="flex space-x-4">
<!-- Exportar a Excel -->
@ -76,7 +75,7 @@
<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">ID</th>
<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>
@ -90,10 +89,10 @@
</tr>
</thead>
<tbody class="bg-white divide-y divide-gray-200">
@foreach($prestamos as $prestamo)
@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">#{{ $prestamo->id }}</span>
<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">
@ -159,7 +158,7 @@
<form action="{{ route('prestamos.destroy', $prestamo->id) }}" method="POST" class="d-inline">
@csrf
@method('DELETE')
<a href="#" onclick="event.preventDefault(); this.closest('form').submit();"
<a href="#" onclick="event.preventDefault(); confirmarEliminacion(this);"
class="text-red-600 hover:text-red-700 transition-colors duration-200"
title="Eliminar préstamo">
<i class="fas fa-trash-alt"></i>
@ -186,5 +185,22 @@
}, 500);
}
}, 3000);
function confirmarEliminacion(button) {
Swal.fire({
title: '¿Estás seguro?',
text: "Esta acción no se puede deshacer",
icon: 'warning',
showCancelButton: true,
confirmButtonColor: '#3085d6',
cancelButtonColor: '#d33',
confirmButtonText: 'Sí, eliminar',
cancelButtonText: 'Cancelar'
}).then((result) => {
if (result.isConfirmed) {
button.closest('form').submit();
}
});
}
</script>
@endsection

8
resources/views/usuarios.blade.php

@ -36,6 +36,8 @@
<i class="fas fa-file-pdf text-xl"></i>
</a>
<!-- Agregar nuevo usuario -->
<a href="{{ route('usuarios.create') }}"
class="text-blue-500 hover:text-blue-600 transition-colors duration-200"
@ -43,6 +45,7 @@
<i class="fas fa-plus text-xl"></i>
</a>
</div>
</div>
</div>
@ -107,7 +110,10 @@
<i class="fas fa-user-tag text-green-500"></i> {{ $usuario->apellido }}
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">
<i class="fas fa-briefcase text-yellow-500"></i> {{ $usuario->puesto }}
<div class="flex items-center">
<i class="fas fa-briefcase text-gray-400 mr-2"></i>
{{ $usuario->puesto->nombre ?? 'Sin puesto asignado' }}
</div>
</td>
<td class="px-6 py-4 whitespace-nowrap text-sm text-gray-900">
<i class="fas fa-graduation-cap text-purple-500"></i> {{ $usuario->carrera }}

15
resources/views/usuariosCrearEditar.blade.php

@ -72,15 +72,20 @@
</div>
<div>
<label for="puesto" class="block text-sm font-medium text-gray-700 mb-2">Puesto</label>
<label for="puestos_id" class="block text-sm font-medium text-gray-700 mb-2">Puesto</label>
<div class="relative">
<div class="absolute inset-y-0 left-0 pl-3 flex items-center pointer-events-none">
<i class="fas fa-briefcase text-gray-400"></i>
</div>
<input type="text" name="puesto" id="puesto"
class="block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md"
placeholder="Ingresa el puesto"
required value="{{ isset($usuario) ? $usuario->puesto : old('puesto') }}">
<select name="puesto_id" id="puesto_id" class="block w-full pl-10 pr-3 py-2 border border-gray-300 rounded-md" required>
<option value="">Selecciona un puesto</option>
@foreach($puestos as $puesto)
<option value="{{ $puesto->id }}"
{{ (isset($usuario) && $usuario->puesto_id == $puesto->id) ? 'selected' : '' }}>
{{ $puesto->nombre }}
</option>
@endforeach
</select>
</div>
</div>

2
routes/web.php

@ -78,7 +78,7 @@ use App\Http\Controllers\PrestamoController;
Route::post('/usuarios/store', [usuariosController::class,'store'])->name('usuarios.store');
Route::get('/usuarios/edit/{id}', [usuariosController::class, 'edit'])->name('usuarios.edit');
Route::put('/usuarios/update', [usuariosController::class,'update'])->name('usuarios.update');
Route::put('/usuarios/{id}', [usuariosController::class, 'update'])->name('usuarios.update');
Route::delete('/usuarios/destroy/{id}', [usuariosController::class, 'destroy'])->name('usuarios.destroy');
Route::get('usuarios/excel', [usuariosController::class, 'exportExcel'])->name('usuarios.excel');
Route::get('usuarios/pdf', [usuariosController::class, 'exportPDF'])->name('usuarios.pdf');

Loading…
Cancel
Save