from database_operations import query_all, query_single, execute_query def actualizar_servicio(clave, Alumno_serviciosocial): # Actualizar servicio social execute_query(f''' UPDATE "Alumno" SET "Alumno_serviciosocial" = {Alumno_serviciosocial} WHERE "Usuario_claveULSA" = {int(clave[2:])} ''') def get_periodos(materias_sgu): return query_all(f'''SELECT * FROM "Periodo" WHERE "Periodo_shortname" IN ({",".join(f"'{materia['PERIODO']}'" for materia in materias_sgu)})''') def get_materias(materias_sgu): return query_all('SELECT * FROM "Materia"') def get_tipo_calificaciones(materias_sgu): return query_all(f'''SELECT * FROM "TipoCalificacion"''') def get_alumno(clave): return query_single(f'SELECT "Carrera_id", "PlanEstudio_id" FROM "Alumno_view" WHERE "Usuario_claveULSA" = {clave[2:]}') def get_grupo(grupo, carrera_id): return query_single(f'''SELECT "Grupo_id" FROM "Grupo_view" WHERE REGEXP_REPLACE("Grupo_desc", '[^\d]', '', 'g') = '{grupo}' AND (("Carrera_id" = {carrera_id}) OR "Carrera_esComun") ''') def insert_materia(clave, materia_id, periodo_id, grupo_id): execute_query(f'''INSERT INTO public."Alumno_Materia"("Usuario_claveULSA", "Materia_id", "Periodo_id", "Grupo_id") VALUES ({int(clave[2:])}, {materia_id}, {periodo_id}, {grupo_id}) ON CONFLICT ("Usuario_claveULSA", "Materia_id", "Periodo_id") DO NOTHING; ''') def insert_calificaciones(calificaciones): execute_query(f''' insert into "Alumno_Materia_Calificacion" ("Usuario_claveULSA", "Materia_id", "Periodo_id", "TipoCalificacion_id", "Calificacion_calif", "Calificacion_fecha", "Calificacion_comentario") values {','.join(calificaciones)} on conflict ("Usuario_claveULSA", "Materia_id", "Periodo_id", "TipoCalificacion_id") DO UPDATE SET "Calificacion_calif" = EXCLUDED."Calificacion_calif", "Calificacion_comentario" = EXCLUDED."Calificacion_comentario"; ''') #alumno structure {apellido_paterno: str, apellido_materno: str, curp: str, clave_carrera: int, plan: int, clave: int, servicio_social: bool, nombre: str, correo: str} def insert_alumno(alumno): alumno_base = query_single(f'SELECT "Carrera_id", "PlanEstudio_id" FROM "Alumno_view" WHERE "Usuario_claveULSA" = {alumno["clave"]}') if alumno_base: return alumno_base usuario_base = query_single(f"""SELECT * FROM "Usuario" WHERE "Usuario_curp" = '{alumno["curp"]}'""") plan_estudio_base = query_single(f"""SELECT * FROM "PlanEstudio_view" WHERE "PlanEstudio_desc" LIKE '%{alumno["plan"]}' AND "Carrera_clave" = {alumno["clave_carrera"]}""") if usuario_base: execute_query(f''' INSERT INTO public."Alumno"("Usuario_claveULSA", "Usuario_id", "PlanEstudio_id", "Alumno_fecha_ingreso", "Alumno_generacion", "Alumno_serviciosocial") VALUES ({alumno["clave"]}, {usuario_base["Usuario_id"]}, {plan_estudio_base["PlanEstudio_id"]}, '{alumno['fecha_ingreso']}', '{alumno['fecha_ingreso']}', {alumno["servicio_social"]}) ON CONFLICT ("Usuario_claveULSA") DO NOTHING; ''') execute_query(f''' INSERT INTO "Alumno_SubEstadoAlumno" ("SubEstadoAlumno_id", "Usuario_claveULSA", "SEA_fecha", "SEA_actual") VALUES (3, {alumno["clave"]},'{alumno['fecha_ingreso']}', true) ''') alumno_base = query_single(f'SELECT "Carrera_id", "PlanEstudio_id" FROM "Alumno_view" WHERE "Usuario_claveULSA" = {alumno["clave"]}') return alumno_base usuario_base = query_single(f''' INSERT INTO public."Usuario"("Usuario_nombre", "Usuario_apellidos", "Usuario_curp") VALUES ('{alumno["nombre"]}', '{alumno["apellido_paterno"]} {alumno["apellido_materno"]}', '{alumno["curp"]}') RETURNING "Usuario_id" ''') execute_query(f''' INSERT INTO public."Alumno"("Usuario_claveULSA", "Usuario_id", "PlanEstudio_id", "Alumno_fecha_ingreso", "Alumno_generacion", "Alumno_serviciosocial") VALUES ({alumno["clave"]}, {usuario_base["Usuario_id"]}, {plan_estudio_base["PlanEstudio_id"]}, '{alumno['fecha_ingreso']}', '{alumno['fecha_ingreso']}', {alumno["servicio_social"]}) ON CONFLICT ("Usuario_claveULSA") DO NOTHING; ''') alumno_base = query_single(f'SELECT "Carrera_id", "PlanEstudio_id" FROM "Alumno_view" WHERE "Usuario_claveULSA" = {alumno["clave"]}') return alumno_base # insert actualmente_cursadas def insert_actualmente_cursadas(clave, actualmente_cursadas, periodo_actual, grupo_actual): grupo_base = query_single(f'SELECT "Grupo_id" FROM "Grupo" WHERE "Grupo_desc" = {grupo_actual}') periodo_base = query_single(f'SELECT "Periodo_id" FROM "Periodo" WHERE "Periodo_shortname" = {periodo_actual}') # only where materia["Clave"] is set for materia in filter(lambda materia: "Clave" in materia, actualmente_cursadas): # to varchar materia_clave = f"'{materia['Clave']}'" materia_base = query_single(f'SELECT "Materia_id" FROM "Materia" WHERE {materia_clave} = ANY("Materia_claves")') if materia_base: execute_query(f''' INSERT INTO public."Alumno_Materia"("Usuario_claveULSA", "Materia_id", "Periodo_id", "Grupo_id") VALUES ({clave[2:]}, {materia_base["Materia_id"]}, {periodo_base["Periodo_id"]}, {grupo_base["Grupo_id"]}) ON CONFLICT ("Usuario_claveULSA", "Materia_id", "Periodo_id") DO NOTHING; ''') def insert_datos(alumno): execute_query(f''' INSERT INTO public."pos_ultima_extraccion"("Usuario_claveULSA", "telefono", "correo", "estatus", "promedio", "sexo", "semestre") VALUES ({alumno["clave"]}, '{alumno["telefono"]}', '{alumno["correo"]}', '{alumno["estatus"]}', {alumno["promedio"]} , '{alumno["sexo"]}', {alumno["semestre"]}) ON CONFLICT ("Usuario_claveULSA") DO UPDATE SET "telefono" = EXCLUDED."telefono", "correo" = EXCLUDED."correo", "estatus" = EXCLUDED."estatus", "promedio" = EXCLUDED."promedio", "actualizacion" = now(); ''')