コード例 #1
0
    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()
コード例 #2
0
    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')
コード例 #3
0
    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))
コード例 #4
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)
コード例 #5
0
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()
コード例 #6
0
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)
コード例 #7
0
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()