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])
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'])
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)
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])
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)
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
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)
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'])
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)
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)
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)
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
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])