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'); } }