def criaRelatorio(self): # Busca o usuário ativo # TODO: Criar um método melhor para encontrar usuário ativo daoUsuario = DaoUsuario(self.db) usuarioAtivo = daoUsuario.buscaUsuarioAtivo() # Cria relatório # TODO: Criar método para escolher, por meio do browser, o local de salvamento do arquivo e o nome relatorio = RelatorioCliente(nomeArquivo='Relatório', usuario=usuarioAtivo, db=self.db) relatorio.exportaRelatorio()
def __init__(self, db): super(LoginPage, self).__init__() self.db = db self.userId = None # Inicia Daos============================================================= # self.daoConfig = DaoConfiguracoes(self.db) self.daoUsuario = DaoUsuario(self.db) self.setupUi(self) self.center() self.sinais = Sinais() self.sinais.sSistemLoading.connect(self.sistemLoading) self.pbarProgress.hide() # Ao abrir a janela, dá o focus, coloca ela em primeiro plano e maximizada self.showMaximized() self.raise_() self.activateWindow() # Iniciando a tela cadastro e inserindo-a no stkWidget self.telaCadastro = brainCadastro(self, db=db) self.stkLogin.addWidget(self.telaCadastro) # Iniciando a tela cadastro e inserindo-a no stkWidget # self.telaDashboard = mainDashboard(self, db=db) # self.stkLogin.addWidget(self.telaDashboard) self.telaDashboard = None # Iniciando timer que apagará a barra de loading e a Snackbar self.timerMsg = QtCore.QTimer() self.timerLoading = QtCore.QTimer() self.timerLoading.timeout.connect(self.pbarProgress.hide) self.timerMsg.timeout.connect(self.fechaSnackbar) self.pbCadastro.clicked.connect(self.navigate) self.pbLogin.clicked.connect(self.trataLogin) self.lbSnackBarLogin.hide() self.pbFechaSnackBarLogin.hide() self.pbFechaSnackBarLogin.clicked.connect(lambda: (self.lbSnackBarLogin.hide(), self.pbFechaSnackBarLogin.hide())) self.leUsuario.returnPressed.connect(lambda: self.trataLogin()) self.leSenha.returnPressed.connect(lambda: self.trataLogin()) self.leUsuario.setFocus() self.leUsuario.setText('renan') self.leSenha.setText('123')
def __init__(self, parent=None, db=None): super(brainCadastro, self).__init__(parent) self.setupUi(self) self.db = db self.daoConfig = DaoConfiguracoes(self.db) self.daoUsuario = DaoUsuario(self.db) self.pbVoltarLogin.clicked.connect(self.goHome) self.home.connect(self.parent().backHome) self.timer = QTimer() self.timer.timeout.connect(self.escondeSnackbar) self.frSnackBarCadastro.hide() self.usuarioModel = UsuarioModel() self.leNomeUsuario.textEdited.connect(lambda: self.defineCampo('nU')) self.leNomeEmpresa.textEdited.connect(lambda: self.defineCampo('nE')) self.leNomeFantasia.textEdited.connect(lambda: self.defineCampo('nF')) self.leCNPJ.textEdited.connect(lambda: self.defineCampo('cnpj')) self.leEmail.textEdited.connect(lambda: self.defineCampo('email')) self.leTelefone.textEdited.connect(lambda: self.defineCampo('tel')) self.leEndereco.textEdited.connect(lambda: self.defineCampo('end')) self.leCidade.textEdited.connect(lambda: self.defineCampo('cid')) self.leCEP.textEdited.connect(lambda: self.defineCampo('cep')) self.leSenha.textEdited.connect(lambda: self.defineCampo('senha')) self.leBairro.textEdited.connect(lambda: self.defineCampo('bairro')) self.leComplemento.textEdited.connect(lambda: self.defineCampo('comp')) self.leSenhaConfirma.textEdited.connect( lambda: self.defineCampo('confS')) self.cbxEstados.addItems(self.daoConfig.getEstados()) self.leCNPJ.editingFinished.connect(lambda: self.insereMascara('cnpj')) self.leTelefone.editingFinished.connect( lambda: self.insereMascara('tel')) self.leCEP.editingFinished.connect(self.trataCep) self.pbFazerCadastro.clicked.connect(self.trataCadastro) self.pbContinuaCadastro.clicked.connect( lambda: self.tabs.setCurrentIndex(1)) self.pbVoltarTab.clicked.connect(lambda: self.tabs.setCurrentIndex(0))
def __init__(self, parent=None, db=None): super(ConfigPage, self).__init__(parent) self.db = db self.parent = parent self.daoUsuario = DaoUsuario(db=db) self.setupUi(self) self.financeiroController = FinanceiroController(parent=self, db=db) self.vlFinanceiro.addWidget(self.financeiroController) self.vlCategorias.addWidget(CategoriaCard(parent=self, db=db)) self.efeito = Efeitos() self.verificaLogoSalva() self.pbExcluiImg.clicked.connect(self.excluiLogo) self.pbInsereImg.clicked.connect(self.decideLogo) # Instanciando os sinais self.sinais = Sinais() # Escutando/Listening sinais self.tabConfiguracoes.currentChanged.connect(self.onCange)
class LoginPage(Ui_mwLogin, QMainWindow): def __init__(self, db): super(LoginPage, self).__init__() self.db = db self.userId = None # Inicia Daos============================================================= # self.daoConfig = DaoConfiguracoes(self.db) self.daoUsuario = DaoUsuario(self.db) self.setupUi(self) self.center() self.sinais = Sinais() self.sinais.sSistemLoading.connect(self.sistemLoading) self.pbarProgress.hide() # Ao abrir a janela, dá o focus, coloca ela em primeiro plano e maximizada self.showMaximized() self.raise_() self.activateWindow() # Iniciando a tela cadastro e inserindo-a no stkWidget self.telaCadastro = brainCadastro(self, db=db) self.stkLogin.addWidget(self.telaCadastro) # Iniciando a tela cadastro e inserindo-a no stkWidget # self.telaDashboard = mainDashboard(self, db=db) # self.stkLogin.addWidget(self.telaDashboard) self.telaDashboard = None # Iniciando timer que apagará a barra de loading e a Snackbar self.timerMsg = QtCore.QTimer() self.timerLoading = QtCore.QTimer() self.timerLoading.timeout.connect(self.pbarProgress.hide) self.timerMsg.timeout.connect(self.fechaSnackbar) self.pbCadastro.clicked.connect(self.navigate) self.pbLogin.clicked.connect(self.trataLogin) self.lbSnackBarLogin.hide() self.pbFechaSnackBarLogin.hide() self.pbFechaSnackBarLogin.clicked.connect(lambda: (self.lbSnackBarLogin.hide(), self.pbFechaSnackBarLogin.hide())) self.leUsuario.returnPressed.connect(lambda: self.trataLogin()) self.leSenha.returnPressed.connect(lambda: self.trataLogin()) self.leUsuario.setFocus() self.leUsuario.setText('renan') self.leSenha.setText('123') # self.leUsuario.setText('israeldev') # self.leSenha.setText('123') def navigate(self): self.stkLogin.setCurrentIndex(1) def backHome(self): self.limpaCampos() self.stkLogin.setCurrentIndex(0) def trataLogin(self): self.loading(10) strNomeUsuario = self.leUsuario.text() if strNomeUsuario == "": self.loading(100) print("Digite um usuário") self.snackBar("Digite um usuário") self.timerMsg.start(3000) return False if not self.daoUsuario.verificaUsuario(strNomeUsuario): self.loading(100) print("Não foi encontrado nenhum usuário com o nome cadastrado") self.snackBar("Usuário Não Cadastrado") self.timerMsg.start(3000) else: self.loading(40) self.userId = self.daoUsuario.confereSenha(strNomeUsuario, self.leSenha.text()) self.loading(50) if self.userId is not None: self.loading(60) self.snackBar('Usuário(a) confirmado(a)!') self.timerMsg.start(3000) self.carregaDashboard() self.loading(100) self.stkLogin.setCurrentIndex(2) else: self.loading(100) print('Senha inválida!') self.snackBar("Senha Inválida") def snackBar(self, mensagem): self.lbSnackBarLogin.setText(mensagem) self.lbSnackBarLogin.show() self.pbFechaSnackBarLogin.show() def center(self): frameGm = self.frameGeometry() screen = QtWidgets.QApplication.desktop().screenNumber(QtWidgets.QApplication.desktop().cursor().pos()) centerPoint = QtWidgets.QApplication.desktop().screenGeometry(screen).center() frameGm.moveCenter(centerPoint) self.move(frameGm.topLeft()) def carregaDashboard(self): usuario = self.daoUsuario.carregaUsrAtual(id=self.userId) self.loading(80) self.telaDashboard = mainDashboard(self, db=self.db, usuario=usuario) self.loading(90) self.stkLogin.addWidget(self.telaDashboard) def limpaCampos(self): print('IMPLEMENTAR LIMPAR CAMPOS') def loading(self, intLoading:int): self.sinais.sSistemLoading.emit(intLoading) def sistemLoading(self, intProgress:int): self.pbarProgress.show() self.pbarProgress.setValue(intProgress) if self.pbarProgress.value() >= 100: self.timerLoading.start(3000) def fechaSnackbar(self): self.lbSnackBarLogin.hide() self.frSnackBarLogin.hide()
class ConfigPage(Ui_wdgConfig, QWidget): def __init__(self, parent=None, db=None): super(ConfigPage, self).__init__(parent) self.db = db self.parent = parent self.daoUsuario = DaoUsuario(db=db) self.setupUi(self) self.financeiroController = FinanceiroController(parent=self, db=db) self.vlFinanceiro.addWidget(self.financeiroController) self.vlCategorias.addWidget(CategoriaCard(parent=self, db=db)) self.efeito = Efeitos() self.verificaLogoSalva() self.pbExcluiImg.clicked.connect(self.excluiLogo) self.pbInsereImg.clicked.connect(self.decideLogo) # Instanciando os sinais self.sinais = Sinais() # Escutando/Listening sinais self.tabConfiguracoes.currentChanged.connect(self.onCange) def onCange(self, *args): tabEscolhida = args[0] if tabEscolhida == 0: self.lbTitulo.setText('Configurações do usuário') self.lbDescricao.setText( 'Nesta página você pode alterar as configurações referentes ao seu cadastro.' ) elif tabEscolhida == 1: self.lbTitulo.setText('Configurações dos clientes') self.lbDescricao.setText( 'Configurações referentes à tela de clientes.') elif tabEscolhida == 2: self.lbTitulo.setText('Configurações da agenda') self.lbDescricao.setText('Configurações das datas e eventos.') elif tabEscolhida == 3: self.lbTitulo.setText('Configurações financeiras') self.lbDescricao.setText( 'Configurações referentes à area financeira do Nautilus.') def carregaLogo(self, logoPath: str, isLogo=True): logo = transformaImgCirculo(logoPath, isLogo=isLogo) self.lbLogo.setPixmap(logo) self.efeito.shadowCards([self.lbLogo], radius=5, offset=(1, 3), color=(63, 63, 63, 90)) def excluiLogo(self): self.carregaLogo('Telas/Imagens/addLogo.png', isLogo=False) self.daoUsuario.atualizaLogoPath( 'Telas/Imagens/addLogo.png', idUsuario=self.parent.usuarioModel.userId) def decideLogo(self): logoPath = QFileDialog.getOpenFileName( directory='/home/', options=QFileDialog.DontUseNativeDialog, filter="PNG (*.png);;JPG (*.jpg)") if logoPath is not None: self.salvaLogoPath(logoPath[0]) self.carregaLogo(logoPath[0]) def salvaLogoPath(self, logoPath): usuarioAtivo = self.parent.usuarioModel self.daoUsuario.atualizaLogoPath(logoPath, idUsuario=usuarioAtivo.userId) self.parent.menssagemSistema('Logo salvo com sucesso!') def verificaLogoSalva(self): logoPath = self.daoUsuario.buscaLogoPath( self.parent.usuarioModel.userId) if logoPath is None or logoPath == '': self.carregaLogo('Telas/Imagens/addLogo.png', isLogo=False) else: self.carregaLogo(logoPath, isLogo=False)
class brainCadastro(Ui_mwCadastro, QMainWindow): home = pyqtSignal() def __init__(self, parent=None, db=None): super(brainCadastro, self).__init__(parent) self.setupUi(self) self.db = db self.daoConfig = DaoConfiguracoes(self.db) self.daoUsuario = DaoUsuario(self.db) self.pbVoltarLogin.clicked.connect(self.goHome) self.home.connect(self.parent().backHome) self.timer = QTimer() self.timer.timeout.connect(self.escondeSnackbar) self.frSnackBarCadastro.hide() self.usuarioModel = UsuarioModel() self.leNomeUsuario.textEdited.connect(lambda: self.defineCampo('nU')) self.leNomeEmpresa.textEdited.connect(lambda: self.defineCampo('nE')) self.leNomeFantasia.textEdited.connect(lambda: self.defineCampo('nF')) self.leCNPJ.textEdited.connect(lambda: self.defineCampo('cnpj')) self.leEmail.textEdited.connect(lambda: self.defineCampo('email')) self.leTelefone.textEdited.connect(lambda: self.defineCampo('tel')) self.leEndereco.textEdited.connect(lambda: self.defineCampo('end')) self.leCidade.textEdited.connect(lambda: self.defineCampo('cid')) self.leCEP.textEdited.connect(lambda: self.defineCampo('cep')) self.leSenha.textEdited.connect(lambda: self.defineCampo('senha')) self.leBairro.textEdited.connect(lambda: self.defineCampo('bairro')) self.leComplemento.textEdited.connect(lambda: self.defineCampo('comp')) self.leSenhaConfirma.textEdited.connect( lambda: self.defineCampo('confS')) self.cbxEstados.addItems(self.daoConfig.getEstados()) self.leCNPJ.editingFinished.connect(lambda: self.insereMascara('cnpj')) self.leTelefone.editingFinished.connect( lambda: self.insereMascara('tel')) self.leCEP.editingFinished.connect(self.trataCep) self.pbFazerCadastro.clicked.connect(self.trataCadastro) self.pbContinuaCadastro.clicked.connect( lambda: self.tabs.setCurrentIndex(1)) self.pbVoltarTab.clicked.connect(lambda: self.tabs.setCurrentIndex(0)) def goHome(self): self.home.emit() def defineCampo(self, campo): if campo == 'nU': self.usuarioModel.nomeUsuario = self.leNomeUsuario.text( ).capitalize() if campo == 'nE': self.usuarioModel.nomeEmpresa = self.leNomeEmpresa.text().title() if campo == 'nF': self.usuarioModel.nomeFantasia = self.leNomeFantasia.text().title() if campo == 'cnpj': if self.leCNPJ.text().isnumeric(): self.usuarioModel.cnpj = self.leCNPJ.text() else: self.apresentaAviso('Digite apenas números') print('Erro ao inserir CNPJ') self.leCNPJ.setText("") if campo == 'email': self.usuarioModel.email = self.leEmail.text() if campo == 'tel': if self.leTelefone.text().isnumeric(): self.usuarioModel.tel = self.leTelefone.text() else: self.apresentaAviso('Digite apenas números') print('Digite apenas números') self.leTelefone.setText("") return False if campo == 'end': self.usuarioModel.endereco = self.leEndereco.text().capitalize() if campo == 'cid': self.usuarioModel.cidade = self.leCidade.text().title() if campo == 'comp': self.usuarioModel.complemento = self.leComplemento.text().title() if campo == 'cep': if self.leCEP.text().isnumeric(): self.usuarioModel.cep = self.leCEP.text() else: self.apresentaAviso('Digite apenas números') print('Erro ao inserir CEP') self.leCEP.setText("") if campo == 'bairro': self.usuarioModel.bairro = self.leBairro.text().title() def trataCadastro(self): wdgLista = [ self.leCEP, self.leCNPJ, self.leEmail, self.leSenha, self.leEndereco, self.leTelefone, self.leSenhaConfirma, self.leNomeEmpresa ] for wdg in wdgLista: if wdg.text() == "": self.apresentaAviso('Informação faltante') print("Informação faltante") return False if self.leSenha.text() != self.leSenhaConfirma.text(): self.apresentaAviso('As senhas não coincidem') print("As senhas não coincidem") return False self.usuarioModel.senha = bcrypt.hashpw( self.leSenha.text().encode('utf-8'), bcrypt.gensalt()).decode('utf-8') if self.daoUsuario.cadastreUsuario(self.usuarioModel): print('Usuário cadastrado com sucesso') self.goHome() return True else: self.apresentaAviso('Deu merda no cadastro') def insereMascara(self, campo): if campo == 'cnpj': if not self.leCNPJ.text() == "": self.leCNPJ.setText(mascaraCNPJ(self.usuarioModel.cnpj)) if campo == 'tel': if not self.leTelefone.text() == "": self.leTelefone.setText( mascaraCelular(str(self.usuarioModel.tel))) def trataCep(self, *args): if not self.leCEP.text() == "": self.leCEP.setText(mascaraCep(str(self.usuarioModel.cep))) response = requests.get( f'http://viacep.com.br/ws/{str(self.usuarioModel.cep)}/json/') if response.status_code == 200: dictEndereco = json.loads(response.text) self.leEndereco.setText(dictEndereco['logradouro'].title()) self.usuarioModel.endereco = dictEndereco['logradouro'].title() self.leCidade.setText(dictEndereco['localidade'].title()) self.usuarioModel.cidade = dictEndereco['localidade'].title() self.leBairro.setText(dictEndereco['bairro'].capitalize()) self.usuarioModel.bairro = dictEndereco['bairro'].capitalize() self.cbxEstados.setCurrentText( self.daoConfig.getEstados(dictEndereco['uf'])[0]) else: print( f'Falha na conexão - Código de status: {response.status_code}' ) return False def apresentaAviso(self, mensagem: str): self.lbSnackBarCadastro.setText(mensagem) self.frSnackBarCadastro.show() self.timer.start(5000) def escondeSnackbar(self): self.lbSnackBarCadastro.setText('') self.frSnackBarCadastro.hide()