<commit_before># -*- coding: utf-8 -*-

import model_mysql
import wx
import threading
import time
import datetime
import os
from wx.lib.pubsub import Publisher
import md5
import csv

class Comunica_Arduino(threading.Thread):
    def __init__(self):
        super(Comunica_Arduino, self).__init__()
        import serial
        try:
            self.ser = serial.Serial('/dev/ttyUSB0', 9600)
        except:
            print "Arduino não conectado"
        Publisher().subscribe(self.mandar_Dados, "evento_enviar_dados_arduino")

        self.start()

    def run(self):
         while True:
             wx.CallAfter(Publisher().sendMessage, "evento_chegaram_dados_arduino", self.obter_Dados())

    def obter_Dados(self):
        time.sleep(1)
        try:
            return self.ser.readline()
        except:
            return "Falha ao obter dados do arduino"

    def mandar_Dados(self,dados):
        try:
            self.ser.write(dados.data)
        except:
            return "Falha ao obter mandar dados para o arduino"

def criptografar_Senha(senha):
    m = md5.new()
    for i in range(32):
        m.update(senha)
    return m.hexdigest()

def verifica_Senha_Adm(db,senha):
    temp_senha = db.obter_Configuracoes("adm_senha")
    if temp_senha[2] == criptografar_Senha(senha):
        return True
    else:
        return False

def alterar_Senha_Adm(db,senha):
    db.atualizar_Configuracoes("adm_senha",criptografar_Senha(senha))
    
def dia_Semana_Int2str(num,completo=False):
    dias=['Dom','Seg','Ter','Qua','Qui','Sex','Sab']
    dias2=['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sabado']
    if completo==True:
        return dias2[num-1]
    return dias[num-1]

def edita_Funcionario(db,dados):
    if dados['nome']==None and dados['matricula']==None and dados['rfid']==None:
        return
    db.atualizar_Funcionario(dados['id'], nome=dados['nome'], matricula=dados['matricula'], rfid=dados['rfid'])

def detalha_Funcionario(db,nome=None,id_funcionario=None):
    if (nome or id_funcionario) == None:
        return None
    id_func=None
    dados={}
    if nome != None:
        id_func=db.obter_Id_Funcionario_por_Nome(nome)
    else:
        id_func=id_funcionario
    dados['id'],dados['nome'],dados['matricula'],dados['rfid'],dados['ativo']=db.obter_Dados_Funcionario(id_func)
    dados['horarios']=[]
    temp_horarios=db.buscar_Horarios_de_Funcionario(id_func)
    if temp_horarios:
        for horario in temp_horarios:
            dados['horarios'].append({"dia_semana":horario[2],"hora_inicial":str(horario[3].seconds/60/60).zfill(2)+':'+str(horario[3].seconds/60%60).zfill(2),"hora_final":(str(horario[4].seconds/60/60).zfill(2)+':'+str(horario[4].seconds/60%60).zfill(2))})
    return dados

def validar_Criacao_Funcionario(db,dados):
    return db.verifica_Ja_Existe(nome=dados['nome'],matricula=dados['matricula'],rfid=dados['rfid'])

def cadastrar_Funcionario(db,dados):
    db.criar_Funcionario(nome=dados['nome'],matricula=dados['matricula'],rfid=dados['rfid'])
    id_func=db.obter_Id_Funcionario_por_Matricula(matricula=dados['matricula'])
    for horario in dados['horarios']:
        db.criar_Horario(id_funcionario=id_func,dia_da_semana=horario['dia_semana'],hora_inicial=horario['hora_inicial'],hora_final=horario['hora_final'])
    # print  detalha_Funcionario(db,id_funcionario=id_func)
        
def remover_Funcionario(db,id_funcionario):
    db.remover_Funcionario(id_funcionario)

def obter_Rfid(id_funcionario):
    "nada"    

def gerar_Relatorio_Porta(dados):
    vet=[]
    vet.append(["Nome","Matricula","Entrada"])
    for elem in dados:
        vet2=[]
        vet2.append(elem[0])
        vet2.append(elem[1])
        tempo = elem[2].strftime('%d/%m/%Y - %H:%M')
        vet2.append(tempo)
        vet.append(vet2)

    full_path = os.path.realpath(__file__)
    directory=os.path.dirname(full_path)
    if directory[-1]!='/':
        directory="%s/"%(directory)
    extensao='.csv'
    arquivo=datetime.datetime.now().strftime('log_porta_%d_%m_%Y')
    nome_arquivo=directory+"relatorios/"+arquivo+extensao
    saida=csv.writer(file(nome_arquivo, 'w'))
    for linha in vet:
        saida.writerow(linha)

