def matricular(centro,periodo_viejo,periodo_nuevo,usuario): d = datetime.date(2014,2,1) range = getRange(centro) matricula_actual = Matricula.objects.filter(seccion__periodo_clases = periodo_viejo,estado__in = [1,3,5], seccion__malla_curricular__malla_oficial__curso__ordenamiento__valor__in = range).values('pk','seccion__malla_curricular__malla_oficial__curso__ordenamiento__valor','seccion__malla_curricular','seccion__descripcion','seccion','seccion__jornada','alumno').order_by('seccion__malla_curricular__malla_oficial__curso','seccion') cont = 0 aprobados, reprobados = [],[] for mat in matricula_actual: cont+=1 current_task.update_state(state='PROGRESS',meta={'current': cont}) if Matricula.objects.filter(seccion__periodo_clases__inicio_periodo = d,alumno = Alumno.objects.get(pk=mat['alumno'])).exists(): continue totales = {} aprueba_grado = True if mat['seccion__malla_curricular__malla_oficial__curso__ordenamiento__valor'] not in [1,2,3,4]: clases = list(ClaseSeccion.objects.filter(seccion=mat['seccion'], plaza__isnull = False, content_type_id = 30).values_list('pk', flat=True)) notas = list(NotaParcial.objects.filter(clase_seccion__in = clases).values_list('clase_seccion','acumulativo','examen','parcial','matricula').order_by('clase_seccion','parcial')) for c in clases: #n = NotaParcial.objects.filter(matricula = mat['pk'], clase_seccion = c) entra = False totales[str(mat['pk']) + '-' + str(c)] = 0 for n in notas: if n[0] == c: entra = True # Si entro aca significa que si hay notas para esa clase if n[4] == mat['pk']: #total += float(info.acumulativo) + float(info.examen) busc = str(mat['pk']) + '-' + str(c) if busc in totales: tot_act = totales[str(mat['pk']) + '-' + str(c)] tot_nuevo = tot_act + float(n[1]) + float(n[2]) totales[str(mat['pk']) + '-' + str(c)] = tot_nuevo else: totales[str(mat['pk']) + '-' + str(c)] = float(n[1]) + float(n[2]) if entra and totales[str(mat['pk']) + '-' + str(c)] == 0: #Si entra aca es xke reprueba pass else: del(totales[str(mat['pk']) + '-' + str(c)]) for k,v in totales.items(): prm = int(round(v/4)) if prm < 60: try: nr = NotaRecuperacion.objects.get(matricula=k.split('-')[0],clase_seccion=k.split('-')[1]) if nr < 60: aprueba_grado = False break except Exception, e: aprueba_grado = False break act_malla = MallaCurricular.objects.get(pk=mat['seccion__malla_curricular']) act_valor = act_malla.malla_oficial.curso.ordenamiento.valor if aprueba_grado: aprobados.append(mat['pk']) if range[-1] != act_valor: new_malla = MallaCurricular.objects.filter(centro=centro,malla_oficial = MallaCurricularOficial.objects.get(curso__ordenamiento__valor=act_valor+1, curso__sub_nivel_educativo__in = centro.sub_niveles.values_list('pk', flat=True))).latest('anio') try: Matricula.objects.create(alumno=Matricula.objects.get(pk=mat['pk']).alumno,seccion=Seccion.objects.get(descripcion=mat['seccion__descripcion'],periodo_clases=periodo_nuevo,malla_curricular=new_malla,jornada=Jornada.objects.get(pk=mat['seccion__jornada'])),fecha=datetime.date.today(),usuario_creador=usuario,fecha_creacion=datetime.date.today()) except Exception, e: try: s = Seccion.objects.create(descripcion=mat['seccion__descripcion'],periodo_clases=periodo_nuevo,malla_curricular=new_malla,jornada=Jornada.objects.get(pk=mat['seccion__jornada']),usuario_creador=usuario, fecha_creacion = datetime.date.today()) Matricula.objects.create(alumno=Matricula.objects.get(pk=mat['pk']).alumno,seccion=s,fecha=datetime.date.today(),usuario_creador=usuario,fecha_creacion=datetime.date.today()) for clase_c in ClaseMalla.objects.filter(malla_curricular = new_malla): clase_seccion = ClaseSeccion(seccion = s,nota_aprobatoria=70,content_object=clase_c.clase) clase_seccion.save() for clase_of in new_malla.malla_oficial.clases.all(): clase_seccion = ClaseSeccion(seccion = s,nota_aprobatoria=70,content_object=clase_of) clase_seccion.save() except Exception,e: print 'apr',e
clase_seccion.save() for clase_of in new_malla.malla_oficial.clases.all(): clase_seccion = ClaseSeccion(seccion = s,nota_aprobatoria=70,content_object=clase_of) clase_seccion.save() except Exception,e: print 'apr',e else: new_malla = MallaCurricular.objects.filter(centro=centro,malla_oficial = MallaCurricularOficial.objects.get(curso__ordenamiento__valor=act_valor, curso__sub_nivel_educativo__in = centro.sub_niveles.values_list('pk', flat=True))).latest('anio') try: Matricula.objects.create(alumno=Matricula.objects.get(pk=mat['pk']).alumno,seccion=Seccion.objects.get(descripcion=mat['seccion__descripcion'],periodo_clases=periodo_nuevo,malla_curricular=new_malla,jornada=Jornada.objects.get(pk=mat['seccion__jornada'])),fecha=datetime.date.today(),usuario_creador=usuario,fecha_creacion=datetime.date.today()) except Exception, e: try: s = Seccion.objects.create(descripcion=mat['seccion__descripcion'],periodo_clases=periodo_nuevo,malla_curricular=new_malla,jornada=Jornada.objects.get(pk=mat['seccion__jornada']),usuario_creador=usuario, fecha_creacion = datetime.date.today()) Matricula.objects.create(alumno=Matricula.objects.get(pk=mat['pk']).alumno,seccion=s,fecha=datetime.date.today(),usuario_creador=usuario,fecha_creacion=datetime.date.today()) for clase_c in ClaseMalla.objects.filter(malla_curricular = new_malla): clase_seccion = ClaseSeccion(seccion = s,nota_aprobatoria=70,content_object=clase_c.clase) clase_seccion.save() for clase_of in new_malla.malla_oficial.clases.all(): clase_seccion = ClaseSeccion(seccion = s,nota_aprobatoria=70,content_object=clase_of) clase_seccion.save() except Exception,e: print 'apr',e d = datetime.date(2014,2,1) pc = PeriodoClases.objects.filter(centro=centro, inicio_periodo = d) s = Matricula.objects.filter(seccion__periodo_clases = pc).distinct('seccion').values_list('seccion__pk', flat=True) Seccion.objects.filter(periodo_clases = pc).exclude(pk__in=s).delete()