def calculo_correcciones(self, inst_destino_id=None, inst_concepto_id=None, tipo_calculo='Promedio con Concepto'): """Simula y muestra los cálculos de correcciones para una instancia destino dada""" curso = self.get_curso_actual() if inst_destino_id and inst_concepto_id: inst_destino = InstanciaExaminacion.get(inst_destino_id) inst_concepto = InstanciaExaminacion.get(inst_concepto_id) calculador = self.crear_calculador(tipo_calculo, curso, inst_destino, inst_concepto) resultados = calculador.simular() else: resultados = [] instancias_opts = [(i.id,i.longrepr()) for i in curso.instancias_examinacion_a_corregir] options = dict(inst_destino_id=instancias_opts, inst_concepto_id=instancias_opts) value = dict(tipo_calculo=tipo_calculo, inst_destino_id=inst_destino_id, inst_concepto_id=inst_concepto_id) return dict(records=resultados, name=name, namepl=namepl, form=calculo_correcciones_form, value=value, options=options, limit_to=identity.current.user.paginador)
def aplicar_calculo_correcciones(self,tipo_calculo, inst_destino_id, inst_concepto_id, entregador_id = None): """Aplica el cálculo de correccion para una instancia destino dada""" curso = self.get_curso_actual() inst_destino = InstanciaExaminacion.get(inst_destino_id) inst_concepto = InstanciaExaminacion.get(inst_concepto_id) calculador = self.crear_calculador(tipo_calculo, curso, inst_destino, inst_concepto) docente = identity.current.user if entregador_id: alumno_inscripto = AlumnoInscripto.get(entregador_id) calculador.aplicar(docente, alumno_inscripto) else: calculador.aplicar_todas(docente) raise redirect('calculo_correcciones', inst_destino_id=inst_destino_id, inst_concepto_id=inst_concepto_id)
def delete(self, instanciaID, entregadorID, justAssign=False): instancia = InstanciaExaminacion.get(instanciaID) entregador = Entregador.get(entregadorID) docente = identity.current.user try: docente.eliminar_correccion(entregador, instancia) raise redirect('resumen_entregas', instanciaID=instanciaID) except AlumnoSinEntregas: flash(_(u'El alumno %s no realizó ninguna entrega para la ' u'instancia %s') % (alumno, instancia)) raise redirect('resumen_entregas', instanciaID=instanciaID)
def new(self, instanciaID, entregadorID, justAssign=False): instancia = InstanciaExaminacion.get(instanciaID) entregador = Entregador.get(entregadorID) docente = identity.current.user try: correccion = docente.corregir(entregador, instancia) if justAssign: raise redirect('resumen_entregas', instanciaID=instanciaID) else: raise redirect('edit', correccionID = correccion.id) except AlumnoSinEntregas: flash(_(u'El entregador %s no realizó ninguna entrega para la ' u'instancia %s') % (entregador, instancia)) raise redirect('resumen_entregas', instanciaID=instanciaID)
def resumen_entregas(self,instanciaID=None, desertoresFLAG=None, soloMiasFLAG=None, csv=None): """Lista un resumen de los alumnos, sus entregas y correcciones para una instancia dada""" instancia_anterior = None if instanciaID: instancia = InstanciaExaminacion.get(instanciaID) if not desertoresFLAG: r = [x for x in instancia.get_resumen_entregas() if x.tiene_entregas] else: r = instancia.get_resumen_entregas() if soloMiasFLAG is not None: r = [x for x in r if x.correccion is not None and x.correccion.corrector.docente.id == identity.current.user.id] for i in r: i.corrector_anterior = None i.nota_anterior = None i.instancia_anterior = None instancia_anterior = instancia while instancia_anterior.get_instancia_anterior() is not None: instancia_anterior = instancia_anterior.get_instancia_anterior() resumen = dict([(c.entregador, c) for c in instancia_anterior.correcciones]) for i in r: if i.entregador in resumen and i.corrector_anterior is None: i.corrector_anterior = resumen[i.entregador].corrector.docente.usuario i.nota_anterior = resumen[i.entregador].nota i.instancia_anterior = instancia_anterior else: r = [] instancias_opts = [(i.id,i.longrepr()) for i in self.get_curso_actual().instancias_examinacion_a_corregir] options = dict(instanciaID=instancias_opts) vfilter = dict(instanciaID=instanciaID, desertoresFLAG = desertoresFLAG, soloMiasFLAG=soloMiasFLAG) # Este método puede retornar un archivo csv if csv is not None: header = u'Padrón,Alumno,Corrector,Nota,Observaciones\n' lines = [('%s,"%s","%s",%f,"%s"' % ( i.entregador.alumno.padron, i.entregador.alumno.nombre, i.correccion.corrector, i.correccion.nota if i.correccion.nota is not None else -1.0, i.correccion.observaciones)) for i in r if i.correccion is not None] data = '\n'.join(lines) return self.enviar_csv(header+data, 'planilla.csv') else: return dict(records=r, name=name, namepl=namepl, form=filtro_resumen_entregas, vfilter=vfilter, options=options, instanciaID=instanciaID, desertoresFLAG=desertoresFLAG, soloMiasFLAG=soloMiasFLAG, docenteActual=identity.current.user.id, hayAnterior=instancia_anterior is not None, limit_to=identity.current.user.paginador)