def gerar_Relatorio_Pontos(dados):
    vet=[]
    vet.append(["Nome","Matricula","Entrada","Saida","Atraso Entrada","Atraso Saida","Flag"])
    for elem in dados:
        vet2 = []
        #nome do usuario
        vet2.append(elem[0])
        #matricula
        vet2.append(elem[1])
        #hora de entrada
        hora=""
        if elem[2]!=None:
            hora = elem[2].strftime('%d/%m/%Y - %H:%M')
        #hora de saida
        hora1=""
        if elem[3]!=None:
            hora1 = elem[3].strftime('%d/%m/%Y - %H:%M')
        vet2.append(hora)
        vet2.append(hora1)
        vet2.append(str(elem[4]))
        vet2.append(str(elem[5]))
        if elem[6] == 1:
            vet2.append('sem atraso')
        elif elem[6] == -2:
            vet2.append('nao fechou')
        elif elem[6] == -3:
            vet2.append('chegou atrasado')
        elif elem[6] == -4:
            vet2.append('saiu com atraso')
        elif elem[6] == -5:
            vet2.append('chegou e saiu com atraso')
        elif elem[6] == -1:
            vet2.append('ponto aberto')
        vet.append(vet2)

    full_path = os.path.realpath(__file__)
    directory=os.path.dirname(full_path)
    if directory[-1]!='/':
        directory="%s/"%(directory)
    extensao='.csv'
    arquivo=datetime.datetime.now().strftime('log_pontos_%d_%m_%Y')
    nome_arquivo=directory+"relatorios/"+arquivo+extensao
    saida=csv.writer(file(nome_arquivo, 'w'))
    for linha in vet:
        saida.writerow(linha)

def gerar_Relatorio(db,inicial,final,condicoes):
    log_porta=db.obter_Log_Porta(inicial,final)
    log_pontos=db.obter_Log_Pontos(inicial,final,condicoes['pontuais'],condicoes['faltas'],condicoes['atrasos'])
    gerar_Relatorio_Porta(log_porta)
    gerar_Relatorio_Pontos(log_pontos)

def atualizar_Rfid(db,id_funcionario,rfid):
    db.atualizar_Funcionario(id_funcionario,rfid=rfid)
<commit_msg>funcão do relatorio atualizada funcionando com descrição mas agora ta certo mesmo de coraçãoão<commit_after># -*- coding: utf-8 -*-

import model_mysql
import wx
import threading
import time
import datetime
import os
from wx.lib.pubsub import Publisher
import md5
import csv

class Comunica_Arduino(threading.Thread):
    def __init__(self):
        super(Comunica_Arduino, self).__init__()
        import serial
        try:
            self.ser = serial.Serial('/dev/ttyUSB0', 9600)
        except:
            print "Arduino não conectado"
        Publisher().subscribe(self.mandar_Dados, "evento_enviar_dados_arduino")

        self.start()

    def run(self):
         while True:
             wx.CallAfter(Publisher().sendMessage, "evento_chegaram_dados_arduino", self.obter_Dados())

    def obter_Dados(self):
        time.sleep(1)
        try:
            return self.ser.readline()
        except:
            return "Falha ao obter dados do arduino"

    def mandar_Dados(self,dados):
        try:
            self.ser.write(dados.data)
        except:
            return "Falha ao obter mandar dados para o arduino"

def criptografar_Senha(senha):
    m = md5.new()
    for i in range(32):
        m.update(senha)
    return m.hexdigest()

def verifica_Senha_Adm(db,senha):
    temp_senha = db.obter_Configuracoes("adm_senha")
    if temp_senha[2] == criptografar_Senha(senha):
        return True
    else:
        return False

def alterar_Senha_Adm(db,senha):
    db.atualizar_Configuracoes("adm_senha",criptografar_Senha(senha))
    
def dia_Semana_Int2str(num,completo=False):
    dias=['Dom','Seg','Ter','Qua','Qui','Sex','Sab']
    dias2=['Domingo','Segunda','Terça','Quarta','Quinta','Sexta','Sabado']
    if completo==True:
        return dias2[num-1]
    return dias[num-1]

def edita_Funcionario(db,dados):
    if dados['nome']==None and dados['matricula']==None and dados['rfid']==None:
        return
    db.atualizar_Funcionario(dados['id'], nome=dados['nome'], matricula=dados['matricula'], rfid=dados['rfid'])

