def pasos_procesos(request):
    args = PostParametersList(request)
    args.check_parameter(key='proceso', required=True)
    args = args.__dict__()
    pasos = Paso.objects.filter(proceso_id=args['proceso']).values()
    pasos = [dict(p) for p in pasos]
    return JsonResponse(pasos, safe=False)
def get_pasos_tramites(request):
    args = PostParametersList(request)
    args.check_parameter(key='id', required=True)
    args = args.__dict__()
    tra = Paso.objects.filter(
        proceso_id=args['id']).order_by('numero').values()
    tra = [dict(t) for t in tra]
    return JsonResponse(tra, safe=False)
def delete_letter_template(request):
    args = PostParametersList(request)
    args.check_parameter(key='cartas', required=True, is_json=True)
    print(args['cartas'])
    for p in args['cartas']:
        try:
            carta = Carta.objects.get(id=p['id'])
            carta.delete()
        except IntegrityError:
            raise APIExceptions.PermissionDenied

    return JsonResponse(1, safe=False)
def eliminar_documentos(request):
    args = PostParametersList(request)
    args.check_parameter(key='documentos', required=True, is_json=True)
    print(args['documentos'])
    for p in args['documentos']:
        try:
            doc = Documento.objects.get(id=p['id'])
            doc.delete()
        except IntegrityError:
            raise APIExceptions.PermissionDenied

    return JsonResponse(1, safe=False)
예제 #5
0
def eliminar_administradores(request):
    args = PostParametersList(request)
    args.check_parameter(key='admin', required=True, is_json=True)
    print(args['admin'])
    for a in args['admin']:
        try:
            doc = Administrador.objects.get(id=a['id'])
            doc.delete()
        except IntegrityError:
            raise APIExceptions.PermissionDenied

    return JsonResponse(1, safe=False)
def eliminar_alumnos(request):
    args = PostParametersList(request)
    args.check_parameter(key='alumno', required=True, is_json=True)
    print(args['alumno'])
    for a in args['alumno']:
        try:
            doc = Alumno.objects.get(id=a['id'])
            user = Usuario.objects.get(id=doc.usuario_id)
            user.delete()
            doc.delete()
        except IntegrityError:
            raise exceptions.PermissionDenied(
                detail="No se pudo eliminar el alumno")

    return JsonResponse(1, safe=False)
def eliminar_administradores(request):
    args = PostParametersList(request)
    args.check_parameter(key='admin', required=True, is_json=True)
    print(args['admin'])
    for a in args['admin']:
        try:
            doc = Administrador.objects.get(id=a['id'])
            user = Usuario.objects.get(id=doc.usuario_id)
            user.delete()
            doc.delete()
        except IntegrityError:
            raise exceptions.PermissionDenied(
                detail=
                "No se puede eliminar el usuario. Puede ser que el usuario tengo documentos registrados."
            )

    return JsonResponse(1, safe=False)
def upload_students(request):
    args = PostParametersList(request)
    args.check_parameter(key='content', required=True)
    contenido = json.loads(args['content'])

    print(contenido['data'])

    alumnosJson = contenido['data']

    for alumno in alumnosJson:
        # Dando de alta información en la tabla de alumnos
        counter = Alumno.objects.filter(matricula=alumno['Matricula']).count()
        if counter == 0:
            # Crear nuevo usuario en la base de datos
            usuario = Usuario.objects.create(email=alumno['Email'],
                                             password=alumno['Contraseña'],
                                             is_staff=True,
                                             is_superuser=True,
                                             es_alumno=True)
            # Crear nuevo alumno en la base de datos
            Alumno.objects.create(
                nombre=alumno['Nombre'],
                usuario=usuario,
                matricula=alumno['Matricula'],
                siglas_carrera=alumno['Siglas Carrera'],
                carrera=alumno['Carrera'],
                semestre_en_progreso=alumno['Semestre en Progreso'],
                periodo_de_aceptacion=alumno['Periodo de Aceptacion'],
                posible_graduacion=alumno['Posible Graduacion'],
                fecha_de_nacimiento=alumno['Fecha de Nacimiento'],
                nacionalidad=alumno['Nacionalidad'])
        else:
            #Actualizar alumno existente
            alumno_db = Alumno.objects.filter(
                matricula=alumno['Matricula']).first()
            alumno_db.nombre = alumno['Nombre']
            alumno_db.siglas_carrera = alumno['Siglas Carrera']
            alumno_db.carrera = alumno['Carrera']
            alumno_db.semestre_en_progreso = alumno['Semestre en Progreso']
            alumno_db.periodo_de_aceptacion = alumno['Periodo de Aceptacion']
            alumno_db.posible_graduacion = alumno['Posible Graduacion']
            alumno_db.fecha_de_nacimiento = alumno['Fecha de Nacimiento']
            alumno_db.nacionalidad = alumno['Nacionalidad']
            alumno_db.save()

    return JsonResponse({'message': 'File uploaded successfully'})
