Browse Source

Versão 1.0

Vinícius de Assis Silva 2 years ago
parent
commit
26c1b7ebf7

+ 18 - 0
Automotivo Soluções/Database.py

@@ -0,0 +1,18 @@
+import sqlite3
+
+
+class Banco():
+   def __init__(self):
+      self.conexao = sqlite3.connect('banco.db')
+      self.criarTabela()
+
+   def criarTabela(self):
+      c = self.conexao.cursor()
+      c.execute("""CREATE TABLE IF NOT EXISTS funcionario(idfunc INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, nome TEXT NOT NULL, cpf INTEGER NOT NULL, cargo TEXT NOT NULL, login UNIQUE NOT NULL, senha TEXT NOT NULL)""")
+      
+      c.execute("""CREATE TABLE IF NOT EXISTS clientes(idcliente INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, nome TEXT NOT NULL, cpf INTEGER NOT NULL, carro TEXT NOT NULL, telefone TEXT NOT NULL, email TEXT NOT NULL, endereco TEXT NOT NULL)""")
+      
+      
+      self.conexao.commit()
+      c.close()
+

+ 184 - 0
Automotivo Soluções/GerOrdensGerente.py

@@ -0,0 +1,184 @@
+from tkinter import *
+from tkinter import ttk
+from tkinter import messagebox
+from tkinter.font import BOLD
+import TabOrd as ordem
+
+
+class ver_Ordens():
+    def __init__(self):
+
+        self.janelaVerOrd = Tk()
+        self.janelaVerOrd.title('Gerenciar Ordem')
+        self.janelaVerOrd.geometry('1600x900')
+        self.janelaVerOrd.config(bg='#484848')
+        self.janelaVerOrd.state('zoomed')
+        self.janelaVerOrd.iconbitmap('automotivo.ico')
+
+    # ==========|  SEÇÕES  | =========== #
+        self.frameTop = Frame(self.janelaVerOrd, bg='#484848')
+        self.frameMid = Frame(self.janelaVerOrd, bg='#484848')
+        # self.frameBot = Frame(self.janelaVerOrc, bg='#484848')
+
+        self.frameTop.pack(pady=(20, 0))
+        self.frameMid.pack()
+        # self.frameBot.pack()
+
+        self.wrapper_trv = LabelFrame(
+            self.frameMid, text='  Ordens Cadastradas  ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.wrapper_aprov = LabelFrame(
+            self.frameMid, text=' Gerenciar ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.wrapper_filtrar = LabelFrame(
+            self.frameMid, text=' Pesquisar ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.frameRodape = Frame(self.janelaVerOrd, bg='#484848')
+
+        self.wrapper_trv.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.wrapper_aprov.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.wrapper_filtrar.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.frameRodape.pack(fill='both', expand='yes', padx=20, pady=10)
+
+    # =========|  TOP  |========= #
+        self.titulo = Label(self.frameTop, text='Ordens de Serviços',
+                            bg='#484848', fg='white', font=('Roboto', 20, BOLD))
+        self.titulo.pack(padx=20, pady=10)
+
+    # ========| MIDDLE  |======== #
+    # =======| TREEVIEW  |======== #
+        self.cabecalho = ('#', 'cliente', 'carro', 'cpf_cliente',
+                          'mecanico', 'cpf_mec', 'valor', 'descricao', 'status')
+        self.trv = ttk.Treeview(
+            self.wrapper_trv, selectmode='browse', columns=self.cabecalho, show='headings')
+
+        self.trv.column('#', width=10)
+        self.trv.column('cliente', width=150, anchor='center')
+        self.trv.column('carro', width=150, anchor='center')
+        self.trv.column('cpf_cliente', width=150, anchor='center')
+        self.trv.column('mecanico', width=150, anchor='center')
+        self.trv.column('cpf_mec', width=150, anchor='center')
+        self.trv.column('valor', width=150, anchor='center')
+        self.trv.column('descricao', width=300)
+        self.trv.column('status', width=100, anchor='center')
+
+        self.trv.heading('#', text='#')
+        self.trv.heading('cliente', text='Cliente')
+        self.trv.heading('carro', text='Carro')
+        self.trv.heading('cpf_cliente', text='CPF Cliente')
+        self.trv.heading('mecanico', text='Mecânico')
+        self.trv.heading('cpf_mec', text='CPF Mec')
+        self.trv.heading('valor', text='Valor R$')
+        self.trv.heading('descricao', text='Descrição do Serviço')
+        self.trv.heading('status', text='Status')
+
+        self.trv.bind('<Double 1>', self.pegar_linhaBind)
+        self.trv.pack(pady=10)
+
+        self.popular()
+
+    # =========|  GERAR ORDEM DE SERVIÇO  |======== #
+        self.btn_Concluir = Button(
+            self.wrapper_aprov, text='Concluir', command=self.concluir, bg='#484848', fg='white')
+        self.btn_Excluir = Button(
+            self.wrapper_aprov, text='Excluir', command=self.excluir, bg='#484848', fg='white')
+
+        self.btn_Concluir.pack(side='left', padx=(30, 0), pady=10, ipadx=20)
+        self.btn_Excluir.pack(side='left', padx=30, pady=10, ipadx=20)
+
+    # =========|  CAMPO DE BUSCA  |======== #
+        self.lblChave = Label(self.wrapper_filtrar,
+                              text='Palavra-chave', bg='#484848', fg='white')
+        self.lblChave.pack(side='left', padx=6, pady=10)
+
+        self.entBusca = Entry(self.wrapper_filtrar, textvariable='filtro')
+        self.entBusca.pack(side='left', padx=6, pady=10, ipadx=15)
+
+        self.btn_procurar = Button(
+            self.wrapper_filtrar, text='Procurar', command=self.procurar, bg='#484848', fg='white')
+        self.btn_mostrar = Button(
+            self.wrapper_filtrar, text='Mostrar Todos', command=self.popular, bg='#484848', fg='white')
+
+        self.btn_procurar.pack(side='left', padx=6, pady=10, ipadx=20)
+        self.btn_mostrar.pack(side='left', padx=6, pady=10, ipadx=20)
+
+    # ===========| BOTTOM  |=========== #
+    # ===========| VOLTAR  |=========== #
+        self.btn_voltar = Button(
+            self.frameRodape, text='Voltar', command=self.voltar, bg='#484848', fg='white')
+
+        self.btn_voltar.pack(side='right', padx=6, pady=10, ipadx=30)
+
+        self.varDeArmaz = ''
+
+        self.btn_voltar.bind("<Enter>", self.hoverIn3)
+        self.btn_voltar.bind("<Leave>", self.hoverOut)
+        self.btn_Excluir.bind("<Enter>", self.hoverIn3)
+        self.btn_Excluir.bind("<Leave>", self.hoverOut)
+        self.btn_Concluir.bind("<Enter>", self.hoverIn1)
+        self.btn_Concluir.bind("<Leave>", self.hoverOut)
+        
+        mainloop()
+        
+
+# ===========|  FUNÇÕES  |============ #
+
+
+    def pegar_linhaBind(self, event):
+        return self.pegar_linha()
+
+    def pegar_linha(self):
+        for item in self.trv.selection():
+            self.id = self.trv.item(item, 'values')
+        ident = self.id
+        self.varDeArmaz = ident
+
+    def popular(self):
+        self.trv.delete(*self.trv.get_children())
+        for i in ordem.populate(self):
+            self.trv.insert('', 'end', values=i)
+
+    def status(self):
+        state = 'Finalizada'
+        tupla = self.varDeArmaz
+        lista1 = []
+        for i in tupla:
+            lista1.append(i)
+        idordem = lista1[0]
+        ordem.update(state, idordem)
+        self.popular()
+        self.varDeArmaz = ''
+
+    def concluir(self):
+        return self.status()
+
+    def excluir(self):
+        tupla = self.varDeArmaz
+        pickingID = []
+        for i in tupla:
+            pickingID.append(i)
+        idordem = pickingID[0]
+        ordem.delete(idordem)
+        self.popular()
+        self.varDeArmaz = ''
+
+    def procurar(self):
+        chave = self.entBusca.get()
+        self.trv.delete(*self.trv.get_children())
+        for i in ordem.filtrar(chave):
+            self.trv.insert('', END, values=i)
+
+    def voltar(self):
+        self.janelaVerOrd.destroy()
+        return
+
+    def hoverIn1(self, event):  # verde
+       event.widget.config(bg="#3CB371", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):  # vermelho
+       event.widget.config(bg="#8B0000", fg="white", relief=GROOVE)
+
+    def hoverOut(self, event):
+       event.widget.config(bg='#484848', fg="#e1e3db", relief=RAISED)
+
+   
+
+
+app = ver_Ordens()

+ 112 - 0
Automotivo Soluções/TabClien.py

@@ -0,0 +1,112 @@
+from Database import Banco  # ---- database
+from tkinter import messagebox
+import tkinter as tk
+
+
+class Clientes(object):
+   def __init__(self):
+
+      self.info = {}
+      self.idcliente = 0
+      self.nome = ''
+      self.cpf = ''
+      self.carro = ''
+      self.telefone = ''
+      self.email = ''
+      self.endereco = ''
+
+   def add_cliente(self):
+      b = Banco()
+      try:
+         c = b.conexao.cursor()
+         c.execute("INSERT INTO clientes(nome, cpf, carro, telefone, email, endereco)values('"+self.nome +
+                     "', '"+self.cpf+"', '"+self.carro+"', '"+self.telefone+"', '"+self.email+"', '"+self.endereco+"')")
+         b.conexao.commit()
+         c.close()
+         return messagebox.showinfo('Informativo', 'Cliente cadastrado com sucesso!')
+      except:
+         return messagebox.showwarning('Atenção', 'Ocorreu um erro no cadastro')
+
+   def identificar_linha(self, identificador):
+
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute("select * from clientes where idcliente = "+ identificador + " ")
+      
+      for linha in c:
+         self.idcliente = linha[0]
+         self.nome = linha[1]
+         self.cpf = linha[2]
+         self.carro = linha[3]
+         self.telefone = linha[4]
+         self.email = linha[5]
+         self.endereco = linha[6]
+      c.close()
+
+   def buscar_cliente(self, nome):
+      b = Banco()
+      try:
+         c = b.conexao.cursor()
+         c.execute("SELECT * FROM clientes WHERE nome LIKE '%"
+                     + nome+"%' ")
+         for linha in c:
+               self.idcliente = linha[0]
+               self.nome = linha[1]
+               self.cpf = linha[2]
+               self.carro = linha[3]
+               self.telefone = linha[4]
+               self.email = linha[5]
+               self.endereco = linha[6]
+
+         c.close()
+         return messagebox.showinfo('INFORMATIVO', 'Cliente Encontrado!')
+
+      except:
+         return messagebox.showwarning('ATENÇÃO', 'Cliente Não Encontrado')
+
+   def populate(self):
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute('SELECT * FROM clientes')
+      res = c.fetchall()
+      c.close()
+      return res
+
+   def filtrar_cliente(self, nome):
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute("SELECT * FROM clientes WHERE nome LIKE '%"+nome+"%' ")
+      linha = c.fetchall()
+      print(linha)
+      c.close()
+      return linha
+
+   def atualizar_cliente(self):
+      b = Banco()
+      try:
+         c = b.conexao.cursor()
+         c.execute("UPDATE clientes SET nome = '" +
+                     self.nome + "', cpf = '" +
+                     self.cpf + "', carro = '" +
+                     self.carro + "', telefone = '" +
+                     self.telefone + "', email = '" +
+                     self.email + "', endereco = '" +
+                     self.endereco + "' WHERE idcliente = " +
+                     self.idcliente + " ")
+         b.conexao.commit()
+         c.close()
+         return messagebox.showinfo('Informativo', 'Alteração realizada com sucesso!')
+      except:
+         return messagebox.showwarning('Atenção', 'Ocorreu um erro ao alterar')
+
+   def deletar_cliente(self):
+      b = Banco()
+      try:
+         c = b.conexao.cursor()
+         c.execute("DELETE FROM clientes WHERE idcliente = " +
+                     self.idcliente+" ")
+         b.conexao.commit()
+         c.close()
+         return messagebox.showinfo('Informe', 'Cliente excluído com sucesso!')
+      except:
+         return messagebox.showwarning('Atenção!', 'Não foi possível excluir cliente.')

+ 88 - 0
Automotivo Soluções/TabFunc.py

@@ -0,0 +1,88 @@
+from Database import Banco  # ---- database
+from tkinter import messagebox
+import tkinter as tk
+
+
+class TabFunc(object):
+   def __init__(self):
+
+      self.info = {}
+      self.idfunc = 0
+      self.nome = ''
+      self.cpf = ''
+      self.cargo = ''
+      self.login = ''
+      self.senha = ''
+
+   def add_func(self):
+      b = Banco()
+      try:
+            c = b.conexao.cursor()
+            c.execute("INSERT INTO funcionario(nome, cpf, cargo, login, senha)values('"+self.nome +
+                     "', '"+self.cpf+"', '"+self.cargo+"', '"+self.login+"', '"+self.senha+"')")
+            b.conexao.commit()
+            c.close()
+            return messagebox.showinfo('Informativo', 'Funcionário cadastrado com sucesso!')
+      except:
+            return messagebox.showwarning('Atenção', 'Ocorreu um erro no cadastro')
+
+   def identificar_linha(self, identificador):
+
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute("select * from funcionario where idfunc = " +
+                  identificador + " ")
+
+      for linha in c:
+            self.idfunc = linha[0]
+            self.nome = linha[1]
+            self.cpf = linha[2]
+            self.cargo = linha[3]
+            self.login = linha[4]
+            self.senha = linha[5]
+      c.close()
+
+   def filtrar_func(self, nome):
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute("SELECT * FROM funcionario WHERE nome LIKE '%"+nome+"%' ")
+      linha = c.fetchall()
+      c.close()
+      return linha
+
+   def populate(self):
+      b = Banco()
+      c = b.conexao.cursor()
+      c.execute('SELECT * FROM funcionario')
+      res = c.fetchall()
+      c.close()
+      return res
+
+   def atualizar_func(self):
+      b = Banco()
+      try:
+            c = b.conexao.cursor()
+            c.execute("UPDATE funcionario SET nome = '" +
+                     self.nome + "', cpf = '" +
+                     self.cpf + "', cargo = '" +
+                     self.cargo + "', login = '" +
+                     self.login + "', senha = '" +
+                     self.senha + "' WHERE idfunc = " +
+                     self.idfunc + " ")
+            b.conexao.commit()
+            c.close()
+            return messagebox.showinfo('Informativo', 'Alteração realizada com sucesso!')
+      except:
+            return messagebox.showwarning('Atenção', 'Ocorreu um erro ao alterar')
+
+   def deletar_func(self):
+      b = Banco()
+      try:
+            c = b.conexao.cursor()
+            c.execute("DELETE FROM funcionario WHERE idfunc = " +
+                     self.idfunc+" ")
+            b.conexao.commit()
+            c.close()
+            return messagebox.showinfo('Informe', 'funcionário excluído com sucesso!')
+      except:
+            return messagebox.showwarning('Atenção!', 'Não foi possível excluir funcionário.')

+ 188 - 0
Automotivo Soluções/TabOrc.py

@@ -0,0 +1,188 @@
+import sqlite3 as sql
+from tkinter import messagebox
+
+
+class Banco():
+    database = "banco.db"
+    conn = None
+    cursor = None
+    connected = False
+
+    def connect(self):
+        Banco.conn = sql.connect(Banco.database)
+        Banco.cursor = Banco.conn.cursor()
+        Banco.connected = True
+
+    def disconnect(self):
+        Banco.conn.close()
+        Banco.connected = False
+
+    def execute(self, sql, parms=None):
+        if Banco.connected:
+            if parms == None:
+                Banco.cursor.execute(sql)
+            else:
+                Banco.cursor.execute(sql, parms)
+            return True
+        else:
+            return False
+
+    def fetchall(self):
+        return Banco.cursor.fetchall()
+
+    def persist(self):
+        if Banco.connected:
+            Banco.conn.commit()
+            return True
+        else:
+            return False
+
+# Função para iniciar o banco de dados
+
+
+def initDB():
+    banco = Banco()
+    banco.connect()
+    banco.execute("CREATE TABLE IF NOT EXISTS orcamentos(id INTEGER PRIMARY KEY AUTOINCREMENT,cliente TEXT NOT NULL, carro TEXT NOT NULL, cpf_cliente TEXT NOT NULL, mecanico TEXT NOT NULL, cpf_mec TEXT NOT NULL, valor REAL NOT NULL, descricao TEXT NOT NULL, status TEXT)")
+    banco.persist()
+    banco.disconnect()
+
+
+initDB()
+
+
+def view():
+    banco = Banco()
+    banco.connect()
+    banco.execute(
+        "SELECT id, cliente, carro, valor, descricao FROM orcamentos")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def inserir_orc(cliente, cpf_cliente, carro, nome_mec, cpf_mec, valor, descricao, status):
+    banco = Banco()
+    try:
+        banco.connect()
+        banco.execute("INSERT INTO orcamentos VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)",
+                      (cliente, carro, cpf_cliente, nome_mec, cpf_mec, valor, descricao, status))
+        banco.persist()
+        banco.disconnect()
+        return messagebox.showinfo('Informe', 'Orçamento cadastrado com sucesso!')
+    except:
+        return messagebox.showwarning('Atenção', 'Ocorreu um erro no cadastro')
+
+
+def search(chave=''):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM orcamentos WHERE cliente LIKE '%"
+                  + chave+"%' OR carro LIKE '%"
+                  + chave+"%' OR valor LIKE '%"
+                  + chave+"%' OR descricao LIKE '%"
+                  + chave+"%' OR mecanico LIKE '%"
+                  + chave+"%' OR id LIKE '%"
+                  + chave+"%' ")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def update(cliente, carro, valor, descricao, mecanico, id):
+    banco = Banco()
+    banco.connect()
+    banco.execute("UPDATE orcamentos SET cliente=?, carro=?, valor=?, descricao=? , mecanico=?WHERE id=?",
+                  (cliente, carro, valor, descricao, mecanico, id))
+    banco.persist()
+    banco.disconnect()
+
+
+def delete(id):
+    banco = Banco()
+    banco.connect()
+    banco.execute("DELETE FROM orcamentos WHERE id=?", (id, ))
+    banco.persist()
+    banco.disconnect()
+
+
+def viewClientes():
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT idcliente, nome, carro, cpf FROM clientes")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def searchCliente(chave=""):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM clientes WHERE nome LIKE '%"
+                  + chave+"%' OR carro LIKE '%"
+                  + chave+"%' ")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+## ==============|  VER ORÇAMENTOS  |=============== ##
+def populate():
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM orcamentos")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def select_item(id):
+    banco = Banco()
+    banco.connect()
+    banco.execute(
+        "SELECT cliente, carro, cpf_cliente, mecanico, cpf_mec, valor, descricao FROM orcamentos WHERE id=?", (id, ))
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def delete_aprov(idorc):
+    banco = Banco()
+    banco.connect()
+    banco.execute("DELETE FROM orcamentos WHERE id=?", (idorc, ))
+    banco.persist()
+    banco.disconnect()
+
+
+def filtrar(chave=''):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM orcamentos WHERE cliente LIKE '%"
+                  + chave+"%' OR carro LIKE '%"
+                  + chave+"%' OR mecanico LIKE '%"
+                  + chave+"%' ")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def inserir_ord(cliente, cpf_cliente, carro, mecanico, cpf_mec, valor, descricao, status):
+    banco = Banco()
+    try:
+        banco.connect()
+        banco.execute("INSERT INTO ordem VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)",
+                      (cliente, carro, cpf_cliente, mecanico, cpf_mec, valor, descricao, status))
+        banco.persist()
+        banco.disconnect()
+        return messagebox.showinfo('Informe', 'Ordem cadastrada com sucesso!')
+    except:
+        return messagebox.showwarning('Atenção', 'Ocorreu um erro no cadastro')
+
+
+def update_status(state, idordem):
+    banco = Banco()
+    banco.connect()
+    banco.execute("UPDATE orcamentos SET status=? WHERE id=?",
+                  (state, idordem))
+    banco.persist()
+    banco.disconnect()

