├── icone.ico ├── _imgs ├── email.png ├── logo.PNG ├── phone.png ├── user.png └── instagram.png ├── __pycache__ ├── xml.cpython-39.pyc ├── main.cpython-39.pyc ├── database.cpython-39.pyc ├── ui_login.cpython-39.pyc ├── ui_main.cpython-39.pyc └── xml_files.cpython-39.pyc ├── .gitignore ├── main.spec ├── xml_files.py ├── ui_login.py ├── login.ui ├── database.py ├── main.py ├── ui_main.py └── ui_main.ui /icone.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/icone.ico -------------------------------------------------------------------------------- /_imgs/email.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/_imgs/email.png -------------------------------------------------------------------------------- /_imgs/logo.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/_imgs/logo.PNG -------------------------------------------------------------------------------- /_imgs/phone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/_imgs/phone.png -------------------------------------------------------------------------------- /_imgs/user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/_imgs/user.png -------------------------------------------------------------------------------- /_imgs/instagram.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/_imgs/instagram.png -------------------------------------------------------------------------------- /__pycache__/xml.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/xml.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/main.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/main.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/database.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/database.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/ui_login.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/ui_login.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/ui_main.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/ui_main.cpython-39.pyc -------------------------------------------------------------------------------- /__pycache__/xml_files.cpython-39.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pytax/Sistema-de-Gerenciamento-de-Estoque/HEAD/__pycache__/xml_files.cpython-39.pyc -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv 2 | files 3 | .idea 4 | build 5 | dist 6 | icons 7 | icons.qrc 8 | Resumo de notas.xlsx 9 | Sistema de gerenciamento.exe 10 | system.db 11 | ui_main.ui 12 | ui_main_pt.ui 13 | index.html 14 | Media 15 | player 16 | xml 17 | dist 18 | 19 | 20 | -------------------------------------------------------------------------------- /main.spec: -------------------------------------------------------------------------------- 1 | # -*- mode: python ; coding: utf-8 -*- 2 | 3 | 4 | block_cipher = None 5 | 6 | 7 | a = Analysis(['main.py'], 8 | pathex=['C:\\Users\\nicol\\OneDrive\\Canal Youtube\\PyTax\\Interface - Pyside2\\Project_01_system'], 9 | binaries=[], 10 | datas=[], 11 | hiddenimports=[], 12 | hookspath=[], 13 | hooksconfig={}, 14 | runtime_hooks=[], 15 | excludes=[], 16 | win_no_prefer_redirects=False, 17 | win_private_assemblies=False, 18 | cipher=block_cipher, 19 | noarchive=False) 20 | pyz = PYZ(a.pure, a.zipped_data, 21 | cipher=block_cipher) 22 | 23 | exe = EXE(pyz, 24 | a.scripts, 25 | a.binaries, 26 | a.zipfiles, 27 | a.datas, 28 | [], 29 | name='main', 30 | debug=False, 31 | bootloader_ignore_signals=False, 32 | strip=False, 33 | upx=True, 34 | upx_exclude=[], 35 | runtime_tmpdir=None, 36 | console=False, 37 | disable_windowed_traceback=False, 38 | target_arch=None, 39 | codesign_identity=None, 40 | entitlements_file=None , icon='icone.ico') 41 | -------------------------------------------------------------------------------- /xml_files.py: -------------------------------------------------------------------------------- 1 | import os 2 | import xml.etree.ElementTree as Et 3 | from datetime import date 4 | 5 | class Read_xml(): 6 | def __init__(self, directory) -> None: 7 | self.directory = directory 8 | 9 | def all_files(self): 10 | return [ os.path.join(self.directory, arq) for arq in os.listdir(self.directory) 11 | if arq.lower().endswith(".xml")] 12 | 13 | 14 | def nfe_data(self, xml): 15 | root = Et.parse(xml).getroot() 16 | nsNFe = {"ns": "http://www.portalfiscal.inf.br/nfe"} 17 | 18 | #DADOS DA NFE 19 | NFe = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:ide/ns:nNF", nsNFe)) #1 20 | serie = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:ide/ns:serie", nsNFe)) #2 21 | data_emissao = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:ide/ns:dhEmi", nsNFe)) 22 | data_emissao = F"{data_emissao[8:10]}/{data_emissao[5:7]}/{data_emissao[:4]}" 23 | 24 | # DADOS EMITENTES 25 | chave = self.check_none(root.find("./ns:protNFe/ns:infProt/ns:chNFe", nsNFe)) 26 | cnpj_emitente = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:emit/ns:CNPJ", nsNFe)) 27 | nome_emitente = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:emit/ns:xNome", nsNFe)) #1 28 | 29 | cnpj_emitente = self.format_cnpj(cnpj_emitente) 30 | valorNfe = self.check_none(root.find("./ns:NFe/ns:infNFe/ns:total/ns:ICMSTot/ns:vNF", nsNFe)) #13 31 | data_importacao = date.today() 32 | data_importacao = data_importacao.strftime('%d/%m/%Y') 33 | data_saida = "" 34 | usuario = '' 35 | 36 | itemNota = 1 37 | notas = [] 38 | 39 | for item in root.findall("./ns:NFe/ns:infNFe/ns:det", nsNFe): 40 | 41 | # DADOS DO ITEM ======================================================================================= 42 | cod = self.check_none(item.find(".ns:prod/ns:cProd", nsNFe)) 43 | qntd = self.check_none(item.find(".ns:prod/ns:qCom", nsNFe)) 44 | descricao = self.check_none(item.find(".ns:prod/ns:xProd", nsNFe)) 45 | unidade_medida = self.check_none(item.find(".ns:prod/ns:uCom", nsNFe)) 46 | valorProd = self.check_none(item.find (".ns:prod/ns:vProd", nsNFe)) 47 | 48 | dados = [NFe, serie, data_emissao,chave, cnpj_emitente, nome_emitente, 49 | valorNfe, itemNota, cod, qntd, descricao, unidade_medida, valorProd, 50 | data_importacao, usuario, data_saida] 51 | 52 | notas.append(dados) 53 | itemNota +=1 54 | return notas 55 | 56 | def check_none(self, var): 57 | if var == None: 58 | return "" 59 | else: 60 | try: 61 | return var.text.replace('.',',') 62 | except: 63 | return var.text 64 | 65 | def format_cnpj(self, cnpj): 66 | try: 67 | cnpj = f'{cnpj[:2]}.{cnpj[2:5]}.{cnpj[5:8]}/{cnpj[8:12]}-{cnpj[12:14]}' 68 | return cnpj 69 | 70 | except: 71 | return "" 72 | 73 | if __name__ == "__main__": 74 | xml = Read_xml('C:\\Users\\nicol\\OneDrive\\Canal Youtube\\PyTax\\Interface - Pyside2\\Project_01_system\\xml') 75 | all = xml.all_files() 76 | 77 | for i in all: 78 | result = xml.nfe_data(i) 79 | 80 | print(result) -------------------------------------------------------------------------------- /ui_login.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'login.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 5.15.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide2.QtCore import * 12 | from PySide2.QtGui import * 13 | from PySide2.QtWidgets import * 14 | 15 | 16 | class Ui_Login(object): 17 | def setupUi(self, Login): 18 | if not Login.objectName(): 19 | Login.setObjectName(u"Login") 20 | Login.resize(532, 506) 21 | Login.setStyleSheet(u"background-color: rgb(0, 80, 121);") 22 | self.label = QLabel(Login) 23 | self.label.setObjectName(u"label") 24 | self.label.setGeometry(QRect(190, 30, 151, 141)) 25 | self.label.setStyleSheet(u"background-color:None;") 26 | self.label.setPixmap(QPixmap(u"../../../../Projetos/Empresas/Transtellini/Icons/icon_title.png")) 27 | self.label.setScaledContents(True) 28 | self.frame = QFrame(Login) 29 | self.frame.setObjectName(u"frame") 30 | self.frame.setGeometry(QRect(80, 140, 381, 321)) 31 | self.frame.setStyleSheet(u"background-color: rgba(0,0,0,0.2)") 32 | self.frame.setFrameShape(QFrame.StyledPanel) 33 | self.frame.setFrameShadow(QFrame.Raised) 34 | self.txt_login = QLineEdit(self.frame) 35 | self.txt_login.setObjectName(u"txt_login") 36 | self.txt_login.setGeometry(QRect(60, 60, 251, 31)) 37 | self.txt_login.setStyleSheet(u"color:#fff; font-size: 16px;") 38 | self.txt_login.setAlignment(Qt.AlignCenter) 39 | self.btn_login = QPushButton(self.frame) 40 | self.btn_login.setObjectName(u"btn_login") 41 | self.btn_login.setGeometry(QRect(100, 230, 181, 41)) 42 | self.btn_login.setCursor(QCursor(Qt.PointingHandCursor)) 43 | self.btn_login.setStyleSheet(u"QPushButton{color: rgb(255, 255, 255); border-radius: 10px; font-size: 16px; background-color:rgb(0, 0, 10);;}\n" 44 | "\n" 45 | "QPushButton:hover{background-color: #fff; color:black}\n" 46 | "\n" 47 | "") 48 | self.txt_password = QLineEdit(self.frame) 49 | self.txt_password.setObjectName(u"txt_password") 50 | self.txt_password.setGeometry(QRect(60, 140, 251, 31)) 51 | self.txt_password.setStyleSheet(u"color:#fff; font-size: 16px;") 52 | self.txt_password.setEchoMode(QLineEdit.Password) 53 | self.txt_password.setAlignment(Qt.AlignCenter) 54 | QWidget.setTabOrder(self.txt_login, self.txt_password) 55 | QWidget.setTabOrder(self.txt_password, self.btn_login) 56 | 57 | self.retranslateUi(Login) 58 | 59 | QMetaObject.connectSlotsByName(Login) 60 | # setupUi 61 | 62 | def retranslateUi(self, Login): 63 | Login.setWindowTitle(QCoreApplication.translate("Login", u"Form", None)) 64 | self.label.setText("") 65 | self.txt_login.setText("") 66 | self.txt_login.setPlaceholderText(QCoreApplication.translate("Login", u"User", None)) 67 | self.btn_login.setText(QCoreApplication.translate("Login", u"LOGIN", None)) 68 | self.txt_password.setText("") 69 | self.txt_password.setPlaceholderText(QCoreApplication.translate("Login", u"Password", None)) 70 | # retranslateUi 71 | 72 | -------------------------------------------------------------------------------- /login.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | Login 4 | 5 | 6 | 7 | 0 8 | 0 9 | 532 10 | 506 11 | 12 | 13 | 14 | Form 15 | 16 | 17 | background-color: rgb(0, 80, 121); 18 | 19 | 20 | 21 | 22 | 190 23 | 30 24 | 151 25 | 141 26 | 27 | 28 | 29 | background-color:None; 30 | 31 | 32 | 33 | 34 | 35 | ../../../../Projetos/Empresas/Transtellini/Icons/icon_title.png 36 | 37 | 38 | true 39 | 40 | 41 | 42 | 43 | 44 | 80 45 | 140 46 | 381 47 | 321 48 | 49 | 50 | 51 | background-color: rgba(0,0,0,0.2) 52 | 53 | 54 | QFrame::StyledPanel 55 | 56 | 57 | QFrame::Raised 58 | 59 | 60 | 61 | 62 | 60 63 | 60 64 | 251 65 | 31 66 | 67 | 68 | 69 | color:#fff; font-size: 16px; 70 | 71 | 72 | 73 | 74 | 75 | Qt::AlignCenter 76 | 77 | 78 | User 79 | 80 | 81 | 82 | 83 | 84 | 100 85 | 230 86 | 181 87 | 41 88 | 89 | 90 | 91 | PointingHandCursor 92 | 93 | 94 | QPushButton{color: rgb(255, 255, 255); border-radius: 10px; font-size: 16px; background-color:rgb(0, 0, 10);;} 95 | 96 | QPushButton:hover{background-color: #fff; color:black} 97 | 98 | 99 | 100 | 101 | LOGIN 102 | 103 | 104 | 105 | 106 | 107 | 60 108 | 140 109 | 251 110 | 31 111 | 112 | 113 | 114 | color:#fff; font-size: 16px; 115 | 116 | 117 | 118 | 119 | 120 | QLineEdit::Password 121 | 122 | 123 | Qt::AlignCenter 124 | 125 | 126 | Password 127 | 128 | 129 | 130 | 131 | 132 | txt_login 133 | txt_password 134 | btn_login 135 | 136 | 137 | 138 | 139 | -------------------------------------------------------------------------------- /database.py: -------------------------------------------------------------------------------- 1 | import sqlite3 2 | from sqlite3.dbapi2 import Cursor 3 | 4 | 5 | class DataBase(): 6 | def __init__(self, name = "system.db") -> None: 7 | self.name = name 8 | def conecta(self): 9 | self.connection = sqlite3.connect(self.name) 10 | 11 | def close_connection(self): 12 | try: 13 | self.connection.close() 14 | except: 15 | pass 16 | 17 | def create_table_users(self): 18 | try: 19 | cursor = self.connection.cursor() 20 | cursor.execute(""" 21 | 22 | CREATE TABLE IF NOT EXISTS users( 23 | 24 | id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, 25 | name TEXT NOT NULL, 26 | user TEXT UNIQUE NOT NULL, 27 | password TEXT NOT NULL, 28 | access TEXT NOT NULL 29 | 30 | ); 31 | 32 | """) 33 | except AttributeError: 34 | print("faça a conexão") 35 | 36 | def insert_user(self, name, user, password, access): 37 | 38 | cursor = self.connection.cursor() 39 | cursor.execute(""" 40 | 41 | INSERT INTO users(name, user, password, access) VALUES(?,?,?,?) 42 | 43 | """,(name,user, password, access)) 44 | self.connection.commit() 45 | 46 | def check_user(self, user, password): 47 | 48 | try: 49 | cursor = self.connection.cursor() 50 | cursor.execute(""" 51 | 52 | SELECT * FROM users; 53 | 54 | """) 55 | 56 | for linha in cursor.fetchall(): 57 | if linha[2].upper() == user.upper() and linha[3] == password and linha[4] == "Administrador": 58 | return "Administrador" 59 | 60 | elif linha[2].upper() == user.upper() and linha[3] == password and linha[4] == "Usuário": 61 | return "user" 62 | 63 | else: 64 | continue 65 | return "sem acesso" 66 | except: 67 | pass 68 | 69 | def insert_data(self, full_dataset): 70 | 71 | cursor = self.connection.cursor() 72 | 73 | campos_tabela = ( 74 | 'NFe','serie','data_emissao','chave','cnpj_emitente','nome_emitente', 75 | 'valorNfe','itemNota','cod','qntd','descricao','unidade_medida','valorProd', 76 | 'data_importacao','usuario','data_saida' ) 77 | qntd = ','.join(map(str, '?'*16)) 78 | query = f"""INSERT INTO Notas {campos_tabela} VALUES ({qntd})""" 79 | 80 | try: 81 | for nota in full_dataset: 82 | cursor.execute(query, tuple(nota)) 83 | self.connection.commit() 84 | except sqlite3.IntegrityError: 85 | print('Nota já existe no banco') 86 | 87 | def create_table_nfe(self): 88 | 89 | cursor = self.connection.cursor() 90 | 91 | cursor.execute(f""" 92 | 93 | CREATE TABLE IF NOT EXISTS Notas( 94 | 95 | NFe TEXT, 96 | serie TEXT, 97 | data_emissao TEXT, 98 | chave TEXT, 99 | cnpj_emitente TEXT, 100 | nome_emitente TEXT, 101 | valorNfe TEXT, 102 | itemNota TEXT, 103 | cod TEXT, 104 | qntd TEXT, 105 | descricao TEXT, 106 | unidade_medida TEXT, 107 | valorProd TEXT, 108 | data_importacao TEXT, 109 | usuario TEXT, 110 | data_saida TEXT, 111 | 112 | 113 | 114 | PRIMARY KEY(Chave, Nfe, itemNota) 115 | 116 | ); 117 | 118 | """) 119 | 120 | def uptdate_estoque(self, data_saida, user, notas): 121 | try: 122 | cursor = self.connection.cursor() 123 | for nota in notas: 124 | cursor.execute(f"""UPDATE Notas SET Data_saida = '{data_saida}', 125 | usuario ='{user}' WHERE Nfe = '{nota}'""") 126 | self.connection.commit() 127 | 128 | except AttributeError: 129 | print("faça a conexão para alterar campos") 130 | 131 | def update_estorno(self, notas): 132 | 133 | try: 134 | cursor = self.connection.cursor() 135 | 136 | for nota in notas: 137 | cursor.execute(f"UPDATE Notas SET Data_saida = '' WHERE NFe = {nota}" ) 138 | 139 | self.connection.commit() 140 | 141 | except AttributeError: 142 | print('faça a conexão para alterar campos.') 143 | 144 | if __name__ == "__main__": 145 | 146 | db = DataBase() 147 | db.conecta() 148 | db.create_table_users() 149 | db.create_table_nfe() 150 | db.close_connection() 151 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | from os import access 2 | 3 | from PySide2 import QtCore 4 | from PySide2.QtGui import QIcon 5 | from numpy import equal 6 | from xml_files import Read_xml 7 | from PySide2.QtWidgets import(QApplication, QFileDialog, 8 | QMainWindow, QMessageBox, QTreeWidgetItem, QWidget) 9 | from ui_login import Ui_Login 10 | from ui_main import Ui_MainWindow 11 | import sys 12 | from database import DataBase 13 | from xml_files import Read_xml 14 | import sqlite3 15 | import pandas as pd 16 | from PySide2.QtSql import QSqlDatabase, QSqlTableModel 17 | import re 18 | from datetime import date 19 | import matplotlib.pyplot as plt 20 | 21 | 22 | class Login(QWidget, Ui_Login): 23 | def __init__(self) -> None: 24 | super(Login, self).__init__() 25 | self.tentativas = 0 26 | self.setupUi(self) 27 | self.setWindowTitle("Login do Sistema") 28 | appIcon = QIcon('_imgs/logo.PNG') 29 | self.setWindowIcon(appIcon) 30 | 31 | self.btn_login.clicked.connect(self.checkLogin) 32 | 33 | 34 | def checkLogin(self): 35 | 36 | self.users = DataBase() 37 | self.users.conecta() 38 | autenticado = self.users.check_user(self.txt_login.text().upper(), self.txt_password.text()) 39 | 40 | if autenticado.lower() == "administrador" or autenticado.lower() == "user": 41 | 42 | self.w = MainWindow(self.txt_login.text(), autenticado.lower()) 43 | self.w.show() 44 | self.close() 45 | else: 46 | 47 | if self.tentativas < 3: 48 | msg = QMessageBox() 49 | msg.setIcon(QMessageBox.Warning) 50 | msg.setWindowTitle("Erro ao acessar") 51 | msg.setText(f'Login ou senha incorreto \n \n Tentativa: {self.tentativas +1} de 3') 52 | msg.exec_() 53 | self.tentativas += 1 54 | if self.tentativas == 3: 55 | #bloquear o usuário 56 | self.users.close_connection() 57 | sys.exit(0) 58 | 59 | 60 | class MainWindow(QMainWindow, Ui_MainWindow): 61 | def __init__(self, username, user): 62 | super(MainWindow, self).__init__() 63 | self.setupUi(self) 64 | self.setWindowTitle("Sistema de gerenciamento") 65 | appIcon = QIcon('_imgs/logo.PNG') 66 | self.setWindowIcon(appIcon) 67 | 68 | 69 | self.user = username 70 | if user.lower() == "user": 71 | self.btn_pg_cadastro.setVisible(False) 72 | 73 | #*************PAGINAS DO SISTEMA*********************************************** 74 | self.btn_home.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_home)) 75 | self.btn_tables.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_table)) 76 | self.btn_contato.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_contato)) 77 | self.btn_sobre.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_sobre)) 78 | self.btn_pg_cadastro.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_cadastro)) 79 | self.btn_pg_import.clicked.connect(lambda: self.Pages.setCurrentWidget(self.pg_import)) 80 | 81 | self.btn_cadastrar.clicked.connect(self.subscribe_user) 82 | 83 | #ARQUIVO XML 84 | self.btn_open.clicked.connect(self.open_path) 85 | self.btn_import.clicked.connect(self.import_xml_files) 86 | 87 | #filtro 88 | self.txt_search.textChanged.connect(self.update_filter) 89 | 90 | #gerar saida e estorno 91 | self.btn_gerar.clicked.connect(self.gerar_saida) 92 | self.btn_estorno.clicked.connect(self.gerar_estorno) 93 | 94 | self.btn_excel.clicked.connect(self.excel_file) 95 | 96 | self.btn_chart.clicked.connect(self.graphic) 97 | 98 | self.reset_table() 99 | 100 | def subscribe_user(self): 101 | 102 | if self.txt_senha.text() != self.txt_senha_2.text(): 103 | msg = QMessageBox() 104 | msg.setIcon(QMessageBox.Warning) 105 | msg.setWindowTitle("Senhas divirgentes") 106 | msg.setText("A senha não é igual!") 107 | msg.exec_() 108 | return None 109 | 110 | nome = self.txt_nome.text() 111 | user = self.txt_usuario.text() 112 | password = self.txt_senha.text() 113 | access = self.cb_perfil.currentText() 114 | 115 | db = DataBase() 116 | db.conecta() 117 | db.insert_user(nome, user, password, access) 118 | db.close_connection() 119 | 120 | msg = QMessageBox() 121 | msg.setIcon(QMessageBox.Information) 122 | msg.setWindowTitle("Cadastro de usuário") 123 | msg.setText("Cadastro realizado com sucesso!") 124 | msg.exec_() 125 | 126 | self.txt_nome.setText("") 127 | self.txt_usuario.setText("") 128 | self.txt_senha.setText("") 129 | self.txt_senha_2.setText("") 130 | 131 | def open_path(self): 132 | self.path = QFileDialog.getExistingDirectory(self,str("Open Directory"), 133 | "/home", 134 | QFileDialog.ShowDirsOnly 135 | 136 | | QFileDialog.DontResolveSymlinks) 137 | self.txt_file.setText(self.path) 138 | 139 | def import_xml_files(self): 140 | 141 | xml = Read_xml(self.txt_file.text()) 142 | all = xml.all_files() 143 | self.progressBar.setMaximum(len(all)) 144 | 145 | db = DataBase() 146 | db.conecta() 147 | cont = 1 148 | 149 | for i in all: 150 | self.progressBar.setValue(cont) 151 | fullDataSet = xml.nfe_data(i) 152 | db.insert_data(fullDataSet) 153 | cont+=1 154 | 155 | #ATUALIZA A TABELA 156 | 157 | msg = QMessageBox() 158 | msg.setIcon(QMessageBox.Information) 159 | msg.setWindowTitle("Importação XML") 160 | msg.setText("importação concluída!") 161 | msg.exec_() 162 | self.progressBar.setValue(0) 163 | 164 | 165 | 166 | 167 | db.close_connection() 168 | 169 | def table_estoque(self): 170 | 171 | self.tw_estoque.setStyleSheet(u" QHeaderView{ color:black}; color:#fff;font-size: 15px;") 172 | cn = sqlite3.connect('system.db') 173 | result = pd.read_sql_query("SELECT * FROM Notas WHERE data_saida = ''", cn) 174 | result = result.values.tolist() 175 | 176 | self.x = "" 177 | 178 | for i in result: 179 | #faz o check para identificar a mesma nota e adicionar um nivel 180 | if i[0] == self.x: 181 | QTreeWidgetItem(self.campo, i) 182 | else: 183 | self.campo = QTreeWidgetItem(self.tw_estoque, i) 184 | self.campo.setCheckState(0, QtCore.Qt.CheckState.Unchecked) 185 | 186 | self.x = i[0] 187 | 188 | self.tw_estoque.setSortingEnabled(True) 189 | 190 | for i in range(1,15): 191 | self.tw_estoque.resizeColumnToContents(i) 192 | 193 | def table_saida(self): 194 | 195 | self.tw_saida.setStyleSheet(u" QHeaderView{ color:black}; color:#fff;font-size: 15px;") 196 | cn = sqlite3.connect('system.db') 197 | result = pd.read_sql_query("""SELECT Nfe, serie, data_importacao, data_saida, usuario 198 | FROM Notas WHERE data_saida != ''""", cn) 199 | result = result.values.tolist() 200 | 201 | self.x = "" 202 | 203 | for i in result: 204 | #faz o check para identificar a mesma nota e adicionar um nivel 205 | if i[0] == self.x: 206 | QTreeWidgetItem(self.campo, i) 207 | else: 208 | self.campo = QTreeWidgetItem(self.tw_saida, i) 209 | self.campo.setCheckState(0, QtCore.Qt.CheckState.Unchecked) 210 | 211 | self.x = i[0] 212 | 213 | self.tw_saida.setSortingEnabled(True) 214 | 215 | for i in range(1,15): 216 | self.tw_saida.resizeColumnToContents(i) 217 | 218 | def table_geral(self): 219 | 220 | self.tb_geral.setStyleSheet(u" QHeaderView{ color:black}; color:#fff;font-size: 15px;") 221 | 222 | db = QSqlDatabase("QSQLITE") 223 | db.setDatabaseName("system.db") 224 | db.open() 225 | 226 | self.model = QSqlTableModel(db=db) 227 | self.tb_geral.setModel(self.model) 228 | self.model.setTable("Notas") 229 | self.model.select() 230 | 231 | def reset_table(self): 232 | self.tw_estoque.clear() 233 | self.tw_saida.clear() 234 | 235 | self.table_saida() 236 | self.table_estoque() 237 | self.table_geral() 238 | 239 | def update_filter(self, s): 240 | s = re.sub("[\W_]+", "", s) 241 | filter_str = 'Nfe LIKE "%{}%"'.format(s) 242 | self.model.setFilter(filter_str) 243 | 244 | def gerar_saida(self): 245 | 246 | self.checked_items_out = [] 247 | 248 | def recurse(parent_item): 249 | for i in range(parent_item.childCount()): 250 | child = parent_item.child(i) 251 | grand_children = child.childCount() 252 | if grand_children > 0: 253 | recurse(child) 254 | if child.checkState(0) == QtCore.Qt.Checked: 255 | self.checked_items_out.append(child.text(0)) 256 | 257 | recurse(self.tw_estoque.invisibleRootItem()) 258 | 259 | #Pergunta se usuario realmente deseja fazer isos. 260 | self.question('saída') 261 | 262 | def gerar_estorno(self): 263 | 264 | self.checked_items = [] 265 | 266 | def recurse(parent_item): 267 | for i in range(parent_item.childCount()): 268 | child = parent_item.child(i) 269 | grand_children = child.childCount() 270 | if grand_children > 0: 271 | recurse(child) 272 | if child.checkState(0) == QtCore.Qt.Checked: 273 | self.checked_items.append(child.text(0)) 274 | 275 | recurse(self.tw_saida.invisibleRootItem()) 276 | self.question('estorno') 277 | 278 | def question(self, table): 279 | 280 | msgBox = QMessageBox() 281 | 282 | if table == 'estorno': 283 | msgBox.setText("Deseja estornar as notas selecionadas?") 284 | msgBox.setInformativeText("As selecionadas voltarão para o estoque \n clique em 'Yes' para confirmar.") 285 | msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) 286 | msgBox.setDetailedText(f"Notas: {self.checked_items}") 287 | 288 | else: 289 | msgBox.setText("Deseja Gerar saída das nota selecionadas?") 290 | msgBox.setInformativeText("As notas abaixo será baixada no estoque \n clique em 'Yes' para confirmar.") 291 | msgBox.setStandardButtons(QMessageBox.Yes | QMessageBox.No) 292 | msgBox.setDetailedText(f"Notas: {self.checked_items_out}") 293 | 294 | msgBox.setIcon(QMessageBox.Question) 295 | ret = msgBox.exec_() 296 | 297 | if ret == QMessageBox.Yes: 298 | if table == "estorno": 299 | self.db = DataBase() 300 | self.db.conecta() 301 | self.db.update_estorno(self.checked_items) 302 | self.db.close_connection() 303 | self.reset_table() 304 | else: 305 | data_saida = date.today() 306 | data_saida = data_saida.strftime('%d/%m/%Y') 307 | self.db = DataBase() 308 | self.db.conecta() 309 | self.db.uptdate_estoque(data_saida, self.user, self.checked_items_out) 310 | self.db.close_connection() 311 | self.reset_table() 312 | 313 | def excel_file(self): 314 | 315 | cnx = sqlite3.connect('system.db') 316 | result = pd.read_sql_query("SELECT * FROM Notas", cnx) 317 | result.to_excel("Resumo de notas.xlsx", sheet_name='Notas', index=False) 318 | 319 | msg = QMessageBox() 320 | msg.setIcon(QMessageBox.Information) 321 | msg.setWindowTitle("Relatório de Notas") 322 | msg.setText("Relatório gerado com sucesso!") 323 | msg.exec_() 324 | 325 | def graphic(self): 326 | 327 | cnx = sqlite3.connect("system.db") 328 | estoque = pd.read_sql_query('SELECT * FROM Notas', cnx) 329 | saida = pd.read_sql_query("SELECT * FROM Notas WHERE data_saida != ''", cnx) 330 | 331 | estoque = len(estoque) 332 | saida = len(saida) 333 | 334 | labels = "Estoque", "Saídas" 335 | sizes = [estoque, saida] 336 | fig1, axl = plt.subplots() 337 | axl.pie(sizes, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) 338 | axl.axis("equal") 339 | 340 | plt.show() 341 | 342 | 343 | if __name__ == "__main__": 344 | app = QApplication(sys.argv) 345 | window = Login() 346 | window.show() 347 | app.exec_() -------------------------------------------------------------------------------- /ui_main.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | ################################################################################ 4 | ## Form generated from reading UI file 'ui_main.ui' 5 | ## 6 | ## Created by: Qt User Interface Compiler version 5.15.2 7 | ## 8 | ## WARNING! All changes made in this file will be lost when recompiling UI file! 9 | ################################################################################ 10 | 11 | from PySide2.QtCore import * 12 | from PySide2.QtGui import * 13 | from PySide2.QtWidgets import * 14 | 15 | 16 | class Ui_MainWindow(object): 17 | def setupUi(self, MainWindow): 18 | if not MainWindow.objectName(): 19 | MainWindow.setObjectName(u"MainWindow") 20 | MainWindow.resize(855, 542) 21 | MainWindow.setStyleSheet(u"background-color: rgb(0, 0,10);") 22 | self.centralwidget = QWidget(MainWindow) 23 | self.centralwidget.setObjectName(u"centralwidget") 24 | self.verticalLayout_2 = QVBoxLayout(self.centralwidget) 25 | self.verticalLayout_2.setObjectName(u"verticalLayout_2") 26 | self.frame = QFrame(self.centralwidget) 27 | self.frame.setObjectName(u"frame") 28 | self.frame.setStyleSheet(u"background-color: rgb(0, 0, 20);\n" 29 | "") 30 | self.frame.setFrameShape(QFrame.StyledPanel) 31 | self.frame.setFrameShadow(QFrame.Raised) 32 | self.horizontalLayout = QHBoxLayout(self.frame) 33 | self.horizontalLayout.setObjectName(u"horizontalLayout") 34 | self.btn_home = QPushButton(self.frame) 35 | self.btn_home.setObjectName(u"btn_home") 36 | sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) 37 | sizePolicy.setHorizontalStretch(0) 38 | sizePolicy.setVerticalStretch(0) 39 | sizePolicy.setHeightForWidth(self.btn_home.sizePolicy().hasHeightForWidth()) 40 | self.btn_home.setSizePolicy(sizePolicy) 41 | self.btn_home.setMinimumSize(QSize(0, 35)) 42 | self.btn_home.setStyleSheet(u"QPushButton{\n" 43 | " color: rgb(255, 255, 255);\n" 44 | " border-radius: 1px;\n" 45 | " font-size: 16px;\n" 46 | " background-color: rgb(0, 80, 121);\n" 47 | "}\n" 48 | "\n" 49 | "QPushButton:hover{background-color: #fff; color:black}\n" 50 | "") 51 | 52 | self.horizontalLayout.addWidget(self.btn_home) 53 | 54 | self.btn_pg_import = QPushButton(self.frame) 55 | self.btn_pg_import.setObjectName(u"btn_pg_import") 56 | self.btn_pg_import.setMinimumSize(QSize(0, 33)) 57 | self.btn_pg_import.setCursor(QCursor(Qt.PointingHandCursor)) 58 | self.btn_pg_import.setStyleSheet(u"QPushButton{\n" 59 | " color: rgb(255, 255, 255);\n" 60 | " border-radius: 1px;\n" 61 | " font-size: 16px;\n" 62 | " background-color: rgb(0, 80, 121);\n" 63 | "}\n" 64 | "\n" 65 | "QPushButton:hover{background-color: #fff; color:black}\n" 66 | "") 67 | 68 | self.horizontalLayout.addWidget(self.btn_pg_import) 69 | 70 | self.btn_tables = QPushButton(self.frame) 71 | self.btn_tables.setObjectName(u"btn_tables") 72 | self.btn_tables.setMinimumSize(QSize(0, 33)) 73 | self.btn_tables.setStyleSheet(u"QPushButton{\n" 74 | " color: rgb(255, 255, 255);\n" 75 | " border-radius: 1px;\n" 76 | " font-size: 16px;\n" 77 | " background-color: rgb(0, 80, 121);\n" 78 | "}\n" 79 | "\n" 80 | "QPushButton:hover{background-color: #fff; color:black}\n" 81 | "") 82 | 83 | self.horizontalLayout.addWidget(self.btn_tables) 84 | 85 | self.btn_sobre = QPushButton(self.frame) 86 | self.btn_sobre.setObjectName(u"btn_sobre") 87 | self.btn_sobre.setMinimumSize(QSize(0, 33)) 88 | self.btn_sobre.setStyleSheet(u"QPushButton{\n" 89 | " color: rgb(255, 255, 255);\n" 90 | " border-radius: 1px;\n" 91 | " font-size: 16px;\n" 92 | " background-color: rgb(0, 80, 121);\n" 93 | "}\n" 94 | "\n" 95 | "QPushButton:hover{background-color: #fff; color:black}\n" 96 | "") 97 | 98 | self.horizontalLayout.addWidget(self.btn_sobre) 99 | 100 | self.btn_contato = QPushButton(self.frame) 101 | self.btn_contato.setObjectName(u"btn_contato") 102 | self.btn_contato.setMinimumSize(QSize(0, 33)) 103 | self.btn_contato.setStyleSheet(u"QPushButton{\n" 104 | " color: rgb(255, 255, 255);\n" 105 | " border-radius: 1px;\n" 106 | " font-size: 16px;\n" 107 | " background-color: rgb(0, 80, 121);\n" 108 | "}\n" 109 | "\n" 110 | "QPushButton:hover{background-color: #fff; color:black}\n" 111 | "") 112 | 113 | self.horizontalLayout.addWidget(self.btn_contato) 114 | 115 | 116 | self.verticalLayout_2.addWidget(self.frame) 117 | 118 | self.Pages = QStackedWidget(self.centralwidget) 119 | self.Pages.setObjectName(u"Pages") 120 | self.Pages.setStyleSheet(u"background-color: rgb(0, 80, 121);") 121 | self.pg_table = QWidget() 122 | self.pg_table.setObjectName(u"pg_table") 123 | self.verticalLayout_8 = QVBoxLayout(self.pg_table) 124 | self.verticalLayout_8.setObjectName(u"verticalLayout_8") 125 | self.tabWidget = QTabWidget(self.pg_table) 126 | self.tabWidget.setObjectName(u"tabWidget") 127 | self.tables = QWidget() 128 | self.tables.setObjectName(u"tables") 129 | self.verticalLayout_7 = QVBoxLayout(self.tables) 130 | self.verticalLayout_7.setObjectName(u"verticalLayout_7") 131 | self.horizontalLayout_3 = QHBoxLayout() 132 | self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") 133 | self.verticalLayout_6 = QVBoxLayout() 134 | self.verticalLayout_6.setObjectName(u"verticalLayout_6") 135 | self.verticalLayout_5 = QVBoxLayout() 136 | self.verticalLayout_5.setObjectName(u"verticalLayout_5") 137 | self.label_3 = QLabel(self.tables) 138 | self.label_3.setObjectName(u"label_3") 139 | 140 | self.verticalLayout_5.addWidget(self.label_3) 141 | 142 | self.tw_estoque = QTreeWidget(self.tables) 143 | self.tw_estoque.setObjectName(u"tw_estoque") 144 | self.tw_estoque.setStyleSheet(u"") 145 | self.tw_estoque.setAlternatingRowColors(False) 146 | 147 | self.verticalLayout_5.addWidget(self.tw_estoque) 148 | 149 | 150 | self.verticalLayout_6.addLayout(self.verticalLayout_5) 151 | 152 | self.verticalLayout_4 = QVBoxLayout() 153 | self.verticalLayout_4.setObjectName(u"verticalLayout_4") 154 | self.label_2 = QLabel(self.tables) 155 | self.label_2.setObjectName(u"label_2") 156 | 157 | self.verticalLayout_4.addWidget(self.label_2) 158 | 159 | self.tw_saida = QTreeWidget(self.tables) 160 | self.tw_saida.setObjectName(u"tw_saida") 161 | self.tw_saida.setStyleSheet(u"") 162 | 163 | self.verticalLayout_4.addWidget(self.tw_saida) 164 | 165 | 166 | self.verticalLayout_6.addLayout(self.verticalLayout_4) 167 | 168 | 169 | self.horizontalLayout_3.addLayout(self.verticalLayout_6) 170 | 171 | self.frame_2 = QFrame(self.tables) 172 | self.frame_2.setObjectName(u"frame_2") 173 | sizePolicy1 = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) 174 | sizePolicy1.setHorizontalStretch(0) 175 | sizePolicy1.setVerticalStretch(0) 176 | sizePolicy1.setHeightForWidth(self.frame_2.sizePolicy().hasHeightForWidth()) 177 | self.frame_2.setSizePolicy(sizePolicy1) 178 | self.frame_2.setFrameShape(QFrame.StyledPanel) 179 | self.frame_2.setFrameShadow(QFrame.Raised) 180 | self.verticalLayout_3 = QVBoxLayout(self.frame_2) 181 | self.verticalLayout_3.setObjectName(u"verticalLayout_3") 182 | self.btn_gerar = QPushButton(self.frame_2) 183 | self.btn_gerar.setObjectName(u"btn_gerar") 184 | self.btn_gerar.setMinimumSize(QSize(100, 27)) 185 | self.btn_gerar.setCursor(QCursor(Qt.PointingHandCursor)) 186 | self.btn_gerar.setStyleSheet(u"QPushButton{\n" 187 | " color: rgb(0,0,10);\n" 188 | " border-radius: 10px; \n" 189 | " font-size: 16px; \n" 190 | " background-color: #fff;\n" 191 | ";}\n" 192 | "\n" 193 | "QPushButton:hover{\n" 194 | " \n" 195 | " background-color: rgb(170, 255, 255);\n" 196 | " color:black\n" 197 | "}\n" 198 | "") 199 | 200 | self.verticalLayout_3.addWidget(self.btn_gerar) 201 | 202 | self.btn_estorno = QPushButton(self.frame_2) 203 | self.btn_estorno.setObjectName(u"btn_estorno") 204 | self.btn_estorno.setMinimumSize(QSize(100, 27)) 205 | self.btn_estorno.setCursor(QCursor(Qt.PointingHandCursor)) 206 | self.btn_estorno.setStyleSheet(u"QPushButton{\n" 207 | " color: rgb(0,0,10);\n" 208 | " border-radius: 10px; \n" 209 | " font-size: 16px; \n" 210 | " background-color: #fff;\n" 211 | ";}\n" 212 | "\n" 213 | "QPushButton:hover{\n" 214 | " \n" 215 | " background-color: rgb(170, 255, 255);\n" 216 | " color:black\n" 217 | "}\n" 218 | "\n" 219 | "") 220 | 221 | self.verticalLayout_3.addWidget(self.btn_estorno) 222 | 223 | self.btn_ = QPushButton(self.frame_2) 224 | self.btn_.setObjectName(u"btn_") 225 | self.btn_.setMinimumSize(QSize(100, 27)) 226 | self.btn_.setCursor(QCursor(Qt.PointingHandCursor)) 227 | self.btn_.setStyleSheet(u"QPushButton{\n" 228 | " color: rgb(0,0,10);\n" 229 | " border-radius: 10px;\n" 230 | " font-size: 16px; \n" 231 | " background-color: #fff;\n" 232 | ";}\n" 233 | "\n" 234 | "QPushButton:hover{\n" 235 | " background-color: #fff;\n" 236 | " color:black\n" 237 | "}") 238 | 239 | self.verticalLayout_3.addWidget(self.btn_) 240 | 241 | self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 242 | 243 | self.verticalLayout_3.addItem(self.verticalSpacer) 244 | 245 | 246 | self.horizontalLayout_3.addWidget(self.frame_2) 247 | 248 | 249 | self.verticalLayout_7.addLayout(self.horizontalLayout_3) 250 | 251 | self.tabWidget.addTab(self.tables, "") 252 | self.tab_2 = QWidget() 253 | self.tab_2.setObjectName(u"tab_2") 254 | self.verticalLayout_10 = QVBoxLayout(self.tab_2) 255 | self.verticalLayout_10.setObjectName(u"verticalLayout_10") 256 | self.label_17 = QLabel(self.tab_2) 257 | self.label_17.setObjectName(u"label_17") 258 | font = QFont() 259 | font.setPointSize(20) 260 | font.setBold(True) 261 | font.setWeight(75) 262 | self.label_17.setFont(font) 263 | self.label_17.setStyleSheet(u"color: rgb(255, 255, 255);") 264 | self.label_17.setAlignment(Qt.AlignCenter) 265 | 266 | self.verticalLayout_10.addWidget(self.label_17) 267 | 268 | self.horizontalLayout_4 = QHBoxLayout() 269 | self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") 270 | self.btn_chart = QPushButton(self.tab_2) 271 | self.btn_chart.setObjectName(u"btn_chart") 272 | self.btn_chart.setMinimumSize(QSize(123, 28)) 273 | self.btn_chart.setSizeIncrement(QSize(0, 0)) 274 | self.btn_chart.setCursor(QCursor(Qt.PointingHandCursor)) 275 | self.btn_chart.setStyleSheet(u"QPushButton{\n" 276 | " color: rgb(0,0,10);\n" 277 | " border-radius: 10px; \n" 278 | " font-size: 16px; \n" 279 | " background-color: #fff;\n" 280 | ";}\n" 281 | "\n" 282 | "QPushButton:hover{\n" 283 | " \n" 284 | " background-color: rgb(170, 255, 255);\n" 285 | " color:black\n" 286 | "}\n" 287 | "\n" 288 | "") 289 | 290 | self.horizontalLayout_4.addWidget(self.btn_chart) 291 | 292 | self.btn_excel = QPushButton(self.tab_2) 293 | self.btn_excel.setObjectName(u"btn_excel") 294 | self.btn_excel.setMinimumSize(QSize(123, 28)) 295 | self.btn_excel.setSizeIncrement(QSize(0, 0)) 296 | self.btn_excel.setCursor(QCursor(Qt.PointingHandCursor)) 297 | self.btn_excel.setStyleSheet(u"QPushButton{\n" 298 | " color: rgb(0,0,10);\n" 299 | " border-radius: 10px; \n" 300 | " font-size: 16px; \n" 301 | " background-color: #fff;\n" 302 | ";}\n" 303 | "\n" 304 | "QPushButton:hover{\n" 305 | " \n" 306 | " background-color: rgb(170, 255, 255);\n" 307 | " color:black\n" 308 | "}\n" 309 | "\n" 310 | "") 311 | 312 | self.horizontalLayout_4.addWidget(self.btn_excel) 313 | 314 | 315 | self.verticalLayout_10.addLayout(self.horizontalLayout_4) 316 | 317 | self.txt_search = QLineEdit(self.tab_2) 318 | self.txt_search.setObjectName(u"txt_search") 319 | font1 = QFont() 320 | font1.setPointSize(11) 321 | self.txt_search.setFont(font1) 322 | self.txt_search.setStyleSheet(u"color: rgb(255, 255, 255);") 323 | self.txt_search.setAlignment(Qt.AlignCenter) 324 | 325 | self.verticalLayout_10.addWidget(self.txt_search) 326 | 327 | self.tb_geral = QTableView(self.tab_2) 328 | self.tb_geral.setObjectName(u"tb_geral") 329 | 330 | self.verticalLayout_10.addWidget(self.tb_geral) 331 | 332 | self.tabWidget.addTab(self.tab_2, "") 333 | 334 | self.verticalLayout_8.addWidget(self.tabWidget) 335 | 336 | self.Pages.addWidget(self.pg_table) 337 | self.pg_home = QWidget() 338 | self.pg_home.setObjectName(u"pg_home") 339 | self.verticalLayout = QVBoxLayout(self.pg_home) 340 | self.verticalLayout.setObjectName(u"verticalLayout") 341 | self.label = QLabel(self.pg_home) 342 | self.label.setObjectName(u"label") 343 | self.label.setStyleSheet(u" background-color: rgb(0, 80, 121);\n" 344 | "\n" 345 | "") 346 | 347 | self.verticalLayout.addWidget(self.label) 348 | 349 | self.btn_pg_cadastro = QPushButton(self.pg_home) 350 | self.btn_pg_cadastro.setObjectName(u"btn_pg_cadastro") 351 | self.btn_pg_cadastro.setMinimumSize(QSize(0, 33)) 352 | font2 = QFont() 353 | font2.setPointSize(10) 354 | self.btn_pg_cadastro.setFont(font2) 355 | self.btn_pg_cadastro.setCursor(QCursor(Qt.PointingHandCursor)) 356 | self.btn_pg_cadastro.setStyleSheet(u"QPushButton{color:#fff;}\n" 357 | "\n" 358 | "QPushButton:hover{\n" 359 | " background-color: rgb(255, 255, 255);\n" 360 | " color:black\n" 361 | " }") 362 | 363 | self.verticalLayout.addWidget(self.btn_pg_cadastro) 364 | 365 | self.Pages.addWidget(self.pg_home) 366 | self.pg_import = QWidget() 367 | self.pg_import.setObjectName(u"pg_import") 368 | self.verticalLayout_11 = QVBoxLayout(self.pg_import) 369 | self.verticalLayout_11.setObjectName(u"verticalLayout_11") 370 | self.label_18 = QLabel(self.pg_import) 371 | self.label_18.setObjectName(u"label_18") 372 | self.label_18.setFont(font) 373 | self.label_18.setStyleSheet(u"color: rgb(255, 255, 255);") 374 | self.label_18.setAlignment(Qt.AlignCenter) 375 | 376 | self.verticalLayout_11.addWidget(self.label_18) 377 | 378 | self.horizontalLayout_2 = QHBoxLayout() 379 | self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") 380 | self.txt_file = QLineEdit(self.pg_import) 381 | self.txt_file.setObjectName(u"txt_file") 382 | self.txt_file.setMinimumSize(QSize(0, 28)) 383 | self.txt_file.setFont(font1) 384 | self.txt_file.setStyleSheet(u"color: rgb(255, 255, 255);") 385 | self.txt_file.setAlignment(Qt.AlignCenter) 386 | 387 | self.horizontalLayout_2.addWidget(self.txt_file) 388 | 389 | self.btn_open = QPushButton(self.pg_import) 390 | self.btn_open.setObjectName(u"btn_open") 391 | self.btn_open.setMinimumSize(QSize(123, 28)) 392 | self.btn_open.setSizeIncrement(QSize(0, 0)) 393 | self.btn_open.setCursor(QCursor(Qt.PointingHandCursor)) 394 | self.btn_open.setStyleSheet(u"QPushButton{\n" 395 | " color: rgb(0,0,10);\n" 396 | " border-top-right-radius:15px;\n" 397 | " font-size: 16px; \n" 398 | " background-color: #fff;\n" 399 | ";}\n" 400 | "\n" 401 | "QPushButton:hover{\n" 402 | " \n" 403 | " background-color: rgb(170, 255, 255);\n" 404 | " color:black\n" 405 | "}\n" 406 | "\n" 407 | "") 408 | 409 | self.horizontalLayout_2.addWidget(self.btn_open) 410 | 411 | 412 | self.verticalLayout_11.addLayout(self.horizontalLayout_2) 413 | 414 | self.horizontalLayout_11 = QHBoxLayout() 415 | self.horizontalLayout_11.setObjectName(u"horizontalLayout_11") 416 | self.label_4 = QLabel(self.pg_import) 417 | self.label_4.setObjectName(u"label_4") 418 | 419 | self.horizontalLayout_11.addWidget(self.label_4) 420 | 421 | self.btn_import = QPushButton(self.pg_import) 422 | self.btn_import.setObjectName(u"btn_import") 423 | self.btn_import.setMinimumSize(QSize(123, 28)) 424 | self.btn_import.setSizeIncrement(QSize(0, 0)) 425 | self.btn_import.setCursor(QCursor(Qt.PointingHandCursor)) 426 | self.btn_import.setStyleSheet(u"QPushButton{\n" 427 | " color: rgb(0,0,10);\n" 428 | " border-radius: 10px; \n" 429 | " font-size: 16px; \n" 430 | " background-color: #fff;\n" 431 | ";}\n" 432 | "\n" 433 | "QPushButton:hover{\n" 434 | " \n" 435 | " background-color: rgb(170, 255, 255);\n" 436 | " color:black\n" 437 | "}\n" 438 | "\n" 439 | "") 440 | 441 | self.horizontalLayout_11.addWidget(self.btn_import) 442 | 443 | self.label_5 = QLabel(self.pg_import) 444 | self.label_5.setObjectName(u"label_5") 445 | 446 | self.horizontalLayout_11.addWidget(self.label_5) 447 | 448 | 449 | self.verticalLayout_11.addLayout(self.horizontalLayout_11) 450 | 451 | self.progressBar = QProgressBar(self.pg_import) 452 | self.progressBar.setObjectName(u"progressBar") 453 | self.progressBar.setStyleSheet(u"QProgressBar{ background-color: rgba(0, 0, 0,0.1);\n" 454 | " color: rgb(255, 255, 255);\n" 455 | " border-style: none;\n" 456 | " text-align: center;\n" 457 | " border-radius:10px;\n" 458 | " \n" 459 | " }\n" 460 | " \n" 461 | " \n" 462 | "QProgressBar::chunk{ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(6, 75, 149, 255), stop:1 rgba(72, 130, 157, 255));\n" 463 | " border-radius:10px;\n" 464 | " }") 465 | self.progressBar.setValue(0) 466 | 467 | self.verticalLayout_11.addWidget(self.progressBar) 468 | 469 | self.Pages.addWidget(self.pg_import) 470 | self.pg_cadastro = QWidget() 471 | self.pg_cadastro.setObjectName(u"pg_cadastro") 472 | self.verticalLayout_9 = QVBoxLayout(self.pg_cadastro) 473 | self.verticalLayout_9.setObjectName(u"verticalLayout_9") 474 | self.label_14 = QLabel(self.pg_cadastro) 475 | self.label_14.setObjectName(u"label_14") 476 | self.label_14.setFont(font) 477 | self.label_14.setStyleSheet(u"color: rgb(255, 255, 255);") 478 | self.label_14.setAlignment(Qt.AlignCenter) 479 | 480 | self.verticalLayout_9.addWidget(self.label_14) 481 | 482 | self.label_6 = QLabel(self.pg_cadastro) 483 | self.label_6.setObjectName(u"label_6") 484 | self.label_6.setFont(font2) 485 | self.label_6.setAlignment(Qt.AlignCenter) 486 | 487 | self.verticalLayout_9.addWidget(self.label_6) 488 | 489 | self.horizontalLayout_8 = QHBoxLayout() 490 | self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") 491 | self.horizontalLayout_8.setContentsMargins(50, -1, -1, -1) 492 | self.label_7 = QLabel(self.pg_cadastro) 493 | self.label_7.setObjectName(u"label_7") 494 | sizePolicy.setHeightForWidth(self.label_7.sizePolicy().hasHeightForWidth()) 495 | self.label_7.setSizePolicy(sizePolicy) 496 | 497 | self.horizontalLayout_8.addWidget(self.label_7) 498 | 499 | self.txt_nome = QLineEdit(self.pg_cadastro) 500 | self.txt_nome.setObjectName(u"txt_nome") 501 | sizePolicy2 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed) 502 | sizePolicy2.setHorizontalStretch(0) 503 | sizePolicy2.setVerticalStretch(0) 504 | sizePolicy2.setHeightForWidth(self.txt_nome.sizePolicy().hasHeightForWidth()) 505 | self.txt_nome.setSizePolicy(sizePolicy2) 506 | self.txt_nome.setStyleSheet(u"color:rgba(211, 239, 251,1);\n" 507 | "border-bottom:1px solid white;\n" 508 | "border-radius: None;\n" 509 | "background-color:rgba(85, 115, 155,0.1);\n" 510 | "font-family:Trebuchet MS; \n" 511 | "font-size:21px;") 512 | 513 | self.horizontalLayout_8.addWidget(self.txt_nome) 514 | 515 | 516 | self.verticalLayout_9.addLayout(self.horizontalLayout_8) 517 | 518 | self.horizontalLayout_7 = QHBoxLayout() 519 | self.horizontalLayout_7.setObjectName(u"horizontalLayout_7") 520 | self.horizontalLayout_7.setContentsMargins(50, -1, -1, -1) 521 | self.label_8 = QLabel(self.pg_cadastro) 522 | self.label_8.setObjectName(u"label_8") 523 | 524 | self.horizontalLayout_7.addWidget(self.label_8) 525 | 526 | self.txt_usuario = QLineEdit(self.pg_cadastro) 527 | self.txt_usuario.setObjectName(u"txt_usuario") 528 | self.txt_usuario.setStyleSheet(u"color:rgba(211, 239, 251,1);\n" 529 | "border-bottom:1px solid white;\n" 530 | "border-radius: None;\n" 531 | "background-color:rgba(85, 115, 155,0.1);\n" 532 | "font-family:Trebuchet MS; \n" 533 | "font-size:21px;") 534 | 535 | self.horizontalLayout_7.addWidget(self.txt_usuario) 536 | 537 | 538 | self.verticalLayout_9.addLayout(self.horizontalLayout_7) 539 | 540 | self.horizontalLayout_6 = QHBoxLayout() 541 | self.horizontalLayout_6.setObjectName(u"horizontalLayout_6") 542 | self.horizontalLayout_6.setContentsMargins(50, -1, -1, -1) 543 | self.label_9 = QLabel(self.pg_cadastro) 544 | self.label_9.setObjectName(u"label_9") 545 | 546 | self.horizontalLayout_6.addWidget(self.label_9) 547 | 548 | self.txt_senha = QLineEdit(self.pg_cadastro) 549 | self.txt_senha.setObjectName(u"txt_senha") 550 | self.txt_senha.setStyleSheet(u"color:rgba(211, 239, 251,1);\n" 551 | "border-bottom:1px solid white;\n" 552 | "border-radius: None;\n" 553 | "background-color:rgba(85, 115, 155,0.1);\n" 554 | "font-family:Trebuchet MS; \n" 555 | "font-size:21px;") 556 | self.txt_senha.setEchoMode(QLineEdit.Password) 557 | 558 | self.horizontalLayout_6.addWidget(self.txt_senha) 559 | 560 | 561 | self.verticalLayout_9.addLayout(self.horizontalLayout_6) 562 | 563 | self.horizontalLayout_5 = QHBoxLayout() 564 | self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") 565 | self.horizontalLayout_5.setContentsMargins(50, -1, -1, -1) 566 | self.label_10 = QLabel(self.pg_cadastro) 567 | self.label_10.setObjectName(u"label_10") 568 | 569 | self.horizontalLayout_5.addWidget(self.label_10) 570 | 571 | self.txt_senha_2 = QLineEdit(self.pg_cadastro) 572 | self.txt_senha_2.setObjectName(u"txt_senha_2") 573 | self.txt_senha_2.setStyleSheet(u"color:rgba(211, 239, 251,1);\n" 574 | "border-bottom:1px solid white;\n" 575 | "border-radius: None;\n" 576 | "background-color:rgba(85, 115, 155,0.1);\n" 577 | "font-family:Trebuchet MS; \n" 578 | "font-size:21px;") 579 | self.txt_senha_2.setEchoMode(QLineEdit.Password) 580 | 581 | self.horizontalLayout_5.addWidget(self.txt_senha_2) 582 | 583 | 584 | self.verticalLayout_9.addLayout(self.horizontalLayout_5) 585 | 586 | self.horizontalLayout_9 = QHBoxLayout() 587 | self.horizontalLayout_9.setObjectName(u"horizontalLayout_9") 588 | self.horizontalLayout_9.setContentsMargins(50, -1, -1, -1) 589 | self.label_11 = QLabel(self.pg_cadastro) 590 | self.label_11.setObjectName(u"label_11") 591 | 592 | self.horizontalLayout_9.addWidget(self.label_11) 593 | 594 | self.cb_perfil = QComboBox(self.pg_cadastro) 595 | self.cb_perfil.addItem("") 596 | self.cb_perfil.addItem("") 597 | self.cb_perfil.setObjectName(u"cb_perfil") 598 | sizePolicy2.setHeightForWidth(self.cb_perfil.sizePolicy().hasHeightForWidth()) 599 | self.cb_perfil.setSizePolicy(sizePolicy2) 600 | font3 = QFont() 601 | font3.setPointSize(12) 602 | self.cb_perfil.setFont(font3) 603 | self.cb_perfil.setStyleSheet(u"color: rgb(255, 255, 255);") 604 | 605 | self.horizontalLayout_9.addWidget(self.cb_perfil) 606 | 607 | 608 | self.verticalLayout_9.addLayout(self.horizontalLayout_9) 609 | 610 | self.horizontalLayout_10 = QHBoxLayout() 611 | self.horizontalLayout_10.setObjectName(u"horizontalLayout_10") 612 | self.label_12 = QLabel(self.pg_cadastro) 613 | self.label_12.setObjectName(u"label_12") 614 | 615 | self.horizontalLayout_10.addWidget(self.label_12) 616 | 617 | self.btn_cadastrar = QPushButton(self.pg_cadastro) 618 | self.btn_cadastrar.setObjectName(u"btn_cadastrar") 619 | self.btn_cadastrar.setMinimumSize(QSize(0, 35)) 620 | self.btn_cadastrar.setStyleSheet(u"QPushButton{\n" 621 | " color: rgb(0,0,10);\n" 622 | " border-radius: 10px; \n" 623 | " font-size: 16px; \n" 624 | " background-color: #fff;\n" 625 | ";}\n" 626 | "\n" 627 | "QPushButton:hover{\n" 628 | " \n" 629 | " background-color: rgb(170, 255, 255);\n" 630 | " color:black\n" 631 | "}\n" 632 | "\n" 633 | "") 634 | 635 | self.horizontalLayout_10.addWidget(self.btn_cadastrar) 636 | 637 | self.label_13 = QLabel(self.pg_cadastro) 638 | self.label_13.setObjectName(u"label_13") 639 | 640 | self.horizontalLayout_10.addWidget(self.label_13) 641 | 642 | 643 | self.verticalLayout_9.addLayout(self.horizontalLayout_10) 644 | 645 | self.Pages.addWidget(self.pg_cadastro) 646 | self.pg_contato = QWidget() 647 | self.pg_contato.setObjectName(u"pg_contato") 648 | self.verticalLayout_12 = QVBoxLayout(self.pg_contato) 649 | self.verticalLayout_12.setObjectName(u"verticalLayout_12") 650 | self.label_15 = QLabel(self.pg_contato) 651 | self.label_15.setObjectName(u"label_15") 652 | self.label_15.setFont(font) 653 | self.label_15.setStyleSheet(u"color: rgb(255, 255, 255);") 654 | self.label_15.setAlignment(Qt.AlignCenter) 655 | 656 | self.verticalLayout_12.addWidget(self.label_15) 657 | 658 | self.label_19 = QLabel(self.pg_contato) 659 | self.label_19.setObjectName(u"label_19") 660 | sizePolicy.setHeightForWidth(self.label_19.sizePolicy().hasHeightForWidth()) 661 | self.label_19.setSizePolicy(sizePolicy) 662 | self.label_19.setAlignment(Qt.AlignCenter) 663 | 664 | self.verticalLayout_12.addWidget(self.label_19) 665 | 666 | self.horizontalLayout_15 = QHBoxLayout() 667 | self.horizontalLayout_15.setObjectName(u"horizontalLayout_15") 668 | self.label_27 = QLabel(self.pg_contato) 669 | self.label_27.setObjectName(u"label_27") 670 | 671 | self.horizontalLayout_15.addWidget(self.label_27) 672 | 673 | self.horizontalLayout_12 = QHBoxLayout() 674 | self.horizontalLayout_12.setObjectName(u"horizontalLayout_12") 675 | self.label_24 = QLabel(self.pg_contato) 676 | self.label_24.setObjectName(u"label_24") 677 | sizePolicy1.setHeightForWidth(self.label_24.sizePolicy().hasHeightForWidth()) 678 | self.label_24.setSizePolicy(sizePolicy1) 679 | 680 | self.horizontalLayout_12.addWidget(self.label_24) 681 | 682 | self.label_20 = QLabel(self.pg_contato) 683 | self.label_20.setObjectName(u"label_20") 684 | sizePolicy.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth()) 685 | self.label_20.setSizePolicy(sizePolicy) 686 | self.label_20.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) 687 | 688 | self.horizontalLayout_12.addWidget(self.label_20) 689 | 690 | 691 | self.horizontalLayout_15.addLayout(self.horizontalLayout_12) 692 | 693 | self.label_28 = QLabel(self.pg_contato) 694 | self.label_28.setObjectName(u"label_28") 695 | 696 | self.horizontalLayout_15.addWidget(self.label_28) 697 | 698 | 699 | self.verticalLayout_12.addLayout(self.horizontalLayout_15) 700 | 701 | self.horizontalLayout_16 = QHBoxLayout() 702 | self.horizontalLayout_16.setObjectName(u"horizontalLayout_16") 703 | self.label_29 = QLabel(self.pg_contato) 704 | self.label_29.setObjectName(u"label_29") 705 | 706 | self.horizontalLayout_16.addWidget(self.label_29) 707 | 708 | self.horizontalLayout_13 = QHBoxLayout() 709 | self.horizontalLayout_13.setObjectName(u"horizontalLayout_13") 710 | self.label_25 = QLabel(self.pg_contato) 711 | self.label_25.setObjectName(u"label_25") 712 | sizePolicy1.setHeightForWidth(self.label_25.sizePolicy().hasHeightForWidth()) 713 | self.label_25.setSizePolicy(sizePolicy1) 714 | 715 | self.horizontalLayout_13.addWidget(self.label_25) 716 | 717 | self.label_21 = QLabel(self.pg_contato) 718 | self.label_21.setObjectName(u"label_21") 719 | sizePolicy.setHeightForWidth(self.label_21.sizePolicy().hasHeightForWidth()) 720 | self.label_21.setSizePolicy(sizePolicy) 721 | self.label_21.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) 722 | 723 | self.horizontalLayout_13.addWidget(self.label_21) 724 | 725 | 726 | self.horizontalLayout_16.addLayout(self.horizontalLayout_13) 727 | 728 | self.label_30 = QLabel(self.pg_contato) 729 | self.label_30.setObjectName(u"label_30") 730 | 731 | self.horizontalLayout_16.addWidget(self.label_30) 732 | 733 | 734 | self.verticalLayout_12.addLayout(self.horizontalLayout_16) 735 | 736 | self.horizontalLayout_17 = QHBoxLayout() 737 | self.horizontalLayout_17.setObjectName(u"horizontalLayout_17") 738 | self.label_31 = QLabel(self.pg_contato) 739 | self.label_31.setObjectName(u"label_31") 740 | 741 | self.horizontalLayout_17.addWidget(self.label_31) 742 | 743 | self.horizontalLayout_14 = QHBoxLayout() 744 | self.horizontalLayout_14.setObjectName(u"horizontalLayout_14") 745 | self.label_26 = QLabel(self.pg_contato) 746 | self.label_26.setObjectName(u"label_26") 747 | sizePolicy1.setHeightForWidth(self.label_26.sizePolicy().hasHeightForWidth()) 748 | self.label_26.setSizePolicy(sizePolicy1) 749 | 750 | self.horizontalLayout_14.addWidget(self.label_26) 751 | 752 | self.label_22 = QLabel(self.pg_contato) 753 | self.label_22.setObjectName(u"label_22") 754 | sizePolicy.setHeightForWidth(self.label_22.sizePolicy().hasHeightForWidth()) 755 | self.label_22.setSizePolicy(sizePolicy) 756 | self.label_22.setAlignment(Qt.AlignLeading|Qt.AlignLeft|Qt.AlignVCenter) 757 | 758 | self.horizontalLayout_14.addWidget(self.label_22) 759 | 760 | 761 | self.horizontalLayout_17.addLayout(self.horizontalLayout_14) 762 | 763 | self.label_32 = QLabel(self.pg_contato) 764 | self.label_32.setObjectName(u"label_32") 765 | 766 | self.horizontalLayout_17.addWidget(self.label_32) 767 | 768 | 769 | self.verticalLayout_12.addLayout(self.horizontalLayout_17) 770 | 771 | self.Pages.addWidget(self.pg_contato) 772 | self.pg_sobre = QWidget() 773 | self.pg_sobre.setObjectName(u"pg_sobre") 774 | self.verticalLayout_13 = QVBoxLayout(self.pg_sobre) 775 | self.verticalLayout_13.setObjectName(u"verticalLayout_13") 776 | self.label_16 = QLabel(self.pg_sobre) 777 | self.label_16.setObjectName(u"label_16") 778 | self.label_16.setFont(font) 779 | self.label_16.setStyleSheet(u"color: rgb(255, 255, 255);") 780 | self.label_16.setAlignment(Qt.AlignCenter) 781 | 782 | self.verticalLayout_13.addWidget(self.label_16) 783 | 784 | self.verticalSpacer_2 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 785 | 786 | self.verticalLayout_13.addItem(self.verticalSpacer_2) 787 | 788 | self.label_23 = QLabel(self.pg_sobre) 789 | self.label_23.setObjectName(u"label_23") 790 | self.label_23.setWordWrap(True) 791 | 792 | self.verticalLayout_13.addWidget(self.label_23) 793 | 794 | self.verticalSpacer_3 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) 795 | 796 | self.verticalLayout_13.addItem(self.verticalSpacer_3) 797 | 798 | self.Pages.addWidget(self.pg_sobre) 799 | 800 | self.verticalLayout_2.addWidget(self.Pages) 801 | 802 | MainWindow.setCentralWidget(self.centralwidget) 803 | 804 | self.retranslateUi(MainWindow) 805 | 806 | self.Pages.setCurrentIndex(1) 807 | self.tabWidget.setCurrentIndex(0) 808 | 809 | 810 | QMetaObject.connectSlotsByName(MainWindow) 811 | # setupUi 812 | 813 | def retranslateUi(self, MainWindow): 814 | MainWindow.setWindowTitle(QCoreApplication.translate("MainWindow", u"MainWindow", None)) 815 | self.btn_home.setText(QCoreApplication.translate("MainWindow", u"HOME", None)) 816 | self.btn_pg_import.setText(QCoreApplication.translate("MainWindow", u"Importar", None)) 817 | self.btn_tables.setText(QCoreApplication.translate("MainWindow", u"TABLES", None)) 818 | self.btn_sobre.setText(QCoreApplication.translate("MainWindow", u"SOBRE", None)) 819 | self.btn_contato.setText(QCoreApplication.translate("MainWindow", u"CONTATO", None)) 820 | self.label_3.setText(QCoreApplication.translate("MainWindow", u"

