<reponame>Maxceleste/sistema-mercado-python
import PySimpleGUI as sg
from PySimpleGUI import WINDOW_CLOSED
import mysql.connector
import sys

"""A Estrutura de toda parte do programa segue o seguinte padrão: 
Uma classe que representa alguma janela do programa, pode ter uma ou mais.
Dentro da classe, a variável de layout da janela, e também funções que só serão utilizadas naquela janela.
E uma função principal que irá rodar toda a janela. Também, deverá ter uma forma de testar essa janela rodando aqui."""

class Login:
    #Layout da tela de Login
    layout_login = [
        [sg.Text(text='LOGIN', expand_x= True, expand_y=True, justification='center')],
        [sg.Text('', expand_x= True), sg.Image(source='imagens/login-icon.png'), sg.Text('', expand_x= True)],
        [sg.Text('Insira seus dados abaixo:', key='status', justification='center', expand_x=True)],
        [sg.Text('', expand_x= True), sg.Text('Usuário'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Input(key='user'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Text('Senha'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Input(password_char='*', key='password'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Button('Entrar', key='login', bind_return_key=True), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True, justification='center', key = 'resultado')],
        [sg.Text('', expand_y=True)]
        ]

   


    #Função que checa se algum o valor preenchidos são nulos.
    def checar_nulo(self, user, senha):
        if user == "" or senha == "":
            return False
        else:
            return True

    #Função que verifica se o usuário existe no banco de dados
    #retorna 1 se o usuário existe, e 0 se ele não existe.
    def verificar_usuário(self, user, senha, cursor):
        sql = """SELECT * FROM TABELA_VENDEDORES
                WHERE USERNAME = %s AND SENHA = MD5(%s)"""
            
        usuario = 0
        cursor.execute(sql, (user, senha))
        for usuario_disponível in cursor:
            usuario += 1
        
        if usuario == 1:
            return 1
        else:
            return 0
        
    #Função que usa as duas acima somadas: Ele retorna nulo se algum dos valores não foi preenchidos
    #ou retorna 1 ou 0 se o usuário exite no banco de dados ou não.
    def tudo(self, user, senha, cursor):
        nulo = self.checar_nulo(user, senha)
        if not nulo:
            return "nulo"
        else:
            resultado = self.verificar_usuário(user, senha, cursor)
            return resultado
    
    #Função que roda toda a janela.
    def login_total(self, cursor):
        window_user = sg.Window('Supermercado', layout=self.layout_login, resizable=True).Finalize()
        #Loop da tela de Login se iniciando
        while True:
            event, values = window_user.read()
            if event == WINDOW_CLOSED:
                sys.exit()
                
                

            #Pegando o valores que o usuário digitou na tela
            user = values["user"]
            senha = values["password"]


            if event == "login":
                
                #Deixando mais fácil de compreender as if statements.
                resultado = self.tudo(user, senha, cursor)
                usuario_exite = resultado == 1
                usuario_nao_existe = resultado == 0
                
                if usuario_exite:
                    #Caso o código seja reproduzido aqui, ele não vai retornar nada, só falar que foi conectado. 
                    if __name__ == "__main__":
                        window_user['resultado'].update("O usuário existe!", text_color = "dark green")
                    
                    #Quando se reproduz por exemplo no Main.py, ele retorna o user.
                    else:
                        return user

                elif usuario_nao_existe:
                    window_user['resultado'].update("O usuário não existe!", text_color = "red")

                else:
                    window_user['resultado'].update("Preencha todos os campos.", text_color = "white")
            
   



#Testar o login
if __name__ == "__main__":

    #Tentativa de se conectar o banco de dados e rodar a janela
    try:
        meu_banco = mysql.connector.connect(
        host = "seu_host",
        user = "seu_user",
        password = "<PASSWORD>",
        database = "Supermercado"
        )

        mycursor = meu_banco.cursor()

        Login().login_total(mycursor)

    #Caso algo dê errado, ele pede pra revisar as informações do banco.
    except:

        print("Cheque os valores do seu banco de dados na parte de testes do código.")
import PySimpleGUI as sg
from PySimpleGUI import WINDOW_CLOSED
import mysql.connector
import sys

"""A Estrutura de toda parte do programa segue o seguinte padrão: 
Uma classe que representa alguma janela do programa, pode ter uma ou mais.
Dentro da classe, a variável de layout da janela, e também funções que só serão utilizadas naquela janela.
E uma função principal que irá rodar toda a janela. Também, deverá ter uma forma de testar essa janela rodando aqui."""

class Login:
    #Layout da tela de Login
    layout_login = [
        [sg.Text(text='LOGIN', expand_x= True, expand_y=True, justification='center')],
        [sg.Text('', expand_x= True), sg.Image(source='imagens/login-icon.png'), sg.Text('', expand_x= True)],
        [sg.Text('Insira seus dados abaixo:', key='status', justification='center', expand_x=True)],
        [sg.Text('', expand_x= True), sg.Text('Usuário'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Input(key='user'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Text('Senha'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Input(password_char='*', key='password'), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True), sg.Button('Entrar', key='login', bind_return_key=True), sg.Text('', expand_x= True)],
        [sg.Text('', expand_x= True, justification='center', key = 'resultado')],
        [sg.Text('', expand_y=True)]
        ]

   


    #Função que checa se algum o valor preenchidos são nulos.
    def checar_nulo(self, user, senha):
        if user == "" or senha == "":
            return False
        else:
            return True

    #Função que verifica se o usuário existe no banco de dados
    #retorna 1 se o usuário existe, e 0 se ele não existe.
    def verificar_usuário(self, user, senha, cursor):
        sql = """SELECT * FROM TABELA_VENDEDORES
                WHERE USERNAME = %s AND SENHA = MD5(%s)"""
            
        usuario = 0
        cursor.execute(sql, (user, senha))
        for usuario_disponível in cursor:
            usuario += 1
        
        if usuario == 1:
            return 1
        else:
            return 0
        
    #Função que usa as duas acima somadas: Ele retorna nulo se algum dos valores não foi preenchidos
    #ou retorna 1 ou 0 se o usuário exite no banco de dados ou não.
    def tudo(self, user, senha, cursor):
        nulo = self.checar_nulo(user, senha)
        if not nulo:
            return "nulo"
        else:
            resultado = self.verificar_usuário(user, senha, cursor)
            return resultado
    
    #Função que roda toda a janela.
    def login_total(self, cursor):
        window_user = sg.Window('Supermercado', layout=self.layout_login, resizable=True).Finalize()
        #Loop da tela de Login se iniciando
        while True:
            event, values = window_user.read()
            if event == WINDOW_CLOSED:
                sys.exit()
                
                

            #Pegando o valores que o usuário digitou na tela
            user = values["user"]
            senha = values["password"]


            if event == "login":
                
                #Deixando mais fácil de compreender as if statements.
                resultado = self.tudo(user, senha, cursor)
                usuario_exite = resultado == 1
                usuario_nao_existe = resultado == 0
                
                if usuario_exite:
                    #Caso o código seja reproduzido aqui, ele não vai retornar nada, só falar que foi conectado. 
                    if __name__ == "__main__":
                        window_user['resultado'].update("O usuário existe!", text_color = "dark green")
                    
                    #Quando se reproduz por exemplo no Main.py, ele retorna o user.
                    else:
                        return user

                elif usuario_nao_existe:
                    window_user['resultado'].update("O usuário não existe!", text_color = "red")

                else:
                    window_user['resultado'].update("Preencha todos os campos.", text_color = "white")
            
   



#Testar o login
if __name__ == "__main__":

    #Tentativa de se conectar o banco de dados e rodar a janela
    try:
        meu_banco = mysql.connector.connect(
        host = "seu_host",
        user = "seu_user",
        password = "<PASSWORD>",
        database = "Supermercado"
        )

        mycursor = meu_banco.cursor()

        Login().login_total(mycursor)

    #Caso algo dê errado, ele pede pra revisar as informações do banco.
    except:

        print("Cheque os valores do seu banco de dados na parte de testes do código.")
A Estrutura de toda parte do programa segue o seguinte padrão:  Uma classe que representa alguma janela do programa, pode ter uma ou mais. Dentro da classe, a variável de layout da janela, e também funções que só serão utilizadas naquela janela. E uma função principal que irá rodar toda a janela. Também, deverá ter uma forma de testar essa janela rodando aqui. #Layout da tela de Login #Função que checa se algum o valor preenchidos são nulos. #Função que verifica se o usuário existe no banco de dados #retorna 1 se o usuário existe, e 0 se ele não existe. SELECT * FROM TABELA_VENDEDORES                 WHERE USERNAME = %s AND SENHA = MD5(%s) #Função que usa as duas acima somadas: Ele retorna nulo se algum dos valores não foi preenchidos #ou retorna 1 ou 0 se o usuário exite no banco de dados ou não. #Função que roda toda a janela. #Loop da tela de Login se iniciando #Pegando o valores que o usuário digitou na tela #Deixando mais fácil de compreender as if statements. #Caso o código seja reproduzido aqui, ele não vai retornar nada, só falar que foi conectado. #Quando se reproduz por exemplo no Main.py, ele retorna o user. #Testar o login #Tentativa de se conectar o banco de dados e rodar a janela #Caso algo dê errado, ele pede pra revisar as informações do banco.