json([ 'success' => true, 'data' => $items, 'message' => 'Registros obtenidos correctamente', ], 200); } /** * Store a newly created resource in storage. */ public function store(Request $request): JsonResponse { // 1. Validamos los datos de entrada $validated = $request->validate([ 'inicio' => 'required|date_format:Y-m-d H:i:s', 'correo' => 'nullable|email|max:255', 'nombrecompleto' => 'nullable|string|max:255', 'descripcion' => 'required|string', 'cliente_id' => 'nullable|exists:clientes,id', 'estadoturno_id' => 'required|exists:estadosturnos,id', 'agenda_id' => 'required|exists:agendas,id', 'profesional_id' => 'required|exists:profesionales,id', 'servicio_id' => 'required|exists:servicios,id', 'modalidad_id' => 'required|exists:modalidades,id', ]); // 2. Verificamos si el profesional ya tiene un turno en ese "inicio" $existeTurno = Turno::where('profesional_id', $validated['profesional_id']) ->where('inicio', $validated['inicio']) ->whereIn('estadoturno_id', [1, 2]) // 1: Pendiente, 2: Confirmado ->exists(); if ($existeTurno) { return response()->json([ 'success' => false, 'message' => 'Horario no disponible.', ], 422); // Error de validación lógica } $turno = Turno::create($validated); // 3. Registramos el evento en el log de seguridad $personaId = auth()->check() ? auth()->user()->persona->id : null; LogSeguridadController::registrarAccion('Creacion de turno ID: ' . $turno->id, 'Profesional', 17, $personaId); return response()->json([ 'success' => true, 'data' => $turno, 'message' => 'Turno agendado correctamente para el ' . $turno->inicio->format('d/m/Y H:i'), ], 201); } /** * Display the specified resource. */ public function show(Profesional $profesional): JsonResponse { return response()->json([ 'success' => true, 'data' => $profesional, 'message' => 'Registro obtenido correctamente', ], 200); } /** * Update the specified resource in storage. */ public function update(Request $request, Profesional $profesional): JsonResponse { $payload = $request->only((new Profesional())->getFillable()); $profesional->update($payload); return response()->json([ 'success' => true, 'data' => $profesional, 'message' => 'Registro actualizado correctamente', ], 200); } /** * Remove the specified resource from storage. */ public function destroy(Profesional $profesional): JsonResponse { $profesional->delete(); return response()->json([ 'success' => true, 'message' => 'Registro eliminado correctamente', ], 200); } public function aceptarFormulario(Formulario $formulario): JsonResponse { $turno->update(['estadoturno_id' => 2]); return response()->json([ 'success' => true, 'message' => 'Turno aceptado correctamente', ], 200); } }