def borrar_procesos(request):
    args = PostParametersList(request)
    args.check_parameter(key='procesos', required=True, is_json=True)

    print(args['procesos'])

    for p in args['procesos']:
        try:
            proc = Proceso.objects.get(id=p['id'])
            proc.delete()
        except IntegrityError:
            raise exceptions.PermissionDenied(
                detail="El proceso (" + str(p['id']) +
                ") no se puede eliminar porque hay documentos o trámites ligados a él."
            )

    return JsonResponse(1, safe=False)
def create_letter_template(request):

    # Validate body parameters
    args = PostParametersList(request)
    args.check_parameter(key='id_admin', required=True)
    args.check_parameter(key='descripcion', required=True)

    print(args['id_admin'])
    print(args['descripcion'])

    # Save file to templates
    uploadedFile = request.FILES['file']
    handle_uploaded_file(uploadedFile)

    args = args.__dict__()

    ts = datetime.now().timestamp()

    # Sumbmit created letter data to db
    carta = Carta.objects.create(creado_por=args['id_admin'],
                                 nombre=uploadedFile.name,
                                 descripcion=args['descripcion'],
                                 fecha_creacion=ts,
                                 fecha_modificacion=ts,
                                 modificado_por=args['id_admin'])

    return JsonResponse({'message': 'File uploaded successfully'})
예제 #11
0
def registro_administradores(request):
    args = PostParametersList(request)
    args.check_parameter(key='email', required=True)
    args.check_parameter(key='nombre', required=True)
    args = args.__dict__()
    user = Usuario.objects.create_admin(email=args['email'],
                                        password=12345678,
                                        nombre=args['nombre'])
    return JsonResponse(1, safe=False)
예제 #12
0
def request_restore(request):
    args = PostParametersList(request)
    args.check_parameter(key='email', required=True)
    url_data = PasswordToken.request_uid_token(args['email'])

    try:
        send_mail(
            'Restablece tu contraseña',
            'STTE ITESM',
            "",
            [args['email']],
            html_message='<a href="http://127.0.0.1:3000/restaurar/' +
            str(url_data.uid) + '/' + url_data.token +
            '">Haz click aquí para restablecer tu contraseña</a>',
            fail_silently=False,
        )
    except:
        raise APIExceptions.SendMailError

    return JsonResponse(1, safe=False)
예제 #13
0
def subir_documento(request):
    args = PostParametersList(request)
    args.check_parameter(key='filename', required=True)
    args.check_parameter(key='content', required=True)
    admin = Administrador.objects.get(usuario=request.user)
    doc = Documento.objects.create(nombre=args['filename'],
                                   contenido_subido=args['content'],
                                   admin=admin,
                                   proceso_id=args['proceso'])

    contenido = json.loads(args['content'])
    for c in contenido['data']:
        fecha_1 = datetime.strptime(c['fecha_apertura'], '%m/%d/%y %H:%M')
        fecha_2 = datetime.strptime(c['fecha_ultima'], '%m/%d/%y %H:%M')
        p_ok = -1
        p = 1
        while (('paso_' + str(p)) in c):
            if c['paso_' + str(p)] == 'ok':
                p_ok = p
            p = p + 1
        paso = None
        if p_ok != -1:
            paso = Paso.objects.filter(proceso_id=args['proceso'],
                                       numero=p_ok).first()

        tra = Tramitealumno.objects.create(matricula=c['matricula'],
                                           numero_ticket=c['ticket'],
                                           proceso_id=args['proceso'],
                                           fecha_inicio=fecha_1,
                                           fecha_ultima_actualizacion=fecha_2,
                                           paso_actual=paso)

    return JsonResponse(doc.id, safe=False)
예제 #14
0
def reset_password(request):
    args = PostParametersList(request)
    args.check_parameter(key='uid', required=True)
    args.check_parameter(key='token', required=True)
    args.check_parameter(key='password', required=True)
    check = PasswordToken.reset_password(args['uid'], args['token'],
                                         args['password'])

    if check:
        user = PasswordToken.validate_token(args['uid'], args['token'])
        return JsonResponse(1 if user and user.es_admin else 2, safe=False)
    else:
        raise APIExceptions.InvalidToken.set(
            detail="Reseteo de contraseña invalido")
def request_restore(request):
    args = PostParametersList(request)
    args.check_parameter(key='email', required=True)
    url_data = PasswordToken.request_uid_token(args['email'])

    try:

        html_message = loader.render_to_string(
            '../templates/mailTemplate.html', {
                'user_name': "",
                'subject': 'Restablecer contraseña',
                'token': url_data.uid + "/" + url_data.token
            })
        send_mail('Restablece tu contraseña',
                  'STTE ITESM',
                  "", [args['email']],
                  html_message=html_message,
                  fail_silently=False)
    except:
        raise APIExceptions.SendMailError

    return JsonResponse(1, safe=False)
def registro_administradores(request):
    args = PostParametersList(request)
    args.check_parameter(key='email', required=True)
    args.check_parameter(key='nombre', required=True)
    args = args.__dict__()
    try:
        user = Usuario.objects.create_admin(email=args['email'],
                                            password=12345678,
                                            nombre=args['nombre'])
    except IntegrityError as e:
        raise exceptions.PermissionDenied(detail="Email ya registrado")
    return JsonResponse(1, safe=False)
