Ejemplo n.º 1
0
class Evento(gj.Document):
    title = db.StringField(max_length=256)
    start = db.DateTimeField()
    backgroundColor = db.StringField()
    textColor = db.StringField(default="white")
    cursos = db.ListField(db.ReferenceField(Curso))
    activo = db.BooleanField(default=False)
    eliminado = db.BooleanField(default=False)

    def setStart(self):
        mes = str(self.start.month)
        dia = str(self.start.day)
        if len(str(self.start.month)) is 1:
            mes = "0" + str(self.start.month)
        if len(str(self.start.day)) is 1:
            dia = "0" + str(self.start.day)
        return str(self.start.year) + "-" + mes + "-" + dia

    def to_dict(self):
        cursos = []
        for curso in self.cursos:
            cursos.append(curso.nombre)
        return {
            "id": str(self.id),
            "title": self.title,
            "start": self.setStart(),
            "backgroundColor": self.backgroundColor,
            "textColor": self.textColor,
            "cursos": cursos,
            "activo": self.activo
        }
Ejemplo n.º 2
0
class User(db.Document):
    username = db.StringField(required=True, unique=True)
    password = db.StringField(required=True)
    phone_number = db.StringField(required=True)
    isActivated = db.BooleanField(default=False)
    isDriver = db.BooleanField(default=False)

    def hash_password(self):
        self.password = generate_password_hash(self.password).decode('utf-8')

    def check_password(self, password):
        return check_password_hash(self.password, password)
