129 lines
3.5 KiB
PHP
129 lines
3.5 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\Horario;
|
|
use App\Models\User;
|
|
use Carbon\Carbon;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Routing\Controller;
|
|
|
|
class HorarioController extends Controller
|
|
{
|
|
|
|
public function __construct() {
|
|
$this->middleware('can:horario.index')->only('index','show');
|
|
$this->middleware('can:horario.create')->only('create','store');
|
|
$this->middleware('can:horario.edit')->only('edit','update');
|
|
$this->middleware('can:horario.destroy')->only('destroy');
|
|
}
|
|
|
|
public function index()
|
|
{
|
|
$usuarios = User::with(['roles'])->has('horarios')->get();
|
|
|
|
return view('horario.index',compact('usuarios'));
|
|
}
|
|
|
|
public function create()
|
|
{
|
|
$usuarios = User::with(['roles'])
|
|
->where('code', '!=', '0')
|
|
->doesntHave('horarios')
|
|
->get();;
|
|
|
|
$inicioSemana = Carbon::now()->startOfWeek();
|
|
|
|
$dias = [];
|
|
for ($i = 0; $i < 7; $i++) {
|
|
// Clonamos la fecha de inicio y sumamos los días necesarios
|
|
$dias[] = $inicioSemana->copy()->addDays($i);
|
|
}
|
|
|
|
return view('horario.create',compact('usuarios','dias'));
|
|
}
|
|
|
|
public function store(Request $request)
|
|
{
|
|
|
|
foreach($request->horarios as $h){
|
|
|
|
$horario = Horario::create([
|
|
'user_id'=>$request->user_id,
|
|
'dia'=>$h['dia'],
|
|
'entrada'=>$h['entrada'],
|
|
'comidas'=>$h['comida_salida'],
|
|
'comidar'=>$h['comida_regreso'],
|
|
'salida'=>$h['salida'],
|
|
'status'=>$h['activo'] ?? 0,
|
|
]);
|
|
}
|
|
|
|
return redirect()->route('horario.edit',$request->user_id)->with('info','El horario se creo correctamente');
|
|
}
|
|
|
|
public function edit(User $user)
|
|
{
|
|
$user->load('horarios');
|
|
|
|
$usuarios = User::where('code','!=','0')->get();
|
|
|
|
// Generar semana actual
|
|
$inicioSemana = Carbon::now()->startOfWeek();
|
|
|
|
$dias = [];
|
|
for ($i = 0; $i < 7; $i++) {
|
|
$dias[] = $inicioSemana->copy()->addDays($i);
|
|
}
|
|
|
|
// Normalizar dias en minusculas
|
|
$horarios = $user->horarios->keyBy(function($item){
|
|
return strtolower($item->dia);
|
|
});
|
|
|
|
return view('horario.edit', compact('user','usuarios','dias','horarios'));
|
|
}
|
|
|
|
public function update(Request $request, User $user)
|
|
{
|
|
foreach ($request->horarios as $h) {
|
|
|
|
Horario::updateOrCreate(
|
|
[
|
|
'user_id' => $user->id,
|
|
'dia' => strtolower($h['dia']),
|
|
],
|
|
[
|
|
'entrada' => $h['entrada'] ?? null,
|
|
'comidas' => $h['comida_salida'] ?? null,
|
|
'comidar' => $h['comida_regreso'] ?? null,
|
|
'salida' => $h['salida'] ?? null,
|
|
'status' => $h['activo'] ?? 0,
|
|
]
|
|
);
|
|
}
|
|
|
|
return redirect()
|
|
->route('horario.edit', $user->id)
|
|
->with('info','Horario actualizado correctamente');
|
|
}
|
|
|
|
public function show(Horario $horario)
|
|
{
|
|
|
|
return view('horario.show',compact('areacode'));
|
|
}
|
|
|
|
public function destroy(User $user)
|
|
{
|
|
$user->horarios()->delete();
|
|
session()->flash('swal',[
|
|
'icon'=>'success',
|
|
'title'=>'Eliminado!',
|
|
'text'=>'Se han eliminado los registros correctamente'
|
|
]);
|
|
return redirect()->route('horario.index');
|
|
}
|
|
|
|
}
|