Estoque

", None)) 821 | ___qtreewidgetitem = self.tw_estoque.headerItem() 822 | ___qtreewidgetitem.setText(14, QCoreApplication.translate("MainWindow", u"Usu\u00e1rio", None)); 823 | ___qtreewidgetitem.setText(13, QCoreApplication.translate("MainWindow", u"Data Importa\u00e7\u00e3o", None)); 824 | ___qtreewidgetitem.setText(12, QCoreApplication.translate("MainWindow", u"Valor Produto", None)); 825 | ___qtreewidgetitem.setText(11, QCoreApplication.translate("MainWindow", u"Unidade medida", None)); 826 | ___qtreewidgetitem.setText(10, QCoreApplication.translate("MainWindow", u"Descri\u00e7\u00e3o", None)); 827 | ___qtreewidgetitem.setText(9, QCoreApplication.translate("MainWindow", u"Quantidade", None)); 828 | ___qtreewidgetitem.setText(8, QCoreApplication.translate("MainWindow", u"Cod Item", None)); 829 | ___qtreewidgetitem.setText(7, QCoreApplication.translate("MainWindow", u"Item", None)); 830 | ___qtreewidgetitem.setText(6, QCoreApplication.translate("MainWindow", u"Total Nfe", None)); 831 | ___qtreewidgetitem.setText(5, QCoreApplication.translate("MainWindow", u"Emitente", None)); 832 | ___qtreewidgetitem.setText(4, QCoreApplication.translate("MainWindow", u"Cnpj_emitente", None)); 833 | ___qtreewidgetitem.setText(3, QCoreApplication.translate("MainWindow", u"Chave", None)); 834 | ___qtreewidgetitem.setText(2, QCoreApplication.translate("MainWindow", u"Data_emissao", None)); 835 | ___qtreewidgetitem.setText(1, QCoreApplication.translate("MainWindow", u"Serie", None)); 836 | ___qtreewidgetitem.setText(0, QCoreApplication.translate("MainWindow", u"Nfe", None)); 837 | self.label_2.setText(QCoreApplication.translate("MainWindow", u"

