# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'produto.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QFileDialog, QTableWidget, QTableWidgetItem
from dadosProduto import Ui_formDadosProdutos

import tkinter
from tkinter import messagebox

import mysql.connector
import pandas as pd
import variaveisControle


################ VARIÁVEIS DE CONEXÃO COM BANXO DE DADOS  ################
host = variaveisControle.host
user = variaveisControle.user
password = variaveisControle.password
datatabase = variaveisControle.database


class Ui_FormProduto(object):
    def setupUi(self, FormProduto):
        FormProduto.setObjectName("FormProduto")
        FormProduto.resize(812, 787)
        FormProduto.setStyleSheet("background-color: rgb(129, 181, 200);")
        self.bt_adicionar = QtWidgets.QPushButton(FormProduto)
        self.bt_adicionar.setGeometry(QtCore.QRect(20, 20, 111, 101))
        self.bt_adicionar.setStyleSheet("image: url(:/adicionar_produto/imagens/adicionar2.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_adicionar.setText("")
        self.bt_adicionar.setObjectName("bt_adicionar")
        self.bt_alterar = QtWidgets.QPushButton(FormProduto)
        self.bt_alterar.setGeometry(QtCore.QRect(160, 20, 111, 101))
        self.bt_alterar.setStyleSheet("image: url(:/editar_produto/imagens/editar2.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_alterar.setText("")
        self.bt_alterar.setObjectName("bt_alterar")
        self.bt_consultar = QtWidgets.QPushButton(FormProduto)
        self.bt_consultar.setGeometry(QtCore.QRect(300, 20, 111, 101))
        self.bt_consultar.setStyleSheet("image: url(:/consultar_produto/imagens/pesquisar2.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_consultar.setText("")
        self.bt_consultar.setObjectName("bt_consultar")
        self.bt_retornar = QtWidgets.QPushButton(FormProduto)
        self.bt_retornar.setGeometry(QtCore.QRect(680, 20, 111, 101))
        self.bt_retornar.setStyleSheet("image: url(:/voltar/imagens/voltar.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_retornar.setText("")
        self.bt_retornar.setObjectName("bt_retornar")
        self.bt_excluir = QtWidgets.QPushButton(FormProduto)
        self.bt_excluir.setGeometry(QtCore.QRect(440, 20, 111, 101))
        self.bt_excluir.setStyleSheet("image: url(:/excluir_produto/imagens/deletar2.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_excluir.setText("")
        self.bt_excluir.setObjectName("bt_excluir")
        self.txt_nomeProduto = QtWidgets.QLineEdit(FormProduto)
        self.txt_nomeProduto.setGeometry(QtCore.QRect(190, 187, 441, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.txt_nomeProduto.setFont(font)
        self.txt_nomeProduto.setStyleSheet("border-radius: 15px;\n"
"background-color: rgb(255, 255, 255);\n"
"border-style: outset;\n"
"border-color: black;\n"
"border-width: 1px")
        self.txt_nomeProduto.setText("")
        self.txt_nomeProduto.setObjectName("txt_nomeProduto")
        self.lb_nomeCliente = QtWidgets.QLabel(FormProduto)
        self.lb_nomeCliente.setGeometry(QtCore.QRect(50, 180, 131, 41))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lb_nomeCliente.setFont(font)
        self.lb_nomeCliente.setObjectName("lb_nomeCliente")
        self.bt_pesquisar = QtWidgets.QPushButton(FormProduto)
        self.bt_pesquisar.setGeometry(QtCore.QRect(640, 180, 51, 41))
        self.bt_pesquisar.setStyleSheet("image: url(:/pesquisa/imagens/pesquisa.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_pesquisar.setText("")
        self.bt_pesquisar.setObjectName("bt_pesquisar")
        self.bt_pesquisarGeral = QtWidgets.QPushButton(FormProduto)
        self.bt_pesquisarGeral.setGeometry(QtCore.QRect(700, 180, 51, 41))
        self.bt_pesquisarGeral.setStyleSheet("image: url(:/pesquisageral/imagens/filtro.png);\n"
"background-color: rgb(173, 200, 202);")
        self.bt_pesquisarGeral.setText("")
        self.bt_pesquisarGeral.setObjectName("bt_pesquisarGeral")
        self.tb_produto = QtWidgets.QTableWidget(FormProduto)
        self.tb_produto.setGeometry(QtCore.QRect(20, 260, 771, 451))
        font = QtGui.QFont()
        font.setFamily("MS Shell Dlg 2")
        font.setPointSize(12)
        self.tb_produto.setFont(font)
        self.tb_produto.setStyleSheet("background-color: rgb(255, 255, 255);")
        self.tb_produto.setObjectName("tb_produto")
        self.tb_produto.setColumnCount(4)
        self.tb_produto.setRowCount(0)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tb_produto.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tb_produto.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tb_produto.setHorizontalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        font = QtGui.QFont()
        font.setPointSize(16)
        font.setBold(True)
        font.setWeight(75)
        item.setFont(font)
        self.tb_produto.setHorizontalHeaderItem(3, item)
        self.lb_totalProduto = QtWidgets.QLabel(FormProduto)
        self.lb_totalProduto.setGeometry(QtCore.QRect(540, 723, 141, 41))
        font = QtGui.QFont()
        font.setPointSize(12)
        self.lb_totalProduto.setFont(font)
        self.lb_totalProduto.setObjectName("lb_totalProduto")
        self.txt_totalProduto = QtWidgets.QLineEdit(FormProduto)
        self.txt_totalProduto.setGeometry(QtCore.QRect(690, 730, 101, 31))
        font = QtGui.QFont()
        font.setPointSize(11)
        self.txt_totalProduto.setFont(font)
        self.txt_totalProduto.setStyleSheet("border-radius: 15px;\n"
"background-color: rgb(255, 255, 255);\n"
"border-style: outset;\n"
"border-color: black;\n"
"border-width: 1px")
        self.txt_totalProduto.setText("")
        self.txt_totalProduto.setAlignment(QtCore.Qt.AlignCenter)
        self.txt_totalProduto.setDragEnabled(False)
        self.txt_totalProduto.setReadOnly(True)
        self.txt_totalProduto.setObjectName("txt_totalProduto")

        self.retranslateUi(FormProduto)
        QtCore.QMetaObject.connectSlotsByName(FormProduto)

    def retranslateUi(self, FormProduto):
        _translate = QtCore.QCoreApplication.translate
        FormProduto.setWindowTitle(_translate("FormProduto", "Produto"))
        self.bt_adicionar.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Adicionar Produto</span></p></body></html>"))
        self.bt_alterar.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Edidar Produto</span></p></body></html>"))
        self.bt_consultar.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Consultar Produto</span></p></body></html>"))
        self.bt_retornar.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Voltar</span></p></body></html>"))
        self.bt_excluir.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Excluir Produto</span></p></body></html>"))
        self.lb_nomeCliente.setText(_translate("FormProduto", "Nome Cliente:"))
        self.bt_pesquisar.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Consultar Produto por Nome</span></p></body></html>"))
        self.bt_pesquisarGeral.setToolTip(_translate("FormProduto", "<html><head/><body><p align=\"center\"><span style=\" font-size:12pt; font-weight:600;\">Verificar Lista Completa Produto</span></p></body></html>"))
        item = self.tb_produto.horizontalHeaderItem(0)
        item.setText(_translate("FormProduto", "ID"))
        item = self.tb_produto.horizontalHeaderItem(1)
        item.setText(_translate("FormProduto", "Nome"))
        item = self.tb_produto.horizontalHeaderItem(2)
        item.setText(_translate("FormProduto", "Valor"))
        item = self.tb_produto.horizontalHeaderItem(3)
        item.setText(_translate("FormProduto", "Tipo"))
        self.lb_totalProduto.setText(_translate("FormProduto", "Total Produtos:"))

##################################################################################################
######################################### BOTÕES SISTEMA #########################################
##################################################################################################

        self.bt_retornar.clicked.connect(lambda: self.sairTela(FormProduto))
        self.bt_pesquisarGeral.clicked.connect(self.pesquisarGeral)
        self.bt_pesquisar.clicked.connect(self.pesquisarProduto)
        self.bt_adicionar.clicked.connect(self.cadastrarProduto)
        self.bt_consultar.clicked.connect(self.consultarProduto)
        self.bt_alterar.clicked.connect(self.alterarProduto)
        self.bt_excluir.clicked.connect(self.excluirProduto)

###################################################################################################
######################################### FUNÇÕES SISTEMA #########################################
###################################################################################################

################ FECHAR telaProduto ################
    def sairTela(self, FormProduto):
        FormProduto.close()

################ Consultar tabelaProduto Geral ################
    def pesquisarGeral(self):
        mydb = mysql.connector.connect(
            host = host,
            user = user,
            password = password,
            database = datatabase
        )

        mycursor = mydb.cursor()
        mycursor.execute('SELECT * FROM produto')
        myresult = mycursor.fetchall()
        df = pd.DataFrame(myresult, columns = ['ID', 'Nome', 'Valor', 'Tipo'])
        self.all_data = df

        ## Carrega o arquivo na tabela tb_produto ##
        numRows = len(self.all_data.index)
        self.tb_produto.setColumnCount(len(self.all_data.columns))
        self.tb_produto.setRowCount(numRows)
        self.tb_produto.setHorizontalHeaderLabels(self.all_data.columns)

        for i in range(numRows):
            for j in range(len(self.all_data.columns)):
                self.tb_produto.setItem(i, j, QTableWidgetItem(str(self.all_data.iat[i,j])))

        self.tb_produto.resizeColumnsToContents()
        self.tb_produto.resizeRowsToContents()
        self.txt_totalProduto.setText(str(len(myresult)))
        mycursor.close()

################ PESQUISAR PRODUTO ################
    def pesquisarProduto(self):
        mydb = mysql.connector.connect(
            host = host,
            user = user,
            password = password,
            database = datatabase
        )

        mycursor = mydb.cursor()
        nomeConsulta = self.txt_nomeProduto.text()
        consultaSQL = "SELECT * FROM produto WHERE nome LIKE '" + nomeConsulta + "%'"
        mycursor.execute(consultaSQL)
        myresult = mycursor.fetchall()
        df = pd.DataFrame(myresult, columns = ['ID', 'Nome', 'Valor', 'Tipo'])
        self.all_data = df
        root = tkinter.Tk()
        root.withdraw()

        ## Carrega o arquivo pelo nome na tabela tb_produto ##
        if len(myresult) < 1:
            messagebox.showerror("Erro ao Consultar Produto", "NENHUM PRODUTO ENCONTRADO")
        else:
            numRows = len(self.all_data.index)
            self.tb_produto.setColumnCount(len(self.all_data.columns))
            self.tb_produto.setRowCount(numRows)
            self.tb_produto.setHorizontalHeaderLabels(self.all_data.columns)

            for i in range(numRows):
                for j in range(len(self.all_data.columns)):
                    self.tb_produto.setItem(i, j, QTableWidgetItem(str(self.all_data.iat[i,j])))

            self.tb_produto.resizeColumnsToContents()
            self.tb_produto.resizeRowsToContents()
            self.txt_totalProduto.setText(str(len(myresult)))
            mycursor.close()

################ ABRIR TELA CADASTRAR PRODUTO ################
    def cadastrarProduto(self):
        variaveisControle.tipoTelaDadosProduto = 'incluir'

        self.formDadosProdutos = QtWidgets.QWidget()
        self.ui = Ui_formDadosProdutos()
        self.ui.setupUi(self.formDadosProdutos)
        self.formDadosProdutos.show()
        _translate = QtCore.QCoreApplication.translate
        self.formDadosProdutos.setWindowTitle(_translate("formDadosProdutos", "Cadastrar Produto"))

################ ABRIR TELA ALTERAR PRODUTO ################
    def alterarProduto(self):
        line = self.tb_produto.currentRow()
        root = tkinter.Tk()
        root.withdraw()

        if line < 0:
            messagebox.showerror("Erro ao Alterar Produto", "ESCOLHA UM PRODUTO PARA ALTERAR")
        else:
            variaveisControle.tipoTelaDadosProduto = 'alterar'
            #line = self.tb_cliente.currentRow()
            item = self.tb_produto.item(line, 0)
            variaveisControle.idConsulta = item.text()

            # Abertura de Tela AlterarCliente #
            self.formDadosProdutos = QtWidgets.QWidget()
            self.ui = Ui_formDadosProdutos()
            self.ui.setupUi(self.formDadosProdutos)
            self.formDadosProdutos.show()
            _translate = QtCore.QCoreApplication.translate
            self.formDadosProdutos.setWindowTitle(_translate("formDadosProdutos", "Alterar Produto"))

################ ABRIR TELA CONSULTAR PRODUTO ################
    def consultarProduto(self):
        line = self.tb_produto.currentRow()
        root = tkinter.Tk()
        root.withdraw()

        if line < 0:
            messagebox.showerror("Erro ao Consultar Produto", "ESCOLHA UM PRODUTO PARA CONSULTAR")
        else:
            variaveisControle.tipoTelaDadosProduto = 'consultar'
            #line = self.tb_cliente.currentRow()
            item = self.tb_produto.item(line, 0)
            variaveisControle.idConsulta = item.text()

            # Abertura de Tela consultarCliente #
            self.formDadosProdutos = QtWidgets.QWidget()
            self.ui = Ui_formDadosProdutos()
            self.ui.setupUi(self.formDadosProdutos)
            self.formDadosProdutos.show()
            _translate = QtCore.QCoreApplication.translate
            self.formDadosProdutos.setWindowTitle(_translate("formDadosProdutos", "Consultar Produto"))

################ EXCLUIR PRODUTO ################
    def excluirProduto(self):
        line = self.tb_produto.currentRow()
        root = tkinter.Tk()
        root.withdraw()

        if line < 0:
            messagebox.showerror("Erro ao Excluir Produto", "ESCOLHA UM PRODUTO PARA EXCLUIR")
        else:
            #line = self.tb_cliente.currentRow()
            item = self.tb_produto.item(line, 0)
            idProduto = item.text()

            # Conexão Banco de Dados #
            mydb = mysql.connector.connect(
                host = host,
                user = user,
                password = password,
                database = datatabase
            )
            mycursor = mydb.cursor()
            sql = "DELETE FROM produto WHERE idProduto = '" + idProduto + "'"
            mycursor.execute(sql)
            mydb.commit()
            
            # Atualizar Tabela #
            mycursor.execute('SELECT * FROM produto')
            myresult = mycursor.fetchall()
            df = pd.DataFrame(myresult, columns = ['ID', 'Nome', 'Valor', 'Tipo'])
            self.all_data = df

            ## Carrega o arquivo na tabela tb_produto ##
            numRows = len(self.all_data.index)
            self.tb_produto.setColumnCount(len(self.all_data.columns))
            self.tb_produto.setRowCount(numRows)
            self.tb_produto.setHorizontalHeaderLabels(self.all_data.columns)

            for i in range(numRows):
                for j in range(len(self.all_data.columns)):
                    self.tb_produto.setItem(i, j, QTableWidgetItem(str(self.all_data.iat[i,j])))

            self.tb_produto.resizeColumnsToContents()
            self.tb_produto.resizeRowsToContents()
            mycursor.close()
            messagebox.showinfo("Produto Excluido", "PRODUTO EXCLUIDO COM SUCESSO")

import adicionar_cliente
import adicionar_produto
import alterar_cliente
import consultar_cliente
import consultar_produto
import editar_produto
import excluir_cliente
import excluir_produto
import pesquisa
import pesquisageral
import voltar


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    FormProduto = QtWidgets.QWidget()
    ui = Ui_FormProduto()
    ui.setupUi(FormProduto)
    FormProduto.show()
    sys.exit(app.exec_())
