Пример #1
0
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)
Пример #2
0
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()
Пример #3
0
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()
Пример #4
0
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} ========================================================='
    )
Пример #5
0
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)
Пример #6
0
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()
Пример #7
0
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
Пример #8
0
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()
Пример #9
0
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()
Пример #10
0
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')
Пример #11
0
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)
Пример #12
0
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')
Пример #13
0
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()
Пример #14
0
def cria_pessoas():
    for i in range(5000):
        cria_pessoa(i)
        if i % 5000 == 0:
            db.commit()
    db.commit()
Пример #15
0
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()
Пример #16
0
def alterar_senha(user, credenciais):
    valida_credenciais(user, credenciais)
    user.login.senha = credenciais['senhaNova']
    db.commit()
Пример #17
0
def cadastrar_partido(dados):
    partido = mf.cria_partido(dados)
    validar_partido(partido)
    if partido.id_partido is None:
        db.create(partido)
    db.commit()
Пример #18
0
def insere_termino_apuracao(id_turno):
    apuracao = db.apuracao_by_id_turno(id_turno)
    apuracao.termino_apuracao = datetime.now()
    db.commit()
Пример #19
0
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()
Пример #20
0
def confirmar_eleicao(id_eleicao):
    eleicao = db.find_eleicao(id_eleicao)
    eleicao.confirmada = True
    db.commit()