Ejemplo n.º 3
0
class Topico(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Topico", max_length=200)
    asignatura = db.ReferenceField(Asignatura)
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return {
            "id": str(self.id),
            "asignatura": self.asignatura.to_dict(),
            "nombre": self.nombre
        }

    def to_excel(self):
        return [str(self.id), self.nombre, self.asignatura.to_dict()["nombre"]]

    @classmethod
    def export_to_excel(cls, topicos):
        result_list_topicos = [["Id. Topico", "Nombre Topico", "Asignatura"]]
        for topico in topicos:
            result_list_topicos.append(topico.to_excel())
        return result_list_topicos
Ejemplo n.º 4
0
class Alternativa(db.EmbeddedDocument):
    texto = db.StringField()
    texto_secundario = db.StringField()
    correcta = db.BooleanField(default=False)
    meta = {'strict': False}

    def to_dict(self):
        return {"texto": self.texto, "correcta": self.correcta}
Ejemplo n.º 5
0
class User(db.Document, UserMixin):
    email = db.StringField(max_length=255)
    password = db.StringField(max_length=255)
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    roles = db.ListField(db.ReferenceField(Role), default=[])

    def __unicode__(self):
        return self.email
Ejemplo n.º 6
0
class Asignatura(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Asignatura", max_length=200)
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return {"id": str(self.id), "nombre": self.nombre}
Ejemplo n.º 7
0
class Respuesta(db.EmbeddedDocument):
    correcta = db.BooleanField()
    numero_pregunta = db.IntField()
    alternativa = db.StringField()
    meta = {'strict': False}

    def to_dict(self):
        return {
            "correcta": self.correcta,
            "numero_pregunta": self.numero_pregunta,
            "alternativa": self.alternativa
        }
Ejemplo n.º 8
0
class Respuesta(db.EmbeddedDocument):
    correcta = db.BooleanField(default=False)
    numero_pregunta = db.IntField()
    data = db.StringField()
    meta = {'strict': False}

    def to_dict(self):
        return {
            "correcta": self.correcta,
            "numero_pregunta": self.numero_pregunta,
            "data": self.data
        }
Ejemplo n.º 9
0
class Colegio(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Institucion", max_length=200)
    direccion = db.EmbeddedDocumentField(Direccion)
    activo = db.BooleanField(default=True)
    cantidad_estudiantes = db.IntField(default=0)

    meta = {'strict': False}

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "cantidad_estudiantes": self.cantidad_estudiantes,
            "direccion": self.direccion.to_dict()
        }

    def to_excel(self):
        return [str(self.id),self.nombre]
    
    def __str__(self):
        return self.nombre
    
    def updateCantEstudiantes(self):
        from models.alumno import Alumno
        alumnos = Alumno.objects(colegio=self.id).all()
        contador = 0
        for alumno in alumnos:
            if alumno.activo:
                contador= contador+1
        self.cantidad_estudiantes = contador
        return True

    @classmethod
    def create_layout_excel(cls):
        headers = ["Nombre","Calle","Numero","Comuna"]
        result_list = []
        return create_excel(result_list, headers, "Formato_colegios")

    @classmethod
    def create_from_excel(cls, list_rows):
        for colegio in list_rows:
            direccion = Direccion(calle = colegio[1], numero = str(colegio[2]), comuna = colegio[3])
            colegio = Colegio(direccion = direccion, nombre= colegio[0])
            colegio.save()
        return "hecho"

    @classmethod
    def export_to_excel(cls):
        colegios= Colegio.objects().all()
        result_list_colegios=[["Id. Colegio", "Nombre Colegio"]]
        for colegio in colegios:
            result_list_colegios.append(colegio.to_excel())
        return result_list_colegios
Ejemplo n.º 10
0
class SuperAdmin(db.Document, UserMixin):
    email = db.EmailField()
    password = db.StringField()
    active = db.BooleanField(default=True)
    confirmed_at = db.DateTimeField()
    created = db.DateTimeField(default=datetime.now)
    updated = db.DateTimeField(default=datetime.now)

    meta = {'strict': False}

    def encrypt_password(self, password_to_encrypt):
        self.password = hash_password(password_to_encrypt)

    def check_password(self, password_to_check):
        return verify_password(self.password, str(password_to_check).strip())
Ejemplo n.º 11
0
class Justificacion(db.Document):
    fecha = db.DateTimeField(default=datetime.now)
    asistencia = db.ReferenceField(Asistencia)
    alumno = db.ReferenceField(Alumno)
    causa = db.StringField(max_length=200)
    activo = db.BooleanField(default=True)

    def to_dict(self):
        return {
            "id": str(self.id),
            "asistencia": self.asistencia.to_dict_short(),
            "alumno": self.alumno.to_dict(),
            "causa": self.causa,
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S")
        }
Ejemplo n.º 12
0
class Alternativa(db.EmbeddedDocument):
    texto = db.StringField()
    texto_secundario = db.StringField()
    correcta = db.BooleanField(default=False)
    numero_alternativa = db.IntField(default=0)
    meta = {'strict': False}

    def to_dict(self):
        return{
            "texto": self.texto,
            "texto_secundario": self.texto_secundario,
            "correcta": self.correcta,
            "numero_alternativa": self.numero_alternativa,
            "numero_opcion": self.numero_alternativa
        }
Ejemplo n.º 13
0
class Categoria(gj.Document):
    nombre = db.StringField(verbose_name="Nombre Categoria", max_length=200)
    activo = db.BooleanField(default=True)
    imagen = db.StringField()
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "activo": self.activo,
            "imagen": self.imagen
        }
Ejemplo n.º 14
0
class Curso(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    cantidad_estudiantes = db.IntField(default=0)
    asignaturas = db.ListField(db.ReferenceField(Asignatura))
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_excel(self):
        return [str(self.id), self.nombre]

    def to_dict(self):
        asignaturas = []
        for asignatura in self.asignaturas:
            asignatura = Asignatura.objects(id=asignatura.id).first()
            if asignatura.activo:
                asignaturas.append(asignatura.to_dict())

        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "cantidad_estudiantes": self.cantidad_estudiantes,
            "asignaturas": asignaturas
        }

    def updateCantEstudiantes(self):
        from models.alumno import Alumno
        alumnos = Alumno.objects(curso=self.id).all()
        contador = 0
        for alumno in alumnos:
            if alumno.activo:
                contador = contador + 1
        self.cantidad_estudiantes = contador
        return True

    @classmethod
    def export_to_excel(cls):
        cursos = Curso.objects().all()
        result_list_cursos = [["Id. Curso", "Nombre Curso"]]
        for curso in cursos:
            result_list_cursos.append(curso.to_excel())
        return result_list_cursos
Ejemplo n.º 15
0
class Curso(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    asignatura = db.ReferenceField(Asignatura)
    institucion = db.ReferenceField(Institucion)
    profesor = db.ReferenceField(Profesor)
    categoria = db.ReferenceField(Categoria)
    alumnos = db.ListField(db.ReferenceField(Alumno))
    activo = db.BooleanField(default=True)
    version = db.StringField(default="1.0")
    curso_base = db.ReferenceField(CursoBase)
    descripcion = db.StringField()
    aprobacion = db.IntField(default=0)
    imagen = db.StringField()
    habilidades = db.ListField(db.ReferenceField(Habilidad))
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self, full=True):
        data = {
            "id": str(self.id),
            "nombre": self.nombre,
            "fecha_creacion": str(self.fecha_creacion),
            "profesor": self.profesor.to_dict(),
            "activo": self.activo,
            "version": self.version,
            "descripcion": self.descripcion,
            "imagen": self.imagen,
            "curso_base": self.curso_base.to_dict(),
            "categoria": self.categoria.to_dict()
        }
        if full:
            data.update({
                "contenidos": [x.to_dict() for x in self.contenidos],
                "asignatura": self.asignatura.to_dict(),
                "alumnos": [x.to_dict() for x in self.alumnos],
                "aprobacion": self.aprobacion,
                "curso_base": self.curso_base.to_dict(),
                "habilidades": [x.to_dict() for x in self.habilidades]
            })
        return data
Ejemplo n.º 16
0
class Grado(gj.Document):
    institucion = db.ReferenceField(Institucion)
    nivel = db.IntField()
    identificador = db.StringField(max_length=5)
    activo = db.BooleanField(default=True)
    profesor = db.ReferenceField(Profesor, required=True)

    def __str__(self):
        return str(self.nivel) + "°" + self.identificador

    def getGrado(self):
        return str(self.nivel) + "°" + self.identificador

    def to_dict(self):
        return {
            "id": str(self.id),
            "nivel": self.nivel,
            "identificador": self.identificador,
            "activo": self.activo
        }
Ejemplo n.º 17
0
class Seccion(gj.Document):
    titulo = db.StringField(max_length=30)
    descripcion = db.StringField()
    data = db.StringField()
    imagen = db.StringField()
    activo = db.BooleanField(default=True)
    tipo = db.StringField(choices=TIPOS_SECCIONES)
    posicion = db.IntField()
    institucion = db.ReferenceField(Institucion)
    meta = {'strict': False}

    def __str__(self):
        return self.titulo

    def to_dict(self):
        institucion = ""
        if self.institucion != None:
            institucion = self.institucion.to_dict()
        return {
            "id": str(self.id),
            "titulo": self.titulo,
            "data": self.data,
            "imagen": self.imagen,
            "activo": self.activo,
            "tipo": self.tipo,
            "institucion": institucion,
            "posicion": self.posicion
        }

    def asignarPosicion(self, id):
        institucion = Institucion.objects(id=id).first()
        posicion = 0
        for seccion in Seccion.objects(institucion=institucion.id).all():
            if seccion.activo:
                if posicion < seccion.posicion:
                    posicion = seccion.posicion
        self.posicion = posicion + 1
        return True
Ejemplo n.º 18
0
class Alternativa(db.EmbeddedDocument):
    texto = db.StringField()
    correcta = db.BooleanField(default=False)
    meta = {'strict': False}
Ejemplo n.º 19
0
class List(db.Document):
    list_title = db.StringField(required=True)
    cover_image_url = db.StringField()
    private = db.BooleanField(default=False)
    products = db.ListField(db.ReferenceField('Product'))
    added_by = db.ReferenceField('User')
Ejemplo n.º 20
0
class Prueba(gj.Document):
    nombre = db.StringField(max_length=250)
    cantidad_preguntas = db.IntField()
    asignatura = db.ReferenceField(Asignatura)
    fecha = db.DateTimeField(default=datetime.now)
    preguntas = db.ListField(db.EmbeddedDocumentField(Pregunta))
    topicos = db.ListField(db.ReferenceField(Topico))
    tipo = db.StringField(choices=TIPOS_PRUEBA)
    visible = db.BooleanField(default=False)
    activo = db.BooleanField(default=True)
    puntaje_base = db.IntField(default=0)
    meta = {'strict': False}

    def __str__(self):
        return self.nombre

    def to_dict(self):
        topicos = []
        for topico in self.topicos:
            topicos.append(topico.to_dict())
        preguntas = []
        for pregunta in self.preguntas:
            preguntas.append(pregunta.to_dict())
        return {
            "id": str(self.id),
            "nombre": self.nombre,
            "cantidad_preguntas": self.cantidad_preguntas,
            "asignatura": self.asignatura.to_dict(),
            "fecha": self.fecha.strftime("%Y/%m/%d %H:%M:%S"),
            "tipo": self.tipo,
            "topicos": topicos,
            "preguntas": preguntas,
            "puntaje_base": self.puntaje_base,
            "visible": self.visible
        }

    #TODO: validar que id de la prueba
    @classmethod
    def load_preguntas(cls, lista, prueba_id):
        try:
            prueba = Prueba.objects(id=prueba_id).first()
            if (prueba == None):
                return {"error": "Prueba no encontrada"}
        except:
            return {"error": "Error en el id de la prueba"}

        listado_preguntas = Pregunta.create_from_excel(lista)
        if (len(listado_preguntas) == 0):
            return {
                "error":
                "Problema al cargar las preguntas de la prueba, favor revisar excel"
            }
        prueba.preguntas = listado_preguntas
        prueba.cantidad_preguntas = len(lista)
        prueba.save()
        return {"Response": "Prueba creada con exito"}

    @classmethod
    def list_to_dict(cls, lista):
        result_list = []
        for element in lista:
            result_list.append(element.to_dict())
        return result_list

    @classmethod
    def update_visible(cls, id_prueba):
        prueba = Prueba.objects(id=id_prueba).first()
        prueba.visible = not prueba.visible
        prueba.save()
        return "Campo visible actualizado"
Ejemplo n.º 21
0
class Alumno(gj.Document, UserMixin):
    nombres = db.StringField()
    apellido_paterno = db.StringField(max_length=20)
    apellido_materno = db.StringField(max_length=20)
    email = db.EmailField()
    telefono = db.StringField(max_length=20)
    nombre_usuario = db.StringField(max_length=20)
    password = db.StringField(max_length=255)
    matricula = db.StringField(max_length=20)
    institucion = db.ReferenceField(Institucion)
    grado = db.ReferenceField(Grado)
    imagen = db.StringField()
    activo = db.BooleanField(default=True)
    primera_vez = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombres

    def to_dict(self):
        if self.grado == None:
            return {
                "id": str(self.id),
                "nombres": self.nombres,
                "apellido_paterno": self.apellido_paterno,
                "apellido_materno": self.apellido_materno,
                "email": self.email,
                "telefono": self.telefono,
                "nombre_usuario": self.nombre_usuario,
                "matricula": self.matricula,
                #"grado": self.grado.to_dict(),
                "imagen": self.imagen,
                "activo": self.activo,
                "primera_vez": self.primera_vez
            }
        else:
            return {
                "id": str(self.id),
                "nombres": self.nombres,
                "apellido_paterno": self.apellido_paterno,
                "apellido_materno": self.apellido_materno,
                "email": self.email,
                "telefono": self.telefono,
                "nombre_usuario": self.nombre_usuario,
                "matricula": self.matricula,
                "grado": self.grado.to_dict(),
                "imagen": self.imagen,
                "activo": self.activo,
                "primera_vez": self.primera_vez
            }

    def encrypt_password(self, password_to_encrypt):
        self.password = generate_password_hash(password_to_encrypt)

    def check_password(self, password_to_check):
        return check_password_hash(self.password,
                                   str(password_to_check).strip())

    @classmethod
    def get_by_email_or_username(cls, email_or_usernmane):
        text_id = email_or_usernmane.lower()
        if '@' in text_id:
            return cls.objects.filter(email=text_id).first()
        return cls.objects.filter(username=text_id).first()

    @classmethod
    def get_by_id(cls, user_id):
        return cls.objects(id=user_id).first()

    # token alive 10 hours
    def get_token(self, seconds_live=36000):
        token = Serializer(current_app.config.get("TOKEN_SALT"),
                           expires_in=seconds_live)
        return str(token.dumps({'id': str(self.id)}))

    @classmethod
    def load_from_token(cls, token):
        s = Serializer(current_app.config.get("TOKEN_SALT"))
        if token[0:2] == "b'" and token[-1:] == "'":
            token = token[2:-1]
        try:
            data = s.loads(token)
            return cls.get_by_id(data['id'])
        except SignatureExpired:
            # the token has ben expired
            return None
        except BadSignature:
            # the token ist'n valid
            return None
Ejemplo n.º 22
0
class Curso(gj.Document):
    nombre = db.StringField(verbose_name="Nombre curso", max_length=200)
    fecha_creacion = db.DateTimeField(default=datetime.now)
    contenidos = db.ListField(db.EmbeddedDocumentField(Contenido))
    asignatura = db.ReferenceField(Asignatura)
    institucion = db.ReferenceField(Institucion)
    profesor = db.ReferenceField(Profesor)
    categoria = db.ReferenceField(Categoria)
    alumnos = db.ListField(db.ReferenceField(Alumno))
    activo = db.BooleanField(default=True)
    version_actual = db.BooleanField(default=True)
    publicado = db.BooleanField(default=False)
    eliminado = db.BooleanField(default=False)
    version = db.IntField(default=1)
    curso_base = db.ReferenceField(CursoBase, reverse_delete_rule=3)
    descripcion = db.StringField()
    aprobacion = db.IntField( default=0 )
    imagen = db.StringField()
    habilidades = db.ListField(db.ReferenceField(Habilidad))
    clon_padre = db.ReferenceField('Curso')
    meta = {'strict': False }
    
    def __str__(self):
        return self.nombre
    
    def actualizar_aprobacion(self):
        from models.evaluacion import Evaluacion
        promedio = 0
        cantidad = Evaluacion.objects(curso=self.id).count()
        for evaluacion in Evaluacion.objects(curso=self.id).all():
            promedio = evaluacion.acierto + promedio
        if cantidad>0:
            promedio = int(promedio/cantidad)
        self.aprobacion = promedio

    def to_dict(self, full=True):
        data = {
            "id": str(self.id),
            "nombre": self.nombre,
            "fecha_creacion": str(self.fecha_creacion),
            "activo": self.activo,
            "eliminado": self.eliminado,
            "publicado": self.publicado,
            "version": self.version,
            "descripcion": self.descripcion,
            "imagen": self.imagen,
            "curso_base": self.curso_base.to_dict()
        }
        if self.profesor:
            data['profesor'] = self.profesor.to_dict()
        if self.categoria:
            data['categoria'] = self.categoria.to_dict()
        if full:
            clon_padre = {}
            if self.clon_padre != None:
                clon_padre = self.clon_padre.to_dict()
            data.update({
                "contenidos":  [x.to_dict() for x in self.contenidos],
                "alumnos":     [x.to_dict() for x in self.alumnos],
                "aprobacion":  self.aprobacion,
                "curso_base":  self.curso_base.to_dict(),
                "habilidades": [x.to_dict() for x in self.habilidades],
                "clon_padre": clon_padre,
                "version_actual": self.version_actual
            })
            if self.asignatura:
                data['asignatura'] = self.asignatura.to_dict()
        return data
Ejemplo n.º 23
0
class Profesor(gj.Document):
    nombres = db.StringField(max_length=20)
    apellido_paterno = db.StringField(max_length=20)
    apellido_materno = db.StringField(max_length=20)
    email = db.EmailField()
    telefono = db.StringField(max_length=12)
    password = db.StringField()
    password_provisoria = db.StringField(default="no disponible")
    direccion = db.EmbeddedDocumentField(Direccion)
    rut = db.StringField(max_length=10)
    asignatura = db.ReferenceField(Asignatura)
    imagen = db.StringField()
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombres": self.nombres,
            "apellido_paterno": self.apellido_paterno,
            "apellido_materno": self.apellido_materno,
            "email": self.email,
            "telefono": self.telefono,
            "password": self.password,
            "direccion": self.direccion.to_dict(),
            "rut": self.rut,
            "asignatura": self.asignatura.to_dict(),
            "imagen": self.imagen
        }

    def encrypt_password(self, password_to_encrypt):
        self.password = generate_password_hash(password_to_encrypt)

    def check_password(self, password_to_check):
        print(check_password_hash(self.password, str(password_to_check)))
        return check_password_hash(self.password, str(password_to_check))

    @classmethod
    def get_by_email_or_username(cls, email_or_usernmane):
        text_id = email_or_usernmane.lower()
        if '@' in text_id:
            return cls.objects.filter(email=text_id).first()
        return cls.objects.filter(username=text_id).first()

    @classmethod
    def get_by_id(cls, user_id):
        return cls.objects(id=user_id).first()

    # token alive 10 hours
    def get_token(self, seconds_live=36000):
        token = Serializer(current_app.config.get("TOKEN_KEY"),
                           expires_in=seconds_live)
        return str(token.dumps({'id': str(self.id)}))

    @classmethod
    def load_from_token(cls, token):
        s = Serializer(current_app.config.get("TOKEN_KEY"))
        if token[0:2] == "b'" and token[-1:] == "'":
            token = token[2:-1]
        try:
            data = s.loads(token)
            return cls.get_by_id(data['id'])
        except SignatureExpired:
            # the token has ben expired
            return None
        except BadSignature:
            # the token ist'n valid
            return None
        return None

    @classmethod
    def create_provisional_pass(cls, user_mail, provisional_pass):
        admin = cls.get_by_email_or_username(user_mail)
        admin.password_provisoria = provisional_pass
        admin.save()
        return 'hecho'
