def pesquisa(self, button = None): if(self.txtPesquisa.get_text() != '' or (self.inicio)): pesquisa = self.txtPesquisa.get_text() if self.rbEmail.get_active(): filtro = 'email' elif self.rbDocumento.get_active(): filtro = 'documento' elif self.rbNomeCliente.get_active(): filtro = 'cliente.nome' if self.inicio: clientes = BancoDados().select("cliente", " nome, tipo_documento, documento, ddd, telefone1, endereco, email", " ") else: clientes = BancoDados().select("cliente", " nome, tipo_documento, documento, ddd, telefone1, endereco, email", "where "+ filtro + " = '" + pesquisa +"' ") self.ListaParaAdicionar = [] if clientes != (): i = 0 while i < len(clientes): self.ListaParaAdicionar.append([clientes[i][0], clientes[i][1]+ ' - ' +clientes[i][2], '('+clientes[i][3]+')'+' '+clientes[i][4][:3]+'-'+clientes[i][4][4:], clientes[i][5], clientes[i][6]]) i += 1 self.atualizar() else: self.atualizar() funcoesGenericas.mostrarAviso(self.winListaCliente, "Não foi encontrado nenhum resultado para pesquisa escolhida!!!") else: funcoesGenericas.mostrarAviso(self.winListaCliente, "Digite algo no campo pesquisa!")
def cadastrar(self, widget=None): if not(self.txtNomeServico.get_text() == '' or self.txtDescricao.get_buffer().get_text(self.txtDescricao.get_buffer().\ get_start_iter(), self.txtDescricao.get_buffer().\ get_end_iter()) == ''): dict = {"nome" : self.txtNomeServico.get_text(), "descricao" : self.txtDescricao.get_buffer().get_text(self.txtDescricao.get_buffer().\ get_start_iter(), self.txtDescricao.get_buffer().\ get_end_iter()) } con = BancoDados() if con.inserir("servico", dict) != None: funcoesGenericas.mostrarAviso( self.wincadastrarServico, "Serviço cadastrado com sucesso!") self.limpar() else: funcoesGenericas.mostrarAviso( self.wincadastrarServico, "Não foi possivel cadastrar o serviço.") else: funcoesGenericas.mostrarAviso(self.wincadastrarServico, 'Favor preencher todos os campos!')
def persistirCadastro(self): """Funcao local para persistir o cadastro do funcionario no banco de dados""" if(self.primeiroAcesso): admin = '1' else: if self.rbSim.get_active(): admin = '1' else: admin = '0' dictCampos = {"NOME" : self.txtNome.get_text(), "LOGIN" : self.txtLogin.get_text(), "SENHA" : self.txtSenha.get_text(), "DOCUMENTO" : self.txtDocumento.get_text(), "TIPO_DOCUMENTO" : funcoesGenericas.getValorAtualComboBox(self.cbxTipoDocumento), "TELEFONE" : self.txtTelefone.get_text(), "DDD" : self.txtDDD.get_text(), "EMAIL" : self.txtEmail.get_text(), "CEP" : self.txtCEP.get_text(), "NASCIMENTO": self.txtNascimento.get_text(), "CARGO": funcoesGenericas.getValorAtualComboBox(self.cbxCargo), "ENDERECO" : funcoesGenericas.formatarEndereco(self.txtEndereco.get_text(), self.txtNumero.get_text(), self.txtComplemento.get_text(), self.txtBairro.get_text(), self.txtCidade.get_text(), self.txtEstado.get_text()), "administrador": admin } con = BancoDados() if con.inserir("funcionario",dictCampos) != None: return True else: return False
def gerarOS(self, widget = None): dictOS = {"obs":"Não foi alterada", "cliente_id": 1, "funcionario_id": 1, #"scaner":blob, "pasta":"0 - 0", "alterada": 0 } criar = BancoDados().inserir("os", dictOS) if criar != None: numeroOS = BancoDados().select("os", "count(*)", ' ') funcoesGenericas.mostrarAviso(self.winMenu, "O número da OS é: "+ str(numeroOS[0][0])) else: funcoesGenericas.mostrarAviso(self.winMenu, "Erro ao gerar a Ordem de Serviço.")
def persistirCadastro(self): """Funcao local para persistir o cadastro do funcionario no banco de dados""" if (self.primeiroAcesso): admin = '1' else: if self.rbSim.get_active(): admin = '1' else: admin = '0' dictCampos = { "NOME": self.txtNome.get_text(), "LOGIN": self.txtLogin.get_text(), "SENHA": self.txtSenha.get_text(), "DOCUMENTO": self.txtDocumento.get_text(), "TIPO_DOCUMENTO": funcoesGenericas.getValorAtualComboBox(self.cbxTipoDocumento), "TELEFONE": self.txtTelefone.get_text(), "DDD": self.txtDDD.get_text(), "EMAIL": self.txtEmail.get_text(), "CEP": self.txtCEP.get_text(), "NASCIMENTO": self.txtNascimento.get_text(), "CARGO": funcoesGenericas.getValorAtualComboBox(self.cbxCargo), "ENDERECO": funcoesGenericas.formatarEndereco(self.txtEndereco.get_text(), self.txtNumero.get_text(), self.txtComplemento.get_text(), self.txtBairro.get_text(), self.txtCidade.get_text(), self.txtEstado.get_text()), "administrador": admin } con = BancoDados() if con.inserir("funcionario", dictCampos) != None: return True else: return False
def pesquisa(self, button=None): if (self.txtPesquisa.get_text() != '' or (self.inicio)): servicos = BancoDados().select("servico", " nome, descricao", " ") self.ListaParaAdicionar = [] if servicos != (): i = 0 while i < len(servicos): texto = str(self.txtPesquisa.get_text()) texto = texto.upper() nomes = str(servicos[i][0]) nomes = nomes.upper() descricoes = str(servicos[i][1]) descricoes = descricoes.upper() if (self.rbNome.get_active() and (texto in nomes)) or (self.rbDescricao.get_active() and (texto in descricoes)): self.ListaParaAdicionar.append( [servicos[i][0], servicos[i][1]]) i += 1 self.atualizar() else: self.atualizar() funcoesGenericas.mostrarAviso( self.winListaServico, "Não foi encontrado nenhum resultado para pesquisa escolhida!!!" ) else: funcoesGenericas.mostrarAviso(self.winListaServico, "Digite algo no campo pesquisa!")
def formatarComboBox(tabela, indice, texto): """Funcao para preenchimento de combobox, usando banco de dados.\n Recebe como parametro o nome da tabela, o nome da coluna de indice, o nome da coluna de texto\n Retorna 1 gtkList e 1 dicionario. O dicionario tem o ID e o NOME""" store = None dicValores = {} b = BancoDados() tuplaDados = b.select(tabela, [indice,texto], "") if tuplaDados != None: store = gtk.ListStore(TYPE_STRING) for dado in tuplaDados: dicValores[dado[1]] = dado[0] #O dicionario tem a chave sendo o nome e o ID sendo o valor #print(dicValores) store.append([dado[1]]) retorno = (store,dicValores) return retorno
def formatarComboBox(tabela, indice, texto): """Funcao para preenchimento de combobox, usando banco de dados.\n Recebe como parametro o nome da tabela, o nome da coluna de indice, o nome da coluna de texto\n Retorna 1 gtkList e 1 dicionario. O dicionario tem o ID e o NOME""" store = None dicValores = {} b = BancoDados() tuplaDados = b.select(tabela, [indice, texto], "") if tuplaDados != None: store = gtk.ListStore(TYPE_STRING) for dado in tuplaDados: dicValores[dado[1]] = dado[ 0] #O dicionario tem a chave sendo o nome e o ID sendo o valor #print(dicValores) store.append([dado[1]]) retorno = (store, dicValores) return retorno
def alterar(self, widget = None): try: senha = BancoDados().select("funcionario","senha" , "where login = '******'")[0][0] if(senha == self.txtSenhaAntiga.get_text() or self.admin): if(self.txtNovaSenha.get_text() == self.txtRNovaSenha.get_text()): a = BancoDados().update("funcionario", {"senha":self.txtNovaSenha.get_text()}, {"login":self.login}) if(a != None): self.txtNovaSenha.set_text('') self.txtRNovaSenha.set_text('') self.txtSenhaAntiga.set_text('') funcoesGenericas.mostrarAviso(self.winAlterarSenha,"Senha alterada com sucesso!") else: funcoesGenericas.mostrarAviso(self.winAlterarSenha,"Erro ao alterar senha!!") else: funcoesGenericas.mostrarAviso(self.winAlterarSenha, "Campo Nova senha Diferente do campo Repetir Nova Senha") else: funcoesGenericas.mostrarAviso(self.winAlterarSenha,"Senha incorreta") except: funcoesGenericas.mostrarAviso(self.winAlterarSenha,"Login não existe")
def cadastrar(self, widget = None): if not(self.txtNomeServico.get_text() == '' or self.txtDescricao.get_buffer().get_text(self.txtDescricao.get_buffer().\ get_start_iter(), self.txtDescricao.get_buffer().\ get_end_iter()) == ''): dict = {"nome" : self.txtNomeServico.get_text(), "descricao" : self.txtDescricao.get_buffer().get_text(self.txtDescricao.get_buffer().\ get_start_iter(), self.txtDescricao.get_buffer().\ get_end_iter()) } con = BancoDados() if con.inserir("servico",dict) != None: funcoesGenericas.mostrarAviso(self.wincadastrarServico, "Serviço cadastrado com sucesso!") self.limpar() else: funcoesGenericas.mostrarAviso(self.wincadastrarServico, "Não foi possivel cadastrar o serviço.") else: funcoesGenericas.mostrarAviso(self.wincadastrarServico, 'Favor preencher todos os campos!')
def persistirCadastro(self,widget): """Funcao local para persistir o cadastro da empresa no banco de dados""" #TO DO: Falta ver a parte do logo dictCampos = {"nome" : self.txtNome.get_text(), "documento" :self.txtDocumento.get_text(), "tipo_documento" : funcoesGenericas.getValorAtualComboBox(self.cbxTipoDocumento), "email" : self.txtEmail.get_text(), "telefone1" : self.txtTelefone.get_text(), "ddd": self.txtDDD.get_text(), "endereco" : funcoesGenericas.formatarEndereco(self.txtEndereco.get_text(), self.txtNumero.get_text(), self.txtComplemento.get_text(), self.txtBairro.get_text(), self.txtCidade.get_text(), self.txtEstado.get_text()) } con = BancoDados() if con.inserir("cliente",dictCampos) != None: return True else: return False
def logar(self, widget = None): con = BancoDados() try: admin = False login = self.txtLogin.get_text() if (self.txtSenha.get_text() == con.select("funcionario", "login, senha, administrador", "where login = '******'")[0][1]): funcoesGenericas.mostrarAviso(self.winLogin, 'Entrando no sistema...') self.sair() admin = con.select("funcionario", "login, administrador", "where login = '******'")[0][1] print int(admin) if int(admin) == 1: admin = True janela = winMenu.menu(admin) janela.iniciarJanela() else: funcoesGenericas.mostrarAviso(self.winLogin, 'Login ou senha estão errados!') except: funcoesGenericas.mostrarAviso(self.winLogin, 'Login ou senha estão errados!')
def pesquisa(self, button=None): if (self.txtPesquisa.get_text() != '' or (self.inicio)): pesquisa = self.txtPesquisa.get_text() if self.rbLogin.get_active(): filtro = 'login' elif self.rbDocumento.get_active(): filtro = 'documento' elif self.rbNomeFuncionario.get_active(): filtro = 'nome' if self.inicio: funcionarios = BancoDados().select( "funcionario", " login, nome, tipo_documento, documento, cargo, email", " ") else: funcionarios = BancoDados().select( "funcionario", " login, nome, tipo_documento, documento, cargo, email", "where " + filtro + " = '" + pesquisa + "' ") self.ListaParaAdicionar = [] if funcionarios != (): i = 0 while i < len(funcionarios): self.ListaParaAdicionar.append([ funcionarios[i][0], funcionarios[i][1], funcionarios[i][2] + ' - ' + funcionarios[i][3], funcionarios[i][4], funcionarios[i][5] ]) i += 1 self.atualizar() else: self.atualizar() funcoesGenericas.mostrarAviso( self.winListaFuncinario, "Não foi encontrado nenhum resultado para pesquisa escolhida!!!" ) else: funcoesGenericas.mostrarAviso(self.winListaFuncinario, "Digite algo no campo pesquisa!")
def alterar(self, widget=None): if (self.txtLogin.get_text() == ''): funcoesGenericas.mostrarAviso(self.winLogin, "Favor preencha apenas o login!") else: try: login = BancoDados().select( "funcionario", "login", "where login = '******'")[0][0] a = winAlterarSenha.AlterarSenha(str(login)) a.mostrarJanela() except: funcoesGenericas.mostrarAviso(self.winLogin, "Login inexistente")
def logar(self, widget=None): con = BancoDados() try: admin = False login = self.txtLogin.get_text() if (self.txtSenha.get_text() == con.select( "funcionario", "login, senha, administrador", "where login = '******'")[0][1]): funcoesGenericas.mostrarAviso(self.winLogin, 'Entrando no sistema...') self.sair() admin = con.select("funcionario", "login, administrador", "where login = '******'")[0][1] print int(admin) if int(admin) == 1: admin = True janela = winMenu.menu(admin) janela.iniciarJanela() else: funcoesGenericas.mostrarAviso(self.winLogin, 'Login ou senha estão errados!') except: funcoesGenericas.mostrarAviso(self.winLogin, 'Login ou senha estão errados!')
def adicionarServicoNaLista(self, widget=None): jaTem = False servicoEscolhido = self.pegarValorComboBox(self.cbxServicos) descricao = BancoDados().select( " servico ", " descricao, nome ", " where nome = '" + servicoEscolhido + "'")[0][0] j = 0 while j in range(len(self.ListaParaAdicionar)): if servicoEscolhido == self.ListaParaAdicionar[j][0]: funcoesGenericas.mostrarAviso( self.winGuardarOS, "Serviço já escolhido." + " Favor selecionar outro!") jaTem = True break j += 1 if not (jaTem): self.ListaParaAdicionar.append([servicoEscolhido, descricao]) self.atualizar()
def verificaDocumento(self, widget=None): eIgual = False numeracaoDocumentos = BancoDados().select(' cliente ', ' documento, nome ', ' ') i = 0 posicao = None while i < len(numeracaoDocumentos): if numeracaoDocumentos[i][0] == self.txtCPFCNPJ.get_text(): eIgual = True posicao = i i = len(numeracaoDocumentos) i += 1 if eIgual: self.lblNomeCliente.set_text(numeracaoDocumentos[posicao][1]) else: funcoesGenericas.mostrarAviso(self.winGuardarOS, 'Numero de Documento inválido!!') self.lblNomeCliente.set_text(self.textelbl)
def __init__(self): self.bd = BancoDados() self.cod = 0 # No banco de dados os voos serao identificados por um cod para nao ter voos repitidos self.origem = "SSA" self.destino = "REC" self.ida = datetime(1, 1, 1) self.volta = datetime(1, 1, 1) self.numErro = 0 try: # query = "SELECT Cod, Origem, Destino, DiaIda, DiaVolta, NumErro from Voo where (pesquisando = 0 or (pesquisando = 1 and UltimaPesquisa < subtime(now(),'12:00'))) and UltimaPesquisa < subtime(now(),'6:00') and DiaIda > adddate(now(),3) and DiaVolta > adddate(now(),3) and Ocorrencia > 0 and NumErro < 5 order by prioridade desc limit 1;"#TODO: Ver o tempo exato ---A cada 6h,no maximo 5 erros query = "Select PegarVooAtomicamente();" voo = self.bd.executar(query) voo = voo[0][0].split("$") if voo != None: self.cod = int(voo[0]) self.origem = voo[1] self.destino = voo[2] self.ida = date(int(voo[3].split("-")[0]), int(voo[3].split("-")[1]), int(voo[3].split("-")[2])) try: self.volta = date(int(voo[4].split("-")[0]), int(voo[4].split("-")[1]), int(voo[4].split("-")[2])) except: self.volta = None self.numErro = int(voo[5]) except: print("Erro para ler os dados \n") # raise finally: self.bd.desconectar() """Essa parte vai ser preenchida pelo crawler, por isso é private""" self.__preco = 0.01 self.__cia = "Gol" self.__horaSaidaIda = "9:23" self.__horaChegadaIda = "10:10" self.__horaSaidaVolta = "9:23" self.__horaChegadaVolta = "10:10" self.__ultimaPesquisa = datetime(1, 1, 1) self.__status = 0
def pesquisa(self, button = None): if(self.txtPesquisa.get_text() != ''): if self.rbOS.get_active(): filtro = 'os.id' elif self.rbDocumento.get_active(): filtro = 'cliente.documento' elif self.rbNomeCliente.get_active(): filtro = 'cliente.nome' self.ListaParaAdicionar = [] OS = BancoDados().select("os, cliente", " os.id, os.pasta, cliente.documento, cliente.tipo_documento" + ", cliente.nome ", "where cliente_id = cliente.id and "+ filtro + " = '" + self.txtPesquisa.get_text()+"' ") if OS != (): i = 0 while i < len(OS): self.ListaParaAdicionar.append([str(OS[i][0]),OS[i][1],OS[i][2]+' - '+OS[i][3], OS[i][4]]) i += 1 self.atualizar() else: self.atualizar() funcoesGenericas.mostrarAviso(self.winListaOS, "Não foi encontrado nenhum resultado para pesquisa escolhida!!!") else: funcoesGenericas.mostrarAviso(self.winListaOS, "Digite algo no campo pesquisa!")
def __init__(self): self.bd = BancoDados() self.cod = 0 #No banco de dados os voos serao identificados por um cod para nao ter voos repitidos self.origem = "SSA" self.destino = "REC" self.dia = datetime(1,1,1) self.numErro = 0 try: query = "SELECT Cod, Origem, Destino, Dia, NumErro from Voo where (pesquisando = 0 or (pesquisando = 1 and UltimaPesquisa < subtime(now(),'12:00'))) and UltimaPesquisa < subtime(now(),'6:00') and Dia > adddate(now(),3) and Ocorrencia > 0 and NumErro < 5 order by prioridade desc limit 1;"#TODO: Ver o tempo exato ---A cada 6h,no maximo 5 erros voo = self.bd.executar(query) if (voo != None): for v in voo: self.cod = v[0] self.origem = v[1] self.destino = v[2] self.dia = v[3] self.numErro = v[4] except: print("Erro para ler os dados \n") raise finally: self.bd.desconectar() '''Essa parte vai ser preenchida pelo crawler, por isso é private''' self.__preco = 0.01 self.__cia = "Gol" self.__horaSaidaIda = "9:23" self.__horaChegadaIda = "10:10" self.__ultimaPesquisa = datetime(1,1,1) self.__status = 0
def exibirOS(self, widget = None): id = ModeloDatagrid.ModeloDataGrid().getValor(self.tvListaOS, 0) imgOS = BancoDados().select("os", "scaner", " where id = '"+str(id)+"' ") #print imgOS[0][0] winVisualizadorOS.VisualizarOS('/'+imgOS[0][0]).mostrarJanela()
class Voo: def __init__(self): self.bd = BancoDados() self.cod = 0 #No banco de dados os voos serao identificados por um cod para nao ter voos repitidos self.origem = "SSA" self.destino = "REC" self.dia = datetime(1,1,1) self.numErro = 0 try: query = "SELECT Cod, Origem, Destino, Dia, NumErro from Voo where (pesquisando = 0 or (pesquisando = 1 and UltimaPesquisa < subtime(now(),'12:00'))) and UltimaPesquisa < subtime(now(),'6:00') and Dia > adddate(now(),3) and Ocorrencia > 0 and NumErro < 5 order by prioridade desc limit 1;"#TODO: Ver o tempo exato ---A cada 6h,no maximo 5 erros voo = self.bd.executar(query) if (voo != None): for v in voo: self.cod = v[0] self.origem = v[1] self.destino = v[2] self.dia = v[3] self.numErro = v[4] except: print("Erro para ler os dados \n") raise finally: self.bd.desconectar() '''Essa parte vai ser preenchida pelo crawler, por isso é private''' self.__preco = 0.01 self.__cia = "Gol" self.__horaSaidaIda = "9:23" self.__horaChegadaIda = "10:10" self.__ultimaPesquisa = datetime(1,1,1) self.__status = 0 def __getUrl(self): """Retorna a url para fazer a pesquisa dessa passagem""" retorno = "http://www.decolar.com/search/flights/" strMeio = self.origem + '/' + self.destino + '/' + self.dia.isoformat() strFim = "1/0/0" # O Preco pesquisado é de um adulto retorno += "oneWay/" + strMeio + '/' + strFim return retorno def __crawler(self,url): """Funcao que retorna o html como uma string""" try: print("Fazendo o craw url") print(url) browser = spynner.Browser() browser.load(url) try: browser.wait_page_load() except: pass retorno = browser.html.encode("utf8","ignore") browser.close() return retorno except: raise def __preencherDados(self): """Preenche os dados da cia aerea do preco e da data da ultima pesquisa""" #ToDo: Deve ser bem testado para que seja analisado todos os cenarios de erros #Por enquanto a abordagem eh pegar apenas o primeiro resultado da decolar. Futuramente podemos refinar isso #Por enquanto apenas o preco em real eh analizar try: s = self.__crawler(self.__getUrl()) file = open("t2.txt","w") file.write(s) file.close() soup = BeautifulSoup(s) Itinerary0 = soup.find('div',{'id':'Itinerary_0'} ) self.__cia = Itinerary0.find('div',{'id':'CompressItinAirlineName'}).find('strong').contents[0].strip() #a cia de ida e volta sao iguais self.__horaSaidaIda = Itinerary0.find('div',{'class':'salida'}).find('strong').contents[0].strip() self.__horaChegadaIda = Itinerary0.find('div',{'class':'llegada'}).find('strong').contents[0].strip() precoLocal0 = Itinerary0.find('div',{'id':'CompressItinPriceLocalAmount'}).find('strong').contents[0].strip() #Preco na moeda local, geralmente real total self.__preco = precoLocal0.split(' ')[1] self.__ultimaPesquisa = datetime.now() return 1 except: self.__ultimaPesquisa = datetime.now() return 0 def pesquisar(self): """Realiza a pesquisa do voo""" if self.cod == 0: print("Nao ha mais voo/n") return 0 else: #Informa que o voo esta sendo pesquisado try: query = "UPDATE Voo SET Pesquisando = 1, UltimaPesquisa = Now() where cod = %d;" % (self.cod) self.bd.executar(query) #self.bd.executar("commit;"); except: print("Erro para persistir os dados ") return 0 finally: self.bd.desconectar() if self.__preencherDados() == 1: try: query = "UPDATE Voo SET Preco = '%s',Cia = '%s',HoraSaidaIda = '%s',HoraChegadaIda = '%s', UltimaPesquisa = '%s', Pesquisando = 0 where cod = %d;" % (self.__preco, self.__cia, self.__horaSaidaIda, self.__horaChegadaIda,self.__ultimaPesquisa, self.cod) #print(query) self.bd.executar(query) except: print("Erro para persistir os dados ") finally: self.bd.desconectar() else: print("\nOcorreu um erro no crawl") try: query = "UPDATE Voo SET NumErro = %d, UltimaPesquisa = '%s', Pesquisando = 0 where cod = %d;" % (self.numErro + 1, self.__ultimaPesquisa, self.cod) #print(query) self.bd.executar(query) except: print("Erro para persistir os dados ") finally: self.bd.desconectar() return 1
def guardarOS(self, widget=None): '''Armazena no banco a relação OS e serviço''' try: valor = BancoDados().select( "os", "id, alterada", "where id ='" + self.txtNumeroOS.get_text() + "'") existe = False print(valor) m = 0 while m < len(valor): print valor[m][0] if (valor[m][0] == int(self.txtNumeroOS.get_text()) and valor[m][1] != 1): existe = True m += 1 if existe and self.lblNomeCliente.get_text() != 'Sem Cliente Selecionado' and \ self.txtCPFCNPJ != '' and self.txtPasta != '' and self.pegarValorComboBox(self.cbxNomeCliente)!=\ None and self.btfSelecionarArquivo.get_file() != None: local = self.copiarImagem() k = 0 idFuncinario = BancoDados().select( "funcionario", "id", "where nome = '" + self.pegarValorComboBox(self.cbxNomeCliente) + "'")[0][0] idCliente = BancoDados().select( "cliente", "id", "where nome = '" + self.lblNomeCliente.get_text() + "'")[0][0] dict = {"obs":self.txtvObs.get_buffer().get_text(self.txtvObs.get_buffer().\ get_start_iter(),self.txtvObs.get_buffer().get_end_iter()), "cliente_id":idCliente, "funcionario_id": idFuncinario, "scaner":local, "pasta":self.txtPasta.get_text(), "alterada": 1 } dict2 = {"id": self.txtNumeroOS.get_text()} alteracao = BancoDados().update("os", dict, dict2) if (alteracao != None): while k in range(len(self.ListaParaAdicionar)): id = BancoDados().select( "servico", "id", "where nome = '" + self.ListaParaAdicionar[k][0] + "'")[0][0] if BancoDados().inserir( 'os_servico', { "servico_id": str(id), "os_id": self.txtNumeroOS.get_text() }) == None: print 'Erro servico None' k += 1 print self.txtNumeroOS.get_text() print 'id = ' + str(id) else: funcoesGenericas.mostrarAviso(self.winGuardarOS, "O número da OS não existe") self.limpar() else: funcoesGenericas.mostrarAviso( self.winGuardarOS, "Possiveis problemas:\n" + "1- O número da OS não existe;\n" + "2- Não preencheu todos os Campos;\n" + "3- Não escolheu nenhum serviço;\n" + "4- A ordem de serviço já foi guardada. Caso deseje alterar " + "vá no menu e selecione alterar OS\n" + "5- Não escolheu nenhum funcionário;\n" + "6- A cópida da OS não foi selecionada.") except: funcoesGenericas.mostrarAviso( self.winGuardarOS, "Erro ao copiar imagem!!!!\n" + "Verifique se o endereço da imagem possui caracter especial," + "caso contenha coloque em um local onde o endereço resultante" + "não possua caracter especial.")
def __init__(self): self.fechar = False '''Arquivo''' self.arquivo = gtk.glade.XML('winGuardarOS.glade') '''Janela''' self.winGuardarOS = self.arquivo.get_widget('winGuardarOS') color = gtk.gdk.color_parse('white') self.winGuardarOS.modify_bg(gtk.STATE_NORMAL, color) self.btfSelecionarArquivo = self.arquivo.get_widget( 'btfSelecionarArquivo') '''Text Box''' self.txtNumeroOS = self.arquivo.get_widget('txtNumeroOS') self.txtPasta = self.arquivo.get_widget('txtPasta') self.txtCPFCNPJ = self.arquivo.get_widget('txtCPFCNPJ') '''Text View''' self.txtvObs = self.arquivo.get_widget('txtvObs') '''Combobox e suas configurações''' self.cbxNomeCliente = self.arquivo.get_widget('cbxNomeCliente') self.storeClientes = gtk.ListStore(gobject.TYPE_STRING) try: self.clientes = BancoDados().select('funcionario', 'nome', ' ') i = 0 while i < len(self.clientes): self.storeClientes.append([self.clientes[i][0]]) i += 1 self.inserirComboBox(self.storeClientes, self.cbxNomeCliente) if (len(self.clientes) < 1): funcoesGenericas.mostrarAviso( self.winGuardarOS, 'Provavelmente nenhum funcionário' + ' foi cadastrado!' + '\nFavor cadastrar um!') self.fechar = True except: funcoesGenericas.mostrarAviso( self.winGuardarOS, 'Provavelmente nenhum funcionário foi' + ' cadastrado!' + '\nFavor cadastrar um!') self.fechar = True self.cbxServicos = self.arquivo.get_widget('cbxServicos') self.storeServicos = gtk.ListStore(gobject.TYPE_STRING) try: self.servicos = BancoDados().select('servico', 'nome', ' ') i = 0 while i < len(self.servicos): self.storeServicos.append([self.servicos[i][0]]) i += 1 self.inserirComboBox(self.storeServicos, self.cbxServicos) if (len(self.clientes) < 1): funcoesGenericas.mostrarAviso( self.winGuardarOS, 'Nenhum serviço cadastrado!' + '\nFavor cadastrar pelo menos um serviço') self.fechar = True except: funcoesGenericas.mostrarAviso( self.winGuardarOS, 'Nenhum serviço cadastrado!' + '\nFavor cadastrar pelo menos um serviço') self.fechar = True '''Botões''' self.btVerifica = self.arquivo.get_widget('btVerifica') self.btInserirServico = self.arquivo.get_widget('btInserirServico') self.btRemoverServico = self.arquivo.get_widget('btRemoverServico') self.btGravarOS = self.arquivo.get_widget('btGravarOS') self.btLimpar = self.arquivo.get_widget('btLimpar') '''Label''' self.lblNomeCliente = self.arquivo.get_widget('lblNomeCliente') self.textelbl = self.lblNomeCliente.get_text() '''Instanciando um objeto para usar a classe ModeloDatagrid''' self.dataGrid = ModeloDatagrid.ModeloDataGrid() '''Iniciando o treeView''' self.inicio = True self.iniciarTreeview() self.excluir = False self.servicoSelecionado = 0
#-*-coding:utf-8-*- ''' Created on 12/01/2011 @author: diogo IMPORTANTE: Necessario arquivos .glade na mesma pasta ''' import pygtk import gobject pygtk.require("2.0") import gtk, gtk.glade import funcoesGenericas import CadastrarFunionario import winLogin from bd import BancoDados a = BancoDados().select("funcionario", "count(*)", '') if int(a[0][0]) == 0: funcoesGenericas.mostrarAviso( None, "Primeiro acesso, favor cadastrar um funcionário como administrador!!") janela = CadastrarFunionario.CadastroFuncionario(True) janela.iniciarJanela() janela = winLogin.Logar() janela.exibirTela() else: janela = winLogin.Logar() janela.exibirTela()
banco.desconectar() return 1 def desativarPesquisa(banco,cod): try: query = "Call EncerrarPesquisa(%d);" % cod banco.executar(query) except: print("Erro na procedure") raise finally: banco.desconectar() if __name__ == '__main__': b = BancoDados() menu = -1 aeroportos =["ATM","AJU","AQA","BGX","JTC","BEL","CNF","PLU","BVB","BSB","CPV","VCP","CGR","CAW","CKS","CAU","CXJ","XAP","CMG","CCM","CGB","CWB","CZS","FEN","FLN","FOR","IGU","GYN","IOS","IMP","JPA","JOI","JDO","LDB","MEA","MCP","MCZ","MAO","MAB","MGF","MOC","MVF","NAT","NVT","PMW","PHB","PAV","PNZ","POO","PMG","POA","BPS","PVH","PPB","REC","RAO","RBR","GIG","SDU","SSA","STM","SJP","SJK","SLZ","MAE","CGH","GRU","TBT","TFF","THE","UDI","URA","UBT","URG","VIX"] while (menu != 0): menu = int(raw_input("Digite:\n1 para inserir pesquisa\n2 para ativar pesquisa\n3 para desativar pesquisa\n4 para inserir varias coisas\n6 Ativar as pesquisas de um determinado email\n0 para sair: ")) if (menu == 1): email = raw_input("Digite o email: ") origem = raw_input("Digite a origem: ") destino = raw_input("Digite o destino: ") precoE = float(raw_input("Digite qnt espera pagar: ")) nDias = int(raw_input("Numero de dias: ")) dias = [] for d in range(nDias): dia = raw_input("Digite o dia: 'yyyy-mm-dd' ") dias += [dia]
class Voo: def __init__(self): self.bd = BancoDados() self.cod = 0 # No banco de dados os voos serao identificados por um cod para nao ter voos repitidos self.origem = "SSA" self.destino = "REC" self.ida = datetime(1, 1, 1) self.volta = datetime(1, 1, 1) self.numErro = 0 try: # query = "SELECT Cod, Origem, Destino, DiaIda, DiaVolta, NumErro from Voo where (pesquisando = 0 or (pesquisando = 1 and UltimaPesquisa < subtime(now(),'12:00'))) and UltimaPesquisa < subtime(now(),'6:00') and DiaIda > adddate(now(),3) and DiaVolta > adddate(now(),3) and Ocorrencia > 0 and NumErro < 5 order by prioridade desc limit 1;"#TODO: Ver o tempo exato ---A cada 6h,no maximo 5 erros query = "Select PegarVooAtomicamente();" voo = self.bd.executar(query) voo = voo[0][0].split("$") if voo != None: self.cod = int(voo[0]) self.origem = voo[1] self.destino = voo[2] self.ida = date(int(voo[3].split("-")[0]), int(voo[3].split("-")[1]), int(voo[3].split("-")[2])) try: self.volta = date(int(voo[4].split("-")[0]), int(voo[4].split("-")[1]), int(voo[4].split("-")[2])) except: self.volta = None self.numErro = int(voo[5]) except: print("Erro para ler os dados \n") # raise finally: self.bd.desconectar() """Essa parte vai ser preenchida pelo crawler, por isso é private""" self.__preco = 0.01 self.__cia = "Gol" self.__horaSaidaIda = "9:23" self.__horaChegadaIda = "10:10" self.__horaSaidaVolta = "9:23" self.__horaChegadaVolta = "10:10" self.__ultimaPesquisa = datetime(1, 1, 1) self.__status = 0 def __getUrl(self): """Retorna a url para fazer a pesquisa dessa passagem""" retorno = "http://www.decolar.com/search/flights/" strMeio = self.origem + "/" + self.destino + "/" + self.ida.isoformat() strFim = "1/0/0" # O Preco pesquisado é de um adulto if self.volta == None: retorno += "oneWay/" + strMeio + "/" + strFim else: retorno += "RoundTrip/" + strMeio + "/" + self.volta.isoformat() + "/" + strFim return retorno def __crawler(self, url): """Funcao que retorna o html como uma string""" try: print("Fazendo o craw url") print(url) browser = spynner.Browser() browser.load(url) try: browser.wait_page_load() except: pass retorno = browser.html.encode("utf8", "ignore") browser.close() return retorno except: raise def __preencherDados(self): """Preenche os dados da cia aerea do preco e da data da ultima pesquisa""" # ToDo: Deve ser bem testado para que seja analisado todos os cenarios de erros # Por enquanto a abordagem eh pegar apenas o primeiro resultado da decolar. Futuramente podemos refinar isso # Por enquanto apenas o preco em real eh analizar try: s = self.__crawler(self.__getUrl()) # file = open("t2.txt","r") # s = file.read() # file.close() soup = BeautifulSoup(s) if self.volta == None: # Itinerary0 = soup.find('div',{'id':'Itinerary_0'} ) self.__cia = soup.find("div", {"class": "airline-name"}).find("span").contents[0].strip() self.__horaSaidaIda = soup.find("li", {"class": "leave"}).find("strong").contents[0].strip() self.__horaChegadaIda = soup.find("li", {"class": "arrive"}).find("strong").contents[0].strip() self.__preco = soup.find("span", {"class": "price-amount"}).contents[0].strip() try: self.__preco = self.__preco.replace(".", "") self.__preco = self.__preco.split(" ")[1] except: pass else: # Itinerary0 = soup.find('div',{'id':'ItinBox_0'} ) self.__cia = ( soup.find("div", {"class": "airline-name"}).find("span").contents[0].strip() ) # a cia de ida e volta sao iguais self.__horaSaidaIda = soup.find("li", {"class": "leave"}).find("strong").contents[0].strip() self.__horaChegadaIda = soup.find("li", {"class": "arrive"}).find("strong").contents[0].strip() self.__horaSaidaVolta = ( soup.find("div", {"class": "sub-cluster inbound"}) .find("li", {"class": "leave"}) .find("strong") .contents[0] .strip() ) self.__horaChegadaVolta = ( soup.find("div", {"class": "sub-cluster inbound"}) .find("li", {"class": "arrive"}) .find("strong") .contents[0] .strip() ) self.__preco = soup.find("span", {"class": "price-amount"}).contents[0].strip() try: self.__preco = self.__preco.replace(".", "") self.__preco = self.__preco.split(" ")[1] except: pass self.__ultimaPesquisa = datetime.now() return 1 except: self.__ultimaPesquisa = datetime.now() return 0 def pesquisar(self): """Realiza a pesquisa do voo""" if self.cod == 0: print("Nao ha mais voo/n") return 0 else: if self.__preencherDados() == 1: try: if self.volta == None: query = ( "UPDATE Voo SET Preco = %.2f,Cia = '%s',HoraSaidaIda = '%s',HoraChegadaIda = '%s', UltimaPesquisa = '%s', Pesquisando = 0 where cod = %d;" % ( float(self.__preco), self.__cia, self.__horaSaidaIda, self.__horaChegadaIda, self.__ultimaPesquisa, self.cod, ) ) else: query = ( "UPDATE Voo SET Preco = %.2f,Cia = '%s',HoraSaidaIda = '%s',HoraChegadaIda = '%s', HoraSaidaVolta = '%s',HoraChegadaVolta = '%s',UltimaPesquisa = '%s', Pesquisando = 0 where cod = %d;" % ( float(self.__preco), self.__cia, self.__horaSaidaIda, self.__horaChegadaIda, self.__horaSaidaVolta, self.__horaChegadaVolta, self.__ultimaPesquisa, self.cod, ) ) # print(query) self.bd.executar(query) except: raise print("Erro para persistir os dados ") finally: self.bd.desconectar() else: print("\nOcorreu um erro no crawl") try: query = "UPDATE Voo SET NumErro = %d, UltimaPesquisa = '%s', Pesquisando = 0 where cod = %d;" % ( self.numErro + 1, self.__ultimaPesquisa, self.cod, ) # print(query) self.bd.executar(query) except: raise print("Erro para persistir os dados ") finally: self.bd.desconectar() return 1