def salvar(dados): eleicao = mf.cria_eleicao(dados) validar_eleicao(eleicao) if eleicao.id_eleicao is None: db.create(eleicao) db.commit() return str(eleicao.id_eleicao)
def verifica_eleito_maioria_simples(tcr, segundo_turno, id_apuracao): candidatos = [ c for c in tcr.candidatos if c.id_candidato_principal is None ] candidatos.sort(key=lambda c: c.qt_votos, reverse=True) if tcr.possui_segundo_turno and candidatos: sql_total_votos = '''SELECT count(*) FROM voto_apurado WHERE id_turno_cargo_regiao = :idTurnoCargoRegiao AND id_apuracao = :idApuracao AND id_candidato IS NOT NULL''' total_votos = db.native( sql_total_votos, { 'idTurnoCargoRegiao': tcr.id_turno_cargo_regiao, 'idApuracao': id_apuracao }).first()[0] if candidatos[0].qt_votos > (int(total_votos / 2)): candidatos[0].situacao = 'Eleito' else: candidatos[0].situacao = 'Segundo Turno' candidatos[1].situacao = 'Segundo Turno' adiciona_turno_cargo_regiao_segundo_turno(tcr, candidatos[:2], segundo_turno) elif candidatos: for i in range(tcr.qtd_cadeiras): candidatos[i].situacao = 'Eleito' db.commit()
def verifica_remover_segundo_turno(id_turno): turno = db.find_turno(id_turno) if turno.turno == 1: segundo_turno = db.segundo_turno_by_id_eleicao(turno.id_eleicao) if segundo_turno is not None: db.delete(segundo_turno) db.commit()
def apurar_votos(tcr, id_apuracao): print( f'Iniciada apuração: {tcr.turnoCargo.cargo.nome} ===========================================================' ) votos = db.query(VotoEncriptado)\ .filter(VotoEncriptado.id_turno_cargo_regiao == tcr.id_turno_cargo_regiao)\ .all() for voto_enc in votos: voto = mf.cria_voto(voto_enc, id_apuracao) db.create(voto) db.commit() sql = '''UPDATE candidato c SET qt_votos = (SELECT count(*) FROM voto_apurado va WHERE id_turno_cargo_regiao = :idTurnoCargoRegiao AND id_apuracao = :idApuracao AND va.id_candidato = c.id_candidato) WHERE c.id_turno_cargo_regiao = :idTurnoCargoRegiao''' db.native(sql, { 'idTurnoCargoRegiao': tcr.id_turno_cargo_regiao, 'idApuracao': id_apuracao }) db.commit() print( f'Finalizada apuração: {tcr.turnoCargo.cargo.nome} =========================================================' )
def cadastrar_coligacao(dados): coligacao = mf.cria_coligacao(dados) validar_coligacao(coligacao) if coligacao.id_coligacao is None: db.create(coligacao) db.commit() return str(coligacao.id_coligacao)
def cria_segundo_turno(id_eleicao, segundo_turno): turno = Turno() turno.id_eleicao = id_eleicao turno.turno = 2 cria_turno_cargo(turno, segundo_turno) db.create(turno) db.commit()
def insere_apuracao(turno): apuracao = Apuracao() apuracao.id_turno = turno.id_turno apuracao.inicio_apuracao = str(datetime.now()) db.create(apuracao) db.commit() return apuracao.id_apuracao
def votar(user, id_eleicao, votos): valida_credenciais(votos['usuario'], votos['senha'], user.eleitor.id_eleitor, votos['pin']) id_eleitor = c.enc(user.eleitor.id_eleitor) id_turno = valida_usuario_votou_e_retorna_turno_aberto(id_eleicao, user) id_cidade = user.eleitor.id_cidade for voto in votos['votos']: voto_enc = mf.cria_voto_encriptado(voto, id_cidade, id_eleitor) db.create(voto_enc) criar_hash_voto(user, votos['votos'], id_turno) db.commit()
def setar_candidatos_eleitos_representacao_proporcional(id_tcr, partidos): for partido in partidos: candidatos = db.query(Candidato)\ .filter(Candidato.id_turno_cargo_regiao == id_tcr)\ .filter(Candidato.id_partido == partido.id_partido)\ .order_by(desc(Candidato.qt_votos))\ .limit(partido.cadeiras)\ .all() for candidato in candidatos: candidato.situacao = 'Eleito' db.commit()
def gerar_pin(user): if db.busca_pin_valido_por_id_eleitor(user.eleitor.id_eleitor) is None: pin = PinEleitor() pin.id_eleitor = user.eleitor.id_eleitor user_pin = senha_util.generate_pin() pin.pin = senha_util.encrypt_md5(user_pin) pin.criacao = datetime.now() db.create(pin) db.commit() msg = f'Seu código para votar é: {user_pin} \nO código é válido por apenas 5 minutos!' email_util.enviar_email(user.email, msg, 'Código para votação')
def salvar_pessoa(dados): pessoa, senha = mf.cria_pessoa(dados) validar_pessoa(pessoa) if pessoa.id_pessoa is None: db.create(pessoa) db.commit() if senha is not None: corpo_email = f'Parabéns! Agora você pode votar pela internet com as credenciais abaixo:.\n'\ f'Usuário: {pessoa.eleitor.numero_inscricao}\n'\ f'Senha: {senha}\n\n' \ f'Sugerimos que você troque a senha ao entrar.' email_util.enviar_email(pessoa.email, corpo_email, 'Cadastro no Sistema de Votação Online') return str(pessoa.id_pessoa)
def cria_candidatos(id_tcr, qt): for i in range(qt): print(f'Criando candidato {i}') candidato = Candidato() candidato.id_pessoa = randint(100, 5002) partido = db.find_partido(randint(1, 18)) candidato.numero = int(str(partido.numero_partido) + numero_aleatorio(2)) candidato.id_partido = partido.id_partido candidato.id_turno_cargo_regiao = id_tcr db.create(candidato) if i % 500 == 0: print(f'Commitando') db.commit() print(f'Commitado') print(f'Commitando') db.commit() print(f'Commitado')
def cadastrar(candidato_json): candidato = mf.cria_candidato(candidato_json) validar_candidato(candidato) verifica_pessoa_ja_candidatada(candidato.id_pessoa, int(candidato_json['idEleicao']), candidato_json['pessoa']['nome']) if candidato.id_candidato is None: db.create(candidato) if 'viceCandidato' in candidato_json: vice = mf.cria_candidato(candidato_json['viceCandidato']) vice.id_turno_cargo_regiao = candidato.id_turno_cargo_regiao candidato.vice = vice validar_candidato(vice) verifica_pessoa_ja_candidatada( vice.id_pessoa, int(candidato_json['idEleicao']), candidato_json['viceCandidato']['pessoa']['nome']) if vice.id_candidato is None: db.create(vice) db.commit()
def cria_pessoas(): for i in range(5000): cria_pessoa(i) if i % 5000 == 0: db.commit() db.commit()
def cria_votos(id_eleitores, id_turno): for id_eleitor in id_eleitores: hash_voto = '' print(f'Voto de {id_eleitor}') cands = [-1, 23, 25, 27, 29] shuffle(cands) if cands[0] != -1: cand = db.query(Candidato).get(cands[0]) id_candidato = c.enc(cand.id_candidato) id_partido = c.enc(cand.id_partido) else: id_candidato = c.enc(-1) id_partido = c.enc(-1) id_eleitor_enc = c.enc(id_eleitor) id_turno_cargo_regiao = 9 id_cidade = 1 hash_voto += str(id_candidato) sql = 'INSERT INTO voto_encriptado(id_turno_cargo_regiao, id_cidade, id_candidato, id_partido, id_eleitor)' \ 'VALUES(:idTurnoCargoRegiao, :idCidade, :idCandidato, :idPartido, :idEleitor)' db.native(sql, {'idTurnoCargoRegiao': id_turno_cargo_regiao, 'idCidade': id_cidade, 'idCandidato': id_candidato, 'idPartido': id_partido, 'idEleitor': id_eleitor_enc}) cands = [-1, 31, 33, 35] shuffle(cands) if cands[0] != -1: cand = db.query(Candidato).get(cands[0]) id_candidato = c.enc(cand.id_candidato) id_partido = c.enc(cand.id_partido) else: id_candidato = c.enc(-1) id_partido = c.enc(-1) id_turno_cargo_regiao = 10 id_cidade = 1 hash_voto += str(id_candidato) sql = 'INSERT INTO voto_encriptado(id_turno_cargo_regiao, id_cidade, id_candidato, id_partido, id_eleitor)' \ 'VALUES(:idTurnoCargoRegiao, :idCidade, :idCandidato, :idPartido, :idEleitor)' db.native(sql, {'idTurnoCargoRegiao': id_turno_cargo_regiao, 'idCidade': id_cidade, 'idCandidato': id_candidato, 'idPartido': id_partido, 'idEleitor': id_eleitor_enc}) cand = randint(43, 142) cand = cand if bool(randint(0, 1)) else -1 if cand != -1: cand = db.query(Candidato).get(cand) id_candidato = c.enc(cand.id_candidato) id_partido = c.enc(cand.id_partido) else: id_candidato = c.enc(-1) id_partido = c.enc(-1) id_turno_cargo_regiao = 12 id_cidade = 1 hash_voto += str(id_candidato) sql = 'INSERT INTO voto_encriptado(id_turno_cargo_regiao, id_cidade, id_candidato, id_partido, id_eleitor)' \ 'VALUES(:idTurnoCargoRegiao, :idCidade, :idCandidato, :idPartido, :idEleitor)' db.native(sql, {'idTurnoCargoRegiao': id_turno_cargo_regiao, 'idCidade': id_cidade, 'idCandidato': id_candidato, 'idPartido': id_partido, 'idEleitor': id_eleitor_enc}) insert_eleitor_turno(id_eleitor, id_turno, senha_util.encrypt_md5(hash_voto)) db.commit()
def alterar_senha(user, credenciais): valida_credenciais(user, credenciais) user.login.senha = credenciais['senhaNova'] db.commit()
def cadastrar_partido(dados): partido = mf.cria_partido(dados) validar_partido(partido) if partido.id_partido is None: db.create(partido) db.commit()
def insere_termino_apuracao(id_turno): apuracao = db.apuracao_by_id_turno(id_turno) apuracao.termino_apuracao = datetime.now() db.commit()
def remove_status_eleito(tcr): sql = """UPDATE candidato SET situacao = 'Não Eleito' WHERE id_turno_cargo_regiao = :idTcr""" db.native(sql, {'idTcr': tcr.id_turno_cargo_regiao}) db.commit()
def confirmar_eleicao(id_eleicao): eleicao = db.find_eleicao(id_eleicao) eleicao.confirmada = True db.commit()