def detalha_Funcionario(db,nome=None,id_funcionario=None):
    if (nome or id_funcionario) == None:
        return None
    id_func=None
    dados={}
    if nome != None:
        id_func=db.obter_Id_Funcionario_por_Nome(nome)
    else:
        id_func=id_funcionario
    dados['id'],dados['nome'],dados['matricula'],dados['rfid'],dados['ativo']=db.obter_Dados_Funcionario(id_func)
    dados['horarios']=[]
    temp_horarios=db.buscar_Horarios_de_Funcionario(id_func)
    if temp_horarios:
        for horario in temp_horarios:
            dados['horarios'].append({"dia_semana":horario[2],"hora_inicial":str(horario[3].seconds/60/60).zfill(2)+':'+str(horario[3].seconds/60%60).zfill(2),"hora_final":(str(horario[4].seconds/60/60).zfill(2)+':'+str(horario[4].seconds/60%60).zfill(2))})
    return dados

def validar_Criacao_Funcionario(db,dados):
    return db.verifica_Ja_Existe(nome=dados['nome'],matricula=dados['matricula'],rfid=dados['rfid'])

def cadastrar_Funcionario(db,dados):
    db.criar_Funcionario(nome=dados['nome'],matricula=dados['matricula'],rfid=dados['rfid'])
    id_func=db.obter_Id_Funcionario_por_Matricula(matricula=dados['matricula'])
    for horario in dados['horarios']:
        db.criar_Horario(id_funcionario=id_func,dia_da_semana=horario['dia_semana'],hora_inicial=horario['hora_inicial'],hora_final=horario['hora_final'])
    # print  detalha_Funcionario(db,id_funcionario=id_func)
        
def remover_Funcionario(db,id_funcionario):
    db.remover_Funcionario(id_funcionario)

def obter_Rfid(id_funcionario):
    "nada"    

def gerar_Relatorio_Porta(dados):
    vet=[]
    vet.append(["Nome","Matricula","Entrada"])
    for elem in dados:
        vet2=[]
        vet2.append(elem[0])
        vet2.append(elem[1])
        tempo = elem[2].strftime('%d/%m/%Y - %H:%M')
        vet2.append(tempo)
        vet.append(vet2)

    full_path = os.path.realpath(__file__)
    directory=os.path.dirname(full_path)
    if directory[-1]!='/':
        directory="%s/"%(directory)
    extensao='.csv'
    arquivo=datetime.datetime.now().strftime('log_porta_%d_%m_%Y')
    nome_arquivo=directory+"relatorios/"+arquivo+extensao
    saida=csv.writer(file(nome_arquivo, 'w'))
    for linha in vet:
        saida.writerow(linha)

def gerar_Relatorio_Pontos(dados):
    vet=[]
    vet.append(["Nome","Matricula","Entrada","Saida","Atraso Entrada","Atraso Saida","Flag"])
    for elem in dados:
        vet2 = []
        #nome do usuario
        vet2.append(elem[0])
        #matricula
        vet2.append(elem[1])
        #hora de entrada
        hora=""
        if elem[2]!=None:
            hora = elem[2].strftime('%d/%m/%Y - %H:%M')
        #hora de saida
        hora1=""
        if elem[3]!=None:
            hora1 = elem[3].strftime('%d/%m/%Y - %H:%M')
        vet2.append(hora)
        vet2.append(hora1)
        vet2.append(str(elem[4]))
        vet2.append(str(elem[5]))
        if elem[6] == 1:
            vet2.append('sem atraso')
        elif elem[6] == -2:
            vet2.append('nao veio')
        elif elem[6] == -3:
            vet2.append('chegou atrasado')
        elif elem[6] == -4:
            vet2.append('saiu com atraso')
        elif elem[6] == -5:
            vet2.append('chegou e saiu com atraso')
        elif elem[6] == -1:
            vet2.append('ponto aberto')
        vet.append(vet2)

    full_path = os.path.realpath(__file__)
    directory=os.path.dirname(full_path)
    if directory[-1]!='/':
        directory="%s/"%(directory)
    extensao='.csv'
    arquivo=datetime.datetime.now().strftime('log_pontos_%d_%m_%Y')
    nome_arquivo=directory+"relatorios/"+arquivo+extensao
    saida=csv.writer(file(nome_arquivo, 'w'))
    for linha in vet:
        saida.writerow(linha)

def gerar_Relatorio(db,inicial,final,condicoes):
    log_porta=db.obter_Log_Porta(inicial,final)
    log_pontos=db.obter_Log_Pontos(inicial,final,condicoes['pontuais'],condicoes['faltas'],condicoes['atrasos'])
    gerar_Relatorio_Porta(log_porta)
    gerar_Relatorio_Pontos(log_pontos)

def atualizar_Rfid(db,id_funcionario,rfid):
    db.atualizar_Funcionario(id_funcionario,rfid=rfid)

{'fraction_non_alphanumeric': 0.1485480572597137, 'fraction_numerical': 0.014560327198364009, 'mean_word_length': 3.455539358600583, 'pattern_counts': {'":': 6, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2826069', 'n_tokens_mistral': 4769, 'n_tokens_neox': 4681, 'n_words': 629}