RegistroCalicaciones.php 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\DB;
  6. class RegistroCalicaciones extends Controller
  7. {
  8. public function getCalificaciones()
  9. {
  10. $calificaciones = DB::table('boletas_calificaciones')
  11. ->leftJoin('usuarios', 'usuarios.idUsuario', '=', 'boletas_calificaciones.idAlumnoBoletaCalificaciones')
  12. ->leftJoin('vista_materias_grados_grupos', 'vista_materias_grados_grupos.idMateria', '=', 'boletas_calificaciones.idMateriaBoletaCalificaciones')
  13. ->leftJoin('boletas_periodos', 'boletas_periodos.idPeriodo', '=', 'boletas_calificaciones.idPeriodoBoletaCalificaciones')
  14. ->select(
  15. DB::raw("CONCAT(COALESCE(usuarios.primerNombre, ''), ' ', COALESCE(usuarios.segundoNombre, ''), ' ', COALESCE(usuarios.apellidoPaterno, ''),
  16. ' ', COALESCE(usuarios.apellidoMaterno, '')) AS nombreAlumno"),
  17. DB::raw("CONCAT(COALESCE(vista_materias_grados_grupos.nombreGrado, ''), ' ', COALESCE(vista_materias_grados_grupos.nombreGrupo, '')) AS gradoGrupo"),
  18. 'vista_materias_grados_grupos.idGradoGrupoRelacionado',
  19. 'vista_materias_grados_grupos.nombreMateria',
  20. 'boletas_periodos.nombrePeriodo',
  21. 'boletas_calificaciones.*'
  22. )
  23. ->get();
  24. foreach ($calificaciones as $registro) {
  25. $registro->materiaGradoGrupo = $registro->nombreMateria . ' - ' . $registro->gradoGrupo;
  26. }
  27. return response()->json($calificaciones, 200);
  28. }
  29. // ------------------------------------------------------------------------------------
  30. public function registrarCalificacion(Request $request)
  31. {
  32. $message = '';
  33. $status = 0;
  34. try {
  35. // Verificar si ya existe una calificación para este alumno, materia y periodo
  36. $existente = DB::table('boletas_calificaciones')
  37. ->where('idEscuela', 'COLEGIOABC')
  38. ->where('idAlumnoBoletaCalificaciones', $request->alumno)
  39. ->where('idMateriaBoletaCalificaciones', $request->materia)
  40. ->where('idPeriodoBoletaCalificaciones', $request->periodo)
  41. ->where('estado', 'Activo')
  42. ->first();
  43. if ($existente) {
  44. // Actualizar la calificación existente
  45. DB::table('boletas_calificaciones')
  46. ->where('id', $existente->id)
  47. ->update([
  48. 'calificacion' => $request->calificacion,
  49. 'usuarioRegistro' => $request->usuarioRegistro
  50. ]);
  51. $message = 'Calificación actualizada exitosamente';
  52. $status = 200;
  53. } else {
  54. // Insertar nueva calificación
  55. DB::table('boletas_calificaciones')->insert([
  56. 'idEscuela' => 'COLEGIOABC',
  57. 'idAlumnoBoletaCalificaciones' => $request->alumno,
  58. 'idMateriaBoletaCalificaciones' => $request->materia,
  59. 'idPeriodoBoletaCalificaciones' => $request->periodo,
  60. 'calificacion' => $request->calificacion,
  61. 'usuarioRegistro' => $request->usuarioRegistro,
  62. 'estado' => 'Activo',
  63. ]);
  64. $message = 'Registro de calificación exitoso';
  65. $status = 200;
  66. }
  67. } catch (\Exception $e) {
  68. $message = 'Error al procesar la calificación: ' . $e->getMessage();
  69. $status = 500;
  70. }
  71. return response()->json(['mensaje' => $message], $status);
  72. }
  73. // Nuevo método para carga masiva
  74. public function registrarCalificacionesMasivas(Request $request)
  75. {
  76. $respuestas = [];
  77. $status = 200;
  78. try {
  79. $datos = $request->all();
  80. $usuarioRegistro = $request->header('usuario'); // O como lo estés recibiendo
  81. foreach ($datos as $calificacion) {
  82. $response = $this->registrarCalificacionIndividual($calificacion, $usuarioRegistro);
  83. $respuestas[] = $response;
  84. }
  85. $message = 'Proceso de carga masiva completado';
  86. } catch (\Exception $e) {
  87. $message = 'Error en carga masiva: ' . $e->getMessage();
  88. $status = 500;
  89. }
  90. return response()->json(['mensaje' => $message, 'detalles' => $respuestas], $status);
  91. }
  92. private function registrarCalificacionIndividual($calificacion, $usuarioRegistro)
  93. {
  94. try {
  95. // Verificar si ya existe
  96. $existente = DB::table('boletas_calificaciones')
  97. ->where('idEscuela', 'COLEGIOABC')
  98. ->where('idAlumnoBoletaCalificaciones', $calificacion['alumnoId'])
  99. ->where('idMateriaBoletaCalificaciones', $calificacion['materiaId'])
  100. ->where('idPeriodoBoletaCalificaciones', $calificacion['periodoId'])
  101. ->where('estado', 'Activo')
  102. ->first();
  103. if ($existente) {
  104. // Actualizar
  105. DB::table('boletas_calificaciones')
  106. ->where('id', $existente->id)
  107. ->update([
  108. 'calificacion' => $calificacion['calificacion'],
  109. 'usuarioRegistro' => 'JUAN'
  110. ]);
  111. return [
  112. 'alumno' => $calificacion['alumnoId'],
  113. 'materia' => $calificacion['materiaId'],
  114. 'periodo' => $calificacion['periodoId'],
  115. 'mensaje' => 'Actualizado',
  116. 'status' => 200
  117. ];
  118. } else {
  119. // Insertar
  120. DB::table('boletas_calificaciones')->insert([
  121. 'idEscuela' => 'COLEGIOABC',
  122. 'idAlumnoBoletaCalificaciones' => $calificacion['alumnoId'],
  123. 'idMateriaBoletaCalificaciones' => $calificacion['materiaId'],
  124. 'idPeriodoBoletaCalificaciones' => $calificacion['periodoId'],
  125. 'calificacion' => $calificacion['calificacion'],
  126. 'usuarioRegistro' => 'JUAN',
  127. 'estado' => 'Activo',
  128. ]);
  129. return [
  130. 'alumno' => $calificacion['alumnoId'],
  131. 'materia' => $calificacion['materiaId'],
  132. 'periodo' => $calificacion['periodoId'],
  133. 'mensaje' => 'Registrado',
  134. 'status' => 200
  135. ];
  136. }
  137. } catch (\Exception $e) {
  138. return [
  139. 'alumno' => $calificacion['alumnoId'],
  140. 'materia' => $calificacion['materiaId'],
  141. 'periodo' => $calificacion['periodoId'],
  142. 'mensaje' => 'Error: ' . $e->getMessage(),
  143. 'status' => 500
  144. ];
  145. }
  146. }
  147. // ----------------------------------------------------------------
  148. public function editarCalificacion(Request $request)
  149. {
  150. $message = '';
  151. $status = 0;
  152. try {
  153. $registro = DB::table('boletas_calificaciones')
  154. ->where('idEscuela', 'COLEGIOABC')
  155. ->where('idAlumnoBoletaCalificaciones', $request->alumnos)
  156. ->where('idMateriaBoletaCalificaciones', $request->materias)
  157. ->where('idPeriodoBoletaCalificaciones', $request->periodo)
  158. ->update([
  159. 'calificacion' => $request->calificacion,
  160. 'usuarioRegistro' => $request->usuarioRegistro,
  161. ]);
  162. $message = 'Registro de calficiacion actualizado';
  163. $status = 200;
  164. } catch (\Exception $e) {
  165. $message = 'Error al editar el registro: ' . $e->getMessage();
  166. $status = 500;
  167. }
  168. return response()->json(['mensaje' => $message], $status);
  169. }
  170. public function eliminarEstado(Request $request)
  171. {
  172. $message = '';
  173. $status = 0;
  174. try {
  175. $registro = DB::table('boletas_calificaciones')
  176. ->where('idEscuela', 'COLEGIOABC')
  177. ->where('idAlumnoBoletaCalificaciones', $request->alumnos)
  178. ->where('idMateriaBoletaCalificaciones', $request->materias)
  179. ->where('idPeriodoBoletaCalificaciones', $request->periodo)
  180. ->update([
  181. 'estado' => 'Eliminado',
  182. ]);
  183. $message = 'Registro eliminado correctamente';
  184. $status = 200;
  185. } catch (\Exception $e) {
  186. $message = 'Error al eliminar el registro: ' . $e->getMessage();
  187. $status = 500;
  188. }
  189. return response()->json(['mensaje' => $message], $status);
  190. }
  191. public function habilitarEstado(Request $request)
  192. {
  193. $message = '';
  194. $status = 0;
  195. try {
  196. $registro = DB::table('boletas_calificaciones')
  197. ->where('idEscuela', 'COLEGIOABC')
  198. ->where('idAlumnoBoletaCalificaciones', $request->alumnos)
  199. ->where('idMateriaBoletaCalificaciones', $request->materias)
  200. ->where('idPeriodoBoletaCalificaciones', $request->periodo)
  201. ->update([
  202. 'estado' => 'Activo',
  203. ]);
  204. $message = 'Registro habilitado correctamente';
  205. $status = 200;
  206. } catch (\Exception $e) {
  207. $message = 'Error al habilitar el registro: ' . $e->getMessage();
  208. $status = 500;
  209. }
  210. return response()->json(['mensaje' => $message], $status);
  211. }
  212. public function getPeriodos()
  213. {
  214. $periodoBoleta = DB::table('boletas_periodos')
  215. ->where('estado', 'Activo')
  216. ->select('idPeriodo', 'nombrePeriodo')
  217. ->get();
  218. return response()->json($periodoBoleta, 200);
  219. }
  220. public function getCalificacionesMateria(Request $request)
  221. {
  222. $idGradoGrupo = $request->idGradoGrupo;
  223. $idMateria = $request->idMateria;
  224. // Determinar si el parámetro es un grupo o un grado
  225. $esGrupo = DB::table('grupos_usuarios')
  226. ->where('idGrupo', $idGradoGrupo)
  227. ->exists();
  228. $calificaciones = DB::table('grupos_usuarios as g')
  229. ->join('usuarios as u', function ($join) {
  230. $join->on('g.idEscuela', '=', 'u.idEscuela')
  231. ->on('g.idUsuario', '=', 'u.idUsuario')
  232. ->where('u.tipoUsuario', '=', 'AL')
  233. ->where('u.estatus', '=', 'Activo');
  234. })
  235. ->join('materias as m', function ($join) use ($idMateria, $idGradoGrupo, $esGrupo) {
  236. $join->on('m.idEscuela', '=', 'g.idEscuela')
  237. ->where('m.idMateria', '=', $idMateria)
  238. ->where('m.estado', '=', 'Activo')
  239. ->where('m.idGradoGrupoRelacionado', $idGradoGrupo);
  240. })
  241. ->leftJoin('boletas_calificaciones as b', function ($join) use ($idMateria) {
  242. $join->on('b.idEscuela', '=', 'g.idEscuela')
  243. ->on('b.idAlumnoBoletaCalificaciones', '=', 'g.idUsuario')
  244. ->where('b.idMateriaBoletaCalificaciones', '=', $idMateria)
  245. ->where('b.estado', '=', 'Activo');
  246. })
  247. ->when($esGrupo, function ($query) use ($idGradoGrupo) {
  248. // Si es un grupo, filtrar por grupo
  249. $query->where('g.idGrupo', $idGradoGrupo);
  250. }, function ($query) use ($idGradoGrupo) {
  251. // Si es un grado, filtrar por grado
  252. $query->where('u.grado', $idGradoGrupo);
  253. })
  254. ->where('g.estado', 'Activo')
  255. ->select([
  256. 'g.idEscuela',
  257. 'g.idGrupo',
  258. 'g.idUsuario',
  259. 'u.primerNombre',
  260. 'u.segundoNombre',
  261. 'u.apellidoPaterno',
  262. 'u.apellidoMaterno',
  263. 'u.grado',
  264. 'm.idMateria',
  265. 'm.nombreMateria',
  266. 'm.idGradoGrupoRelacionado',
  267. 'b.idPeriodoBoletaCalificaciones',
  268. 'b.calificacion'
  269. ])
  270. ->orderBy('u.apellidoPaterno')
  271. ->orderBy('u.apellidoMaterno')
  272. ->orderBy('u.primerNombre')
  273. ->get();
  274. return response()->json($calificaciones, 200);
  275. }
  276. }