leftJoin('usuarios', 'usuarios.idUsuario', '=', 'boletas_calificaciones.idAlumnoBoletaCalificaciones') ->leftJoin('vista_materias_grados_grupos', 'vista_materias_grados_grupos.idMateria', '=', 'boletas_calificaciones.idMateriaBoletaCalificaciones') ->leftJoin('boletas_periodos', 'boletas_periodos.idPeriodo', '=', 'boletas_calificaciones.idPeriodoBoletaCalificaciones') ->select( DB::raw("CONCAT(COALESCE(usuarios.primerNombre, ''), ' ', COALESCE(usuarios.segundoNombre, ''), ' ', COALESCE(usuarios.apellidoPaterno, ''), ' ', COALESCE(usuarios.apellidoMaterno, '')) AS nombreAlumno"), DB::raw("CONCAT(COALESCE(vista_materias_grados_grupos.nombreGrado, ''), ' ', COALESCE(vista_materias_grados_grupos.nombreGrupo, '')) AS gradoGrupo"), 'vista_materias_grados_grupos.idGradoGrupoRelacionado', 'vista_materias_grados_grupos.nombreMateria', 'boletas_periodos.nombrePeriodo', 'boletas_calificaciones.*' ) ->get(); foreach ($calificaciones as $registro) { $registro->materiaGradoGrupo = $registro->nombreMateria . ' - ' . $registro->gradoGrupo; } return response()->json($calificaciones, 200); } // ------------------------------------------------------------------------------------ public function registrarCalificacion(Request $request) { $message = ''; $status = 0; try { // Verificar si ya existe una calificación para este alumno, materia y periodo $existente = DB::table('boletas_calificaciones') ->where('idEscuela', 'COLEGIOABC') ->where('idAlumnoBoletaCalificaciones', $request->alumno) ->where('idMateriaBoletaCalificaciones', $request->materia) ->where('idPeriodoBoletaCalificaciones', $request->periodo) ->where('estado', 'Activo') ->first(); if ($existente) { // Actualizar la calificación existente DB::table('boletas_calificaciones') ->where('id', $existente->id) ->update([ 'calificacion' => $request->calificacion, 'usuarioRegistro' => $request->usuarioRegistro ]); $message = 'Calificación actualizada exitosamente'; $status = 200; } else { // Insertar nueva calificación DB::table('boletas_calificaciones')->insert([ 'idEscuela' => 'COLEGIOABC', 'idAlumnoBoletaCalificaciones' => $request->alumno, 'idMateriaBoletaCalificaciones' => $request->materia, 'idPeriodoBoletaCalificaciones' => $request->periodo, 'calificacion' => $request->calificacion, 'usuarioRegistro' => $request->usuarioRegistro, 'estado' => 'Activo', ]); $message = 'Registro de calificación exitoso'; $status = 200; } } catch (\Exception $e) { $message = 'Error al procesar la calificación: ' . $e->getMessage(); $status = 500; } return response()->json(['mensaje' => $message], $status); } // Nuevo método para carga masiva public function registrarCalificacionesMasivas(Request $request) { $respuestas = []; $status = 200; try { $datos = $request->all(); $usuarioRegistro = $request->header('usuario'); // O como lo estés recibiendo foreach ($datos as $calificacion) { $response = $this->registrarCalificacionIndividual($calificacion, $usuarioRegistro); $respuestas[] = $response; } $message = 'Proceso de carga masiva completado'; } catch (\Exception $e) { $message = 'Error en carga masiva: ' . $e->getMessage(); $status = 500; } return response()->json(['mensaje' => $message, 'detalles' => $respuestas], $status); } private function registrarCalificacionIndividual($calificacion, $usuarioRegistro) { try { // Verificar si ya existe $existente = DB::table('boletas_calificaciones') ->where('idEscuela', 'COLEGIOABC') ->where('idAlumnoBoletaCalificaciones', $calificacion['alumnoId']) ->where('idMateriaBoletaCalificaciones', $calificacion['materiaId']) ->where('idPeriodoBoletaCalificaciones', $calificacion['periodoId']) ->where('estado', 'Activo') ->first(); if ($existente) { // Actualizar DB::table('boletas_calificaciones') ->where('id', $existente->id) ->update([ 'calificacion' => $calificacion['calificacion'], 'usuarioRegistro' => 'JUAN' ]); return [ 'alumno' => $calificacion['alumnoId'], 'materia' => $calificacion['materiaId'], 'periodo' => $calificacion['periodoId'], 'mensaje' => 'Actualizado', 'status' => 200 ]; } else { // Insertar DB::table('boletas_calificaciones')->insert([ 'idEscuela' => 'COLEGIOABC', 'idAlumnoBoletaCalificaciones' => $calificacion['alumnoId'], 'idMateriaBoletaCalificaciones' => $calificacion['materiaId'], 'idPeriodoBoletaCalificaciones' => $calificacion['periodoId'], 'calificacion' => $calificacion['calificacion'], 'usuarioRegistro' => 'JUAN', 'estado' => 'Activo', ]); return [ 'alumno' => $calificacion['alumnoId'], 'materia' => $calificacion['materiaId'], 'periodo' => $calificacion['periodoId'], 'mensaje' => 'Registrado', 'status' => 200 ]; } } catch (\Exception $e) { return [ 'alumno' => $calificacion['alumnoId'], 'materia' => $calificacion['materiaId'], 'periodo' => $calificacion['periodoId'], 'mensaje' => 'Error: ' . $e->getMessage(), 'status' => 500 ]; } } // ---------------------------------------------------------------- public function editarCalificacion(Request $request) { $message = ''; $status = 0; try { $registro = DB::table('boletas_calificaciones') ->where('idEscuela', 'COLEGIOABC') ->where('idAlumnoBoletaCalificaciones', $request->alumnos) ->where('idMateriaBoletaCalificaciones', $request->materias) ->where('idPeriodoBoletaCalificaciones', $request->periodo) ->update([ 'calificacion' => $request->calificacion, 'usuarioRegistro' => $request->usuarioRegistro, ]); $message = 'Registro de calficiacion actualizado'; $status = 200; } catch (\Exception $e) { $message = 'Error al editar el registro: ' . $e->getMessage(); $status = 500; } return response()->json(['mensaje' => $message], $status); } public function eliminarEstado(Request $request) { $message = ''; $status = 0; try { $registro = DB::table('boletas_calificaciones') ->where('idEscuela', 'COLEGIOABC') ->where('idAlumnoBoletaCalificaciones', $request->alumnos) ->where('idMateriaBoletaCalificaciones', $request->materias) ->where('idPeriodoBoletaCalificaciones', $request->periodo) ->update([ 'estado' => 'Eliminado', ]); $message = 'Registro eliminado correctamente'; $status = 200; } catch (\Exception $e) { $message = 'Error al eliminar el registro: ' . $e->getMessage(); $status = 500; } return response()->json(['mensaje' => $message], $status); } public function habilitarEstado(Request $request) { $message = ''; $status = 0; try { $registro = DB::table('boletas_calificaciones') ->where('idEscuela', 'COLEGIOABC') ->where('idAlumnoBoletaCalificaciones', $request->alumnos) ->where('idMateriaBoletaCalificaciones', $request->materias) ->where('idPeriodoBoletaCalificaciones', $request->periodo) ->update([ 'estado' => 'Activo', ]); $message = 'Registro habilitado correctamente'; $status = 200; } catch (\Exception $e) { $message = 'Error al habilitar el registro: ' . $e->getMessage(); $status = 500; } return response()->json(['mensaje' => $message], $status); } public function getPeriodos() { $periodoBoleta = DB::table('boletas_periodos') ->where('estado', 'Activo') ->select('idPeriodo', 'nombrePeriodo') ->get(); return response()->json($periodoBoleta, 200); } public function getCalificacionesMateria(Request $request) { $idGradoGrupo = $request->idGradoGrupo; $idMateria = $request->idMateria; // Determinar si el parámetro es un grupo o un grado $esGrupo = DB::table('grupos_usuarios') ->where('idGrupo', $idGradoGrupo) ->exists(); $calificaciones = DB::table('grupos_usuarios as g') ->join('usuarios as u', function ($join) { $join->on('g.idEscuela', '=', 'u.idEscuela') ->on('g.idUsuario', '=', 'u.idUsuario') ->where('u.tipoUsuario', '=', 'AL') ->where('u.estatus', '=', 'Activo'); }) ->join('materias as m', function ($join) use ($idMateria, $idGradoGrupo, $esGrupo) { $join->on('m.idEscuela', '=', 'g.idEscuela') ->where('m.idMateria', '=', $idMateria) ->where('m.estado', '=', 'Activo') ->where('m.idGradoGrupoRelacionado', $idGradoGrupo); }) ->leftJoin('boletas_calificaciones as b', function ($join) use ($idMateria) { $join->on('b.idEscuela', '=', 'g.idEscuela') ->on('b.idAlumnoBoletaCalificaciones', '=', 'g.idUsuario') ->where('b.idMateriaBoletaCalificaciones', '=', $idMateria) ->where('b.estado', '=', 'Activo'); }) ->when($esGrupo, function ($query) use ($idGradoGrupo) { // Si es un grupo, filtrar por grupo $query->where('g.idGrupo', $idGradoGrupo); }, function ($query) use ($idGradoGrupo) { // Si es un grado, filtrar por grado $query->where('u.grado', $idGradoGrupo); }) ->where('g.estado', 'Activo') ->select([ 'g.idEscuela', 'g.idGrupo', 'g.idUsuario', 'u.primerNombre', 'u.segundoNombre', 'u.apellidoPaterno', 'u.apellidoMaterno', 'u.grado', 'm.idMateria', 'm.nombreMateria', 'm.idGradoGrupoRelacionado', 'b.idPeriodoBoletaCalificaciones', 'b.calificacion' ]) ->orderBy('u.apellidoPaterno') ->orderBy('u.apellidoMaterno') ->orderBy('u.primerNombre') ->get(); return response()->json($calificaciones, 200); } }