Example #1
0
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
Example #2
0
							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()