Projeto de Cadastro de empresas
Sou iniciante e entusiasta em programação, nunca fiz curso ou algo parecido, sou apenas um autodidata, estou criando o meu primeiro projeto, é um sistema de cadastro de clientes que busca os dados da API da receita federal(cartão CNPJ) utilizando linguagem py(versão 3.11) e banco de dados sqlite3, já criei a interface no QT, já converti para ui_main.py, escrevi o main_py a database.py, e o ui_funtions.py, pois esse sistema é integrado para buscar informações do CNPJ da API da receita federal através de uma QTablewidget,(tab_company) na primeira tela é digitado o CNPJ, e através da API os dados da empresa são retornados automaticamente para campos criados no QTablewidget (optei por escolher para que o código busque campos específicos do cartão CNPJ e não todos, configurei main.py e ui_funtions.py para isto). Ao clicar no botão cadastrar da interface(pushButton_5) automaticamente essas informações são jogadas para uma tabela QTablewidget(tab_company) onde possui três botões: Gerar Excel, Alterar, Excluir, eu no momento estou trabalhando na opção: Alterar, chamando uma função update_company mas travei neste passo pois ocorre que, quando faço uma alteração em qualquer dado de uma empresa cadastrada e clico em alterar é retornada a msg box: Dados alterados com sucesso! OK, porém quando vou verificar na base de dados nada foi alterado, já exclui a base e criei uma nova porém o problema persiste, já peguei o arquivo da base(system.db) e joguei em um visualizador Sqlite e os dados permanecem sem as alterações que fiz nos testes. Já adicionei linhas de depuração porém no console não é retornado nenhum erro, já fiz os testes de conexão com banco de dados e ela abre e fecha com sucesso conforme mostrado no console, já verifiquei se há exceções ao atualizar o banco de dados porém o console também não retorna erros, algum dos colegas poderia me ajudar a resolver este mistério? Vou compartilhar aqui a parte do código main.py que estou trabalhando no momento caso seja necessário posso postar também database.py e ui_funtions.py, segue parte do main.py:
Main.py
Main.py
def update_company(self): # Verifique se algum item está selecionado na tabela selected_items = self.tab_company.selectedItems() if not selected_items or len(selected_items) < 12: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Selecione uma empresa para atualizar.") msg.exec() return # Obtenha os dados da linha selecionada selected_row = [selected_items[i].text() for i in range(12)] # Defina o campo de tributação como vazio (ou qualquer valor padrão que desejar) selected_row.append("") # Você pode definir um valor padrão aqui try: print("Antes de atualizar no banco de dados") # ATUALIZAR DADOS NO BANCO db = Data_base() db.connect() db.update_company(tuple(selected_row)) db.close_connection() print("Após atualizar no banco de dados") msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("Dados atualizados com sucesso!") msg.exec() # Limpa a tabela completamente self.tab_company.clearContents() # Recarrega os dados da tabela self.buscar_empresas() except Exception as e: print(f"Erro ao atualizar dados no banco de dados: ")
Wanderlan
Curtidas 0
Respostas
Wanderlan
04/10/2023
esse é meu database.py
import sqlite3 class Data_base: def __init__(self, name=''system.db'') -> None: self.name = name def connect(self): try: print("Abrindo conexão com o banco de dados...") self.connection = sqlite3.connect(self.name) print("Conexão aberta com sucesso!") except Exception as e: print(f"Erro ao abrir a conexão com o banco de dados: ") def close_connection(self): try: print("Fechando conexão com o banco de dados...") self.connection.close() print("Conexão fechada com sucesso!") except Exception as e: print(f"Erro ao fechar a conexão com o banco de dados: ") def create_table_company(self): cursor = self.connection.cursor() cursor.execute(""" CREATE TABLE IF NOT EXISTS Empresa ( CNPJ TEXT PRIMARY KEY, NOME TEXT, LOGRADOURO TEXT, NUMERO TEXT, COMPLEMENTO TEXT, BAIRRO TEXT, CEP TEXT, MUNICIPIO TEXT, UF TEXT, TELEFONE TEXT, EMAIL TEXT, TRIBUTACAO TEXT ) """) def register_company(self, fullDataSet): campos_tabela = (''CNPJ'', ''NOME'', ''LOGRADOURO'', ''NUMERO'', ''COMPLEMENTO'', ''BAIRRO'', ''CEP'', ''MUNICIPIO'', ''UF'', ''TELEFONE'', ''EMAIL'', ''TRIBUTACAO'') qntd = "?,?,?,?,?,?,?,?,?,?,?,?" cursor = self.connection.cursor() try: cursor.execute(f"""INSERT INTO Empresa ({", ".join(campos_tabela)}) VALUES()""", fullDataSet) self.connection.commit() # Certifique-se de realizar o commit após a inserção. print("Registro inserido com sucesso!") return "OK" except Exception as e: print(f"Erro ao inserir registro: ") return "Erro" def select_all_companies(self): try: cursor = self.connection.cursor() cursor.execute("SELECT * FROM Empresa ORDER BY NOME") empresas = cursor.fetchall() print("Dados recuperados com sucesso!") return empresas except Exception as e: print(f"Erro ao recuperar dados: ") return None def delete_company(self, id): try: cursor = self.connection.cursor() cursor.execute(f"DELETE FROM Empresa WHERE CNPJ = '''' ") self.connection.commit() return "Cadastro de empresa excluído com sucesso!" except: return "Erro ao excluir registro!" def update_company(self, fullDataSet): cursor = self.connection.cursor() cursor.execute(f"""UPDATE Empresa SET CNPJ = ?, NOME = ?, LOGRADOURO = ?, NUMERO = ?, COMPLEMENTO = ?, BAIRRO = ?, CEP = ?, MUNICIPIO = ?, UF = ?, TELEFONE = ?, EMAIL = ?, TRIBUTACAO = ? WHERE CNPJ = ?""", fullDataSet) self.connection.commit()
GOSTEI 0
Wanderlan
04/10/2023
este é o main.py completo
from PySide6.QtCore import Qt, QEasingCurve, QPropertyAnimation from PySide6.QtGui import QIcon from PySide6.QtWidgets import ( QApplication, QMainWindow, QStyleFactory, QMessageBox, QTableWidgetItem ) from ui_main import Ui_MainWindow import sys from ui_funtions import consulta_cnpj from database import Data_base class MainWindow(QMainWindow, Ui_MainWindow): def __init__(self): super(MainWindow, self).__init__() self.setupUi(self) self.setWindowTitle("ATRIBUT - Sistema de cadastro") appIcon = QIcon() # Use QtGui.QIcon() self.setWindowIcon(appIcon) # TOGGLE BUTTON self.btn_toggle.clicked.connect(self.leftMenu) # PÁGINAS DO SISTEMA self.btn_home.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_home)) # Botão à esquerda (navegar para a página de cadastro) self.btn_cadastrar.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_cadastrar)) # Botão inferior (cadastrar a empresa) self.pushButton_5.clicked.connect(self.cadastrar_empresas) # Nome corrigido self.btn_alterar.clicked.connect(self.update_company) self.buscar_empresas() self.btn_sobre.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_sobre)) self.btn_contatos.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_contatos)) # PREENCHER AUTOMATICAMENTE OS DADOS DO CNPJ self.txt_cnpj.editingFinished.connect(self.consult_api) def leftMenu(self): width = self.left_menu.width() if width == 9: newWidth = 200 else: newWidth = 9 self.animation = QPropertyAnimation(self.left_menu, b"maximumWidth") self.animation.setDuration(500) self.animation.setStartValue(width) self.animation.setEndValue(newWidth) self.animation.setEasingCurve(QEasingCurve.InOutQuart) self.animation.start() def consult_api(self): campos = consulta_cnpj(self.txt_cnpj.text()) # Organize os dados corretamente self.txt_cnpj.setText(campos[0]) # CNPJ self.txt_nome.setText(campos[1]) # Nome da empresa self.txt_logradouro.setText(campos[2]) # Logradouro self.txt_numero.setText(campos[3]) # Número do estabelecimento self.txt_complemento.setText(campos[4]) # Complemento do endereço self.txt_bairro.setText(campos[5]) # Bairro da empresa self.txt_municipio.setText(campos[6]) # Município self.txt_uf.setText(campos[7]) # UF self.txt_cep.setText(campos[8].replace('.', '').replace('-', '')) # CEP self.txt_telefone.setText(campos[9].replace('(', '').replace('-', '').replace(')', '')) # Telefone self.txt_email.setText(campos[10]) # Email self.txt_tributacao.setText("") # Deixe o campo de Tributação em branco def cadastrar_empresas(self): db = Data_base() db.connect() # Verifique se o campo de tributação foi preenchido corretamente tributacao = self.txt_tributacao.text().strip().lower() # Converte para minúsculas tributacao_valida = tributacao in ["mei", "simples nacional", "imune", "isenta", "lucro presumido", "lucro real"] if not tributacao_valida: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setWindowTitle("Erro de Tributação") msg.setText("Informe o regime de tributação!\\nOpções válidas: MEI, SIMPLES NACIONAL, IMUNE, ISENTA, LUCRO PRESUMIDO, LUCRO REAL") msg.exec() db.close_connection() return # Organize os dados na ordem correta das colunas fullDataSet = ( self.txt_cnpj.text(), self.txt_nome.text(), self.txt_logradouro.text(), self.txt_numero.text(), self.txt_complemento.text(), self.txt_bairro.text(), self.txt_cep.text(), self.txt_municipio.text(), self.txt_uf.text(), self.txt_telefone.text().strip(), self.txt_email.text(), tributacao, # Use a tributação validada aqui ) # CADASTRAR NO BANCO DE DADOS resp = db.register_company(fullDataSet) self.buscar_empresas() if resp == "OK": msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setWindowTitle("Cadastro realizado") msg.setText("Cadastro realizado com sucesso") msg.exec() db.close_connection() return else: msg = QMessageBox() msg.setIcon(QMessageBox.Critical) msg.setWindowTitle("Erro") msg.setText("Erro ao cadastrar, verifique se as informações foram preenchidas corretamente!") msg.exec() db.close_connection() return def buscar_empresas(self): db = Data_base() db.connect() result = db.select_all_companies() self.tab_company.clearContents() self.tab_company.setRowCount(len(result)) for row, text in enumerate(result): for column, data in enumerate(text): self.tab_company.setItem(row, column, QTableWidgetItem(str(data))) db.close_connection() def update_company(self): # Verifique se algum item está selecionado na tabela selected_items = self.tab_company.selectedItems() if not selected_items or len(selected_items) < 12: msg = QMessageBox() msg.setIcon(QMessageBox.Warning) msg.setText("Selecione uma empresa para atualizar.") msg.exec() return # Obtenha os dados da linha selecionada selected_row = [selected_items[i].text() for i in range(12)] # Defina o campo de tributação como vazio (ou qualquer valor padrão que desejar) selected_row.append("") # Você pode definir um valor padrão aqui try: print("Antes de atualizar no banco de dados") # ATUALIZAR DADOS NO BANCO db = Data_base() db.connect() db.update_company(tuple(selected_row)) db.close_connection() print("Após atualizar no banco de dados") msg = QMessageBox() msg.setIcon(QMessageBox.Information) msg.setText("Dados atualizados com sucesso!") msg.exec() # Limpa a tabela completamente self.tab_company.clearContents() # Recarrega os dados da tabela self.buscar_empresas() except Exception as e: print(f"Erro ao atualizar dados no banco de dados: ") if __name__ == "__main__": db = Data_base() db.connect() db.create_table_company() db.close_connection() app = QApplication(sys.argv) app.setStyle(QStyleFactory.create("WindowsVista")) window = MainWindow() window.show() sys.exit(app.exec())
GOSTEI 0
Wanderlan
04/10/2023
e este é meu ui_funtions.py
import requests import json def consulta_cnpj(cnpj): url = f"https://www.receitaws.com.br/v1/cnpj/" querystring = {"token": "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX", "cnpj": cnpj, "plugin": "RF"} response = requests.get(url, params=querystring) if response.status_code == 200: resp = json.loads(response.text) # Mapeie os dados da API para os campos corretos return ( resp.get('cnpj', ''), resp.get('nome', ''), resp.get('logradouro', ''), resp.get('numero', ''), resp.get('complemento', ''), resp.get('bairro', ''), resp.get('municipio', ''), resp.get('uf', ''), resp.get('cep', '').replace('.', '').replace('-', ''), resp.get('telefone', '').replace('(', '').replace('-', '').replace(')', ''), resp.get('email', ''), "" ) else: print(f"Erro ao consultar CNPJ: Código de status {response.status_code}") return None
GOSTEI 0
Nomad
04/10/2023
Me parece que na update_company, vc esqueceu de comitar as alterações.
GOSTEI 0