示例#1
0
def valida_apuracao(id_turno):
    turno = db.find_turno(id_turno)
    if [a for a in turno.apuracoes if a.termino_apuracao is None]:
        msg = 'Esta eleição já está sendo apurada!'
        raise ValidationException(msg, [msg])
    if turno.termino > datetime.now():
        msg = 'A apuração só pode ser feita após o término da votação!'
        raise ValidationException(msg, [msg])
示例#2
0
def valida_credenciais(usuario, senha, id_eleitor, pin):
    login = db.find_login(usuario, senha)
    if login is None:
        msg = 'Credenciais incorretas'
        raise ValidationException(msg, [msg])
    pin_valido = db.busca_pin_valido_por_id_eleitor(id_eleitor)
    if pin_valido is None or pin_valido != pin:
        raise ValidationException('Credenciais incorretas',
                                  ['Credenciais incorretas'])
示例#3
0
def validar_coligacao(coligacao):
    errors = []
    if coligacao.nome is None:
        errors.append("O nome da coligação é obrigatório")
    if coligacao.id_eleicao is None:
        errors.append("A coligação deve estar vinculada a uma eleição")
    if errors:
        raise ValidationException('Erros de validação', errors)
示例#4
0
def valida_credenciais(user, credenciais):
    msg = None
    if credenciais['senhaNova'] != credenciais['confirmacaoSenhaNova']:
        msg = 'A senha nova e a confirmação da senha nova devem ser iguais'
    elif user.login.usuario != credenciais['usuario'] or user.login.senha != credenciais['senha']:
        msg = 'Credenciais incorretas'
    if msg is not None:
        raise ValidationException(msg, [msg])
示例#5
0
def validar_eleicao(eleicao):
    errors = []
    if eleicao.titulo is None:
        errors.append("O título é obrigatório")
    for turno in eleicao.turnos:
        validar_turno(turno, errors)
    if len(errors) > 0:
        raise ValidationException('Erros de validação', errors)
示例#6
0
def valida_usuario_votou_e_retorna_turno_aberto(id_eleicao, user):
    id_turno = consulta_turno_aberto_por_eleicao(id_eleicao)

    if id_turno is None:
        msg = 'Não há nenhum turno em andamento para esta eleição'
        raise ValidationException(msg, [msg])
    sql_votou = 'SELECT EXISTS(SELECT 1 FROM eleitor_turno ' \
                '              WHERE id_eleitor = :idEleitor ' \
                '              AND id_turno = :idTurno) AS votou'
    votou = db.native(sql_votou, {
        'idTurno': id_turno,
        'idEleitor': user.eleitor.id_eleitor
    }).first()['votou']

    if votou:
        msg = 'Voce já votou nesta eleição'
        raise ValidationException(msg, [msg])
    return id_turno
示例#7
0
def validar_partido(partido):
    errors = []
    if partido.numero_partido is None:
        errors.append("O número do partido é obrigatório")
    if partido.sigla is None:
        errors.append("A sigla do partido é obrigatória")
    if partido.nome is None:
        errors.append("O nome do partido é obrigatório")
    if errors:
        raise ValidationException('Erros de validação', errors)
示例#8
0
def verifica_pessoa_ja_candidatada(id_pessoa, id_eleicao, nome):
    eleicoes = db.query(Candidato)\
                 .join(Candidato.turnoCargoRegiao)\
                 .join(TurnoCargoRegiao.turnoCargo)\
                 .join(TurnoCargo.turno)\
                 .filter(Candidato.id_pessoa == id_pessoa)\
                 .filter(Turno.id_eleicao == id_eleicao)\
                 .all()
    if eleicoes:
        raise ValidationException(f'{nome} já se candidatou nesta eleição',
                                  [f'{nome} já se candidatou nesta eleição'])
示例#9
0
def validar_candidato(candidato):
    errors = []
    if candidato.id_partido is None:
        errors.append("O partido é obrigatório")
    if candidato.id_turno_cargo_regiao is None:
        errors.append("O cargo é obrigatório")
    if candidato.id_pessoa is None:
        errors.append("É necessário selecionar uma pessoa")
    valida_numero_candidato(candidato, errors)

    if errors:
        raise ValidationException('Erros de validação', errors)
示例#10
0
def validar(entidade):
    errors = []
    if type(entidade) == Cargo:
        validar_cargo(entidade, errors)
    elif type(entidade) == Eleitor:
        validar_eleitor(entidade, errors)
    elif type(entidade) == Login:
        validar_login(entidade, errors)
    elif type(entidade) == VotoEncriptado:
        validar_voto(entidade, errors)

    if len(errors) > 0:
        raise ValidationException('Erros de validação', errors)
示例#11
0
def validar_pessoa(pessoa):
    errors = []
    if pessoa.nome is None or pessoa.nome == '':
        errors.append('O nome é obrigatório')
    if pessoa.cpf is None or pessoa.cpf == '':
        errors.append('O CPF é obrigatório')
    if pessoa.login.usuario is None:
        errors.append('O usuário é obrigatório')
    else:
        validar_eleitor(pessoa.eleitor, errors)

    if errors:
        raise ValidationException('Erros de validação', errors)
示例#12
0
def cria_voto_encriptado(dados, id_cidade, id_eleitor):
    voto = VotoEncriptado()
    if 'idCandidato' in dados:
        voto.id_candidato = dados['idCandidato']
    if 'idPartido' in dados:
        voto.id_partido = dados['idPartido']
    if 'idCandidato' not in dados and 'idPartido' not in dados:
        msg = 'É necessário informar um candidato ou um partido'
        raise ValidationException(msg, [msg])
    voto.id_eleitor = id_eleitor
    voto.id_turno_cargo_regiao = dados['idTurnoCargoRegiao']
    voto.id_cidade = id_cidade

    return voto
示例#13
0
def verifica_integridade_votos(id_turno):
    sql = '''SELECT COUNT(*) FROM (
                        SELECT DISTINCT id_eleitor FROM (SELECT id_eleitor, id_candidato, id_turno_cargo_regiao 
                                                         FROM voto_encriptado 
                                                         ORDER BY id_eleitor, id_turno_cargo_regiao) ve
             WHERE ve.id_turno_cargo_regiao IN(SELECT id_turno_cargo_regiao
                                            FROM turno_cargo_regiao
                                            JOIN turno_cargo tc ON turno_cargo_regiao.id_turno_cargo = tc.id_turno_cargo
                                            WHERE tc.id_turno = :idTurno)
             GROUP BY ve.id_eleitor
             HAVING md5(string_agg(ve.id_candidato, '')) NOT IN (SELECT et.hash FROM eleitor_turno et)) 
             AS votos_alterados'''

    votos_alterados = db.native(sql, {'idTurno': id_turno}).first()[0]
    if votos_alterados > 0:
        msg = f'{votos_alterados} votos desta eleição foram alterados!'
        raise ValidationException(msg, [msg])