def validate_password_token(request):
    args = PostParametersList(request)
    args.check_parameter(key='uid', required=True)
    args.check_parameter(key='token', required=True)
    user = PasswordToken.validate_token(args['uid'], args['token'])

    if user is None:
        raise APIExceptions.InvalidUIdToken
    else:
        return JsonResponse(1, safe=False)
def registro_Alumnos(request):
    args = PostParametersList(request)
    args.check_parameter(key='email', required=True)
    args.check_parameter(key='password', required=True)
    args.check_parameter(key='nombre', required=True)
    args.check_parameter(key='apellido', required=True)
    args = args.__dict__()
    if not re.match(EMAIL_REGEX, args['email']):
        raise exceptions.PermissionDenied(detail="Email inválido")
    try:
        user = Usuario.objects.create_alumno(email=args['email'],
                                             password=args['password'],
                                             nombre=args['nombre'],
                                             apellido=args['apellido'])
    except IntegrityError as e:
        raise exceptions.PermissionDenied(detail="Email ya registrado")
    return JsonResponse(1, safe=False)
def subir_documento(request):
    args = PostParametersList(request)
    args.check_parameter(key='filename', required=True)
    args.check_parameter(key='content', required=True)
    admin = Administrador.objects.get(usuario=request.user)
    doc = Documento.objects.create(nombre=args['filename'],
                                   contenido_subido=args['content'],
                                   admin=admin,
                                   proceso_id=args['proceso'])

    contenido = json.loads(args['content'])

    print(contenido['data'])
    for c in contenido['data']:
        print(c)

        fecha_1 = now()
        fecha_2 = now()
        if c['fecha_apertura'] != None and c['fecha_apertura'] != "":
            try:
                fecha_1 = datetime.strptime(c['fecha_apertura'], '%d/%m/%y')
            except:
                raise exceptions.PermissionDenied(
                    "El formato de la fecha [ " + c['fecha_ultima'] +
                    " ] es inválido. El formato debe ser: D/M/A")
        if c['fecha_ultima'] != None and c['fecha_ultima'] != "":
            try:
                fecha_2 = datetime.strptime(c['fecha_ultima'], '%d/%m/%y')
            except:
                raise exceptions.PermissionDenied(
                    "El formato de la fecha [ " + c['fecha_ultima'] +
                    " ] es inválido. El formato debe ser: D/M/A")
        p_ok = 0
        p = 1
        while (('paso_' + str(p)) in c):
            if c['paso_' + str(p)] == 'ok':
                p_ok = p
            p = p + 1
        paso = None
        if p_ok != -1:
            paso = Paso.objects.filter(proceso_id=args['proceso'],
                                       numero=p_ok).first()
        else:
            paso = Paso.objects.filter(proceso_id=args['proceso'],
                                       numero=1).first()

        num_results = Tramitealumno.objects.filter(
            numero_ticket=c['ticket']).count()
        if num_results > 0:
            tra = Tramitealumno.objects.filter(
                numero_ticket=c['ticket']).first()
            tra.fecha_ultima_actualizacion = fecha_2
            tra.paso_actual = paso
            tra.numero_paso_actual = p_ok
            tra.save()
        else:
            tra = Tramitealumno.objects.create(
                matricula=c['matricula'],
                numero_ticket=c['ticket'],
                proceso_id=args['proceso'],
                fecha_inicio=fecha_1,
                fecha_ultima_actualizacion=fecha_2,
                paso_actual=paso,
                numero_paso_actual=p_ok)

    return JsonResponse(doc.id, safe=False)
def agregar_proceso(request):
    args = PostParametersList(request)
    args.check_parameter(key='nombre', required=True)
    args.check_parameter(key='ticket', required=True, is_json=True)
    args.check_parameter(key='fecha_apertura', required=True, is_json=True)
    args.check_parameter(key='ultima_actualizacion',
                         required=True,
                         is_json=True)
    args.check_parameter(key='matricula', required=True, is_json=True)
    args.check_parameter(key='pasos', required=True, is_json=True)
    print(args['matricula'])

    proc = Proceso.objects.create(
        nombre=args['nombre'],
        columna_matricula=args['matricula']['key'],
        columna_ticket=args['ticket']['key'],
        columna_fecha_ultima_actualizacion=args['ultima_actualizacion']['key'],
        columna_fecha_inicio=args['fecha_apertura']['key'])

    for p in args['pasos']:
        print(p)
        p = Paso.objects.create(proceso=proc,
                                nombre=p['nombre'],
                                columna_csv=p['columna_csv'],
                                nombre_mostrar=p['nombre_mostrar'],
                                mostrar=p['mostrar'],
                                numero=p['numero'])

    return JsonResponse(1, safe=False)
예제 #21
0
def verify_post_params(request, keys, is_json=False):
    args = PostParametersList(request)
    for key_name in keys:
        args.check_parameter(key=key_name, required=True, is_json=is_json)
    return args