+ 127 - 0
Automotivo Soluções/TabOrd.py

@@ -0,0 +1,127 @@
+import sqlite3 as sql
+from tkinter import messagebox
+
+
+class Banco():
+    database = "banco.db"
+    conn = None
+    cursor = None
+    connected = False
+
+    def connect(self):
+        Banco.conn = sql.connect(Banco.database)
+        Banco.cursor = Banco.conn.cursor()
+        Banco.connected = True
+
+    def disconnect(self):
+        Banco.conn.close()
+        Banco.connected = False
+
+    def execute(self, sql, parms=None):
+        if Banco.connected:
+            if parms == None:
+                Banco.cursor.execute(sql)
+            else:
+                Banco.cursor.execute(sql, parms)
+            return True
+        else:
+            return False
+
+    def fetchall(self):
+        return Banco.cursor.fetchall()
+
+    def persist(self):
+        if Banco.connected:
+            Banco.conn.commit()
+            return True
+        else:
+            return False
+
+# Função para iniciar o banco de dados
+
+
+def initDB():
+    banco = Banco()
+    banco.connect()
+    banco.execute("CREATE TABLE IF NOT EXISTS ordem(id INTEGER PRIMARY KEY AUTOINCREMENT, cliente TEXT NOT NULL, carro TEXT NOT NULL, cpf_cliente TEXT NOT NULL, mecanico TEXT NOT NULL, cpf_mec TEXT NOT NULL, valor REAL NOT NULL, descricao TEXT NOT NULL, status TEXT)")
+    banco.persist()
+    banco.disconnect()
+
+
+initDB()
+
+
+def view():
+    banco = Banco()
+    banco.connect()
+    banco.execute(
+        "SELECT id, cliente, carro, cpf_cliente, mecanico, cpf_mec, valor, descricao, FROM ordem")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def filtrar(chave=''):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM ordem WHERE cliente LIKE '%"
+                  + chave+"%' OR carro LIKE '%"
+                  + chave+"%' OR mecanico LIKE '%"
+                  + chave+"%' OR status LIKE '%"
+                  + chave+"%' ")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def update(status, idordem):
+    try:
+        banco = Banco()
+        banco.connect()
+        banco.execute("UPDATE ordem SET status=? WHERE id=?",
+                      (status, idordem))
+        banco.persist()
+        banco.disconnect()
+        return messagebox.showinfo('Informe', 'Ordem concluída com sucesso!')
+    except:
+        return messagebox.showwarning('Atenção', 'Ocorreu um erro na atualização')
+
+
+def delete(idordem):
+    banco = Banco()
+    banco.connect()
+    banco.execute("DELETE FROM ordem WHERE id=?", (idordem, ))
+    banco.persist()
+    banco.disconnect()
+
+
+## ==============|  GERENCIAR ORÇAMENTOS  |=============== ##
+def inserir_ord(cliente, cpf_cliente, carro, mecanico, cpf_mec, valor, descricao):
+    banco = Banco()
+    try:
+        banco.connect()
+        banco.execute("INSERT INTO ordem VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?)",
+                      (cliente, carro, cpf_cliente, mecanico, cpf_mec, valor, descricao))
+        banco.persist()
+        banco.disconnect()
+        return messagebox.showinfo('Informe', 'Ordem cadastrada com sucesso!')
+    except:
+        return messagebox.showwarning('Atenção', 'Ocorreu um erro no cadastro')
+
+
+def populate(self):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM ordem")
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas
+
+
+def select_item(id):
+    banco = Banco()
+    banco.connect()
+    banco.execute("SELECT * FROM orcamentos WHERE id=?", (id, ))
+    linhas = banco.fetchall()
+    banco.disconnect()
+    return linhas

+ 84 - 0
Automotivo Soluções/Tela_Gerencia.py

@@ -0,0 +1,84 @@
+from tkinter import *
+
+
+class Gerente:
+    def __init__(self):
+        self.janela = Tk()
+        self.janela.title('Gerência')
+        self.titleStyles = ('Arial', 14)
+        self.textStyles = ('Roboto', 14)
+        self.imgStyles = ('Roboto', 15)
+        self.janela.minsize(1200, 650)
+        self.janela.maxsize(1200, 650)
+        # self.janela.state("zoomed")
+        self.janela.configure(bg="#363636")
+        self.janela.iconbitmap('automotivo.ico')
+
+        self.img = PhotoImage(master=self.janela, file="tela-gerente.png")
+        self.img1 = self.img.subsample(1, 1)
+
+        self.localIMG = Label(master=self.janela, image=self.img1)
+        self.localIMG.pack(fill='both', anchor='nw')
+
+        self.botaoGerenciar = Button(self.janela, command=self.gerenciarFuncionarios,
+                                     font=self.textStyles, text='Gerenciar\nFuncionários', width=20, height=3, bg='#4682B4', fg="white")
+        self.botaoGerenciar.bind("<Enter>", self.hoverIn)
+        self.botaoGerenciar.bind("<Leave>", self.hoverOut)
+        self.botaoGerenciar.place(x=810, y=145)
+
+        self.botaoOrdem = Button(self.janela, command=self.verOrdem,
+                                 font=self.textStyles, text='Ordens de Serviços', width=20, height=3, bg='#4682B4', fg="white")
+        self.botaoOrdem.bind("<Enter>", self.hoverIn)
+        self.botaoOrdem.bind("<Leave>", self.hoverOut)
+        self.botaoOrdem.place(x=810, y=250)
+
+        self.botaoCliente = Button(self.janela, command=self.verCliente,
+                                   font=self.textStyles, text='Cliente', width=20, height=3, bg='#4682B4', fg="white")
+        self.botaoCliente.bind("<Enter>", self.hoverIn)
+        self.botaoCliente.bind("<Leave>", self.hoverOut)
+        self.botaoCliente.place(x=810, y=360)
+
+        self.botaoSair = Button(self.janela, command=self.sair,
+                                font=self.textStyles, text='Sair', width=15, height=2, bg='#4682B4', fg="white")
+        self.botaoSair.bind("<Enter>", self.hoverIn2)
+        self.botaoSair.bind("<Leave>", self.hoverOut)
+        self.botaoSair.place(x=837, y=500)
+
+        self.titulo = Label(self.janela, bg='#363636',
+                            fg='white', font=self.titleStyles, text='GERÊNCIA')
+        self.titulo.pack(padx=0, pady=10)
+
+        mainloop()
+
+    def gerenciarFuncionarios(self):
+        from cadastrarFuncionario import ver_cadastrar_func
+        return
+
+    def verOrdem(self):
+        from GerOrdensGerente import ver_Ordens
+        return
+
+    def verCliente(self):
+        from gerenciarCliente import tela_gerenciar_clientes
+        return
+
+    def sair(self):
+        self.janela.destroy()
+        from Tela_Login import Tela_de_Login
+        return
+
+    def hoverIn(self, event):
+        event.widget.config(bg="#1E90FF", fg="white")
+
+    def hoverIn2(self, event):
+        event.widget.config(bg="#FF0000", fg="white")
+
+    def hoverOut(self, event):
+        event.widget.config(bg="#4682B4", fg="white")
+
+    # def startGer(self):
+    #    minhaTela = Gerente()
+    #    return minhaTela.janela.mainloop()
+
+
+minhaTela = Gerente()

+ 90 - 0
Automotivo Soluções/Tela_Login.py

@@ -0,0 +1,90 @@
+from tkinter import *
+import sqlite3
+from tkinter import messagebox
+
+class Tela_de_Login:
+   def __init__(self):
+      self.janela = Tk()
+      self.janela.geometry('1200x600')
+      self.janela.maxsize(1200, 600)
+      self.janela.minsize(1200, 600)
+      self.janela.title("Sistema Automotivo Soluções")
+      self.janela.iconbitmap('automotivo.ico')
+      # self.janela.state("zoomed")
+      self.LoginCanvas = Canvas(self.janela, width = 600, height=370)
+      self.LoginCanvas.pack(expand=1,fill=BOTH)
+
+
+      self.Back = PhotoImage(master=self.janela, file="login.png")
+      self.LoginCanvas.create_image(0,0,image=self.Back, anchor=NW)
+
+      # self.Fundo = PhotoImage(master=self.janela, file="back.png")
+      # self.LoginCanvas.create_image(600,370,image=self.Fundo)
+      # self.LoginCanvas.create_rectangle(400,200,800,547,width=2,outline="black")
+
+      self.logo = PhotoImage(master=self.janela, file="logo.png")
+      self.LoginCanvas.create_image(900,200, image=self.logo)
+
+
+      self.LoginCanvas.create_text(800,300,text="Login",font=("Arial",12,"bold"),fill="white")
+      self.LoginUser = Entry(self.LoginCanvas,width=20,highlightcolor="blue")
+      self.LoginCanvas.create_window(900,300,window=self.LoginUser)
+      self.LoginCanvas.create_text(800,350,text="Senha",font=("Arial",12,"bold"),fill="white")
+      self.SenhaUser = Entry(self.LoginCanvas,width=20,highlightcolor="blue",show="*")
+      self.LoginCanvas.create_window(900,350,window=self.SenhaUser)
+      self.ButtonAccept = Button(self.LoginCanvas,text="ENTRAR",width=10,bg="#4682B4",fg="white",relief=RAISED,command=self.verificaLogin)
+      self.LoginCanvas.create_window(900,430,window=self.ButtonAccept)
+
+      self.ButtonAccept.bind("<Enter>", self.hoverIn)
+      self.ButtonAccept.bind('<Leave>', self.hoverOut)
+
+
+      mainloop()
+
+   def hoverIn(self, event):
+         event.widget.config(bg="#00FF00",fg="white")
+
+   def hoverOut(self, event):
+         event.widget.config(bg="#4682B4")
+
+
+   def verificaCargo(self, cargo):
+      print(cargo[0][0])
+      if cargo[0][0] == 'GERENTE':
+         self.janela.destroy()
+         from Tela_Gerencia import Gerente
+         return 
+      if cargo[0][0] == 'MECANICO':
+         self.janela.destroy()
+         from Tela_Mecanico import Mecanico
+         return 
+      if cargo[0][0] == 'RECEPCIONISTA':
+         self.janela.destroy()
+         from Tela_Recepção import Recepcao
+         return 
+      return 
+
+   def verificaLogin(self):
+      login = self.LoginUser.get()
+      senha = self.SenhaUser.get()
+      banco = sqlite3.connect('banco.db')
+      cursor = banco.cursor()
+      try:
+         cursor.execute(f"SELECT senha FROM funcionario WHERE login = '{login}'")
+         senhaBD = cursor.fetchall()
+         cursor.execute(f"SELECT cargo FROM funcionario WHERE login = '{login}'")
+         cargoDB = cursor.fetchall()
+         print(senhaBD[0][0])
+         # banco.close()
+         self.verificaCargo(cargoDB)
+         return banco.close()
+      except:
+         banco.close()
+         return messagebox.showinfo('Erro', 'Login ou senha incorretos')
+
+   # def startLogin(self):    
+   #    minhaTela = Tela_de_Login()
+   #    return minhaTela.janela.mainloop()
+
+
+minhaTela = Tela_de_Login()