Sa\u00edda

", None)) 838 | ___qtreewidgetitem1 = self.tw_saida.headerItem() 839 | ___qtreewidgetitem1.setText(4, QCoreApplication.translate("MainWindow", u"USU\u00c1RIO", None)); 840 | ___qtreewidgetitem1.setText(3, QCoreApplication.translate("MainWindow", u"DATA SA\u00cdDA", None)); 841 | ___qtreewidgetitem1.setText(2, QCoreApplication.translate("MainWindow", u"DATA IMPORTA\u00c7\u00c3O", None)); 842 | ___qtreewidgetitem1.setText(1, QCoreApplication.translate("MainWindow", u"SERIE", None)); 843 | ___qtreewidgetitem1.setText(0, QCoreApplication.translate("MainWindow", u"Nfe", None)); 844 | self.btn_gerar.setText(QCoreApplication.translate("MainWindow", u"Gerar sa\u00edda", None)) 845 | self.btn_estorno.setText(QCoreApplication.translate("MainWindow", u"Estorno", None)) 846 | self.btn_.setText("") 847 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tables), QCoreApplication.translate("MainWindow", u"Base", None)) 848 | self.label_17.setText(QCoreApplication.translate("MainWindow", u"GERAL", None)) 849 | self.btn_chart.setText(QCoreApplication.translate("MainWindow", u"Gerar Gr\u00e1fico", None)) 850 | self.btn_excel.setText(QCoreApplication.translate("MainWindow", u"Gerar Excel", None)) 851 | self.txt_search.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Filtro", None)) 852 | self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), QCoreApplication.translate("MainWindow", u"GERAL", None)) 853 | self.label.setText(QCoreApplication.translate("MainWindow", u"

PYTAX

Sistema de gerenciamento

", None)) 854 | self.btn_pg_cadastro.setText(QCoreApplication.translate("MainWindow", u"Cadastrar Usu\u00e1rio", None)) 855 | self.label_18.setText(QCoreApplication.translate("MainWindow", u"IMPORTAR XML", None)) 856 | self.txt_file.setPlaceholderText(QCoreApplication.translate("MainWindow", u"Seleciona a pasta com os arquivos XML --->", None)) 857 | self.btn_open.setText(QCoreApplication.translate("MainWindow", u"Abrir", None)) 858 | self.label_4.setText("") 859 | self.btn_import.setText(QCoreApplication.translate("MainWindow", u"IMPORTAR", None)) 860 | self.label_5.setText("") 861 | self.label_14.setText(QCoreApplication.translate("MainWindow", u"Tela de cadastro", None)) 862 | self.label_6.setText(QCoreApplication.translate("MainWindow", u"

CADASTRAR USU\u00c1RIO

", None)) 863 | self.label_7.setText(QCoreApplication.translate("MainWindow", u"

Nome:

", None)) 864 | self.label_8.setText(QCoreApplication.translate("MainWindow", u"

Usu\u00e1rio

", None)) 865 | self.label_9.setText(QCoreApplication.translate("MainWindow", u"

Senha:

", None)) 866 | self.label_10.setText(QCoreApplication.translate("MainWindow", u"

Senha:

", None)) 867 | self.label_11.setText(QCoreApplication.translate("MainWindow", u"

Perfil:

", None)) 868 | self.cb_perfil.setItemText(0, QCoreApplication.translate("MainWindow", u"Usu\u00e1rio", None)) 869 | self.cb_perfil.setItemText(1, QCoreApplication.translate("MainWindow", u"Administrador", None)) 870 | 871 | self.label_12.setText("") 872 | self.btn_cadastrar.setText(QCoreApplication.translate("MainWindow", u"Cadastrar", None)) 873 | self.label_13.setText("") 874 | self.label_15.setText(QCoreApplication.translate("MainWindow", u"CONTATOS", None)) 875 | self.label_19.setText(QCoreApplication.translate("MainWindow", u"

Desenvolvedor: Nicolas almeida

", None)) 876 | self.label_27.setText("") 877 | self.label_24.setText(QCoreApplication.translate("MainWindow", u"

", None)) 878 | self.label_20.setText(QCoreApplication.translate("MainWindow", u"

(11)98013-0552

", None)) 879 | self.label_28.setText("") 880 | self.label_29.setText("") 881 | self.label_25.setText(QCoreApplication.translate("MainWindow", u"

", None)) 882 | self.label_21.setText(QCoreApplication.translate("MainWindow", u"

contato@pytax.net

", None)) 883 | self.label_30.setText("") 884 | self.label_31.setText("") 885 | self.label_26.setText(QCoreApplication.translate("MainWindow", u"

", None)) 886 | self.label_22.setText(QCoreApplication.translate("MainWindow", u"

pytax

", None)) 887 | self.label_32.setText("") 888 | self.label_16.setText(QCoreApplication.translate("MainWindow", u"SOBRE", None)) 889 | self.label_23.setText(QCoreApplication.translate("MainWindow", u"

Este sistema faz a imoprta\u00e7\u00e3o de arquivos XML e faz o controle do estoque de acordo com a entrada de notas e sa\u00eddas apontadas pelo usu\u00e1rio.

", None)) 890 | # retranslateUi 891 | 892 | -------------------------------------------------------------------------------- /ui_main.ui: -------------------------------------------------------------------------------- 1 | 2 | 3 | MainWindow 4 | 5 | 6 | 7 | 0 8 | 0 9 | 855 10 | 542 11 | 12 | 13 | 14 | MainWindow 15 | 16 | 17 | background-color: rgb(0, 0,10); 18 | 19 | 20 | 21 | 22 | 23 | 24 | background-color: rgb(0, 0, 20); 25 | 26 | 27 | 28 | QFrame::StyledPanel 29 | 30 | 31 | QFrame::Raised 32 | 33 | 34 | 35 | 36 | 37 | 38 | 0 39 | 0 40 | 41 | 42 | 43 | 44 | 0 45 | 35 46 | 47 | 48 | 49 | QPushButton{ 50 | color: rgb(255, 255, 255); 51 | border-radius: 1px; 52 | font-size: 16px; 53 | background-color: rgb(0, 80, 121); 54 | } 55 | 56 | QPushButton:hover{background-color: #fff; color:black} 57 | 58 | 59 | 60 | HOME 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 0 69 | 33 70 | 71 | 72 | 73 | PointingHandCursor 74 | 75 | 76 | QPushButton{ 77 | color: rgb(255, 255, 255); 78 | border-radius: 1px; 79 | font-size: 16px; 80 | background-color: rgb(0, 80, 121); 81 | } 82 | 83 | QPushButton:hover{background-color: #fff; color:black} 84 | 85 | 86 | 87 | Importar 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 0 96 | 33 97 | 98 | 99 | 100 | QPushButton{ 101 | color: rgb(255, 255, 255); 102 | border-radius: 1px; 103 | font-size: 16px; 104 | background-color: rgb(0, 80, 121); 105 | } 106 | 107 | QPushButton:hover{background-color: #fff; color:black} 108 | 109 | 110 | 111 | TABLES 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 0 120 | 33 121 | 122 | 123 | 124 | QPushButton{ 125 | color: rgb(255, 255, 255); 126 | border-radius: 1px; 127 | font-size: 16px; 128 | background-color: rgb(0, 80, 121); 129 | } 130 | 131 | QPushButton:hover{background-color: #fff; color:black} 132 | 133 | 134 | 135 | SOBRE 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 0 144 | 33 145 | 146 | 147 | 148 | QPushButton{ 149 | color: rgb(255, 255, 255); 150 | border-radius: 1px; 151 | font-size: 16px; 152 | background-color: rgb(0, 80, 121); 153 | } 154 | 155 | QPushButton:hover{background-color: #fff; color:black} 156 | 157 | 158 | 159 | CONTATO 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | background-color: rgb(0, 80, 121); 170 | 171 | 172 | 1 173 | 174 | 175 | 176 | 177 | 178 | 179 | 0 180 | 181 | 182 | 183 | Base 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | <html><head/><body><p align="center"><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Estoque</span></p></body></html> 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | false 206 | 207 | 208 | 209 | Nfe 210 | 211 | 212 | 213 | 214 | Serie 215 | 216 | 217 | 218 | 219 | Data_emissao 220 | 221 | 222 | 223 | 224 | Chave 225 | 226 | 227 | 228 | 229 | Cnpj_emitente 230 | 231 | 232 | 233 | 234 | Emitente 235 | 236 | 237 | 238 | 239 | Total Nfe 240 | 241 | 242 | 243 | 244 | Item 245 | 246 | 247 | 248 | 249 | Cod Item 250 | 251 | 252 | 253 | 254 | Quantidade 255 | 256 | 257 | 258 | 259 | Descrição 260 | 261 | 262 | 263 | 264 | Unidade medida 265 | 266 | 267 | 268 | 269 | Valor Produto 270 | 271 | 272 | 273 | 274 | Data Importação 275 | 276 | 277 | 278 | 279 | Usuário 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | <html><head/><body><p align="center"><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Saída</span></p></body></html> 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | Nfe 303 | 304 | 305 | 306 | 307 | SERIE 308 | 309 | 310 | 311 | 312 | DATA IMPORTAÇÃO 313 | 314 | 315 | 316 | 317 | DATA SAÍDA 318 | 319 | 320 | 321 | 322 | USUÁRIO 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 0 336 | 0 337 | 338 | 339 | 340 | QFrame::StyledPanel 341 | 342 | 343 | QFrame::Raised 344 | 345 | 346 | 347 | 348 | 349 | 350 | 100 351 | 27 352 | 353 | 354 | 355 | PointingHandCursor 356 | 357 | 358 | QPushButton{ 359 | color: rgb(0,0,10); 360 | border-radius: 10px; 361 | font-size: 16px; 362 | background-color: #fff; 363 | ;} 364 | 365 | QPushButton:hover{ 366 | 367 | background-color: rgb(170, 255, 255); 368 | color:black 369 | } 370 | 371 | 372 | 373 | Gerar saída 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 100 382 | 27 383 | 384 | 385 | 386 | PointingHandCursor 387 | 388 | 389 | QPushButton{ 390 | color: rgb(0,0,10); 391 | border-radius: 10px; 392 | font-size: 16px; 393 | background-color: #fff; 394 | ;} 395 | 396 | QPushButton:hover{ 397 | 398 | background-color: rgb(170, 255, 255); 399 | color:black 400 | } 401 | 402 | 403 | 404 | 405 | Estorno 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 100 414 | 27 415 | 416 | 417 | 418 | PointingHandCursor 419 | 420 | 421 | QPushButton{ 422 | color: rgb(0,0,10); 423 | border-radius: 10px; 424 | font-size: 16px; 425 | background-color: #fff; 426 | ;} 427 | 428 | QPushButton:hover{ 429 | background-color: #fff; 430 | color:black 431 | } 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | Qt::Vertical 442 | 443 | 444 | 445 | 20 446 | 40 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | GERAL 461 | 462 | 463 | 464 | 465 | 466 | 467 | 20 468 | 75 469 | true 470 | 471 | 472 | 473 | color: rgb(255, 255, 255); 474 | 475 | 476 | GERAL 477 | 478 | 479 | Qt::AlignCenter 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 123 490 | 28 491 | 492 | 493 | 494 | 495 | 0 496 | 0 497 | 498 | 499 | 500 | PointingHandCursor 501 | 502 | 503 | QPushButton{ 504 | color: rgb(0,0,10); 505 | border-radius: 10px; 506 | font-size: 16px; 507 | background-color: #fff; 508 | ;} 509 | 510 | QPushButton:hover{ 511 | 512 | background-color: rgb(170, 255, 255); 513 | color:black 514 | } 515 | 516 | 517 | 518 | 519 | Gerar Gráfico 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 123 528 | 28 529 | 530 | 531 | 532 | 533 | 0 534 | 0 535 | 536 | 537 | 538 | PointingHandCursor 539 | 540 | 541 | QPushButton{ 542 | color: rgb(0,0,10); 543 | border-radius: 10px; 544 | font-size: 16px; 545 | background-color: #fff; 546 | ;} 547 | 548 | QPushButton:hover{ 549 | 550 | background-color: rgb(170, 255, 255); 551 | color:black 552 | } 553 | 554 | 555 | 556 | 557 | Gerar Excel 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 11 568 | 569 | 570 | 571 | color: rgb(255, 255, 255); 572 | 573 | 574 | Qt::AlignCenter 575 | 576 | 577 | Filtro 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | background-color: rgb(0, 80, 121); 596 | 597 | 598 | 599 | 600 | <html><head/><body><p align="center"><span style=" font-size:48pt; font-weight:600; color:#ffffff;">PYTAX</span></p><p align="center"><span style=" font-size:24pt; color:#ffffff;">Sistema de gerenciamento</span></p><p align="center"><span style=" font-size:24pt; color:#ffffff;"><img src="_imgs/logo.png"/></span></p></body></html> 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 0 609 | 33 610 | 611 | 612 | 613 | 614 | 10 615 | 616 | 617 | 618 | PointingHandCursor 619 | 620 | 621 | QPushButton{color:#fff;} 622 | 623 | QPushButton:hover{ 624 | background-color: rgb(255, 255, 255); 625 | color:black 626 | } 627 | 628 | 629 | Cadastrar Usuário 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 20 642 | 75 643 | true 644 | 645 | 646 | 647 | color: rgb(255, 255, 255); 648 | 649 | 650 | IMPORTAR XML 651 | 652 | 653 | Qt::AlignCenter 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 0 664 | 28 665 | 666 | 667 | 668 | 669 | 11 670 | 671 | 672 | 673 | color: rgb(255, 255, 255); 674 | 675 | 676 | Qt::AlignCenter 677 | 678 | 679 | Seleciona a pasta com os arquivos XML ---> 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 123 688 | 28 689 | 690 | 691 | 692 | 693 | 0 694 | 0 695 | 696 | 697 | 698 | PointingHandCursor 699 | 700 | 701 | QPushButton{ 702 | color: rgb(0,0,10); 703 | border-top-right-radius:15px; 704 | font-size: 16px; 705 | background-color: #fff; 706 | ;} 707 | 708 | QPushButton:hover{ 709 | 710 | background-color: rgb(170, 255, 255); 711 | color:black 712 | } 713 | 714 | 715 | 716 | 717 | Abrir 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 123 737 | 28 738 | 739 | 740 | 741 | 742 | 0 743 | 0 744 | 745 | 746 | 747 | PointingHandCursor 748 | 749 | 750 | QPushButton{ 751 | color: rgb(0,0,10); 752 | border-radius: 10px; 753 | font-size: 16px; 754 | background-color: #fff; 755 | ;} 756 | 757 | QPushButton:hover{ 758 | 759 | background-color: rgb(170, 255, 255); 760 | color:black 761 | } 762 | 763 | 764 | 765 | 766 | IMPORTAR 767 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | QProgressBar{ background-color: rgba(0, 0, 0,0.1); 783 | color: rgb(255, 255, 255); 784 | border-style: none; 785 | text-align: center; 786 | border-radius:10px; 787 | 788 | } 789 | 790 | 791 | QProgressBar::chunk{ background-color: qlineargradient(spread:pad, x1:0, y1:0, x2:1, y2:1, stop:0 rgba(6, 75, 149, 255), stop:1 rgba(72, 130, 157, 255)); 792 | border-radius:10px; 793 | } 794 | 795 | 796 | 0 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 20 809 | 75 810 | true 811 | 812 | 813 | 814 | color: rgb(255, 255, 255); 815 | 816 | 817 | Tela de cadastro 818 | 819 | 820 | Qt::AlignCenter 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 10 829 | 830 | 831 | 832 | <html><head/><body><p align="center"><img src="_imgs/user.png"/></p><p align="center"><span style=" font-size:14pt; font-weight:600; color:#ffffff;">CADASTRAR USUÁRIO</span></p></body></html> 833 | 834 | 835 | Qt::AlignCenter 836 | 837 | 838 | 839 | 840 | 841 | 842 | 50 843 | 844 | 845 | 846 | 847 | 848 | 0 849 | 0 850 | 851 | 852 | 853 | <html><head/><body><p><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Nome:</span></p></body></html> 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 0 862 | 0 863 | 864 | 865 | 866 | color:rgba(211, 239, 251,1); 867 | border-bottom:1px solid white; 868 | border-radius: None; 869 | background-color:rgba(85, 115, 155,0.1); 870 | font-family:Trebuchet MS; 871 | font-size:21px; 872 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 50 881 | 882 | 883 | 884 | 885 | <html><head/><body><p><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Usuário</span></p></body></html> 886 | 887 | 888 | 889 | 890 | 891 | 892 | color:rgba(211, 239, 251,1); 893 | border-bottom:1px solid white; 894 | border-radius: None; 895 | background-color:rgba(85, 115, 155,0.1); 896 | font-family:Trebuchet MS; 897 | font-size:21px; 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 50 907 | 908 | 909 | 910 | 911 | <html><head/><body><p><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Senha:</span></p></body></html> 912 | 913 | 914 | 915 | 916 | 917 | 918 | color:rgba(211, 239, 251,1); 919 | border-bottom:1px solid white; 920 | border-radius: None; 921 | background-color:rgba(85, 115, 155,0.1); 922 | font-family:Trebuchet MS; 923 | font-size:21px; 924 | 925 | 926 | QLineEdit::Password 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | 50 936 | 937 | 938 | 939 | 940 | <html><head/><body><p><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Senha:</span></p></body></html> 941 | 942 | 943 | 944 | 945 | 946 | 947 | color:rgba(211, 239, 251,1); 948 | border-bottom:1px solid white; 949 | border-radius: None; 950 | background-color:rgba(85, 115, 155,0.1); 951 | font-family:Trebuchet MS; 952 | font-size:21px; 953 | 954 | 955 | QLineEdit::Password 956 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 50 965 | 966 | 967 | 968 | 969 | <html><head/><body><p><span style=" font-size:12pt; font-weight:600; color:#ffffff;">Perfil:</span></p></body></html> 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | 0 978 | 0 979 | 980 | 981 | 982 | 983 | 12 984 | 985 | 986 | 987 | color: rgb(255, 255, 255); 988 | 989 | 990 | 991 | Usuário 992 | 993 | 994 | 995 | 996 | Administrador 997 | 998 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 0 1017 | 35 1018 | 1019 | 1020 | 1021 | QPushButton{ 1022 | color: rgb(0,0,10); 1023 | border-radius: 10px; 1024 | font-size: 16px; 1025 | background-color: #fff; 1026 | ;} 1027 | 1028 | QPushButton:hover{ 1029 | 1030 | background-color: rgb(170, 255, 255); 1031 | color:black 1032 | } 1033 | 1034 | 1035 | 1036 | 1037 | Cadastrar 1038 | 1039 | 1040 | 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | 1054 | 1055 | 1056 | 1057 | 1058 | 20 1059 | 75 1060 | true 1061 | 1062 | 1063 | 1064 | color: rgb(255, 255, 255); 1065 | 1066 | 1067 | CONTATOS 1068 | 1069 | 1070 | Qt::AlignCenter 1071 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | 0 1079 | 0 1080 | 1081 | 1082 | 1083 | <html><head/><body><p><span style=" font-size:16pt; font-weight:600; color:#ffffff;">Desenvolvedor: Nicolas almeida</span></p></body></html> 1084 | 1085 | 1086 | Qt::AlignCenter 1087 | 1088 | 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 1096 | 1097 | 1098 | 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 0 1106 | 0 1107 | 1108 | 1109 | 1110 | <html><head/><body><p><img src="_imgs/phone.png"/></p></body></html> 1111 | 1112 | 1113 | 1114 | 1115 | 1116 | 1117 | 1118 | 0 1119 | 0 1120 | 1121 | 1122 | 1123 | <html><head/><body><p><span style=" font-size:14pt; font-weight:600; color:#ffffff;">(11)98013-0552</span></p></body></html> 1124 | 1125 | 1126 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1127 | 1128 | 1129 | 1130 | 1131 | 1132 | 1133 | 1134 | 1135 | 1136 | 1137 | 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | 1144 | 1145 | 1146 | 1147 | 1148 | 1149 | 1150 | 1151 | 1152 | 1153 | 1154 | 1155 | 1156 | 0 1157 | 0 1158 | 1159 | 1160 | 1161 | <html><head/><body><p><img src="_imgs/email.png"/></p></body></html> 1162 | 1163 | 1164 | 1165 | 1166 | 1167 | 1168 | 1169 | 0 1170 | 0 1171 | 1172 | 1173 | 1174 | <html><head/><body><p><span style=" font-size:14pt; font-weight:600; color:#ffffff;"> contato@pytax.net</span></p></body></html> 1175 | 1176 | 1177 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1178 | 1179 | 1180 | 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | 1192 | 1193 | 1194 | 1195 | 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 0 1208 | 0 1209 | 1210 | 1211 | 1212 | <html><head/><body><p><img src="_imgs/instagram.png"/></p></body></html> 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 0 1221 | 0 1222 | 1223 | 1224 | 1225 | <html><head/><body><p><span style=" font-size:14pt; font-weight:600; color:#ffffff;">pytax</span></p></body></html> 1226 | 1227 | 1228 | Qt::AlignLeading|Qt::AlignLeft|Qt::AlignVCenter 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | 1245 | 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | 20 1252 | 75 1253 | true 1254 | 1255 | 1256 | 1257 | color: rgb(255, 255, 255); 1258 | 1259 | 1260 | SOBRE 1261 | 1262 | 1263 | Qt::AlignCenter 1264 | 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | Qt::Vertical 1271 | 1272 | 1273 | 1274 | 20 1275 | 40 1276 | 1277 | 1278 | 1279 | 1280 | 1281 | 1282 | 1283 | <html><head/><body><p align="center"><span style=" font-size:16pt; color:#ffffff;">Este sistema faz a imoprtação de arquivos XML e faz o controle do estoque de acordo com a entrada de notas e saídas apontadas pelo usuário.</span></p></body></html> 1284 | 1285 | 1286 | true 1287 | 1288 | 1289 | 1290 | 1291 | 1292 | 1293 | Qt::Vertical 1294 | 1295 | 1296 | 1297 | 20 1298 | 40 1299 | 1300 | 1301 | 1302 | 1303 | 1304 | 1305 | 1306 | 1307 | 1308 | 1309 | 1310 | 1311 | 1312 | 1313 | --------------------------------------------------------------------------------