Ejemplo n.º 24
0
class Apoderado(gj.Document):
    nombres = db.StringField()
    apellido_paterno = db.StringField(max_length=20)
    apellido_materno = db.StringField(max_length=20)
    email = db.EmailField()
    telefono = db.StringField(max_length=12)
    password = db.StringField()
    password_provisoria = db.StringField(default="no disponible")
    direccion = db.EmbeddedDocumentField(Direccion)
    rut = db.StringField(max_length=10)
    alumno = db.ReferenceField(Alumno)
    imagen = db.StringField()
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombres

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombres": self.nombres,
            "apellido_paterno": self.apellido_paterno,
            "apellido_materno": self.apellido_materno,
            "email": self.email,
            "telefono": self.telefono,
            "direccion": self.direccion.to_dict(),
            "rut": self.rut,
            "alumno": self.alumno.to_dict(),
            "imagen": self.imagen
        }

    def encrypt_password(self, password_to_encrypt):
        self.password = generate_password_hash(password_to_encrypt)

    def check_password(self, password_to_check):
        print(check_password_hash(self.password, str(password_to_check)))
        return check_password_hash(self.password, str(password_to_check))

    @classmethod
    def get_by_email_or_username(cls, email_or_usernmane):
        text_id = email_or_usernmane.lower()
        if '@' in text_id:
            return cls.objects.filter(email=text_id).first()
        return cls.objects.filter(username=text_id).first()

    @classmethod
    def get_by_id(cls, user_id):
        return cls.objects(id=user_id).first()
    # token alive 10 hours

    def get_token(self, seconds_live=36000):
        token = Serializer(current_app.config.get("TOKEN_KEY"),
                           expires_in=seconds_live)
        return str(token.dumps({'id': str(self.id)}))

    @classmethod
    def load_from_token(cls, token):
        s = Serializer(current_app.config.get("TOKEN_KEY"))
        if token[0:2] == "b'" and token[-1:] == "'":
            token = token[2:-1]
        try:
            data = s.loads(token)
            return cls.get_by_id(data['id'])
        except SignatureExpired:
            # the token has ben expired
            return None
        except BadSignature:
            # the token ist'n valid
            return None
        return None

    @classmethod
    def create_layout_excel(cls):
        headers = ["RUT", "Nombres", "Apellido Paterno", "Apellido Materno", "Email",
                   "Telefono", "Calle", "Numero", "Comuna", "Villa/Depto", "RUN Alumno"]
        result_list = [Alumno.export_to_excel()]
        return create_excel(result_list, headers, "Formato_apoderados")

    # TODO: validar que el rut del alumno sea valido, el rut apoderado y correo con formato correo
    @classmethod
    def create_from_excel(cls, list_rows):
        error_list = [["RUT", "Nombres", "Apellido Paterno", "Apellido Materno", "Email",
                       "Telefono", "Calle", "Numero", "Comuna", "Villa/Depto", "RUN Alumno", "Error"]]
        for apoderado in list_rows:
            apoderado = list(apoderado)
            print(apoderado)
            rut = str(apoderado[0])
            if(rut != "None" and validar_rut(rut)):

                rut_alumno = str(apoderado[10])
                if(rut_alumno != "None" and validar_rut(rut_alumno)):
                    alumno = Alumno.objects(rut=str(rut_alumno)).first()
                    if(alumno == None):
                        apoderado.append("Alumno no existe")
                        error_list.append(apoderado)
                        continue
                else:
                    apoderado.append("RUT del alumno no es valido")
                    error_list.append(apoderado)
                    continue

                if(apoderado[4] == "None" or not(es_correo_valido(apoderado[4]))):
                    apoderado.append("Correo ingresado no es valido")
                    error_list.append(apoderado)
                    continue

                direccion = Direccion(calle=apoderado[6], numero=str(
                    apoderado[7]), comuna=apoderado[8], cas_dep_of=apoderado[9])
                apoderadoNuevo = Apoderado(rut=str(apoderado[0]),
                                           nombres=apoderado[1],
                                           apellido_paterno=apoderado[2],
                                           apellido_materno=apoderado[3],
                                           email=apoderado[4],
                                           telefono=str(apoderado[5]),
                                           direccion=direccion, alumno=alumno, imagen="default")
                apoderadoNuevo.encrypt_password(str(apoderado[0]))
                apoderadoNuevo.save()
            else:
                apoderado.append("RUT invalido")
                error_list.append(apoderado)
        if(len(error_list) > 1):
            return write_error(error_list, "errores")
        return "hecho"

    @classmethod
    def create_provisional_pass(cls, user_mail, provisional_pass):
        admin = cls.get_by_email_or_username(user_mail)
        admin.password_provisoria = provisional_pass
        admin.save()
        return 'hecho'