+ 50 - 0
Automotivo Soluções/Tela_Login.spec

@@ -0,0 +1,50 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+
+block_cipher = None
+
+
+a = Analysis(
+    ['Tela_Login.py'],
+    pathex=[],
+    binaries=[],
+    datas=[],
+    hiddenimports=[],
+    hookspath=[],
+    hooksconfig={},
+    runtime_hooks=[],
+    excludes=[],
+    win_no_prefer_redirects=False,
+    win_private_assemblies=False,
+    cipher=block_cipher,
+    noarchive=False,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
+
+exe = EXE(
+    pyz,
+    a.scripts,
+    [],
+    exclude_binaries=True,
+    name='Tela_Login',
+    debug=False,
+    bootloader_ignore_signals=False,
+    strip=False,
+    upx=True,
+    console=False,
+    disable_windowed_traceback=False,
+    argv_emulation=False,
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+)
+coll = COLLECT(
+    exe,
+    a.binaries,
+    a.zipfiles,
+    a.datas,
+    strip=False,
+    upx=True,
+    upx_exclude=[],
+    name='Tela_Login',
+)

+ 73 - 0
Automotivo Soluções/Tela_Mecanico.py

@@ -0,0 +1,73 @@
+from tkinter import *
+from tkinter import messagebox
+
+
+class Mecanico:
+    def __init__(self):
+        self.janela = Tk()
+        self.janela.title('Mecânico')
+        self.titleStyles = ('Arial', 14)
+        self.textStyles = ('Roboto', 14)
+        self.janela.maxsize(1200, 600)
+        self.janela.minsize(1200, 600)
+        self.janela.configure(bg='#363636')
+        self.janela.minsize(width=1200, height=600)
+        self.janela.iconbitmap('automotivo.ico')
+
+        self.LoginCanvas = Canvas(master=self.janela, width=600, height=370)
+        self.LoginCanvas.pack(expand=1, fill=BOTH)
+
+        self.Back = PhotoImage(master=self.janela, file="mecanico.png")
+        self.LoginCanvas.create_image(0, 0, image=self.Back, anchor=NW)
+
+        self.hoverColor1 = '#00BFFF'
+        self.hoverColor2 = '#FF0000'
+
+        self.botaoCadastrar = Button(self.janela, text="Cadastrar\nOrçamento", font=self.textStyles, width=15,
+                                     height=3, pady=5, bg="#4682B4", fg="white", relief=RAISED, command=self.cadastrarOrcamento)
+        self.LoginCanvas.create_window(900, 130, window=self.botaoCadastrar)
+        self.botaoCadastrar.bind("<Enter>", self.hoverIn1)
+        self.botaoCadastrar.bind("<Leave>", self.hoverOut)
+
+        self.botaoOrdem = Button(self.janela, text="Ordem\n de \nServiço", font=self.textStyles,
+                                 width=15, height=3, pady=1, bg="#4682B4", fg="white", relief=RAISED, command=self.verOrdem)
+        self.LoginCanvas.create_window(900, 265, window=self.botaoOrdem)
+        self.botaoOrdem.bind("<Enter>", self.hoverIn1)
+        self.botaoOrdem.bind("<Leave>", self.hoverOut)
+
+        self.botaoSair = Button(self.janela, text="SAIR", font=self.textStyles, width=5,
+                                bg="#4682B4", fg="white", pady=5, relief=RAISED, command=self.saiu)
+        self.LoginCanvas.create_window(900, 400, window=self.botaoSair)
+        self.botaoSair.bind("<Enter>", self.hoverIn2)
+        self.botaoSair.bind("<Leave>", self.hoverOut)
+
+        self.titulo = Label(self.janela, bg='#363636',
+                            fg='white', font=self.titleStyles, text='MECÂNICO')
+        self.titulo.pack(padx=0, pady=10)
+
+        mainloop()
+
+    def cadastrarOrcamento(self):
+        from cadastrarOrcamento import cadastrar_orcamento
+        return
+
+    def hoverIn1(self, event):
+        event.widget.configure(bg=self.hoverColor1, fg="white", relief=GROOVE)
+
+    def hoverIn2(self, event):
+        event.widget.configure(bg=self.hoverColor2, fg="white", relief=GROOVE)
+
+    def hoverOut(self, event):
+        event.widget.configure(bg='#4682B4', relief=RAISED)
+
+    def saiu(self):
+        self.janela.destroy()
+        from Tela_Login import Tela_de_Login
+        return
+
+    def verOrdem(self):
+        from visualizarOrdemMecanico import verOrdensMecanico
+        return
+
+
+minhaTela = Mecanico()

+ 78 - 0
Automotivo Soluções/Tela_Recepção.py

@@ -0,0 +1,78 @@
+from tkinter import *
+from tkinter import messagebox
+
+
+class Recepcao:
+   def __init__(self):
+      self.janela = Tk()
+      self.janela.title('Recepção')
+      self.titleStyles = ('Arial', 14)
+      self.textStyles = ('Roboto', 13)
+      self.janela.maxsize(1200, 600)
+      self.janela.minsize(1200, 600)
+      self.janela.configure(bg='#363636')
+      self.janela.minsize(width=1200,height=600)
+      self.janela.iconbitmap('automotivo.ico')
+      
+      self.LoginCanvas = Canvas(master=self.janela, width = 600, height=370)
+      self.LoginCanvas.pack(expand=1,fill=BOTH)
+      
+      self.Back = PhotoImage(master=self.janela, file="recepcao.png")
+      self.LoginCanvas.create_image(0,0,image=self.Back, anchor=NW)
+      
+      self.hoverColor1 = '#008000'
+      self.hoverColor2 = '#1E90FF'
+      self.hoverColor3 = '#FF0000'
+
+      self.botaoCadastrar = Button(self.janela,text="Cadastrar\nCliente",font=('Roboto', 15),width=15,height=3,pady=5,bg="#4682B4",fg="white",relief=RAISED,command=self.cadastrarCliente)
+      self.LoginCanvas.create_window(900,200,window=self.botaoCadastrar)
+      self.botaoCadastrar.bind("<Enter>", self.hoverIn1)
+      self.botaoCadastrar.bind("<Leave>", self.hoverOut)
+      
+
+      self.botaoOrcamento = Button(self.janela,text="Ver\nOrçamento",font=('Roboto', 15),width=15,height=3,pady=1,bg="#4682B4",fg="white",relief=RAISED,command=self.verOrcamento)
+      self.LoginCanvas.create_window(900,330,window=self.botaoOrcamento)
+      self.botaoOrcamento.bind("<Enter>", self.hoverIn2)
+      self.botaoOrcamento.bind("<Leave>", self.hoverOut)
+      
+
+      self.botaoSair = Button(self.janela,text="SAIR",font=('Roboto', 15),width=7,bg="#4682B4",fg="white",pady=5,relief=RAISED,command=self.saiu)
+      self.LoginCanvas.create_window(900,500,window=self.botaoSair)
+      self.botaoSair.bind("<Enter>", self.hoverIn3)
+      self.botaoSair.bind("<Leave>", self.hoverOut)
+      
+
+      self.titulo = Label(self.janela,bg='#363636',fg='white', font=self.titleStyles, text='RECEPÇÃO')
+      self.titulo.pack(padx=0, pady=10)
+
+            
+      
+      mainloop()
+
+   def cadastrarCliente(self):
+      from cadastrarCliente import tela_ver_cadastrar_clientes
+      return
+
+   def hoverIn1(self, event):
+      event.widget.configure(bg=self.hoverColor1, fg="white",relief=GROOVE)
+   def hoverIn2(self, event):
+      event.widget.configure(bg=self.hoverColor2, fg="white",relief=GROOVE)
+   def hoverIn3(self, event):
+      event.widget.configure(bg=self.hoverColor3, fg="white",relief=GROOVE)
+   def hoverOut(self, event):
+      event.widget.configure(bg='#4682B4',relief=RAISED)
+   def hoverOut2(self, event):
+      event.widget.configure(relief=RAISED)
+
+   def saiu(self):
+      self.janela.destroy()
+      from Tela_Login import Tela_de_Login
+      return
+
+   def verOrcamento(self):
+      from VerOrcamentoRecep import ver_Orcamento
+      return
+         
+   
+
+minhaTela = Recepcao()

+ 50 - 0
Automotivo Soluções/Tela_de_Login.spec

@@ -0,0 +1,50 @@
+# -*- mode: python ; coding: utf-8 -*-
+
+
+block_cipher = None
+
+
+a = Analysis(
+    ['Tela_de_Login.py'],
+    pathex=[],
+    binaries=[],
+    datas=[],
+    hiddenimports=[],
+    hookspath=[],
+    hooksconfig={},
+    runtime_hooks=[],
+    excludes=[],
+    win_no_prefer_redirects=False,
+    win_private_assemblies=False,
+    cipher=block_cipher,
+    noarchive=False,
+)
+pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
+
+exe = EXE(
+    pyz,
+    a.scripts,
+    [],
+    exclude_binaries=True,
+    name='Tela_de_Login',
+    debug=False,
+    bootloader_ignore_signals=False,
+    strip=False,
+    upx=True,
+    console=False,
+    disable_windowed_traceback=False,
+    argv_emulation=False,
+    target_arch=None,
+    codesign_identity=None,
+    entitlements_file=None,
+)
+coll = COLLECT(
+    exe,
+    a.binaries,
+    a.zipfiles,
+    a.datas,
+    strip=False,
+    upx=True,
+    upx_exclude=[],
+    name='Tela_de_Login',
+)

+ 30 - 0
Automotivo Soluções/Telas.txt

@@ -0,0 +1,30 @@
+Tela Login
+   Front-End
+   Back-End
+   Database
+
+Menu Gerente
+   Front-End
+
+   Gerenciar Funcionários
+      Front-End
+      Back-End
+      Database
+
+   Ver Clientes
+      Front-End
+
+   Ver Ordens de Serviço
+      Front-End
+
+Menu Recepção
+   Front-End
+
+   Cadastrar Clientes
+      Front-End
+
+   Ver orçamento
+      Front-End
+
+Menu Mecânico
+   Front-End

+ 199 - 0
Automotivo Soluções/VerOrcamentoRecep.py

@@ -0,0 +1,199 @@
+from tkinter import *
+from tkinter import ttk
+from tkinter.font import BOLD
+import TabOrc as orc
+
+
+class ver_Orcamento():
+    def __init__(self):
+
+        self.janelaVerOrc = Tk()
+        self.janelaVerOrc.title('Ver Orçamentos')
+        self.janelaVerOrc.geometry('1600x900')
+        self.janelaVerOrc.config(bg='#484848')
+        self.janelaVerOrc.state('zoomed')
+        self.janelaVerOrc.iconbitmap('automotivo.ico')
+
+    # ==========|  SEÇÕES  | =========== #
+        self.frameTop = Frame(self.janelaVerOrc, bg='#484848')
+        self.frameMid = Frame(self.janelaVerOrc, bg='#484848')
+        # self.frameBot = Frame(self.janelaVerOrc, bg='#484848')
+
+        self.frameTop.pack(pady=(20, 0))
+        self.frameMid.pack()
+        # self.frameBot.pack()
+
+        self.wrapper_trv = LabelFrame(
+            self.frameMid, text='  Orçamentos Cadastrados  ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.wrapper_aprov = LabelFrame(
+            self.frameMid, text=' Gerar Ordem de Serviço ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.wrapper_filtrar = LabelFrame(
+            self.frameMid, text=' Pesquisar ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.frameRodape = Frame(self.janelaVerOrc, bg='#484848')
+
+        self.wrapper_trv.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.wrapper_aprov.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.wrapper_filtrar.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.frameRodape.pack(fill='both', expand='yes', padx=20, pady=10)
+
+    # =========|  TOP  |========= #
+        self.titulo = Label(self.frameTop, text='Orçamentos',
+                            bg='#484848', fg='white', font=('Roboto', 20, BOLD))
+        self.titulo.pack(padx=20, pady=10)
+
+    # ========| MIDDLE  |======== #
+    # =======| TREEVIEW  |======== #
+        self.cabecalho = ('#', 'cliente', 'carro', 'cpf_cliente',
+                          'mecanico', 'cpf_mec', 'valor', 'descricao')
+        self.trv = ttk.Treeview(
+            self.wrapper_trv, selectmode='browse', columns=self.cabecalho, show='headings')
+
+        self.trv.column('#', width=10)
+        self.trv.column('cliente', width=150)
+        self.trv.column('carro', width=150)
+        self.trv.column('cpf_cliente', width=150)
+        self.trv.column('mecanico', width=150)
+        self.trv.column('cpf_mec', width=150)
+        self.trv.column('valor', width=150)
+        self.trv.column('descricao', width=400)
+
+        self.trv.heading('#', text='#')
+        self.trv.heading('cliente', text='Cliente')
+        self.trv.heading('carro', text='Carro')
+        self.trv.heading('cpf_cliente', text='CPF Cliente')
+        self.trv.heading('mecanico', text='Mecânico')
+        self.trv.heading('cpf_mec', text='CPF Mec')
+        self.trv.heading('valor', text='Valor')
+        self.trv.heading('descricao', text='Descrição do Serviço')
+
+        self.trv.bind('<Double 1>', self.pegar_linhaBind)
+        self.trv.pack(pady=10)
+
+        self.popular()
+
+    # =========|  GERAR ORDEM DE SERVIÇO  |======== #
+        self.btn_Aprovar = Button(
+            self.wrapper_aprov, text='Aprovar', command=self.cadastrar, bg='#484848', fg='white')
+        self.btn_Excluir = Button(
+            self.wrapper_aprov, text='Excluir', command=self.excluir, bg='#484848', fg='white')
+
+        self.btn_Aprovar.pack(side='left', padx=(30, 0), pady=10, ipadx=20)
+        self.btn_Excluir.pack(side='left', padx=30, pady=10, ipadx=20)
+
+    # =========|  CAMPO DE BUSCA  |======== #
+        self.lblChave = Label(self.wrapper_filtrar,
+                              text='Palavra-chave', bg='#484848', fg='white')
+        self.lblChave.pack(side='left', padx=6, pady=10)
+
+        self.entBusca = Entry(self.wrapper_filtrar, textvariable='filtro')
+        self.entBusca.pack(side='left', padx=6, pady=10, ipadx=15)
+
+        self.btn_procurar = Button(
+            self.wrapper_filtrar, text='Procurar', command=self.procurar, bg='#484848', fg='white')
+        self.btn_mostrar = Button(
+            self.wrapper_filtrar, text='Mostrar Todos', command=self.popular, bg='#484848', fg='white')
+
+        self.btn_procurar.pack(side='left', padx=6, pady=10, ipadx=20)
+        self.btn_mostrar.pack(side='left', padx=6, pady=10, ipadx=20)
+
+    # ===========| BOTTOM  |=========== #
+    # ===========| VOLTAR  |=========== #
+        self.btn_voltar = Button(
+            self.frameRodape, text='Voltar', command=self.voltar, bg='#484848', fg='white')
+
+        self.btn_voltar.pack(side='right', padx=6, pady=10, ipadx=30)
+
+        self.btn_Aprovar.bind("<Enter>", self.hoverIn1)
+        self.btn_Aprovar.bind("<Leave>", self.hoverOut)
+        self.btn_Excluir.bind("<Enter>", self.hoverIn3)
+        self.btn_Excluir.bind("<Leave>", self.hoverOut)
+        self.btn_voltar.bind("<Enter>", self.hoverIn3)
+        self.btn_voltar.bind("<Leave>", self.hoverOut)
+        self.btn_procurar.bind("<Enter>", self.hoverIn2)
+        self.btn_procurar.bind("<Leave>", self.hoverOut)
+        self.btn_mostrar.bind("<Enter>", self.hoverIn2)
+        self.btn_mostrar.bind("<Leave>", self.hoverOut)
+
+        self.varDeArmaz = ''
+        mainloop()
+
+
+# ===========|  FUNÇÕES  |============ #
+
+    def pegar_linhaBind(self, event):
+        return self.pegar_linha()
+
+    def pegar_linha(self):
+        for item in self.trv.selection():
+            self.id = self.trv.item(item, 'values')
+        ident = self.id
+        self.varDeArmaz = ident
+        print(self.varDeArmaz)
+
+    def popular(self):
+        self.trv.delete(*self.trv.get_children())
+        for i in orc.populate():
+            self.trv.insert('', 'end', values=i)
+
+    def cadastrar(self):
+        return self.aprovar()
+
+    def aprovar(self):
+        tupla = self.varDeArmaz
+        listinha = []
+        for i in tupla:
+            listinha.append(i)
+        cliente = str(listinha[1])
+        cpf_cliente = str(listinha[2])
+        carro = str(listinha[3])
+        mecanico = str(listinha[4])
+        cpf_mec = str(listinha[5])
+        valor = str(listinha[6])
+        descricao = str(listinha[7])
+        status = str(listinha[8])
+        orc.inserir_ord(cliente, cpf_cliente, carro,
+                        mecanico, cpf_mec, valor, descricao, status)
+        self.excluir()
+        self.varDeArmaz = ''
+
+    def excluir(self):
+        tupla = self.varDeArmaz
+        pickingID = []
+        for m in tupla:
+            pickingID.append(m)
+        idorc = pickingID[0]
+        orc.delete_aprov(idorc)
+        self.popular()
+
+    # def status(self):
+    #     state = 'Pendente'
+    #     tupla = self.varDeArmaz
+    #     lista1 = []
+    #     for j in tupla:
+    #         lista1.append(j)
+    #     idordem = lista1[0]
+    #     orc.update_status(state, idordem)
+
+    def procurar(self):
+        chave = self.entBusca.get()
+        self.trv.delete(*self.trv.get_children())
+        for i in orc.filtrar(chave):
+            self.trv.insert('', END, values=i)
+
+    def voltar(self):
+        self.janelaVerOrc.destroy()
+        return
+    
+    def hoverIn1(self, event):  # verde
+       event.widget.config(bg="#3CB371", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):  # vermelho
+       event.widget.config(bg="#8B0000", fg="white", relief=GROOVE)
+
+    def hoverOut(self, event):
+       event.widget.config(bg='#484848', fg="#e1e3db", relief=RAISED)
+    def hoverIn2(self, event):
+       event.widget.config(bg='#00BFFF', fg="black", relief=GROOVE)
+
+
+app = ver_Orcamento()

BIN
Automotivo Soluções/automotivo.ico


BIN
Automotivo Soluções/banco.db


+ 270 - 0
Automotivo Soluções/cadastrarCliente.py

@@ -0,0 +1,270 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+from TabClien import Clientes
+
+
+class tela_ver_cadastrar_clientes():
+    def __init__(self):
+
+        self.janelaCad_Cliente = Tk()
+
+        self.janelaCad_Cliente.title('Cadastro de clientes')
+        self.janelaCad_Cliente.geometry('1280x1040')
+        self.janelaCad_Cliente.config(bg="#484848")
+        self.janelaCad_Cliente.state('zoomed')
+        self.janelaCad_Cliente.iconbitmap('automotivo.ico')
+
+# ============= SEÇÕES ================ #
+        self.wrapper1 = LabelFrame(
+            self.janelaCad_Cliente, text='Clientes Cadastrados', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.wrapper2 = LabelFrame(
+            self.janelaCad_Cliente, text='Procurar Cliente', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.wrapper3 = LabelFrame(
+            self.janelaCad_Cliente, text='Dados do Cliente', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.rodape = Frame(self.janelaCad_Cliente, bg="#484848")
+
+        self.wrapper1.pack(fill='both', expand='no', padx=20, pady=(20, 0))
+        self.wrapper2.pack(fill='both', expand='no', padx=20, pady=(30, 0))
+        self.wrapper3.pack(fill='both', expand='no', padx=20, pady=30)
+        self.rodape.pack(fill='both', expand='no', padx=20, pady=(0, 20))
+
+# ============ SEÇÃO CLIENTES CADASTRADOS =============== #
+# ------------------- TREEVIEW ------------------ #
+        self.style = ttk.Style(master=self.janelaCad_Cliente)
+        self.style.theme_use("clam")
+        self.style.configure("mystyle.Treeview", font=("Roboto", 14))
+        self.style.configure("mystyle.Treeview.Heading", font=("Roboto", 16))
+        self.style.configure("Heading", background="#4682B4", foreground="black")
+
+        self.cabecalho = ('#', 'nome', 'cpf', 'carro',
+                          'telefone', 'email', 'endereco')
+        self.trv = ttk.Treeview(
+            self.wrapper1, selectmode='browse', columns=self.cabecalho, show='headings')
+
+        self.trv.column('#', width=20)
+        self.trv.column('nome', width=150, anchor='center')
+        self.trv.column('cpf', width=150)
+        self.trv.column('carro', width=150)
+        self.trv.column('telefone', width=150)
+        self.trv.column('endereco', width=320)
+
+        self.trv.heading('#', text='#')
+        self.trv.heading('nome', text='Nome')
+        self.trv.heading('cpf', text='CPF')
+        self.trv.heading('carro', text='Carro/Placa')
+        self.trv.heading('telefone', text='Telefone')
+        self.trv.heading('email', text='E-mail')
+        self.trv.heading('endereco', text='Endereço')
+
+        self.trv.bind('<Double 1>', self.pegar_linha)
+        self.trv.pack(pady=10)
+
+        self.popular()
+
+# ============= SEÇÃO PROCURAR =========== #
+# ---------- LABELS & ENTRYS ----------- #
+        self.lbl1 = Label(self.wrapper2, text='Palavra-Chave',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl1.pack(side='left', padx=10, pady=10)
+
+        self.busca = Entry(self.wrapper2)
+        self.busca.pack(side='left', padx=6, pady=10, ipadx=15)
+
+
+# ------------- BOTÃO ------------- #
+        self.procurarBtn = Button(
+            self.wrapper2, text='Procurar', command=self.procurar, bg="#484848", fg="#e1e3db")
+        self.procurarBtn.pack(side='left', padx=6, pady=10, ipadx=20)
+
+        self.limparBtn = Button(self.wrapper2, text=(
+            'Limpar'), command=self.limpar, bg="#484848", fg="#e1e3db", relief=RAISED)
+        self.limparBtn.pack(side='left', padx=6, pady=10, ipadx=20)
+
+        self.mostrarBtn = Button(
+            self.wrapper2, padx=30, text='Mostrar Todos', command=self.popular, bg="#484848", fg="#e1e3db", relief=RAISED)
+        self.mostrarBtn.pack(side='left', pady=10)
+
+# ========= SEÇÃO DADOS DO CLIENTE ======= #
+# ---------- LABELS & ENTRYS ----------- #
+        self.lbl2 = Label(self.wrapper3, text='Nome',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl2.grid(row=0, column=0, padx=5, pady=3)
+        self.ent2 = Entry(self.wrapper3)
+        self.ent2.grid(row=0, column=1, padx=5, pady=3)
+
+        self.lbl3 = Label(self.wrapper3, text='CPF',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl3.grid(row=1, column=0, padx=5, pady=3)
+        self.ent3 = Entry(self.wrapper3)
+        self.ent3.grid(row=1, column=1, padx=5, pady=3)
+
+        self.lbl4 = Label(self.wrapper3, text='Carro/Placa',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl4.grid(row=2, column=0, padx=5, pady=3)
+        self.ent4 = Entry(self.wrapper3)
+        self.ent4.grid(row=2, column=1, padx=5, pady=3)
+
+        self.lbl5 = Label(self.wrapper3, text='Telefone',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl5.grid(row=3, column=0, padx=5, pady=3)
+        self.ent5 = Entry(self.wrapper3)
+        self.ent5.grid(row=3, column=1, padx=5, pady=3)
+
+        self.lbl6 = Label(self.wrapper3, text='E-mail',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl6.grid(row=0, column=2, padx=5, pady=3)
+        self.ent6 = Entry(self.wrapper3)
+        self.ent6.grid(row=0, column=3, padx=5, pady=3, ipadx=40)
+
+        self.lbl7 = Label(self.wrapper3, text='Endereço',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl7.grid(row=1, column=2, padx=5, pady=3)
+        self.ent7 = Entry(self.wrapper3)
+        self.ent7.grid(row=1, column=3, padx=5, pady=3, ipadx=40)
+
+        self.lbl8 = Label(self.wrapper3, text='ID Cliente',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl8.grid(row=2, column=2, padx=5, pady=3)
+        self.ent8 = Entry(self.wrapper3)
+        self.ent8.grid(row=2, column=3, padx=5, pady=3, sticky='W')
+
+# ------------ BOTÕES -------------- #
+        self.addBtn = Button(self.wrapper3, text='Adicionar', bg="#484848", relief=RAISED, fg="#e1e3db",
+                             command=self.inserir_cliente)
+        self.alterarBtn = Button(
+            self.wrapper3, text='Alterar', command=self.alterar_cliente, relief=RAISED, bg="#484848", fg="#e1e3db")
+        self.excluirBtn = Button(
+            self.wrapper3, text='Excluir', command=self.excluir_cliente, relief=RAISED, bg="#484848", fg="#e1e3db")
+
+        self.addBtn.grid(row=4, column=0, padx=5, pady=15, ipadx=25)
+        self.alterarBtn.grid(row=4, column=1, padx=2, pady=15, ipadx=20)
+        self.excluirBtn.grid(row=4, column=2, padx=2, pady=15, ipadx=25)
+
+        self.alterarBtn.bind("<Enter>", self.hoverIn3)
+        self.alterarBtn.bind("<Leave>", self.hoverOut)
+        self.excluirBtn.bind("<Enter>", self.hoverIn2)
+        self.excluirBtn.bind("<Leave>", self.hoverOut)
+        self.addBtn.bind("<Enter>", self.hoverIn)
+        self.addBtn.bind("<Leave>", self.hoverOut)
+
+# ========= SEÇÃO RODAPÉ ======= #
+# ---------- BOTÃO ----------- #
+        self.voltarBtn = Button(
+            self.rodape, text='Voltar', width='20', command=self.voltar_tela, relief=RAISED, bg="#484848", fg="#e1e3db")
+        self.voltarBtn.pack(side='right')
+
+        mainloop()
+
+# ============= FUNÇÕES ============== #
+    def pegar_linha(self, identificador):
+        customer = Clientes()
+        self.normal()
+        self.limpar_caixas()
+        for item in self.trv.selection():
+            self.id = self.trv.item(item, 'values')
+        identificador = self.id[0]
+
+        customer.identificar_linha(identificador)
+        self.ent8.insert(INSERT, customer.idcliente)
+        self.ent2.insert(INSERT, customer.nome)
+        self.ent3.insert(INSERT, customer.cpf)
+        self.ent4.insert(INSERT, customer.carro)
+        self.ent5.insert(INSERT, customer.telefone)
+        self.ent6.insert(INSERT, customer.email)
+        self.ent7.insert(INSERT, customer.endereco)
+        self.leitura_apenas()
+
+    def limpar_caixas(self):
+        self.normal()
+        self.ent2.delete(0, END)
+        self.ent3.delete(0, END)
+        self.ent4.delete(0, END)
+        self.ent5.delete(0, END)
+        self.ent6.delete(0, END)
+        self.ent7.delete(0, END)
+        self.ent8.delete(0, END)
+
+    def procurar(self):
+        self.trv.delete(*self.trv.get_children())
+        customer = Clientes()
+        nome = self.busca.get()
+
+        for i in customer.filtrar_cliente(nome):
+            self.trv.insert('', 'end', values=i)
+
+    def limpar(self):
+        self.normal()
+        self.busca.delete(0, END)
+        self.ent2.delete(0, END)
+        self.ent3.delete(0, END)
+        self.ent4.delete(0, END)
+        self.ent5.delete(0, END)
+        self.ent6.delete(0, END)
+        self.ent7.delete(0, END)
+        self.ent8.delete(0, END)
+
+    def inserir_cliente(self):
+        customer = Clientes()
+        customer.nome = self.ent2.get()
+        customer.cpf = self.ent3.get()
+        customer.carro = self.ent4.get()
+        customer.telefone = self.ent5.get()
+        customer.email = self.ent6.get()
+        customer.endereco = self.ent7.get()
+        customer.add_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def alterar_cliente(self):
+        customer = Clientes()
+        customer.nome = self.ent2.get()
+        customer.cpf = self.ent3.get()
+        customer.carro = self.ent4.get()
+        customer.telefone = self.ent5.get()
+        customer.email = self.ent6.get()
+        customer.endereco = self.ent7.get()
+        customer.idcliente = self.ent8.get()
+        customer.atualizar_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def excluir_cliente(self):
+        customer = Clientes()
+        customer.idcliente = self.ent8.get()
+        customer.deletar_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def voltar_tela(self):
+        self.janelaCad_Cliente.destroy()
+        # from telaRecepcao import Tela_de_Recepcao
+        return
+
+    def popular(self):
+        self.trv.delete(*self.trv.get_children())
+        costumer = Clientes()
+        for i in costumer.populate():
+            self.trv.insert('', 'end', values=i)
+
+    def leitura_apenas(self):
+        self.ent8.configure(state='disabled')
+
+    def normal(self):
+        self.ent8.configure(state='normal')
+
+    def hoverIn(self, event):
+        event.widget.config(bg="#1E90FF", fg="white", relief=GROOVE)
+
+    def hoverIn2(self, event):
+        event.widget.config(bg="#FF0000", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):
+        event.widget.config(bg="#FFD700", fg="black", relief=GROOVE)
+
+    def hoverOut(self, event):
+        event.widget.config(bg="#484848", fg="white", relief=RAISED)
+
+
+minhaTela = tela_ver_cadastrar_clientes()

+ 281 - 0
Automotivo Soluções/cadastrarFuncionario.py

@@ -0,0 +1,281 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+from tkinter.font import BOLD
+from turtle import width
+from TabFunc import TabFunc
+
+
+class ver_cadastrar_func():
+   def __init__(self):
+
+      self.janela = Tk()
+      self.janela.title('Cadastro de Funcionários')
+      self.janela.geometry('1600x900')
+      self.janela.minsize(1600, 900)
+      self.janela.maxsize(1600, 900)
+      self.janela.config(bg="#484848")
+      self.janela.state("zoomed")
+      self.janela.iconbitmap('automotivo.ico')
+      #self.janela.attribute('-fullscreen', True)
+
+# ============= SEÇÕES ================ #
+
+      self.container1 = LabelFrame(self.janela, bg="#484848", fg="#e1e3db")
+
+      self.wrapper1 = LabelFrame(
+         self.container1, text='Dados do Funcionário', font=("Roboto", 18, 'bold'), bg="#484848", fg="#e1e3db")
+      self.wrapper2 = LabelFrame(
+         self.janela, text='Funcionários', font=("Roboto", 18, 'bold'), bg="#484848", fg="#e1e3db")
+      self.wrapper3 = LabelFrame(
+         self.container1, width=400, font=("Roboto", 18, 'bold'), text='Procurar', bg="#484848", fg="#e1e3db")
+      self.rodape = Frame(self.janela, bg="#484848")
+
+      self.container1.pack(fill='both', expand='no', padx=30, pady=10)
+      self.wrapper1.pack(fill='both', expand='yes',
+                        padx=25, pady=10, ipady=30, side="left")
+      self.wrapper2.pack(fill='none', expand='no',
+                        padx=10, pady=10)
+      self.wrapper3.pack(fill='x', expand='no', ipadx=30,
+                        padx=30, ipady=75, side="right")
+      self.rodape.pack(fill='both', expand='yes', padx=20)
+
+
+# ========= SEÇÃO DADOS DO FUNCIONÁRIO ======= #
+# ---------- LABELS & ENTRYS ----------- #
+      self.labelNome = Label(self.wrapper1, font=(
+         "Roboto", 16), text='Nome', bg="#484848", fg="#e1e3db")
+      self.labelNome.grid(row=0, column=0, padx=5, pady=5)
+      self.caixaNome = Entry(self.wrapper1, width=40)
+      self.caixaNome.grid(row=0, column=1, padx=5, pady=5)
+
+      self.lbl3 = Label(self.wrapper1, font=("Roboto", 16),
+                        text='CPF', bg="#484848", fg="#e1e3db")
+      self.lbl3.grid(row=1, column=0, padx=5, pady=3)
+      self.caixaCPF = Entry(self.wrapper1, width=40)
+      self.caixaCPF.grid(row=1, column=1, padx=5, pady=5)
+
+      self.lbl4 = Label(self.wrapper1, font=("Roboto", 16),
+                        text='Cargo', bg="#484848", fg="white")
+      self.lbl4.grid(row=2, column=0, padx=5, pady=3)
+      self.caixaCargo = Entry(self.wrapper1, width=40)
+      self.caixaCargo.grid(row=2, column=1, padx=5, pady=5)
+
+      self.lbl5 = Label(self.wrapper1, font=("Roboto", 16),
+                        text='Login', bg="#484848", fg="#e1e3db")
+      self.lbl5.grid(row=0, column=2, padx=50, pady=5)
+      self.caixaLogin = Entry(self.wrapper1)
+      self.caixaLogin.grid(row=0, column=3, padx=5, pady=5)
+
+      self.lbl6 = Label(self.wrapper1, font=("Roboto", 16),
+                        text='Senha', bg="#484848", fg="#e1e3db")
+      self.lbl6.grid(row=1, column=2, padx=5, pady=5)
+      self.caixaSenha = Entry(self.wrapper1)
+      self.caixaSenha.grid(row=1, column=3, padx=5, pady=5)
+
+      self.lbl7 = Label(self.wrapper1, font=("Roboto", 16),
+                        text='ID Funcionário', bg="#484848", fg="#e1e3db")
+      self.lbl7.grid(row=2, column=2, padx=5, pady=5)
+      self.caixaId = Entry(self.wrapper1)
+      self.caixaId.grid(row=2, column=3, padx=10, pady=5, sticky='W')
+
+# ------------ BOTÕES -------------- #
+      self.addBtn = Button(self.wrapper1, text='Adicionar', font=("Roboto", 16),
+                           command=self.inserir_func, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.addBtn.bind("<Enter>", self.hoverIn1)
+      self.addBtn.bind("<Leave>", self.hoverOut)
+      self.alterarBtn = Button(
+         self.wrapper1, text='Alterar', font=("Roboto", 16), command=self.alterar_func, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.alterarBtn .bind("<Enter>", self.hoverIn4)
+      self.alterarBtn .bind("<Leave>", self.hoverOut)
+      self.excluirBtn = Button(
+         self.wrapper1, text='Excluir', font=("Roboto", 16), command=self.excluir_func, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.excluirBtn.bind("<Enter>", self.hoverIn3)
+      self.excluirBtn.bind("<Leave>", self.hoverOut)
+      self.addBtn.grid(row=4, column=1, padx=5, pady=10, ipadx=25)
+      self.alterarBtn.grid(row=4, column=2, padx=5, pady=3, ipadx=20)
+      self.excluirBtn.grid(row=4, column=3, padx=5, pady=3, ipadx=25)
+
+
+# ========== SEÇÃO FUNCIONÁRIOS CADASTRADOS ============ #
+# ------------------- TREEVIEW ------------------ #
+      self.style = ttk.Style(master=self.janela)
+      self.style.theme_use("clam")
+      self.style.configure("mystyle.Treeview", font=("Roboto", 14))
+      self.style.configure("mystyle.Treeview.Heading", font=("Roboto", 16))
+      self.style.configure("Treeview", background="silver", rowheight=20, fieldbackground="#E0FFFF",)
+      self.style.configure("Heading", background="#4682B4", foreground = "white")
+
+      self.cabecalho = ('#', 'nome', 'cpf', 'cargo',
+                        'login', 'senha')
+      self.trv = ttk.Treeview(
+         self.wrapper2, style="mystyle.Treeview", selectmode='browse', columns=self.cabecalho, show='headings')
+
+      self.trv.column('#', width=30)
+      self.trv.column('nome', anchor='center', width=350)
+      self.trv.column('cpf', anchor='center', width=180)
+      self.trv.column('cargo', anchor='center', width=180)
+      self.trv.column('login', anchor='center', width=150)
+      self.trv.column('senha', anchor='center', width=150)
+
+      self.trv.heading('#', text='#')
+      self.trv.heading('nome', text='NOME')
+      self.trv.heading('cpf', text='CPF')
+      self.trv.heading('cargo', text='CARGO')
+      self.trv.heading('login', text='LOGIN')
+      self.trv.heading('senha', text='SENHA')
+
+      self.trv.bind('<Double 1>', self.pegar_linha)
+      self.trv.pack()
+
+      self.popular()
+
+
+# ============= SEÇÃO PROCURAR =========== #
+# ---------- LABELS & ENTRYS ----------- #
+      self.lbl1 = Label(self.wrapper3, font=(
+         "Roboto", 14), text='Palavra-Chave', bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.lbl1.pack(side='left', padx=10, pady=10, ipadx=10)
+
+      self.busca = Entry(self.wrapper3)
+      self.busca.pack(side='left', padx=6, pady=10, ipadx=10, ipady=2)
+
+
+# ------------- BOTÕES ------------- #
+      self.procurarBtn = Button(
+         self.wrapper3, text='Procurar', font=("Roboto", 14), command=self.procurar, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.procurarBtn.pack(side='left', padx=20, pady=10, ipadx=10)
+      self.procurarBtn.bind("<Enter>", self.hoverIn2)
+      self.procurarBtn.bind("<Leave>", self.hoverOut)
+
+      self.limparBtn = Button(
+         self.wrapper3, text='Limpar', font=("Roboto", 14), command=self.limpar, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.limparBtn.pack(side='left', padx=6, pady=10, ipadx=10)
+      self.limparBtn .bind("<Enter>", self.hoverIn4)
+      self.limparBtn .bind("<Leave>", self.hoverOut)
+
+      self.mostrarBtn = Button(
+         self.wrapper2, padx=30, text='Mostrar Todos', font=("Roboto", 16), command=self.popular, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.mostrarBtn.pack(side='right', padx=600, pady=10)
+      self.mostrarBtn.bind("<Enter>", self.hoverIn2)
+      self.mostrarBtn.bind("<Leave>", self.hoverOut)
+
+
+# ========= SEÇÃO RODAPÉ ======= #
+# ---------- BOTÃO ----------- #
+      self.voltarBtn = Button(
+         self.rodape, text='Voltar', font=("Roboto", 12), width='15', command=self.voltar_tela, bg="#800000", fg="#e1e3db", relief=RAISED)
+      self.voltarBtn.pack(side='right', padx=2, ipadx=2)
+
+      mainloop()
+
+# ============= FUNÇÕES ============== #
+   def pegar_linha(self, identificador):
+      staff = TabFunc()
+      self.normal()
+      self.limpar_caixas()
+      for item in self.trv.selection():
+         self.id = self.trv.item(item, 'values')
+      identificador = self.id[0]
+
+      staff.identificar_linha(identificador)
+      self.caixaId.insert(INSERT, staff.idfunc)
+      self.caixaNome.insert(INSERT, staff.nome)
+      self.caixaCPF.insert(INSERT, staff.cpf)
+      self.caixaCargo.insert(INSERT, staff.cargo)
+      self.caixaLogin.insert(INSERT, staff.login)
+      self.caixaSenha.insert(INSERT, staff.senha)
+      self.leitura_apenas()
+
+   def limpar_caixas(self):
+      self.normal()
+      self.caixaNome.delete(0, END)
+      self.caixaCPF.delete(0, END)
+      self.caixaCargo.delete(0, END)
+      self.caixaLogin.delete(0, END)
+      self.caixaSenha.delete(0, END)
+      self.caixaId.delete(0, END)
+
+   def procurar(self):
+      self.trv.delete(*self.trv.get_children())
+      staff = TabFunc()
+      nome = self.busca.get()
+      for i in staff.filtrar_func(nome):
+         self.trv.insert('', 'end', values=i)
+
+   def limpar(self):
+      self.normal()
+      self.busca.delete(0, END)
+      self.caixaNome.delete(0, END)
+      self.caixaCPF.delete(0, END)
+      self.caixaCargo.delete(0, END)
+      self.caixaLogin.delete(0, END)
+      self.caixaSenha.delete(0, END)
+      self.caixaId.delete(0, END)
+
+   def inserir_func(self):
+      staff = TabFunc()
+      staff.nome = self.caixaNome.get()
+      staff.cpf = self.caixaCPF.get()
+      staff.cargo = self.caixaCargo.get()
+      staff.login = self.caixaLogin.get()
+      staff.senha = self.caixaSenha.get()
+      staff.add_func()
+      self.popular()
+      self.limpar_caixas()
+
+   def alterar_func(self):
+      staff = TabFunc()
+      staff.nome = self.caixaNome.get()
+      staff.cpf = self.caixaCPF.get()
+      staff.cargo = self.caixaCargo.get()
+      staff.login = self.caixaLogin.get()
+      staff.senha = self.caixaSenha.get()
+      staff.idfunc = self.caixaId.get()
+      staff.atualizar_func()
+      self.popular()
+      self.limpar_caixas()
+
+   def excluir_func(self):
+      staff = TabFunc()
+      staff.idfunc = self.caixaId.get()
+      staff.deletar_func()
+      self.popular()
+      self.limpar_caixas()
+
+   def voltar_tela(self):
+      self.janela.destroy()
+      return 
+
+   def popular(self):
+      self.trv.delete(*self.trv.get_children())
+      staff = TabFunc()
+      for i in staff.populate():
+         self.trv.insert('', 'end', values=i)
+
+   def leitura_apenas(self):
+      self.caixaId.configure(state='disabled')
+
+   def normal(self):
+      self.caixaId.configure(state='normal')
+
+   def hoverIn1(self, event):  # verde
+      event.widget.config(bg="#32CD32", fg="white", relief=GROOVE)
+
+   def hoverIn2(self, event):  # azul
+      event.widget.config(bg="#6495ED", fg="white", relief=GROOVE)
+
+   def hoverIn3(self, event):  # vermelho
+      event.widget.config(bg="#FF0000", fg="white", relief=GROOVE)
+
+   def hoverIn4(self, event):  # amarelo
+      event.widget.config(bg="#FFD700", fg="white", relief=GROOVE)
+
+   def hoverOut(self, event):
+      event.widget.config(bg="#566981", fg="#e1e3db", relief=RAISED)
+   # def startJan(self):    
+   #    minhaTela = ver_cadastrar_func()
+   #    return minhaTela.janela.mainloop()
+
+minhaTela = ver_cadastrar_func()

+ 506 - 0
Automotivo Soluções/cadastrarOrcamento.py

@@ -0,0 +1,506 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+import TabOrc as orc
+
+
+class cadastrar_orcamento():
+    def __init__(self):
+
+        self.janelaCad_Orc = Tk()
+        self.janelaCad_Orc.state('zoomed')
+        self.janelaCad_Orc.title('Automativo Soluções')
+        self.janelaCad_Orc.geometry('1200x600')
+        self.janelaCad_Orc.configure(bg="#484848")
+        #self.janelaCad_Orc.minsize(1200, 650)
+        #self.janelaCad_Orc.maxsize(1200, 650)
+
+# ===========|  SEÇÕES & FRAMES  |============== #
+        self.frameTop = Frame(self.janelaCad_Orc, bg="#484848")
+        self.frameMid = Frame(self.janelaCad_Orc, bg="#484848")
+
+        self.secaoCliente = LabelFrame(
+            self.frameTop, text=' Dados do Cliente ', bg="#484848", fg="white")
+        self.secaoCadastro = LabelFrame(
+            self.frameTop, text=' Cadastrar Orçamento ', bg="#484848", fg="white")
+        self.secaoPesqCliente = LabelFrame(
+            self.secaoCliente, text=' Pesquisar Cliente ', bg="#484848", fg="white")
+        self.secaoOrcamento = LabelFrame(
+            self.janelaCad_Orc, text=' Orçamentos cadastrados ', bg="#484848", fg="white")
+        self.secaoPesqOrca = LabelFrame(
+            self.secaoOrcamento, text=' Pesquisar Orçamento ', bg="#484848", fg="white")
+
+        self.sub1 = Frame(self.secaoCadastro, bg="#484848")
+        self.sub2 = Frame(self.secaoCadastro, bg="#484848")
+        self.sub3 = Frame(self.sub2, bg="#484848")
+
+        self.rodape = Frame(self.janelaCad_Orc, bg="#484848")
+
+        self.frameTop.pack()
+        self.frameMid.pack()
+
+        self.secaoCliente.pack(side='left', expand='yes',
+                               padx=10, pady=10, anchor='w')
+        self.secaoCadastro.pack(side='left', fill='both',
+                                expand='yes', padx=10, pady=10)
+        self.secaoPesqCliente.pack(fill='both', expand='yes', padx=10, pady=10)
+        self.secaoOrcamento.pack(fill='both', expand='yes')
+        self.secaoPesqOrca.pack(
+            fill='both', side='bottom', expand='no', padx=10, pady=10)
+
+        self.sub1.pack(side='left')
+        self.sub2.pack(side='left')
+        self.sub3.grid(row=2, rowspan=5, column=0,
+                       columnspan=3, padx=10)
+
+        self.rodape.pack(fill='both', expand='yes', padx=20)
+
+
+### ============|   SEÇÃO CLIENTE  |============== ###
+# ==============| TREEVIEW CLIENTE |================ #
+        self.header1 = ('#', 'nome', 'carro', 'cpf')
+
+        self.trvClient = ttk.Treeview(
+            self.secaoCliente, selectmode='browse', columns=self.header1, show='headings')
+
+        self.trvClient.column('#', width=30, anchor='center')
+        self.trvClient.column('nome', anchor='center')
+        self.trvClient.column('carro', anchor='center')
+        self.trvClient.column('cpf', anchor='center')
+
+        self.trvClient.heading('#', text='#')
+        self.trvClient.heading('nome', text='Nome')
+        self.trvClient.heading('carro', text='Carro')
+        self.trvClient.heading('cpf', text='CPF')
+
+        self.trvClient.bind('<Double 1>', self.pegar_linha1)
+        self.trvClient.pack(fill='both')
+
+        self.listarClientes()
+# ============|  CAMPO PESQUISAR CLIENTE  |========== #
+        self.pesqClient = Label(self.secaoPesqCliente,
+                                text='Pesquisa-cliente:', bg="#484848", fg="white")
+        self.keyClient = Entry(self.secaoPesqCliente,
+                               textvariable='txtPesquisaCliente', bg="#484848", fg="white")
+
+        self.pesqClient.pack(side='left', padx=10, pady=6)
+        self.keyClient.pack(side='left', padx=10, pady=6)
+
+# ===============| BOTÕES |================= #
+        self.btnPesqClient = Button(
+            self.secaoPesqCliente, text='Pesquisar', bg="#484848", fg="white", command=self.pesquisar_cliente)
+        self.btnMostrarCliente = Button(
+            self.secaoPesqCliente, text='Mostrar Clientes', bg="#484848", fg="white", command=self.listarClientes)
+
+        self.btnPesqClient.pack(side='left', padx=10, pady=6, ipadx=40)
+        self.btnMostrarCliente.pack(side='left', padx=10, pady=6, ipadx=40)
+
+
+### =========| SEÇÃO CADASTRO |=========== ###
+# ============| CAMPOS DE DADO (SUB-1) |=============#
+        self.lblCliente = Label(
+            self.sub1, text='Cliente:', bg="#484848", fg="white")
+        self.lblCarro = Label(self.sub1, text='Carro:',
+                              bg="#484848", fg="white")
+        self.lblCPF_Client = Label(
+            self.sub1, text='CPF Cliente:', bg="#484848", fg="white")
+        self.lblMecanico = Label(
+            self.sub1, text='Mecânico:', bg="#484848", fg="white")
+        self.lblCPF_Mec = Label(
+            self.sub1, text='CPF Mec.:', bg="#484848", fg="white")
+
+        self.lblCliente.grid_columnconfigure(0, minsize=10)
+        self.lblCliente.grid(row=0, column=0, padx=1, pady=6, sticky='e')
+        self.lblCarro.grid(row=1, column=0, padx=1, pady=6, sticky='e')
+        self.lblCPF_Client.grid(row=2, column=0, padx=1, pady=6, sticky='e')
+        self.lblMecanico.grid(row=3, column=0, padx=1, pady=6, sticky='e')
+        self.lblCPF_Mec.grid(row=4, column=0, padx=1, pady=6, sticky='e')
+
+        self.entNomeClient = Entry(
+            self.sub1, textvariable='txtCliente', state='readonly')
+        self.entClient_CPF = Entry(
+            self.sub1, textvariable='txtCPF_cliente', state='readonly')
+        self.entCarro = Entry(
+            self.sub1, textvariable='txtCarro', state='readonly')
+        self.entNomeMec = Entry(
+            self.sub1, textvariable='txtNomeMecanico')
+        self.entMEC_CPF = Entry(
+            self.sub1, textvariable='txtCPF_mec')
+
+# ===================================================================================
+# ===================================================================================
+# ===================================================================================
+
+
+# ===================================================================================
+# ===================================================================================
+# ===================================================================================
+
+        #self.entNomeMec.insert(INSERT, 'KELVIN ')
+        #self.entMEC_CPF.insert(INSERT, '34567891234')
+
+        # self.entNomeMec.configure(state='readonly')
+        # self.entMEC_CPF.configure(state='readonly')
+
+        self.entNomeClient.grid(row=0, column=1, padx=1, pady=6)
+        self.entClient_CPF.grid(row=1, column=1, padx=1, pady=6)
+        self.entCarro.grid(row=2, column=1, padx=1, pady=6)
+        self.entNomeMec.grid(row=3, column=1, padx=1, pady=6)
+        self.entMEC_CPF.grid(row=4, column=1, padx=1, pady=6)
+# ==================================| (SUB-2) |=============================================== #
+        txtServico = StringVar()
+        txtValor = StringVar()
+
+        self.lblServico = Label(
+            self.sub2, text='Serviço/Peça', bg="#484848", fg="white")
+        self.lblValor = Label(self.sub2, text='Valor(R$)',
+                              bg="#484848", fg="white")
+
+        self.entServico = Entry(self.sub2, textvariable=txtServico)
+        self.entValor = Entry(self.sub2, textvariable=txtValor)
+
+        self.lblServico.grid(row=0, column=0, padx=10, pady=3)
+        self.lblValor.grid(row=0, column=1, padx=10, pady=3)
+
+        self.entServico.grid(row=1, column=0, padx=10, pady=3)
+        self.entValor.grid(row=1, column=1, padx=10, pady=3)
+
+        self.entValor.bind('<Return>', self.adicionar)
+
+# ===============| BOTÕES |================== #
+        self.btnAlterar = Button(
+            self.sub1, text='Alterar', command=self.alterar, bg="#484848", fg="white")
+        self.btnLimpar = Button(
+            self.sub1, text='Limpar', command=self.limpar_Cadastro_Cliente, bg="#484848", fg="white")
+        self.btnCadastrar = Button(
+            self.sub1, text='Cadastrar', command=self.cadastrar_orc, bg="#484848", fg="white")
+
+        self.btnAlterar.grid(column=0, columnspan=2, padx=10, pady=6, ipadx=40)
+        self.btnLimpar.grid(column=0, columnspan=2, padx=10, pady=6, ipadx=40)
+        self.btnCadastrar.grid(column=0, columnspan=2,
+                               padx=10, pady=6, ipadx=35)
+
+        self.btnAlterar.bind("<Enter>", self.hoverIn3)
+        self.btnAlterar.bind("<Leave>", self.hoverOut)
+        self.btnLimpar.bind("<Enter>", self.hoverIn2)
+        self.btnLimpar.bind("<Leave>", self.hoverOut)
+        self.btnCadastrar.bind("<Enter>", self.hoverIn)
+        self.btnCadastrar.bind("<Leave>", self.hoverOut)
+
+        self.btnAdd = Button(self.sub2, text='Adicionar',
+                             command=self.adicionar_serv, bg="#484848", fg="white")
+        self.btnAdd.grid(row=1, column=2, padx=5, pady=6, ipadx=20)
+
+# ==============| TREEVIEW CADASTRO (SUB-3) |================= #
+        self.header2 = ('#', 'item', 'valor')
+
+        self.trvCadastro = ttk.Treeview(
+            self.sub3, selectmode='browse', columns=self.header2, show='headings')
+
+        self.trvCadastro.column('#', width=30, anchor='center')
+        self.trvCadastro.column('item', anchor='w')
+        self.trvCadastro.column('valor', anchor='center')
+
+        self.trvCadastro.heading('#', text='#')
+        self.trvCadastro.heading('item', text='Item')
+        self.trvCadastro.heading('valor', text='Valor')
+
+        self.trvCadastro.bind('<Double 1>', self.pegar_linha2)
+        self.trvCadastro.grid()
+
+        self.total = 0
+        self.valorTotal = Label(
+            self.sub3, text=f'Valor Total: R${self.total:.2f}', bg="#484848", fg="white")
+        self.valorTotal.grid(sticky='se')
+
+### =================|  SEÇÃO ORCAMENTOS CADASTRADOS  |================== ###
+# ========================| TREEVIEW ORCAMENTOS |========================== #
+        self.header3 = ('#', 'nome', 'carro', 'valor', 'descricao')
+
+        self.trv_Orcam = ttk.Treeview(
+            self.secaoOrcamento, selectmode='browse', columns=self.header3, show='headings', height=6)
+
+        self.trv_Orcam.column('#', width=10, anchor='center')
+        self.trv_Orcam.column('nome', anchor='center')
+        self.trv_Orcam.column('carro', anchor='center')
+        self.trv_Orcam.column('valor', anchor='center')
+
+        self.trv_Orcam.heading('#', text='#')
+        self.trv_Orcam.heading('nome', text='Nome')
+        self.trv_Orcam.heading('carro', text='Carro')
+        self.trv_Orcam.heading('valor', text='Valor')
+        self.trv_Orcam.heading('descricao', text='Descrição do Serviço')
+
+        self.trv_Orcam.bind('<Double 1>', self.pegar_linha3)
+        self.trv_Orcam.pack(fill='both')
+
+        self.listarOrcamentos()
+
+### ==============|  SEÇÃO PESQUISAR ORCAMENTO  |=========== ###
+        self.pesqOrc = Label(self.secaoPesqOrca,
+                             text='Palavra-chave', bg="#484848", fg="white")
+        self.pesqOrc.pack(side='left', padx=10, pady=6)
+
+        self.keyOrcam = Entry(self.secaoPesqOrca,
+                              textvariable='txtPesquisaOrcamento')
+        self.keyOrcam.pack(side='left', padx=10, pady=6)
+
+# =========== BOTÕES ================= #
+        self.btnPesqOrcam = Button(
+            self.secaoPesqOrca, text='Pesquisar Orçamento', command=self.pesquisarORCAMENTO, bg="#484848", fg="white")
+        self.btnMostrarOrcam = Button(
+            self.secaoPesqOrca, text='Mostrar Todos', command=self.listarOrcamentos, bg="#484848", fg="white")
+
+        self.btnPesqOrcam.pack(side='left', padx=10, pady=6, ipadx=40)
+        self.btnMostrarOrcam.pack(side='left', padx=10, pady=6, ipadx=40)
+        self.valoresDaSoma = []
+
+
+### =============| SEÇÃO RODAPÉ |================== ###
+# ==================| BOTÃO |==================  #
+        self.btnVoltar = Button(
+            self.rodape, text='Voltar', command=self.voltar, bg="#484848", fg="white")
+        self.btnVoltar.pack(side='right', padx=10, pady=10, ipadx=40)
+
+        self.lista_de_cadORCAMENTO = []
+        self.contador = 0
+        mainloop()
+
+#====================================================|  FUNÇÕES  |=======================================================#
+
+    # =====| GERAIS |===== #
+
+    def treeviewDelete(self, local):
+        return local.delete(*local.get_children())
+
+    def voltar(self):
+        self.janelaCad_Orc.destroy()
+        return
+
+    def entNormal(self):
+        self.entNomeClient.configure(state='normal')
+        self.entClient_CPF.configure(state='normal')
+        self.entCarro.configure(state='normal')
+        self.entNomeMec.configure(state='normal')
+        self.entMEC_CPF.configure(state='normal')
+
+    def entLeitura(self):
+        self.entNomeClient.configure(state='readonly')
+        self.entClient_CPF.configure(state='readonly')
+        self.entCarro.configure(state='readonly')
+        # self.entNomeMec.configure(state='readonly')
+        # self.entMEC_CPF.configure(state='readonly')
+
+    def limpar_tudo(self):
+        self.entNormal()
+        self.entNomeClient.delete(0, END)
+        self.entClient_CPF.delete(0, END)
+        self.entCarro.delete(0, END)
+        self.entServico.delete(0, END)
+        self.entValor.delete(0, END)
+        self.total = 0
+        self.valorTotal["text"] = f'Valor Total: R${self.total:.2f}'
+        self.contador = 0
+        self.valoresDaSoma = []
+        self.lista_de_cadORCAMENTO = []
+        self.entLeitura()
+
+    def soma_valor(self):
+        valor = 0
+        selected = self.lista_de_cadORCAMENTO
+        for i in selected:
+            valor = i[2]
+        self.valoresDaSoma.append(valor)
+        total = sum(self.valoresDaSoma)
+        self.total = total
+        self.valorTotal["text"] = f'Valor Total: R${self.total:.2f}'
+
+    # =====| CLIENTES |===== #
+
+    def view_Client(self, local):
+        self.treeviewDelete(local)
+        linhas = orc.viewClientes()
+        for i in linhas:
+            local.insert('', END, values=i)
+
+    def listarClientes(self):
+        return self.view_Client(self.trvClient)
+
+    def pesquisar_cliente(self):
+        chave = self.keyClient.get()
+        result = orc.searchCliente(chave)
+        self.treeviewDelete(self.trvClient)
+        selection = []
+        selection.append((result[0][0], result[0][1],
+                         result[0][3], result[0][4]))
+        for i in selection:
+            self.trvClient.insert('', END, values=i)
+
+    def identificar_linha1(self, trvLocal):
+        listaItem = []
+        self.entNormal()
+        self.limpar_Cadastro_Cliente()
+        self.entNormal()
+        for item in trvLocal.selection():
+            identif = trvLocal.item(item, 'values')
+            listaItem.append(identif)
+
+        self.entNomeClient.insert(INSERT, listaItem[0][1])
+        self.entClient_CPF.insert(INSERT, listaItem[0][2])
+        self.entCarro.insert(INSERT, listaItem[0][3])
+        self.entLeitura()
+
+    def pegar_linha1(self, event):
+        return self.identificar_linha1(self.trvClient)
+
+    # ======| CADASTRO |=====#
+
+    def view_cadORCAMENTO(self, local):
+        self.treeviewDelete(local)
+        linhas = self.lista_de_cadORCAMENTO
+        for i in linhas:
+            local.insert('', END, values=i)
+        self.tupToStr(self.lista_de_cadORCAMENTO)
+
+    def listarCadOrcamento(self):
+        return self.view_cadORCAMENTO(self.trvCadastro)
+
+    def limpar_Cadastro_Cliente(self):
+        self.treeviewDelete(self.trvCadastro)
+        self.entNormal()
+        self.entNomeClient.delete(0, END)
+        self.entClient_CPF.delete(0, END)
+        self.entCarro.delete(0, END)
+        self.entLeitura()
+
+    def limpar_Servicos(self):
+        self.entServico.delete(0, END)
+        self.entValor.delete(0, END)
+
+    def adicionar(self, event):
+        self.adicionar_serv()
+
+    def adicionar_serv(self):
+        self.contador += 1
+        self.appendListCadOrc(self.contador)
+        self.listarCadOrcamento()
+        self.limpar_Servicos()
+        self.soma_valor()
+        self.entServico.focus()
+
+    def appendListCadOrc(self, contador):
+        servico = str(self.entServico.get())
+        valor = int(self.entValor.get())
+        return self.lista_de_cadORCAMENTO.append((contador, servico, valor))
+
+    def filtroDeImpurezas(self, string):
+        characters = "(',)"
+        for x in range(len(characters)):
+            string = string.replace(characters[x], "")
+        return string
+
+    def adicionar_Orc(self, trvLocal):
+        self.tupla = []
+        for item in trvLocal.selection():
+            self.identificador = trvLocal.item(item, 'values')
+            self.tupla.append((self.identificador))
+
+        self.idCadOrc = self.filtroDeImpurezas(self.tupla[0][0])
+        self.entServico.insert(
+            INSERT, self.filtroDeImpurezas(self.tupla[0][1]))
+        self.entValor.insert(INSERT, self.filtroDeImpurezas(self.tupla[0][2]))
+        self.entServico.focus()
+
+    def pegar_linha2(self, event):
+        self.limpar_Servicos()
+        return self.adicionar_Orc(self.trvCadastro)
+
+    def alterar_Serv(self, trvLocal):
+        listValue = []
+        selecao = trvLocal.selection()
+        for item in selecao:
+            identificador = trvLocal.item(item, 'values')
+            listValue.append(identificador)
+        trvLocal.item(selecao, values=(
+            listValue[0][0], self.entServico.get(), self.entValor.get()))
+        return
+
+    def alterar(self):
+        return self.alterar_Serv(self.trvCadastro)
+
+    def cadastrar_orc(self):
+        self.entNormal()
+        status = 'Pendente'
+        cliente = self.entNomeClient.get()
+        cpf_client = self.entClient_CPF.get()
+        carro = self.entCarro.get()
+        nome_mec = self.entNomeMec.get()
+        cpf_mec = self.entMEC_CPF.get()
+        descricao = self.filtroDeImpurezas(
+            self.tupToStr(self.lista_de_cadORCAMENTO))
+        valor = self.total
+        valores = orc.inserir_orc(
+            cliente, carro, cpf_client, nome_mec, cpf_mec, valor, descricao, status)
+        print(valores)
+        self.view_Orcamento(self.trv_Orcam)
+        self.limpar_tudo()
+        self.entLeitura()
+
+    def tupToStr(self, tupla):
+        lista = []
+        for i in tupla:
+            lista.append(i)
+        stringed = ''
+        for x in lista:
+            stringed += str(x)
+        return stringed
+
+    # =====| ORCAMENTO |===== #
+
+    def view_Orcamento(self, local):
+        self.treeviewDelete(local)
+        linhas = orc.view()
+        print(linhas)
+        for i in linhas:
+            local.insert('', END, values=i)
+
+    def listarOrcamentos(self):
+        return self.view_Orcamento(self.trv_Orcam)
+
+    def pesquisarORCAMENTO(self):
+        chave = self.keyOrcam.get()
+        result = orc.search(chave)
+        self.treeviewDelete(self.trv_Orcam)
+        for i in result:
+            self.trv_Orcam.insert('', END, values=i)
+
+    def add_cadastro(self, trvLocal):
+        self.tupla = []
+        for item in trvLocal.selection():
+            self.identificador = trvLocal.item(item, 'values')
+            self.tupla.append((self.identificador[4]))
+        self.treeviewDelete(self.trvCadastro)
+        for i in self.tupla:
+            self.trvCadastro.insert(
+                '', END, values=self.filtroDeImpurezas(self.tupToStr(i)))
+
+    def pegar_linha3(self, event):
+        return self.add_cadastro(self.trv_Orcam)
+
+    def hoverIn(self, event):
+        event.widget.config(bg="#1E90FF", fg="white", relief=GROOVE)
+
+    def hoverIn2(self, event):
+        event.widget.config(bg="#FF0000", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):
+        event.widget.config(bg="#FFD700", fg="black", relief=GROOVE)
+
+    def hoverOut(self, event):
+        event.widget.config(bg="#484848", fg="white", relief=RAISED)
+    # def executeJan(self):
+    #     app = cadastrar_orcamento()
+    #     return app.janelaCad_Orc.mainloop()
+
+
+app = cadastrar_orcamento()

+ 272 - 0
Automotivo Soluções/gerenciarCliente.py

@@ -0,0 +1,272 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+from TabClien import Clientes
+
+
+class tela_gerenciar_clientes():
+    def __init__(self):
+
+        self.janelaGer_Cliente = Tk()
+
+        self.janelaGer_Cliente.title('Gerenciar clientes')
+        self.janelaGer_Cliente.geometry('1600x900')
+        self.janelaGer_Cliente.minsize(1600, 900)
+        self.janelaGer_Cliente.maxsize(1600, 900)
+        self.janelaGer_Cliente.config(bg="#484848")
+        self.janelaGer_Cliente.state('zoomed')
+        self.janelaGer_Cliente.iconbitmap('automotivo.ico')
+
+# ============= SEÇÕES ================ #
+        self.wrapper1 = LabelFrame(
+            self.janelaGer_Cliente, text='Clientes Cadastrados', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.wrapper2 = LabelFrame(
+            self.janelaGer_Cliente, text='Procurar Cliente', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.wrapper3 = LabelFrame(
+            self.janelaGer_Cliente, text='Dados do Cliente', font=("Roboto", 14, 'bold'), bg="#484848", fg="#e1e3db")
+        self.rodape = Frame(self.janelaGer_Cliente, bg="#484848")
+
+        self.wrapper1.pack(fill='both', expand='no', padx=20, pady=(20, 0))
+        self.wrapper2.pack(fill='both', expand='no', padx=20, pady=(30, 0))
+        self.wrapper3.pack(fill='both', expand='no', padx=20, pady=30)
+        self.rodape.pack(fill='both', expand='no', padx=20, pady=(0, 20))
+
+# ============ SEÇÃO CLIENTES CADASTRADOS =============== #
+# ------------------- TREEVIEW ------------------ #
+        self.style = ttk.Style(master=self.janelaGer_Cliente)
+        self.style.theme_use("clam")
+        self.style.configure("mystyle.Treeview", font=("Roboto", 14))
+        self.style.configure("mystyle.Treeview.Heading", font=("Roboto", 16))
+        self.style.configure("Treeview", rowheight=25)
+        self.style.configure(
+            "Heading", background="#4682B4", foreground="black")
+
+        self.cabecalho = ('#', 'nome', 'cpf', 'carro',
+                          'telefone', 'email', 'endereco')
+        self.trv = ttk.Treeview(
+            self.wrapper1, selectmode='browse', columns=self.cabecalho, show='headings')
+
+        self.trv.column('#', width=20)
+        self.trv.column('nome', width=150, anchor='center')
+        self.trv.column('cpf', width=150)
+        self.trv.column('carro', width=150)
+        self.trv.column('telefone', width=150)
+        self.trv.column('endereco', width=320)
+
+        self.trv.heading('#', text='#')
+        self.trv.heading('nome', text='Nome')
+        self.trv.heading('cpf', text='CPF')
+        self.trv.heading('carro', text='Carro/Placa')
+        self.trv.heading('telefone', text='Telefone')
+        self.trv.heading('email', text='E-mail')
+        self.trv.heading('endereco', text='Endereço')
+
+        self.trv.bind('<Double 1>', self.pegar_linha)
+        self.trv.pack(pady=10)
+
+        self.popular()
+
+# ============= SEÇÃO PROCURAR =========== #
+# ---------- LABELS & ENTRYS ----------- #
+        self.lbl1 = Label(self.wrapper2, text='Palavra-Chave',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl1.pack(side='left', padx=10, pady=10)
+
+        self.busca = Entry(self.wrapper2)
+        self.busca.pack(side='left', padx=6, pady=10, ipadx=15)
+
+
+# ------------- BOTÃO ------------- #
+        self.procurarBtn = Button(
+            self.wrapper2, text='Procurar', command=self.procurar, bg="#484848", fg="#e1e3db")
+        self.procurarBtn.pack(side='left', padx=6, pady=10, ipadx=20)
+
+        self.limparBtn = Button(self.wrapper2, text=(
+            'Limpar'), command=self.limpar, bg="#484848", fg="#e1e3db", relief=RAISED)
+        self.limparBtn.pack(side='left', padx=6, pady=10, ipadx=20)
+        
+        self.mostrarBtn = Button(
+            self.wrapper2, padx=30, text='Mostrar Todos', command=self.popular, bg="#484848", fg="#e1e3db", relief=RAISED)
+        self.mostrarBtn.pack(side='left', pady=10)
+
+# ========= SEÇÃO DADOS DO CLIENTE ======= #
+# ---------- LABELS & ENTRYS ----------- #
+        self.lbl2 = Label(self.wrapper3, text='Nome',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl2.grid(row=0, column=0, padx=5, pady=3)
+        self.ent2 = Entry(self.wrapper3)
+        self.ent2.grid(row=0, column=1, padx=5, pady=3)
+
+        self.lbl3 = Label(self.wrapper3, text='CPF',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl3.grid(row=1, column=0, padx=5, pady=3)
+        self.ent3 = Entry(self.wrapper3)
+        self.ent3.grid(row=1, column=1, padx=5, pady=3)
+
+        self.lbl4 = Label(self.wrapper3, text='Carro/Placa',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl4.grid(row=2, column=0, padx=5, pady=3)
+        self.ent4 = Entry(self.wrapper3)
+        self.ent4.grid(row=2, column=1, padx=5, pady=3)
+
+        self.lbl5 = Label(self.wrapper3, text='Telefone',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl5.grid(row=3, column=0, padx=5, pady=3)
+        self.ent5 = Entry(self.wrapper3)
+        self.ent5.grid(row=3, column=1, padx=5, pady=3)
+
+        self.lbl6 = Label(self.wrapper3, text='E-mail',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl6.grid(row=0, column=2, padx=5, pady=3)
+        self.ent6 = Entry(self.wrapper3)
+        self.ent6.grid(row=0, column=3, padx=5, pady=3, ipadx=40)
+
+        self.lbl7 = Label(self.wrapper3, text='Endereço',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl7.grid(row=1, column=2, padx=5, pady=3)
+        self.ent7 = Entry(self.wrapper3)
+        self.ent7.grid(row=1, column=3, padx=5, pady=3, ipadx=40)
+
+        self.lbl8 = Label(self.wrapper3, text='ID Cliente',
+                          bg="#484848", fg="#e1e3db")
+        self.lbl8.grid(row=2, column=2, padx=5, pady=3)
+        self.ent8 = Entry(self.wrapper3)
+        self.ent8.grid(row=2, column=3, padx=5, pady=3, sticky='W')
+
+# ------------ BOTÕES -------------- #
+        self.addBtn = Button(self.wrapper3, text='Adicionar', bg="#484848", relief=RAISED, fg="#e1e3db",
+                             command=self.inserir_cliente)
+        self.alterarBtn = Button(
+            self.wrapper3, text='Alterar', command=self.alterar_cliente, relief=RAISED, bg="#484848", fg="#e1e3db")
+        self.excluirBtn = Button(
+            self.wrapper3, text='Excluir', command=self.excluir_cliente, relief=RAISED, bg="#484848", fg="#e1e3db")
+
+        self.addBtn.grid(row=4, column=0, padx=5, pady=15, ipadx=25)
+        self.alterarBtn.grid(row=4, column=1, padx=2, pady=15, ipadx=20)
+        self.excluirBtn.grid(row=4, column=2, padx=2, pady=15, ipadx=25)
+
+        self.alterarBtn.bind("<Enter>", self.hoverIn3)
+        self.alterarBtn.bind("<Leave>", self.hoverOut)
+        self.excluirBtn.bind("<Enter>", self.hoverIn2)
+        self.excluirBtn.bind("<Leave>", self.hoverOut)
+        self.addBtn.bind("<Enter>", self.hoverIn)
+        self.addBtn.bind("<Leave>", self.hoverOut)
+
+# ========= SEÇÃO RODAPÉ ======= #
+# ---------- BOTÃO ----------- #
+        self.voltarBtn = Button(
+            self.rodape, text='Voltar', width='20', command=self.voltar_tela, relief=RAISED, bg="#484848", fg="#e1e3db")
+        self.voltarBtn.pack(side='right')
+
+        mainloop()
+
+# ============= FUNÇÕES ============== #
+    def pegar_linha(self, identificador):
+        customer = Clientes()
+        self.limpar_caixas()
+        for item in self.trv.selection():
+            self.id = self.trv.item(item, 'values')
+        identificador = self.id[0]
+
+        customer.identificar_linha(identificador)
+        self.ent8.insert(INSERT, customer.idcliente)
+        self.ent2.insert(INSERT, customer.nome)
+        self.ent3.insert(INSERT, customer.cpf)
+        self.ent4.insert(INSERT, customer.carro)
+        self.ent5.insert(INSERT, customer.telefone)
+        self.ent6.insert(INSERT, customer.email)
+        self.ent7.insert(INSERT, customer.endereco)
+        self.leitura_apenas()
+
+    def limpar_caixas(self):
+        self.normal()
+        self.ent2.delete(0, END)
+        self.ent3.delete(0, END)
+        self.ent4.delete(0, END)
+        self.ent5.delete(0, END)
+        self.ent6.delete(0, END)
+        self.ent7.delete(0, END)
+        self.ent8.delete(0, END)
+
+    def procurar(self):
+        self.trv.delete(*self.trv.get_children())
+        customer = Clientes()
+        nome = self.busca.get()
+
+        for i in customer.filtrar_cliente(nome):
+            self.trv.insert('', 'end', values=i)
+
+    def limpar(self):
+        self.normal()
+        self.busca.delete(0, END)
+        self.ent2.delete(0, END)
+        self.ent3.delete(0, END)
+        self.ent4.delete(0, END)
+        self.ent5.delete(0, END)
+        self.ent6.delete(0, END)
+        self.ent7.delete(0, END)
+        self.ent8.delete(0, END)
+
+    def inserir_cliente(self):
+        customer = Clientes()
+        customer.nome = self.ent2.get()
+        customer.cpf = self.ent3.get()
+        customer.carro = self.ent4.get()
+        customer.telefone = self.ent5.get()
+        customer.email = self.ent6.get()
+        customer.endereco = self.ent7.get()
+        customer.add_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def alterar_cliente(self):
+        customer = Clientes()
+        customer.nome = self.ent2.get()
+        customer.cpf = self.ent3.get()
+        customer.carro = self.ent4.get()
+        customer.telefone = self.ent5.get()
+        customer.email = self.ent6.get()
+        customer.endereco = self.ent7.get()
+        customer.idcliente = self.ent8.get()
+        customer.atualizar_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def excluir_cliente(self):
+        customer = Clientes()
+        customer.idcliente = self.ent8.get()
+        customer.deletar_cliente()
+        self.popular()
+        self.limpar_caixas()
+
+    def voltar_tela(self):
+        self.janelaGer_Cliente.destroy()
+        return
+
+    def popular(self):
+        self.trv.delete(*self.trv.get_children())
+        costumer = Clientes()
+        for i in costumer.populate():
+            self.trv.insert('', 'end', values=i)
+
+    def leitura_apenas(self):
+        self.ent8.configure(state='disabled')
+
+    def normal(self):
+        self.ent8.configure(state='normal')
+
+    def hoverIn(self, event):
+        event.widget.config(bg="#1E90FF", fg="white", relief=GROOVE)
+
+    def hoverIn2(self, event):
+        event.widget.config(bg="#FF0000", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):
+        event.widget.config(bg="#FFD700", fg="black", relief=GROOVE)
+
+    def hoverOut(self, event):
+        event.widget.config(bg="#484848", fg="white", relief=RAISED)
+
+
+minhaTela = tela_gerenciar_clientes()

BIN
Automotivo Soluções/login.png


BIN
Automotivo Soluções/logo.png


BIN
Automotivo Soluções/mecanico.png


BIN
Automotivo Soluções/recepcao.png


BIN
Automotivo Soluções/tela-gerente.png


+ 126 - 0
Automotivo Soluções/visualizarOrcamento.py

@@ -0,0 +1,126 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+from tkinter.font import BOLD
+
+
+class ver_Orcamentos():
+   def __init__(self):
+
+      self.janela = Tk()
+      self.janela.title('Orçamento')
+      self.janela.geometry('1600x900')
+      self.janela.minsize(1600, 900)
+      self.janela.maxsize(1600, 900)
+      self.janela.config(bg="#484848")
+      self.janela.state("zoomed")
+      self.janela.iconbitmap('automotivo.ico')
+
+   # ============= SEÇÕES ================ #
+      self.containerInicial = Label(self.janela, bg="#484848", fg="white", text='Orçamentos', font=(
+         "Roboto", 25, BOLD))
+
+      self.container = LabelFrame(self.janela, bg="#484848", fg="#e1e3db")
+      self.rodape = Frame(self.janela, bg="#484848")
+
+      self.containerInicial.pack(fill='x', expand='no', pady=40)
+      self.container.pack(fill='x', expand='yes', ipadx=30, padx=30)
+      self.rodape.pack(fill='both', expand='no', padx=20)
+
+   # ------------------- TREEVIEW ------------------ #
+      self.style = ttk.Style(master=self.janela)
+      self.style.theme_use("clam")
+      self.style.configure("mystyle.Treeview", font=("Roboto", 14))
+      self.style.configure("mystyle.Treeview.Heading", font=("Roboto", 16))
+      self.style.configure("Treeview", background="silver",
+                     rowheight=25, fieldbackground="#E0FFFF",)
+      self.style.configure("Heading", background="#4682B4", foreground="white")
+
+      self.cabecalho = ('#', 'cliente', 'cpfCliente', 'mecanico', 'cpfMecanico',
+                        'servico', 'valor')
+      self.trv = ttk.Treeview(
+         self.container, selectmode='browse', columns=self.cabecalho, show='headings')
+
+      self.trv.column('#', width=30)
+      self.trv.column('cliente', anchor='center', width=300)
+      self.trv.column('cpfCliente', anchor='center', width=200)
+      self.trv.column('mecanico', anchor='center', width=300)
+      self.trv.column('cpfMecanico', anchor='center', width=200)
+      self.trv.column('servico', anchor='center', width=200)
+      self.trv.column('valor', anchor='center', width=200)
+
+      self.trv.heading('#', text='#')
+      self.trv.heading('cliente', text='Nome do Cliente')
+      self.trv.heading('cpfCliente', text='CPF do Cliente')
+      self.trv.heading('mecanico', text='Nome do Mecânico')
+      self.trv.heading('cpfMecanico', text='CPF do Mecânico')
+      self.trv.heading('servico', text='Serviço')
+      self.trv.heading('valor', text='Valor')
+
+      self.trv.bind('<Double 1>', self.pegar_linha)
+      self.trv.pack(pady=20)
+
+      self.popular()
+
+      # ========= SEÇÃO RODAPÉ ======= #
+      # ---------- BOTÃO ----------- #
+      self.aprovarBtn = Button(self.container, text='Aprovar', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.ver_concluidas, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.aprovarBtn.pack(side='left', pady=20, padx=275)
+      self.aprovarBtn.bind("<Enter>", self.hoverIn1)
+      self.aprovarBtn.bind("<Leave>", self.hoverOut)
+
+      self.deletarBtn = Button(self.container, text='Deletar', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.mostrar_todos, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.deletarBtn.pack(side='right', pady=20, padx=275)
+      self.deletarBtn.bind("<Enter>", self.hoverIn3)
+      self.deletarBtn.bind("<Leave>", self.hoverOut)
+
+      self.voltarBtn = Button(self.rodape, text='Voltar', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.voltar_tela, bg="#cc0000", fg="#e1e3db", relief=RAISED)
+      self.voltarBtn.pack(side='right', pady=40)
+      self.voltarBtn.bind("<Enter>", self.hoverIn3)
+      self.voltarBtn.bind("<Leave>", self.hoverOut2)
+
+      mainloop()
+
+   # ============= FUNÇÕES ============== #
+   def pegar_linha(self, identificador):
+
+      return
+
+   def popular(self):
+      # self.trv.delete(*self.trv.get_children())
+      # staff = TabFunc()
+      # for i in staff.populate():
+      #     self.trv.insert('', 'end', values=i)
+      return
+
+   def ver_concluidas(self):
+      return
+
+   def mostrar_todos(self):
+      return
+
+   def ver_ativas(self):
+      return
+
+   def voltar_tela(self):
+      self.janela.destroy()
+      return
+
+   def hoverIn1(self, event):  # verde
+      event.widget.config(bg="#3CB371", fg="white", relief=GROOVE)
+
+   def hoverIn3(self, event):  # vermelho
+      event.widget.config(bg="#8B0000", fg="white", relief=GROOVE)
+
+   def hoverOut(self, event):
+      event.widget.config(bg="#566981", fg="#e1e3db", relief=RAISED)
+
+   def hoverOut2(self, event):
+      event.widget.config(bg="#cc0000", fg="#e1e3db", relief=RAISED)
+
+
+minhaTela = ver_Orcamentos()

+ 132 - 0
Automotivo Soluções/visualizarOrdemGerente.py

@@ -0,0 +1,132 @@
+from tkinter import *
+import tkinter as tk
+from tkinter import ttk
+from tkinter import messagebox
+from tkinter.font import BOLD
+
+
+class GerenciarOrdens():
+   def __init__(self):
+
+      self.janela = Tk()
+      self.janela.title('Gerenciar Ordens de Serviço')
+      self.janela.geometry('1600x900')
+      self.janela.minsize(1600, 900)
+      self.janela.maxsize(1600, 900)
+      self.janela.config(bg="#484848")
+      self.janela.state("zoomed")
+      self.janela.iconbitmap('automotivo.ico')
+
+   # ============= SEÇÕES ================ #
+      self.containerInicial = Label(self.janela, bg="#484848", fg="white", text='Ordens de Serviço', font=(
+         "Roboto", 25, BOLD))
+
+      self.container = LabelFrame(self.janela, bg="#484848", fg="#e1e3db")
+      self.rodape = Frame(self.janela, bg="#484848")
+
+      self.containerInicial.pack(fill='x', expand='no', pady=40)
+      self.container.pack(fill='x', expand='yes', ipadx=30, padx=30)
+      self.rodape.pack(fill='both', expand='no', padx=20)
+
+   # ------------------- TREEVIEW ------------------ #
+      self.style = ttk.Style(master=self.janela)
+      self.style.theme_use("clam")
+      self.style.configure("mystyle.Treeview", font=("Roboto", 14))
+      self.style.configure("mystyle.Treeview.Heading", font=("Roboto", 16))
+      self.style.configure("Treeview", background="silver",
+                     rowheight=25, fieldbackground="#E0FFFF",)
+      self.style.configure("Heading", background="#4682B4", foreground="white")
+
+      self.cabecalho = ('#', 'cliente', 'cpfCliente', 'mecanico', 'cpfMecanico',
+                        'servico', 'valor')
+      self.trv = ttk.Treeview(
+         self.container, selectmode='browse', columns=self.cabecalho, show='headings')
+
+      self.trv.column('#', width=30)
+      self.trv.column('cliente', anchor='center', width=300)
+      self.trv.column('cpfCliente', anchor='center', width=200)
+      self.trv.column('mecanico', anchor='center', width=300)
+      self.trv.column('cpfMecanico', anchor='center', width=200)
+      self.trv.column('servico', anchor='center', width=200)
+      self.trv.column('valor', anchor='center', width=200)
+
+      self.trv.heading('#', text='#')
+      self.trv.heading('cliente', text='Nome do Cliente')
+      self.trv.heading('cpfCliente', text='CPF do Cliente')
+      self.trv.heading('mecanico', text='Nome do Mecânico')
+      self.trv.heading('cpfMecanico', text='CPF do Mecânico')
+      self.trv.heading('servico', text='Serviço')
+      self.trv.heading('valor', text='Valor')
+
+      self.trv.bind('<Double 1>', self.pegar_linha)
+      self.trv.pack(pady=20)
+
+      self.popular()
+
+      # ========= SEÇÃO RODAPÉ ======= #
+      # ---------- BOTÃO ----------- #
+      self.finalizarBtn = Button(self.container, text='Finalizar Ordem', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.finalizar, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.finalizarBtn.pack(side='left', pady=20, padx=165)
+      self.finalizarBtn.bind("<Enter>", self.hoverIn1)
+      self.finalizarBtn.bind("<Leave>", self.hoverOut)
+
+      self.ativasBtn = Button(self.container, text='Ordens ativas', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.ver_ativas, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.ativasBtn.pack(side='left', pady=20, padx=100)
+      self.ativasBtn.bind("<Enter>", self.hoverIn1)
+      self.ativasBtn.bind("<Leave>", self.hoverOut)
+
+      self.finalizadasBtn = Button(self.container, text='Ordens finalizadas', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.ver_finalizadas, bg="#566981", fg="#e1e3db", relief=RAISED)
+      self.finalizadasBtn.pack(side='left', pady=20, padx=150)
+      self.finalizadasBtn.bind("<Enter>", self.hoverIn1)
+      self.finalizadasBtn.bind("<Leave>", self.hoverOut)
+
+      self.voltarBtn = Button(self.rodape, text='Voltar', font=("Roboto", 14, BOLD), width='20', height=2,
+                              command=self.voltar_tela, bg="#cc0000", fg="#e1e3db", relief=RAISED)
+      self.voltarBtn.pack(side='right', pady=40)
+      self.voltarBtn.bind("<Enter>", self.hoverIn3)
+      self.voltarBtn.bind("<Leave>", self.hoverOut2)
+
+      mainloop()
+
+   # ============= FUNÇÕES ============== #
+   def pegar_linha(self, identificador):
+
+      return
+
+   def popular(self):
+      # self.trv.delete(*self.trv.get_children())
+      # staff = TabFunc()
+      # for i in staff.populate():
+      #     self.trv.insert('', 'end', values=i)
+      return
+
+   def finalizar(self):
+      return
+
+   def ver_finalizadas(self):
+      return
+
+   def ver_ativas(self):
+      return
+
+   def voltar_tela(self):
+      self.janela.destroy()
+      return
+
+   def hoverIn1(self, event):  # verde
+      event.widget.config(bg="#3CB371", fg="white", relief=GROOVE)
+
+   def hoverIn3(self, event):  # vermelho
+      event.widget.config(bg="#8B0000", fg="white", relief=GROOVE)
+
+   def hoverOut(self, event):
+      event.widget.config(bg="#566981", fg="#e1e3db", relief=RAISED)
+
+   def hoverOut2(self, event):
+      event.widget.config(bg="#cc0000", fg="#e1e3db", relief=RAISED)
+
+
+minhaTela = GerenciarOrdens()

+ 166 - 0
Automotivo Soluções/visualizarOrdemMecanico.py

@@ -0,0 +1,166 @@
+from tkinter import *
+from tkinter import ttk
+from tkinter.font import BOLD
+import TabOrd as ordem
+
+
+class verOrdensMecanico():
+    def __init__(self):
+
+        self.janelaVerOrd = Tk()
+        self.janelaVerOrd.title('Gerenciar Ordem_MEC')
+        self.janelaVerOrd.geometry('1600x900')
+        self.janelaVerOrd.config(bg='#484848')
+        self.janelaVerOrd.state('zoomed')
+        self.janelaVerOrd.iconbitmap('automotivo.ico')
+
+    # ==========|  SEÇÕES  | =========== #
+        self.frameTop = Frame(self.janelaVerOrd, bg='#484848')
+        self.frameMid = Frame(self.janelaVerOrd, bg='#484848')
+        # self.frameBot = Frame(self.janelaVerOrc, bg='#484848')
+
+        self.frameTop.pack(pady=(20, 0))
+        self.frameMid.pack()
+        # self.frameBot.pack()
+
+        self.wrapper_trv = LabelFrame(
+            self.frameMid, text='  Ordens Cadastradas  ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.wrapper_filtrar = LabelFrame(
+            self.frameMid, text=' Pesquisar ', bg='#484848', fg='white', font=('Roboto', 10, BOLD))
+        self.frameRodape = Frame(self.janelaVerOrd, bg='#484848')
+
+        self.wrapper_trv.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.wrapper_filtrar.pack(fill='both', expand='yes', padx=20, pady=10)
+        self.frameRodape.pack(fill='both', expand='yes', padx=20, pady=10)
+
+    # =========|  TOP  |========= #
+        self.titulo = Label(self.frameTop, text='Ordens de Serviços',
+                            bg='#484848', fg='white', font=('Roboto', 20, BOLD))
+        self.titulo.pack(padx=20, pady=10)
+
+    # ========| MIDDLE  |======== #
+    # =======| TREEVIEW  |======== #
+        self.cabecalho = ('#', 'cliente', 'carro', 'cpf_cliente',
+                          'mecanico', 'cpf_mec', 'valor', 'descricao', 'status')
+        self.trv = ttk.Treeview(
+            self.wrapper_trv, selectmode='browse', columns=self.cabecalho, show='headings')
+
+        self.trv.column('#', width=10)
+        self.trv.column('cliente', width=150, anchor='center')
+        self.trv.column('carro', width=150, anchor='center')
+        self.trv.column('cpf_cliente', width=150, anchor='center')
+        self.trv.column('mecanico', width=150, anchor='center')
+        self.trv.column('cpf_mec', width=150, anchor='center')
+        self.trv.column('valor', width=150, anchor='center')
+        self.trv.column('descricao', width=300)
+        self.trv.column('status', width=100, anchor='center')
+
+        self.trv.heading('#', text='#')
+        self.trv.heading('cliente', text='Cliente')
+        self.trv.heading('carro', text='Carro')
+        self.trv.heading('cpf_cliente', text='CPF Cliente')
+        self.trv.heading('mecanico', text='Mecânico')
+        self.trv.heading('cpf_mec', text='CPF Mec')
+        self.trv.heading('valor', text='Valor R$')
+        self.trv.heading('descricao', text='Descrição do Serviço')
+        self.trv.heading('status', text='Status')
+
+        self.trv.bind('<Double 1>', self.pegar_linhaBind)
+        self.trv.pack(pady=10)
+
+        self.popular()
+
+    # =========|  CAMPO DE BUSCA  |======== #
+        self.lblChave = Label(self.wrapper_filtrar,
+                              text='Palavra-chave', bg='#484848', fg='white')
+        self.lblChave.pack(side='left', padx=6, pady=10)
+
+        self.entBusca = Entry(self.wrapper_filtrar, textvariable='filtro')
+        self.entBusca.pack(side='left', padx=6, pady=10, ipadx=15)
+
+        self.btn_procurar = Button(
+            self.wrapper_filtrar, text='Procurar', command=self.procurar, bg='#484848', fg='white')
+        self.btn_mostrar = Button(
+            self.wrapper_filtrar, text='Mostrar Todos', command=self.popular, bg='#484848', fg='white')
+
+        self.btn_procurar.pack(side='left', padx=6, pady=10, ipadx=20)
+        self.btn_mostrar.pack(side='left', padx=6, pady=10, ipadx=20)
+
+        self.btn_procurar.bind("<Enter>", self.hoverIn1)
+        self.btn_procurar.bind("<Leave>", self.hoverOut)
+        self.btn_mostrar.bind("<Enter>", self.hoverIn1)
+        self.btn_mostrar.bind("<Leave>", self.hoverOut)
+
+    # ===========| BOTTOM  |=========== #
+    # ===========| VOLTAR  |=========== #
+        self.btn_voltar = Button(
+            self.frameRodape, text='Voltar', command=self.voltar, bg='#484848', fg='white')
+
+        self.btn_voltar.pack(side='right', padx=6, pady=10, ipadx=30)
+        self.btn_voltar.bind("<Enter>", self.hoverIn3)
+        self.btn_voltar.bind("<Leave>", self.hoverOut)
+
+        self.varDeArmaz = ''
+        mainloop()
+
+
+# ===========|  FUNÇÕES  |============ #
+
+    def pegar_linhaBind(self, event):
+        return self.pegar_linha()
+
+    def pegar_linha(self):
+        for item in self.trv.selection():
+            self.id = self.trv.item(item, 'values')
+        ident = self.id
+        self.varDeArmaz = ident
+
+    def popular(self):
+        self.trv.delete(*self.trv.get_children())
+        for i in ordem.populate(self):
+            self.trv.insert('', 'end', values=i)
+
+    def status(self):
+        state = 'Finalizada'
+        tupla = self.varDeArmaz
+        lista1 = []
+        for i in tupla:
+            lista1.append(i)
+        idordem = lista1[0]
+        ordem.update(state, idordem)
+        self.popular()
+        self.varDeArmaz = ''
+
+    def concluir(self):
+        return self.status()
+
+    def excluir(self):
+        tupla = self.varDeArmaz
+        pickingID = []
+        for i in tupla:
+            pickingID.append(i)
+        idordem = pickingID[0]
+        ordem.delete_aprov(idordem)
+        self.popular()
+        self.varDeArmaz = ''
+
+    def procurar(self):
+        chave = self.entBusca.get()
+        self.trv.delete(*self.trv.get_children())
+        for i in ordem.filtrar(chave):
+            self.trv.insert('', END, values=i)
+
+    def voltar(self):
+        self.janelaVerOrd.destroy()
+        return
+    def hoverIn1(self, event):  # verde
+        event.widget.config(bg="#3CB371", fg="white", relief=GROOVE)
+
+    def hoverIn3(self, event):  # vermelho
+        event.widget.config(bg="#8B0000", fg="white", relief=GROOVE)
+
+    def hoverOut(self, event):
+        event.widget.config(bg='#484848', fg="#e1e3db", relief=RAISED)
+
+
+app = verOrdensMecanico()