Ejemplo n.º 25
0
class Alumno(gj.Document):
    nombres = db.StringField()
    apellido_paterno = db.StringField(max_length=20)
    apellido_materno = db.StringField(max_length=20)
    email = db.EmailField()
    telefono = db.StringField()
    password = db.StringField()
    password_provisoria = db.StringField(default="no disponible")
    direccion = db.EmbeddedDocumentField(Direccion)
    colegio = db.ReferenceField(Colegio)
    rut = db.StringField()
    sexo = db.StringField(choices=TIPOS_SEXOS)
    puntaje_ingreso = db.IntField()
    curso = db.ReferenceField(Curso)
    imagen = db.StringField()
    activo = db.BooleanField(default=True)
    meta = {'strict': False}

    def __str__(self):
        return self.nombres

    def to_dict(self):
        return {
            "id": str(self.id),
            "nombres": self.nombres,
            "apellido_paterno": self.apellido_paterno,
            "apellido_materno": self.apellido_materno,
            "email": self.email,
            "telefono": self.telefono,
            "colegio": self.colegio.to_dict(),
            "direccion": self.direccion.to_dict(),
            "sexo": self.sexo,
            "puntaje_ingreso": self.puntaje_ingreso,
            "curso": self.curso.to_dict(),
            "rut": self.rut,
            "imagen": self.imagen
        }

    def to_excel(self):
        return [
            self.rut, self.nombres, self.apellido_paterno,
            self.apellido_materno
        ]

    def encrypt_password(self, password_to_encrypt):
        self.password = generate_password_hash(password_to_encrypt)

    def check_password(self, password_to_check):
        print(check_password_hash(self.password, str(password_to_check)))
        return check_password_hash(self.password, str(password_to_check))

    @classmethod
    def get_by_email_or_username(cls, email_or_usernmane):
        text_id = email_or_usernmane.lower()
        if '@' in text_id:
            return cls.objects.filter(email=text_id).first()
        return cls.objects.filter(username=text_id).first()

    @classmethod
    def get_by_id(cls, user_id):
        return cls.objects(id=user_id).first()

    # token alive 10 hours

    def get_token(self, seconds_live=36000):
        token = Serializer(current_app.config.get("TOKEN_KEY"),
                           expires_in=seconds_live)
        return str(token.dumps({'id': str(self.id)}))

    @classmethod
    def load_from_token(cls, token):
        s = Serializer(current_app.config.get("TOKEN_KEY"))
        if token[0:2] == "b'" and token[-1:] == "'":
            token = token[2:-1]
        try:
            data = s.loads(token)
            return cls.get_by_id(data['id'])
        except SignatureExpired:
            # the token has ben expired
            return None
        except BadSignature:
            # the token ist'n valid
            return None
        return None

    @classmethod
    # TODO: validar que vengan los id foraneos, el rut y correo con formato correo
    def create_from_excel(cls, list_rows):
        error_list = [[
            "RUN", "Nombres", "Apellido Paterno", "Apellido Materno",
            "Puntaje Ingreso", "Sexo", "Email", "Telefono", "Calle", "Numero",
            "Comuna", "Villa/Depto", "Id. Curso", "Id. Colegio", "Error"
        ]]
        for alumno in list_rows:
            alumno = list(alumno)
            rut = str(alumno[0])
            if (rut != "None" and validar_rut(rut)):
                try:
                    curso = Curso.objects(id=alumno[12]).first()
                    if (curso == None):
                        alumno.append("Curso no existe")
                        error_list.append(alumno)
                        continue
                except:
                    alumno.append("Id de curso no es valido")
                    error_list.append(alumno)
                    continue

                try:
                    colegio = Colegio.objects(id=alumno[13]).first()
                    if (colegio == None):
                        alumno.append("Colegio no existe")
                        error_list.append(alumno)
                        continue
                except:
                    alumno.append("Id de colegio no es valido")
                    error_list.append(alumno)
                    continue

                if (alumno[5] == "None"
                        or not (alumno[5] in TIPOS_SEXOS_ARRAY)):
                    alumno.append("Sexo ingresado no es valido")
                    error_list.append(alumno)
                    continue
                if (alumno[6] == "None" or not (es_correo_valido(alumno[6]))):
                    alumno.append("Correo ingresado no es valido")
                    error_list.append(alumno)
                    continue

                direccion = Direccion(calle=alumno[8],
                                      numero=str(alumno[9]),
                                      comuna=alumno[10],
                                      cas_dep_of=alumno[11])
                alumnoNuevo = Alumno(rut=str(alumno[0]),
                                     nombres=alumno[1],
                                     apellido_paterno=alumno[2],
                                     apellido_materno=alumno[3],
                                     sexo=alumno[5],
                                     email=alumno[6],
                                     telefono=str(alumno[7]),
                                     direccion=direccion,
                                     colegio=colegio,
                                     curso=curso,
                                     imagen="default")
                alumnoNuevo.encrypt_password(str(alumno[0]))
                if (alumno[4] != None and alumno[4] != ""):
                    alumnoNuevo.puntaje_ingreso = alumno[4]
                else:
                    alumnoNuevo.puntaje_ingreso = 0
                alumnoNuevo.save()
            else:
                alumno.append("RUT invalido")
                error_list.append(alumno)
        if (len(error_list) > 1):
            return write_error(error_list, "errores")
        return "hecho"

    @classmethod
    def create_layout_excel(cls):
        headers = [
            "RUN", "Nombres", "Apellido Paterno", "Apellido Materno",
            "Puntaje Ingreso", "Sexo (MASCULINO/FEMENINO/NO DEFINIDO)",
            "Email", "Telefono", "Calle", "Numero", "Comuna", "Villa/Depto",
            "Id. Curso", "Id. Colegio"
        ]
        result_list = [Colegio.export_to_excel(), Curso.export_to_excel()]
        return create_excel(result_list, headers, "Formato_alumnos")

    @classmethod
    def export_to_excel(cls):
        alumnos = Alumno.objects().all()
        result_list_alumnos = [[
            "RUN", "Nombres", "Apellido Paterno", "Apellido Materno"
        ]]
        for alumno in alumnos:
            result_list_alumnos.append(alumno.to_excel())
        return result_list_alumnos

    @classmethod
    def create_provisional_pass(cls, user_mail, provisional_pass):
        admin = cls.get_by_email_or_username(user_mail)
        admin.password_provisoria = provisional_pass
        admin.save()
        return 'hecho'