def report_txt_history_rent():
        start_date_format = ""
        print("_"*80)
        start_date = input("Digite a Data Inicial: ")
        if start_date is "":
            now = DateHourNow()
            start_date = now.get_just_date()

        start_date_format = validate.validation_date_select(start_date)

        while start_date_format is None:
            print("_" * 80)
            print("Por favor digite a Data Inicial corretamente.")
            start_date = input("Digite a Data Inicial: ")
            start_date_format = validate.validation_date_select(start_date)

        end_date = input("Digite a Data Final: ")
        if end_date is "":
            end_date = start_date_format
        end_date_format = validate.validation_date_select(end_date)

        while end_date_format is None:
            print("_" * 80)
            print("Por favor digite a Data Final corretamente.")
            end_date = input("Digite a Data Final: ")
            end_date_format = validate.validation_date_select(end_date)

        report_txt.report_txt(start_date_format, end_date_format)
Beispiel #2
0
class Report:

    global data_hour_now
    data_hour = DateHourNow()
    data_hour_now = data_hour.get_date_hour_now()

    @staticmethod
    def report_txt(start_date, end_date):
        try:
            convert_data_hour_now = str(data_hour_now)
            convert_data_hour_now = convert_data_hour_now[0:10]

            file_genarate = "C:\\Users\\joaovpinto\\PycharmProject\\Sistema_Locadora\\Sistema_Locadora" \
                            "\\Operations_Files\\Directory_Of_Reports\\report_txt_{0}.txt".format(convert_data_hour_now)

            file = open(file_genarate, "w")
            rent_dvd_game = RentDvdGame()
            datas = rent_dvd_game.report_rent_dvd_game(start_date, end_date)
            file.write("\t \t \t Relatório de Empréstimo\n")
            file.write("Parâmetros\n")
            if start_date is not None:
                file.write(f"Data Inicial: {start_date}\n")

            if end_date is not None:
                file.write(f"Data Final: {end_date}\n")
            file.write("_" * 80+"\n")

            for save_datas in datas:
                file.write(save_datas)

            print("O Relatório foi salvo com sucesso.")
            print("Nome do Arquivo: {0}".format("report_txt_" + convert_data_hour_now))
            print("Diretório do Arquivo: {0}".format("Directory_Of_Reports"))
            print("Data e Horário do Processamento: {0} ".format(data_hour_now))
            print("_" * 80)

            if file.closed:
                file.close()

        except():
            print("_"*80)
            print("Erro ao tentar gerar o arquivo.")
class Login(Connection):

    global date_hour
    now = DateHourNow()
    date_hour = now.get_date_hour_now()

    def exist_login(self, cpf, password):
        try:
            id_func = self.return_id_func(cpf)
            if id_func is not None:
                sql = "SELECT NOME_FUNCIONARIO FROM LOGINS_V WHERE ID_FUNC = {0} AND SENHA = '{1}';"\
                    .format(id_func, password)

                self.cursor.execute(sql)
                employee_name = self.cursor.fetchone()

                if employee_name is not None:
                    logar = "Logado com Sucesso"
                    print("_" * 80)
                    print(logar)
                    print(f"Bem - Vindo(a) {str(employee_name[0]).title()}.")
                    return logar

                else:
                    print("_" * 80)
                    print("Login incorreto.")
                    return None

            else:
                print("_" * 80)
                print("Não existe este login cadastrado no sistema.")
                return None

        except ():
            print("_" * 80)
            print("Erro ao tentar Logar.")

    def return_id_login(self, id_func):
        try:
            sql = "SELECT ID_LOGIN FROM LOGIN WHERE ID_FUNC = {0};".format(
                id_func)
            self.cursor.execute(sql)
            id_login = self.cursor.fetchone()

            if id_login is not None:
                return id_login[0]

            else:
                return None
        except ():
            print("_" * 80)
            print("Erro ao tentar recuperar o Id do Login")
            self.close_connection()

    @staticmethod
    def return_id_func(cpf):
        employee = Employee()
        id_func = employee.return_id(cpf)
        return id_func

    @staticmethod
    def return_job_rule(cpf):
        employee = Employee()
        job_rule = employee.return_job_rule(cpf)
        return job_rule

    def insert(self, cpf, password, question, answer):
        try:
            id_func = self.return_id_func(cpf)
            id_login = self.return_id_login(id_func)

            if id_login is None:
                sql = "INSERT INTO LOGIN (ID_FUNC,SENHA,PERGUNTA,RESPOSTA,DATA_CRIACAO,DATA_ATUALIZACAO)" \
                      "VALUES({0},'{1}','{2}','{3}','{4}','{5}');".format(id_func, password, question,
                                                                          answer, date_hour, date_hour)

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("Foi cadastrado com sucesso o novo login.")

            else:
                print("_" * 80)
                print("Já existe este login cadastrado.")

        except ():
            print("_" * 80)
            print("Erro ao tentar cadastrar o novo login.")
        finally:
            self.close_connection()

    def update_password(self, cpf, password):
        try:
            id_func = self.return_id_func(cpf)
            id_login = self.return_id_login(id_func)

            if id_login is not None:
                sql = "UPDATE LOGIN SET SENHA = '{0}' " \
                      "WHERE ID_LOGIN = {1};".format(password, id_login)

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A sua senha foi alterada com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar alterar a senha.")
        finally:
            self.close_connection()

    def update_question(self, cpf, question):
        try:
            id_func = self.return_id_func(cpf)
            id_login = self.return_id_login(id_func)

            if id_login is not None:
                sql = "UPDATE LOGIN SET PERGUNTA = '{0}' " \
                      "WHERE ID_LOGIN = {1};".format(question.title(), id_login)
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A sua pergunta foi alterada com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar alterar a pergunta.")
        finally:
            self.close_connection()

    def update_answer(self, cpf, answer):
        try:
            id_func = self.return_id_func(cpf)
            id_login = self.return_id_login(id_func)

            if id_login is not None:
                sql = "UPDATE LOGIN SET RESPOSTA = '{0}' " \
                      "WHERE ID_LOGIN = {1};".format(answer, id_login)
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A sua resposta foi alterada com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar alterar a resposta da pergunta.")
        finally:
            self.close_connection()

    def delete(self, cpf):
        try:
            id_func = self.return_id_func(cpf)

            if id_func is not None:
                sql = "DELETE FROM LOGIN WHERE ID_FUNC = {0};".format(id_func)
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O login do funcionário foi deletado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este login cadastrado no sistema.")

        except ():
            print("_" * 80)
            print("Erro ao tentar deletar este Login.")
        finally:
            self.close_connection()

    def logar(self, cpf, password):
        try:
            id_func = self.return_id_func(cpf)
            if id_func is not None:
                sql = "SELECT NOME_FUNCIONARIO FROM LOGINS_V WHERE ID_FUNC = {0} AND SENHA = '{1}';"\
                    .format(id_func, password)

                self.cursor.execute(sql)
                employee_name = self.cursor.fetchone()

                if employee_name is not None:
                    logar = "Logado com Sucesso"
                    print("_" * 80)
                    print(logar)
                    print(f"Bem - Vindo(a) {str(employee_name[0]).title()}.")
                    return logar

                else:
                    print("_" * 80)
                    print("Login incorreto.")
                    return None

            else:
                print("_" * 80)
                print("Não existe este login cadastrado no sistema.")
                return None

        except ():
            print("_" * 80)
            print("Erro ao tentar Logar.")
        finally:
            self.close_connection()

    def recover_password(self, cpf):
        try:
            id_func = self.return_id_func(cpf)
            sql = "SELECT PERGUNTA FROM LOGIN WHERE ID_FUNC = {0};".format(
                id_func)
            self.cursor.execute(sql)
            question = self.cursor.fetchone()

            if question is not None:
                print(str(question[0]).title())
                answer = input("Digite a resposta da Pergunta acima: ")
                while answer is "":
                    print("_" * 80)
                    print("Por favor digite a reposta da pergunta.")
                    answer = input("Digite a resposta da Pergunta acima: ")

                sql = "SELECT SENHA FROM LOGIN WHERE ID_FUNC = {0} AND RESPOSTA = '{1}';".format(
                    id_func, answer)
                self.cursor.execute(sql)
                password = self.cursor.fetchone()
                print("_" * 80)
                if password is not None:
                    print("A sua senha é: {0}".format(str(password[0])))
                    print("_" * 80)

                else:
                    print("Resposta incorreta.")

            else:
                print("_" * 80)
                print("Não existe esses dados cadastrados no sistema.")
        except ():
            print("_" * 80)
            print("Erro ao tentar recuperar a senha do Login.")
        finally:
            self.close_connection()
Beispiel #4
0
class RentDvdGame(Connection):

    global date_hour
    now = DateHourNow()
    date_hour = now.get_date_hour_now()

    @staticmethod
    def return_id_cliente(cpf):
        customer = Customer()
        id_customer = customer.return_id(cpf)

        return id_customer

    def check_qty_dvd_game_rent(self, id_dvd_jogo, qty_rent):
        try:
            sql = "SELECT CASE  WHEN SUM(EDJ.QTDE_EMPRESTADO) IS NULL THEN 0 + {0} " \
                  "ELSE SUM(EDJ.QTDE_EMPRESTADO) + {1} END SOMA_QTDE_EMPRESTADA "\
                  "FROM EMPRESTIMO_DVD_JOGO EDJ "\
                  "WHERE EDJ.ID_DVD_JOGO = {2};".format(qty_rent, qty_rent, id_dvd_jogo)
            self.cursor.execute(sql)
            total_qty = self.cursor.fetchone()
            total_qty = total_qty[0]

            if total_qty is None:
                total_qty = 0

            return int(total_qty)

        except ():
            print("_" * 80)
            print(
                "Erro ao tentar retornar a quantidade de Dvds e Jogos Alugados."
            )

    @staticmethod
    def check_qty_dvd_game_avaibles(id_dvd_jogo):
        dvd_game = DvdGame()
        check_qty = dvd_game.check_qtde_dvd_games_avaible(id_dvd_jogo)

        if check_qty is not None:
            return check_qty

        else:
            return 0

    @staticmethod
    def return_id_func(cpf):
        employee = Employee()
        id_func = employee.return_id(cpf)
        return id_func

    @staticmethod
    def return_id_dvd_jogo(name_dvd_game):
        dvd_game = DvdGame()
        id_dvd_game = dvd_game.return_id(name_dvd_game)
        return id_dvd_game

    def return_id_empr_dvd_jogo(self, id_cliente, id_dvd_jogo):
        try:
            sql = "SELECT ID_EMP_DVD_JOGO FROM EMPRESTIMO_DVD_JOGO WHERE ID_CLIENTE = {0} " \
                  "AND ID_DVD_JOGO = {1};".format(id_cliente, id_dvd_jogo)
            self.cursor.execute(sql)
            id_emp_dvd_jogo = self.cursor.fetchone()

            if id_emp_dvd_jogo is not None:
                return id_emp_dvd_jogo[0]

            else:
                return None

        except ():
            self.close_connection()
            print("_" * 80)
            print(
                "Erro ao tentar recuperar o ID do Empréstimo do DVD ou Jogo.")

    def insert(self, datas=[]):
        try:
            id_func = self.return_id_func(datas[2])
            id_cliente = self.return_id_cliente(datas[3])
            id_dvd_jogo = self.return_id_dvd_jogo(datas[4])
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            qty_register_dvd_game = self.check_qty_dvd_game_avaibles(
                id_dvd_jogo)
            qty_dvd_game_rent = self.check_qty_dvd_game_rent(id_dvd_jogo, 1)

            if id_emp_dvd_jogo is None:

                if qty_dvd_game_rent <= qty_register_dvd_game:
                    sql = "INSERT INTO EMPRESTIMO_DVD_JOGO(QTDE_DIAS_EMPR,VALOR_DIARIA,ID_FUNC,ID_CLIENTE,"\
                          "ID_DVD_JOGO,DATA_CRIACAO, DATA_ATUALIZACAO, ID_USUARIO) " \
                          "VALUES({0},{1},{2},{3},{4},'{5}','{6}',{7});".format(datas[0], datas[1], id_func, id_cliente,
                                                                                id_dvd_jogo, date_hour, date_hour,
                                                                                datas[5])

                    self.cursor.execute(sql)
                    self.connection.commit()
                    print("_" * 80)
                    print("Foi adicionado um novo registro com sucesso.")

                else:
                    print("_" * 80)
                    print(
                        f"Não foi possível alugar este Dvd ou Jogo ({datas[4]}) \npois a quantidade de Dvds ou Jogos "
                        f"para este aluguel é maior do que a quantidade disponível."
                    )

            else:
                print("_" * 80)
                print("Este Dvd ou Jogo já está alugado.")

        except ():
            print("_" * 80)
            print("Erro ao tentar inserir dados no empréstimo.")
        finally:
            self.close_connection()

    def update_qty_days_emp(self, customer_cpf, name_dvd_game, qty_days_rent,
                            user_id):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emp_dvd_jogo is not None:
                sql = (
                    "UPDATE EMPRESTIMO_DVD_JOGO SET QTDE_DIAS_EMPR = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_EMP_DVD_JOGO = {3};".format(
                        qty_days_rent, date_hour, user_id, id_emp_dvd_jogo))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(
                    "A Quantidade de  dias do DVD ou jogo Emprestado foi alterada com sucesso."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def update_daily_value(self, customer_cpf, name_dvd_game, daily_value,
                           user_id):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emp_dvd_jogo is not None:
                sql = (
                    "UPDATE EMPRESTIMO_DVD_JOGO SET VALOR_DIARIA = {0} ,DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    ""
                    " WHERE ID_EMP_DVD_JOGO = {3};".format(
                        daily_value, date_hour, user_id, id_emp_dvd_jogo))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O valor diário foi alterado com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def update_total_value(self, customer_cpf, name_dvd_game, total_value,
                           user_id):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emp_dvd_jogo is not None:
                sql = (
                    "UPDATE EMPRESTIMO_DVD_JOGO SET VALOR_TOTAL = {0},DATA_ATUALIZACAO = '{1}',ID_USUARIO = {2} "
                    "WHERE ID_EMP_DVD_JOGO = {3};".format(
                        total_value, date_hour, user_id, id_emp_dvd_jogo))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Valor Total foi alterado com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def update_id_employee(self, customer_cpf, name_dvd_game, employee_cpf,
                           user_id):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emp_dvd_jogo is not None:
                id_func = self.return_id_func(employee_cpf)
                sql = (
                    "UPDATE EMPRESTIMO_DVD_JOGO SET ID_FUNC = {0}, DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}  "
                    "WHERE ID_EMP_DVD_JOGO = {3};".format(
                        id_func, date_hour, user_id, id_emp_dvd_jogo))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Registro do Funcionário foi alterado com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def update_id_customer(self, old_customer_cpf, name_dvd_game,
                           new_customer_cpf, user_id):
        try:
            id_cliente = self.return_id_cliente(old_customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emp_dvd_jogo is not None:

                id_new_cliente = self.return_id_cliente(new_customer_cpf)
                if id_new_cliente is not None:
                    sql = (
                        "UPDATE EMPRESTIMO_DVD_JOGO SET ID_CLIENTE = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                        " WHERE ID_EMP_DVD_JOGO = {3};".format(
                            id_new_cliente, date_hour, user_id,
                            id_emp_dvd_jogo))

                    self.cursor.execute(sql)
                    self.connection.commit()
                    print("_" * 80)
                    print("O Cliente foi alterado com sucesso.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def update_id_dvd_game(self, customer_cpf, old_name_dvd_game,
                           new_name_dvd_game, user_id):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_old_dvd_jogo = self.return_id_dvd_jogo(old_name_dvd_game)
            id_emp_dvd_jogo = self.return_id_empr_dvd_jogo(
                id_cliente, id_old_dvd_jogo)

            if id_emp_dvd_jogo is not None:
                id_new_dvd_jogo = self.return_id_dvd_jogo(new_name_dvd_game)
                qty_register_dvd_game = self.check_qty_dvd_game_avaibles(
                    id_new_dvd_jogo)
                qty_dvd_game_rent = self.check_qty_dvd_game_rent(
                    id_new_dvd_jogo, 0)
                qty_avaible = qty_register_dvd_game - qty_dvd_game_rent

                if id_new_dvd_jogo is not None:

                    if qty_dvd_game_rent <= qty_avaible:
                        sql = (
                            "UPDATE EMPRESTIMO_DVD_JOGO SET ID_DVD_JOGO = {0},DATA_ATUALIZACAO = '{1}', "
                            "ID_USUARIO = {2} WHERE ID_EMP_DVD_JOGO = {3};".
                            format(id_new_dvd_jogo, date_hour, user_id,
                                   id_emp_dvd_jogo))

                        self.cursor.execute(sql)
                        self.connection.commit()
                        print("_" * 80)
                        print(
                            "O Registro do Jogo ou Dvd do Cliente foi alterado com sucesso."
                        )

                    else:
                        print("_" * 80)
                        print(
                            "Não foi possível alugar este Dvd ou Jogo devido a todos está alugados."
                        )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def delete(self, customer_cpf, name_dvd_game):
        try:
            id_cliente = self.return_id_cliente(customer_cpf)
            id_dvd_jogo = self.return_id_dvd_jogo(name_dvd_game)
            id_emprestimo = self.return_id_empr_dvd_jogo(
                id_cliente, id_dvd_jogo)

            if id_emprestimo is not None:
                sql = "DELETE FROM EMPRESTIMO_DVD_JOGO WHERE ID_EMP_DVD_JOGO = {0};".format(
                    id_emprestimo)
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(
                    f"O registro do Aluguel do Cliente foi deletado com sucesso."
                )

            else:
                print("_" * 80)
                print(
                    f"O registro deste Cliente com este \nJogo: {name_dvd_game.title()}"
                    f" não existe cadastrado.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def select_all(self):
        try:
            sql = f"SELECT * FROM DVD_JOGOS_ALUGADO_V;"
            self.cursor.execute(sql)
            datas = self.cursor.fetchall()

            print("\t \t \t  Dvd ou Jogos Alugado")
            print("_" * 80)
            for registers in datas:
                id_emprestimo = registers[0]
                name_dvd_game = registers[1]
                customer_name = registers[2]
                qty_days_rent = registers[3]
                daily_value = registers[4]
                total_value = registers[5]
                qty_rent = registers[6]
                rent_date = registers[7]
                return_date = registers[8]
                update_date = registers[10]
                user_id = registers[11]

                print(f"Código do DVD ou Jogo Alugado: {id_emprestimo}")
                print(f"Nome do Cliente: {customer_name.title()} ")
                print(f"Nome do Dvd ou Jogo: {name_dvd_game.title()}")
                print(f"Quantidade de dias Emprestado: {qty_days_rent}")
                print(f"Valor Diário: {daily_value}")
                print(f"Valor Total: {total_value}")
                print(f"Quantidade de Dvd ou Jogo emprestado: {qty_rent}")
                print(f"Data do Aluguel: {rent_date}")
                print(f"Data de Devolução: {return_date}")
                print(f"Data da Atualização: {update_date} ")
                print(
                    f"Código Do Usuário que Realizou a Última Atualização: {user_id}"
                )
                print("_" * 80)

            if len(registers) > 1:
                print("Quantidade de jogos e dvds alugados no Total: {0} ".
                      format(len(datas)))

            elif len(registers) == 1:
                print("Você tem somente um jogo ou dvd alugado no Total.")

            else:
                print("Não possui nenhum dvd ou jogo alugado no Total.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a consulta")
        finally:
            self.close_connection()

    def search_rent_dvd_game(self, customer_name, name_dvd_game):
        try:
            sql = "SELECT * FROM DVD_JOGOS_ALUGADO_V WHERE UPPER(NOME_CLIENTE) LIKE '%{0}%' OR" \
                  " ((UPPER(NOME_DVD_JOGO) LIKE '%{1}%')IS NULL AND 1 = 1);"\
                .format(customer_name.upper(), name_dvd_game.upper())
            self.cursor.execute(sql)
            register = self.cursor.fetchall()

            if register is not None:
                print("_" * 40)
                print("\t \t \t  Dvd ou Jogos Alugado")
                print("_" * 40)
                for registers in register:
                    id_emprestimo = registers[0]
                    name_dvd_game = registers[1]
                    customer_name = registers[2]
                    qty_days_rent = registers[3]
                    daily_value = registers[4]
                    total_value = registers[5]
                    qty_rent = registers[6]
                    rent_date = registers[7]
                    return_date = registers[8]
                    update_date = registers[10]
                    user_id = registers[11]

                    print(f"Código do DVD ou Jogo Alugado: {id_emprestimo}")
                    print(f"Nome do Cliente: {customer_name.title()} ")
                    print(f"Nome do Dvd ou Jogo: {name_dvd_game.title()}")
                    print(f"Quantidade de dias Emprestado: {qty_days_rent}")
                    print(f"Valor Diário: {daily_value}")
                    print(f"Valor Total: {total_value}")
                    print(f"Quantidade de Dvd ou Jogo emprestado: {qty_rent}")
                    print(f"Data do Empréstimo: {rent_date}")
                    print(f"Data de Devolução: {return_date}")
                    print(f"Data de Atualização: {update_date} ")
                    print(
                        f"Código Do Usuário que Realizou a Última Atualização: {user_id}"
                    )
                    print("_" * 40)

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar a alteração")
        finally:
            self.close_connection()

    def report_rent_dvd_game(self, start_date, end_date):
        try:
            datas_write = []
            sql = "SELECT  ID_EMP_DVD_JOGO,NOME_FUNCIONARIO,NOME_CLIENTE,NOME_DVD_JOGO,QTDE_DIAS_EMPR,VALOR_DIARIA" \
                  ",VALOR_TOTAL,DATA_EMPRESTIMO,DATA_DEVOLUCAO,DATA_CRIACAO,DATA_ATUALIZACAO " \
                  "FROM HISTORICO_EMPRESTIMO_DVD_JOGO_V" " WHERE 1 = 1 " \
                  "AND DATA_EMPRESTIMO BETWEEN  '{0}'" "AND  '{1}';".format(start_date, end_date)
            self.cursor.execute(sql)
            datas = self.cursor.fetchall()

            if datas is not None:
                print("_" * 80)
                print("\t \t \t Relatório de Empréstimo")
                print("Parâmetros")
                if start_date is not None:
                    print(f"Data Inicial: {start_date}")

                if end_date is not None:
                    print(f"Data Final: {end_date}")

                print("_" * 80)
                for result in datas:
                    datas_write.append(
                        "Código do Empréstimo do DVD ou Jogo: {0}\n".format(
                            result[0]))
                    datas_write.append(
                        "Nome do Funcionário que realizou o Empréstimo: {0}\n".
                        format(result[1].title()))
                    datas_write.append("Nome do Cliente: {0}\n".format(
                        result[2].title()))
                    datas_write.append("Nome do DVD ou Jogo: {0}\n".format(
                        result[3].title()))
                    datas_write.append(
                        "Quantidade de Dias Emprestado: {0}\n".format(
                            result[4]))
                    datas_write.append("Valor da Diária: {0}\n".format(
                        result[5]))
                    datas_write.append("Valor Total: {0}\n".format(result[6]))
                    datas_write.append("Data do Empréstimo: {0}\n".format(
                        result[7]))
                    datas_write.append("Data da Devolução: {0}\n".format(
                        result[8]))
                    datas_write.append(
                        "Data da Criação deste  registro: {0}\n".format(
                            result[9]))
                    datas_write.append(
                        "Data da última atualização deste registro: {0}\n".
                        format(result[10]))
                    datas_write.append("_" * 80 + "\n")

                if len(datas) > 1:
                    datas_write.append(
                        "Quantidade de Registros Retornados: {0} registros.\n".
                        format(len(datas)))

                else:
                    datas_write.append(
                        "Quantidade de Registros Retornados: {0} registro.\n".
                        format(len(datas)))

                for read_datas in datas_write:
                    print(read_datas)

                return datas_write

            else:
                print("_" * 80)
                print("Não existe dados para esses parânetros.")
                if start_date is not None:
                    print(f"Data Inicial: {start_date}")

                if end_date is not None:
                    print(f"Data Final: {end_date}")

        except ():
            print("_" * 80)
            print("Erro em geral ao tentar executar a procedure do relatório.")

        finally:
            self.close_connection()
class Customer(Connection):

    global date_hour
    date_hours = DateHourNow()
    date_hour = date_hours.get_date_hour_now()

    def validate_number_cpf(self, cpf):
        try:
            sql = f"SELECT VALIDAR_CPF_F('{cpf}');"
            self.cursor.execute(sql)
            cpf_validate = self.cursor.fetchone()

            if cpf_validate is not None:
                return cpf_validate[0]
            else:
                return None
        except():
            print("_"*80)
            print("Erro ao tentar chamar a função de validar o CPF.")
            self.close_connection()

    def return_id(self, cpf):
        try:
            select_customer_id = "SELECT ID_CLIENTE FROM CLIENTE WHERE CPF = '{0}';".format(cpf)
            self.cursor.execute(select_customer_id)
            customer_id = self.cursor.fetchone()

            if customer_id is not None:
                return customer_id[0]
            else:
                return None

        except():
            print("_"*80)
            print("Erro ao recuperar o ID do Cliente.")
            self.close_connection()

    def check_rg(self, rg):
        try:
            rg = rg.replace(".", "")
            rg = rg.replace("-", "")

            sql = "SELECT RG FROM CLIENTE WHERE RG = '{0}';".format(rg)
            self.cursor.execute(sql)
            rg = self.cursor.fetchone()

            if rg is not None:
                return rg

            else:
                return None

        except():
            print("_"*80)
            print("Erro ao Tentar Checar o Número do RG.")
            self.close_connection()

    def insert(self, datas=[]):
        try:
            checking_rg = self.check_rg(datas[8])
            customer_id = self.return_id(datas[9])

            if customer_id is None and checking_rg is None:
                sql = ("INSERT INTO CLIENTE(NOME,IDADE,RUA,NUMERO,COMPLEMENTO,CEP,TELEFONE,CELULAR,RG,CPF,DATA_CRIACAO,"
                       "DATA_ATUALIZACAO, ID_USUARIO)"
                       "VALUES('{0}',{1},'{2}','{3}','{4}'" 
                       ",'{5}','{6}','{7}','{8}','{9}','{10}','{11}',{12});".
                       format(datas[0], datas[1], datas[2], datas[3], datas[4], datas[5], datas[6], datas[7],
                              datas[8], datas[9], date_hour, date_hour, datas[10]))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Registro do Cliente: {0} foi cadastrado com sucesso." .format(datas[0]))

            elif customer_id is not None:
                print("_" * 80)
                print(f"Já Existe um Cliente usando este CPF: "
                      f"{datas[9]} já está cadastrado no sistema, por favor verifique! ")

            elif checking_rg is not None:
                print("_"*80)
                print(f"Este RG: {datas[8]} já está sendo usado por um Usuário no Sistema, por favor verifique!")

            elif customer_id is not None and checking_rg is not None:
                print("_"*80)
                print("Já existe um Cliente Utilizando tanto este CPF quanto este RG.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o insert na tabela de Cliente")
        finally:
            self.close_connection()

    def update_name(self, cpf, name, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET NOME = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(name, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Nome do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_age(self, cpf, age, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET IDADE = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(age, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A Idade do cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_street(self, cpf, street, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET RUA = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(street, date_hour,  user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Nome da Rua do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_number(self, cpf, number, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET NUMERO = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(number, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Número da Rua do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_complement(self, cpf, complement, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET COMPLEMENTO = '{0}' , DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(complement, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Complemento do Endereço do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_cep(self, cpf, cep, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET CEP = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(cep, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O CEP do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_telephone(self, cpf, telephone, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET TELEFONE = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(telephone, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Telefone do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_cellphone(self, cpf, cellphone, user_id):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET CELULAR = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(cellphone, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Número do Celular do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_rg(self, cpf, rg, user_id):
        try:
            customer_id = self.return_id(cpf)
            check_rg = self.check_rg(rg)

            if customer_id is not None and check_rg is None:
                sql = ("UPDATE CLIENTE "
                       "SET RG = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(rg, date_hour, user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Número do RG do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def update_cpf(self, cpf_current, cpf_changed, user_id):
        try:
            customer_id = self.return_id(cpf_current)

            if customer_id is not None:
                sql = ("UPDATE CLIENTE "
                       "SET CPF = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2} "
                       "WHERE 1 = 1 AND ID_CLIENTE = {3}; "
                       .format(cpf_changed, date_hour,  user_id, customer_id))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Número do CPF do Cliente foi alterado com sucesso ")

            else:
                print("_" * 80)
                print("Este Cliente não está cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o update na tabela de Cliente.")
        finally:
            self.close_connection()

    def delete(self, cpf):
        try:
            customer_id = self.return_id(cpf)

            if customer_id is not None:
                sql = ("DELETE FROM CLIENTE WHERE ID_CLIENTE = {0};".format(customer_id))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O cliente foi deletado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe registro para este cliente.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o delete na tabela de Cliente.")
        finally:
            self.close_connection()

    def select_all(self):
        try:
            sql = "SELECT * FROM CLIENTES_CADASTRADOS ORDER BY NOME,ID_CLIENTE;"
            self.cursor.execute(sql)
            registers_all = self.cursor.fetchall()

            print("\t \t \t Clientes")
            print("_" * 80)
            for registers in registers_all:
                customer_id = registers[0]
                name = registers[1]
                age = registers[2]
                street = registers[3]
                number = registers[4]
                complement = registers[5]
                cep = registers[6]
                telephone = registers[7]
                cellphone = registers[8]
                rg = registers[9]
                cpf = registers[10]
                create_date = registers[11]
                update_date = registers[12]
                user_id = registers[13]

                print(f"Código do Cliente: {customer_id} ")
                print(f"Nome do Cliente: {name.title()}")
                print(f"Idade: {age}")
                print(f"Rua: {street.title()}")
                print(f"Número: {number}")

                if complement is None:
                    print(f"Complemento: {complement}")
                else:
                    print(f"Complemento: {complement.title()}")

                print(f"CEP: {cep}")
                print(f"Telefone: {telephone}")
                print(f"Celular: {cellphone}")
                print(f"RG: {rg}")
                print(f"CPF: {cpf}")
                print(f"Data de Criação: {create_date}")
                print(f"Data de Alteração: {update_date}")
                print(f"Código Do Usuário que Realizou a Última Atualização: {user_id}")
                print("_" * 80)

            if len(registers_all) > 1:
                print(f"Quantidade de Clientes Cadastrados: {len(registers_all)} ")

            elif len(registers_all) == 1:
                print(f"Você tem somente 1 cliente cadastrado: {len(registers_all)} ")

            else:
                print("Nenhum cliente cadastrado.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar o select na tabela de Cliente.")
        finally:
            self.close_connection()

    def search_customer(self, name):
        try:
            sql = f"SELECT * FROM CLIENTES_CADASTRADOS WHERE UPPER(NOME) LIKE '%{name.upper()}%' ORDER BY NOME;"
            self.cursor.execute(sql)
            datas = self.cursor.fetchall()
            if datas is not None:
                print("_" * 80)
                for registers in datas:
                    customer_id = registers[0]
                    name = registers[1]
                    age = registers[2]
                    street = registers[3]
                    number = registers[4]
                    complement = registers[5]
                    cep = registers[6]
                    telephone = registers[7]
                    cellphone = registers[8]
                    rg = registers[9]
                    cpf = registers[10]
                    create_date = registers[11]
                    update_date = registers[12]
                    user_id = registers[13]

                    print(f"Código do Cliente: {customer_id} ")
                    print(f"Nome do Cliente: {name.title()}")
                    print(f"Idade: {age}")
                    print(f"Rua: {street.title()}")
                    print(f"Número: {number}")

                    if complement is None:
                        print(f"Complemento: {complement}")
                    else:
                        print(f"Complemento: {complement.title()}")

                    print(f"CEP: {cep}")
                    print(f"Telefone: {telephone}")
                    print(f"Celular: {cellphone}")
                    print(f"RG: {rg}")
                    print(f"CPF: {cpf}")
                    print(f"Data de Criação: {create_date}")
                    print(f"Data de Alteração: {update_date}")
                    print(f"Código Do Usuário que Realizou a Última Atualização: {user_id}")
                    print("_" * 80)

                if len(datas) > 1:
                    print(f"Quantidade de Clientes Cadastrados: {len(datas)} ")

                elif len(datas) == 1:
                    print(f"Você tem somente 1 cliente cadastrado: {len(datas)} ")

                else:
                    print("Nenhum cliente cadastrado.")

        except():
            print("_" * 80)
            print("Erro ao tentar realizar a busca pelo o cliente{0}".format(name))
        finally:
            self.close_connection()
class EmployeeMenu(Employee):

    global validate, date_get
    validate = Validate()
    date_get = DateHourNow()

    def employee_menu(self, user_id):
        print("_"*80)
        choose = input("\t \t \t Menu de Funcionários\n\n " + "_"*80 + "\n "
                       "1º Consultar Todos os Funcionários Cadastrados\n 2º Pesquisar por um Funcionário\n "
                       "3º Cadastrar um Novo Funcionário\n 4º Alterar Dados de um Funcionário\n "
                       "5º Excluir um Funcionário\n 6º Sair do Sistema\n Escolha a sua opção --> ")
        while choose not in("1", "2", "3", "4", "5", "6"):
            validate.validate_text_while()
            choose = input("\t \t \t Menu de Funcionários\n\n " + "_" * 80 + "\n "
                           "1º Consultar Todos os Funcionários Cadastrados\n 2º Pesquisar por um Funcionário\n "
                           "3º Cadastrar um Novo Funcionário\n 4º Alterar Dados de um Funcionário\n "
                           "5º Excluir um Funcionário\n 6º Sair do Sistema\n Escolha a sua opção --> ")

        if choose == "1":
            self.select_all_employee()

        elif choose == "2":
            self.search_for_employee()

        elif choose == "3":
            self.insert_employee(user_id)

        elif choose == "4":
            self.update_datas_employee(user_id)

        elif choose == "5":
            self.delete_employee()

        elif choose == "6":
            print("_"*80)
            print("Saindo do Sistema...")
            exit()

    def insert_employee(self, user_id):
        datas_employee = []
        gross_salary_format = 0
        print("_"*80)
        name_employee = input("Digite o Nome do Novo Funcionário: ")
        while name_employee is "" or name_employee.isdigit():
            print("_"*80)
            print("Por favor Preencha o Nome do Funcionário.")
            name_employee = input("Digite o Nome do Novo Funcionário: ")

        birthday = input("Digite a Data de Nascimento: ")
        birthday_validate = validate.validation_date_insert(birthday)
        while birthday_validate is None:
            print("_"*80)
            print("Por Favor Digite uma Data de Nascimento válida.")
            birthday = input("Digite a Data de Nascimento: ")
            birthday_validate = validate.validation_date_insert(birthday)

        age = input("Digite a Idade do Funcionário: ")
        while age.isdigit() is False:
            print("_"*80)
            print("Por Favor Digite a Idade do Funcionário Corretamente.")
            age = input("Digite a Idade do Funcionário: ")

        sex = input("Digite o Sexo do Funcionário: ")
        sex = sex.title()

        if sex is "":
            sex = "M"
            sex_validate = sex

        else:
            while sex not in("Masculino", "Feminino"):
                print("_"*80)
                print("Por Favor Digite o Sexo do Funcionário Corretamente.")
                sex = input("Digite o Sexo do Funcionário: ")
                sex = sex.title()

            if sex == "Feminino":
                sex_validate = "F"

            else:
                sex_validate = "M"

        rg = input("Digite o Número do RG do Funcionário: ")
        rg = rg.replace(".", "")
        rg = rg.replace("-", "")
        check_rg = self.check_rg(rg)
        while rg.isdigit() is False or len(rg) != 9 or check_rg is not None:
            print("_" * 80)
            print("Por favor digite o Número do RG do Funcionário corretamente ou\n"
                  "Este RG já está sendo usado no Sistema.")
            rg = input("Digite o Número do RG do Cliente: ")
            rg = rg.replace(".", "")
            rg = rg.replace("-", "")
            check_rg = self.check_rg(rg)

        cpf = input("Digite o Número do CPF do Funcionário: ")
        cpf = cpf.replace(".", "")
        cpf = cpf.replace("-", "")
        cpf_validate = self.return_id(cpf)
        analsying_cpf = validate.validate_number_cpf_employee(cpf)
        while cpf.isdigit() is False or len(cpf) != 11 or cpf_validate is not None or analsying_cpf == 0:
            print("_" * 80)
            print("Por favor digite o Número do CPF do Funcionário corretamente ou\n"
                  "Este CPF já está sendo usado no Sistema.")
            cpf = input("Digite o Número do CPF do Cliente: ")
            cpf = cpf.replace(".", "")
            cpf = cpf.replace("-", "")
            cpf_validate = self.return_id(cpf)
            analsying_cpf = validate.validate_number_cpf_employee(cpf)

        telephone = input("Digite o Número do Telefone do Funcionário: ")
        telephone = telephone.replace(".", "")
        telephone = telephone.replace("-", "")
        telephone = telephone.replace("/", "")
        if telephone is "":
            telephone = None

        else:
            while telephone.isdigit() is False:
                print("_"*80)
                print("Por Favor Digite o Número do Telefone corretamente.")
                telephone = input("Digite o Número do Telefone do Funcionário: ")
                telephone = telephone.replace(".", "")
                telephone = telephone.replace("-", "")
                telephone = telephone.replace("/", "")

        cellphone = input("Digite o Número do Celular do Funcionário: ")
        cellphone = cellphone.replace(".", "")
        cellphone = cellphone.replace("-", "")
        cellphone = cellphone.replace("/", "")
        if cellphone is "":
            cellphone = None

        else:
            while cellphone.isdigit() is False or cellphone.count("9") == 0:
                print("_"*80)
                print("Por Favor Digite o Número do Celular corretamente.")
                cellphone = input("Digite o Número do Celular do Funcionário: ")
                cellphone = cellphone.replace(".", "")
                cellphone = cellphone.replace("-", "")
                cellphone = cellphone.replace("/", "")

        street = input("Digite o Nome da Rua do Funcionário: ")
        street = street.title()
        while street is "":
            print("_"*80)
            print("Por Favor Digite o Nome da Rua.")
            street = input("Digite o Nome da Rua do Funcionário: ")
            street = street.title()

        number = input("Digite o Número da Casa do Funcionário: ")
        while number.isdigit() is False:
            print("_"*80)
            print("Por Favor Digite o Número da Casa do Funcionário.")
            number = input("Digite o Número da Casa do Funcionário: ")

        complement = input("Digite o Complemento do Endereço do Funcionário: ")
        if complement is "":
            complement = None

        cep = input("Digite o CEP do Funcionário: ")
        cep = cep.replace(".", "").replace("-", "").replace("/", "").replace("\\", "")
        while cep.isdigit() is False or cep is "" or len(cep) != 8:
            print("_"*80)
            print("Por favor digite o CEP do Funcionário corretamente.")
            cep = input("Digite o CEP do Funcionário: ")
            cep = cep.replace(".", "").replace("-", "").replace("/", "").replace("\\", "")

        qty_days = input("Digite a Quantidade de Dias que o Funcionário Irá Trabalhar: ")
        if qty_days is "":
            qty_days = "6"
        else:
            while qty_days.isdigit() is False or qty_days == "0":
                print("_"*80)
                print("Por Favor Digite Um Valor Válido Para Quantidade de Dias trabalhados.")
                qty_days = input("Digite a Quantidade de Dias que o Funcionário Irá Trabalhar: ")

        entry_time = input("Digite a Horário de Entrada do Funcionário: ")
        entry_time_format = validate.validate_schedule(entry_time)
        if entry_time_format is None:
            entry_time_format = str("09:00:00")

        departure_hour = input("Digite o Horário de Saída do Funcionário: ")
        departure_hour_format = validate.validate_schedule(departure_hour)
        if departure_hour_format is None:
            departure_hour_format = str("18:00:00")

        gross_salary = input("Digite o valor do Salário Bruto do Funcionário: ")
        gross_salary = gross_salary.replace(",", ".")

        if gross_salary is "":
            gross_salary = "500"
            gross_salary_format = gross_salary

        else:
            try:
                gross_salary_format = float(gross_salary)

            except ValueError:
                print("_"*80)
                print("Por Favor Digite Somente Números.")

        job_role = input("Digite o Cargo Do Funcionário: ")
        job_role = job_role.title()
        if job_role is "":
            job_role = "Atendente"

        vt = input("O Funcionário Irá Usar Vale Transporte (S - Sim / N - Não): ")
        vt = vt.upper()
        if vt is "":
            vt = "Y"

        else:
            if vt == "S":
                vt = "Y"

            else:
                while vt not in("Y", "N"):
                    print("_"*80)
                    print("Por Favor Digite Apenas as Opções (S - Sim ou N - Não): ")
                    vt = input("O Funcionário Irá Usar Vale Transporte (S - Sim / N - Não): ")
                    vt = vt.upper()

        employee_get_set = EmployeeGetSet(name_employee, birthday_validate, int(age), sex_validate, rg, cpf,
                                          telephone, cellphone, street, number, complement, cep, int(qty_days),
                                          entry_time_format, departure_hour_format, gross_salary_format, job_role, vt
                                          , user_id)

        datas_employee.append(employee_get_set.name)
        datas_employee.append(employee_get_set.birthday)
        datas_employee.append(employee_get_set.age)
        datas_employee.append(employee_get_set.sex)
        datas_employee.append(employee_get_set.rg)
        datas_employee.append(employee_get_set.cpf)
        datas_employee.append(employee_get_set.telephone)
        datas_employee.append(employee_get_set.cellphone)
        datas_employee.append(employee_get_set.street)
        datas_employee.append(employee_get_set.number)
        datas_employee.append(employee_get_set.complement)
        datas_employee.append(employee_get_set.cep)
        datas_employee.append(employee_get_set.quantity_days)
        datas_employee.append(employee_get_set.entry_hour)
        datas_employee.append(employee_get_set.departure_hour)
        datas_employee.append(employee_get_set.salary)
        datas_employee.append(employee_get_set.job_role)
        datas_employee.append(employee_get_set.vt)
        datas_employee.append(employee_get_set.user_id)

        self.insert(datas_employee)

    def update_datas_employee(self, user_id):
        print("_" * 80)
        choice = input("\t \t \t Menu de Alterações de Dados de Funcionário\n\n " + "_"*80 + "\n "
                       "1º Alterar o Nome\n 2º Alterar a Data de Nascimento\n 3º Alterar a Idade\n 4º Alterar o Sexo\n"
                       " 5º Alterar o RG\n 6º Alterar o CPF\n 7º Alterar o Telefone\n "
                       "8º Alterar o Celular\n 9º Alterar a Rua\n "
                       "10º Alterar o Número do Endereço\n 11º Alterar o Complemento do Endereço\n 12º Alterar o CEP\n"
                       " 13º Alterar a Quantidade de Dias a Trabalhar por Semana\n 14º Alterar o Horário de Entrada\n"
                       " 15º Alterar o Horário de Saída\n 16º Alterar o Salário Bruto\n "
                       "17º Alterar o Cargo do Funcionário\n"
                       " 18º Alterar Se o Funcionário Utiliza Vale Transporte(VT)\n 19º Sair do Sistema\n"
                       " Escolha a sua opção --> ")

        if choice in("1", "2", "3", "4", "5", "6", "7", "8", "9",
                     "10", "11", "12", "13", "14", "15", "16", "17", "18", "19"):

            gross_salary_format = 0
            print("_" * 80)
            cpf_current_employee = validate.validate_employee_cpf()

            if choice == "1":
                name_employee = input("Digite o Nome do Novo Funcionário: ")
                while name_employee is "" or name_employee.isdigit():
                    print("_" * 80)
                    print("Por favor Preencha o Nome do Funcionário.")
                    name_employee = input("Digite o Nome do Novo Funcionário: ")
                self.update_name(cpf_current_employee, name_employee, user_id)

            elif choice == "2":
                birthday = input("Digite a Data de Nascimento: ")
                birthday_validate = validate.validation_date_insert(birthday)
                while birthday_validate is None:
                    print("_" * 80)
                    print("Por Favor Digite uma Data de Nascimento válida.")
                    birthday = input("Digite a Data de Nascimento: ")
                    birthday_validate = validate.validation_date_insert(birthday)
                self.update_birthday(cpf_current_employee, birthday_validate, user_id)

            elif choice == "3":
                age = input("Digite a Idade do Funcionário: ")
                while age.isdigit() is False:
                    print("_" * 80)
                    print("Por Favor Digite a Idade do Funcionário Corretamente.")
                    age = input("Digite a Idade do Funcionário: ")
                self.update_age(cpf_current_employee, age, user_id)

            elif choice == "4":
                sex = input("Digite o Sexo do Funcionário: ")
                sex = sex.title()
                while sex not in ("Masculino", "Feminino"):
                    print("_" * 80)
                    print("Por Favor Digite o Sexo do Funcionário Corretamente.")
                    sex = input("Digite o Sexo do Funcionário: ")
                    sex = sex.title()

                if sex == "Feminino":
                    sex_validate = "F"

                else:
                    sex_validate = "M"
                self.update_sex(cpf_current_employee, sex_validate, user_id)

            if choice == "5":
                rg = input("Digite o Número do RG do Funcionário: ")
                rg = rg.replace(".", "")
                rg = rg.replace("-", "")
                check_rg = self.check_rg(rg)
                while rg.isdigit() is False or len(rg) != 9 or check_rg is not None:
                    print("_" * 80)
                    print("Por favor digite o Número do RG do Funcionário corretamente ou\n"
                          "Este RG já está sendo usado no Sistema.")
                    rg = input("Digite o Número do RG do Cliente: ")
                    rg = rg.replace(".", "")
                    rg = rg.replace("-", "")
                    check_rg = self.check_rg(rg)

                self.update_rg(cpf_current_employee, rg, user_id)

            elif choice == "6":
                print("_"*80)
                cpf_new = input("Digite o Novo Número do CPF do Funcionário: ")
                cpf_new = cpf_new.replace(".", "")
                cpf_new = cpf_new.replace("-", "")
                cpf_validate = self.return_id(cpf_new)
                analsying_cpf = validate.validate_number_cpf_employee(cpf_new)
                while cpf_new.isdigit() is False or len(cpf_new) != 11 or \
                        cpf_validate is not None or analsying_cpf == 0:
                    print("_" * 80)
                    print("Por favor digite o Número do CPF do Funcionário corretamente ou\n"
                          "Este CPF já está sendo usado no Sistema.")
                    cpf_new = input("Digite o Novo Número do CPF do Cliente: ")
                    cpf_new = cpf_new.replace(".", "")
                    cpf_new = cpf_new.replace("-", "")
                    cpf_validate = self.return_id(cpf_new)
                    analsying_cpf = validate.validate_number_cpf_employee(cpf_new)

                self.update_cpf(cpf_current_employee, cpf_new, user_id)

            elif choice == "7":
                telephone = input("Digite o Número do Telefone do Funcionário: ")
                telephone = telephone.replace(".", "")
                telephone = telephone.replace("-", "")
                telephone = telephone.replace("/", "")
                while telephone.isdigit() is False:
                    print("_" * 80)
                    print("Por Favor Digite o Número do Telefone corretamente.")
                    telephone = input("Digite o Número do Telefone do Funcionário: ")
                    telephone = telephone.replace(".", "")
                    telephone = telephone.replace("-", "")
                    telephone = telephone.replace("/", "")
                self.update_telephone(cpf_current_employee, telephone, user_id)

            elif choice == "8":
                cellphone = input("Digite o Número do Celular do Funcionário: ")
                cellphone = cellphone.replace(".", "")
                cellphone = cellphone.replace("-", "")
                cellphone = cellphone.replace("/", "")
                while cellphone.isdigit() is False or cellphone[0].count("9") == 0:
                    print("_" * 80)
                    print("Por Favor Digite o Número do Celular corretamente.")
                    cellphone = input("Digite o Número do Celular do Funcionário: ")
                    cellphone = cellphone.replace(".", "")
                    cellphone = cellphone.replace("-", "")
                    cellphone = cellphone.replace("/", "")
                self.update_cellphone(cpf_current_employee, cellphone, user_id)

            elif choice == "9":
                street = input("Digite o Nome da Rua do Funcionário: ")
                street = street.title()
                while street is "":
                    print("_" * 80)
                    print("Por Favor Digite o Nome da Rua.")
                    street = input("Digite o Nome da Rua do Funcionário: ")
                    street = street.title()
                self.update_street(cpf_current_employee, street, user_id)

            elif choice == "10":
                number = input("Digite o Número da Casa do Funcionário: ")
                while number.isdigit() is False or number == "0":
                    print("_" * 80)
                    print("Por Favor Digite o Número da Casa do Funcionário.")
                    number = input("Digite o Número da Casa do Funcionário: ")
                self.update_number_street(cpf_current_employee, number, user_id)

            elif choice == "11":
                complement = input("Digite o Complemento do Endereço do Funcionário: ")
                while complement is "":
                    print("_"*80)
                    print("Por Favor Digite um Complemento para O Endereço.")
                    complement = input("Digite o Complemento do Endereço do Funcionário: ")
                self.update_complement(cpf_current_employee, complement, user_id)

            elif choice == "12":
                cep = input("Digite o CEP do Funcionário: ")
                cep = cep.replace(".", "").replace("-", "").replace("/", "").replace("\\", "")
                while cep.isdigit() is False or cep is "" or len(cep) != 8:
                    print("_" * 80)
                    print("Por favor digite o CEP do Funcionário corretamente.")
                    cep = input("Digite o CEP do Funcionário: ")
                    cep = cep.replace(".", "").replace("-", "").replace("/", "").replace("\\", "")
                self.update_cep(cpf_current_employee, cep, user_id)

            elif choice == "13":
                qty_days = input("Digite a Quantidade de Dias que o Funcionário Irá Trabalhar: ")
                while qty_days.isdigit() is False or qty_days == "0":
                    print("_" * 80)
                    print("Por Favor Digite Um Valor Válido Para Quantidade de Dias trabalhados.")
                    qty_days = input("Digite a Quantidade de Dias que o Funcionário Irá Trabalhar: ")
                self.update_qty_days(cpf_current_employee, qty_days, user_id)

            elif choice == "14":
                entry_time = input("Digite a Horário de Entrada do Funcionário: ")
                entry_time_format = validate.validate_schedule(entry_time)
                while entry_time_format is None:
                    print("_"*80)
                    print("Por Favor Digite Um Horário de Entrada válido.")
                    entry_time = input("Digite a Data de Entrada do Funcionário: ")
                    entry_time_format = validate.validate_schedule(entry_time)
                self.update_entry_hour(cpf_current_employee, entry_time_format, user_id)

            elif choice == "15":
                departure_hour = input("Digite o Horário de Saída do Funcionário: ")
                departure_hour_format = validate.validate_schedule(departure_hour)
                while departure_hour_format is None:
                    print("_"*80)
                    print("Por Favor Digite um Horário de Saída válido.")
                    departure_hour = input("Digite o Horário de Saída do Funcionário: ")
                    departure_hour_format = validate.validate_schedule(departure_hour)
                self.update_departure_hour(cpf_current_employee, departure_hour_format, user_id)

            elif choice == "16":
                gross_salary = input("Digite o valor do Salário Bruto do Funcionário: ")
                gross_salary = gross_salary.replace(",", ".")

                while gross_salary is "":
                    print("_"*80)
                    print("Por Favor Digite o Valor Do Salário Bruto Corretamente.")
                    gross_salary = input("Digite o valor do Salário Bruto do Funcionário: ")
                    gross_salary = gross_salary.replace(",", ".")

                try:
                    gross_salary_format = float(gross_salary)
                    self.update_salary(cpf_current_employee, gross_salary_format, user_id)
                except ValueError:
                    print("_" * 80)
                    print("Por Favor Digite Somente Números.")

            elif choice == "17":
                job_role = input("Digite o Cargo Do Funcionário: ")
                job_role = job_role.title()
                while job_role is "":
                    print("_"*80)
                    print("Por Favor Digite O Cargo Do Funcionário Corretamente.")
                    job_role = input("Digite o Cargo Do Funcionário: ")
                    job_role = job_role.title()
                self.update_job_role(cpf_current_employee, job_role, user_id)

            elif choice == "18":
                vt = input("O Funcionário Irá Usar Vale Transporte (S - Sim / N - Não): ")
                vt = vt.upper()
                while vt not in ("S", "N"):
                    print("_" * 80)
                    print("Por Favor Digite Apenas as Opções (S - Sim ou N - Não): ")
                    vt = input("O Funcionário Irá Usar Vale Transporte (S - Sim / N - Não): ")
                    vt = vt.upper()
                if vt == "S":
                    vt = "Y"
                self.update_vt(cpf_current_employee, vt, user_id)

            elif choice == "19":
                print("_"*80)
                print("Saindo do Sistema...")
                exit()

        else:
            print("_"*80)
            print("Opção inválida.")

    def delete_employee(self):
        print("_"*80)
        cpf_validate = validate.validate_employee_cpf()
        confirm = input("Deseja Realmente Excluir este Registro ? (S - Sim / N - Não): ")
        confirm = confirm.upper()
        if confirm == "S":
            self.delete(cpf_validate)

        else:
            print("_"*80)
            print("O Registro não foi deletado.")
            print("Saindo do Sistema.")

    def select_all_employee(self):
        print("_" * 80)
        self.select_all()

    def search_for_employee(self):
        print("_" * 80)
        options = input("\t \t \t Escolha Por qual campo buscar o Funcionário \n 1º Buscar por Nome\n "
                        "2º Buscar pelo o Código do Funcionário\n Escolha a sua opção --> ")

        while options not in("1", "2"):
            validate.validate_text_while()
            options = input("\t \t \t Escolha Por qual campo buscar o Funcionário \n 1º Buscar por Nome\n "
                            "2º Buscar pelo o Código do Funcionário\n Escolha a sua opção --> ")

        print("_"*80)
        if options is "1":
            name_employee = input("Digite o nome do Funcionário: ")
            while name_employee is "":
                print("_"*80)
                print("Por favor digite o Nome do Funcionário.")
                name_employee = input("Digite o nome do Funcionário: ")
            self.search_employee(name_employee)

        elif options is "2":
            id_employee = input("Digite o Código do Funcionário: ")
            while id_employee.isdigit() is False:
                print("_" * 80)
                print("Por favor digite o Código do Funcionário.")
                id_employee = input("Digite o Código do Funcionário: ")
            self.search_id_func(id_employee)
class Employee(Connection):

    global date_hour
    now = DateHourNow()
    date_hour = now.get_date_hour_now()

    @staticmethod
    def validate_number_cpf(cpf):
        validate_number_cpf = Customer()
        cpf_number_validate = validate_number_cpf.validate_number_cpf(cpf)
        return cpf_number_validate

    def return_id(self, cpf):
        try:
            sql = "SELECT ID_FUNC FROM FUNCIONARIO WHERE CPF = '{0}';".format(cpf)
            self.cursor.execute(sql)
            id_func = self.cursor.fetchone()

            if id_func is not None:
                return id_func[0]

            else:
                return None

        except():
            print("_"*80)
            print("Erro ao tentar recuperar os dados do funcionário.")

    def return_job_rule(self, cpf):
        id_func = self.return_id(cpf)
        sql = "SELECT RETORNA_CARGO_F({0})".format(id_func)
        self.cursor.execute(sql)
        job_rule = self.cursor.fetchone()

        if job_rule is not None:
            return job_rule[0]

        else:
            return None

    def check_rg(self, rg):
        try:
            rg = rg.replace(".", "")
            rg = rg.replace("-", "")

            sql = "SELECT RG FROM FUNCIONARIO WHERE RG = '{0}';".format(rg)
            self.cursor.execute(sql)
            rg = self.cursor.fetchone()

            if rg is not None:
                return rg

            else:
                return None

        except():
            print("_"*80)
            print("Erro ao Tentar Checar o Número do RG.")
            self.close_connection()

    def insert(self, datas=[]):
        try:
            id_func = self.return_id(datas[5])
            check_rg = self.check_rg(datas[4])

            if id_func is None and check_rg is None:
                sql = ("INSERT INTO FUNCIONARIO(NOME,DATA_NAS,IDADE,SEXO,RG,CPF,TELEFONE,CELULAR,RUA,NUMERO,"
                       "COMPLEMENTO,CEP,QTDE_DIAS,HORARIO_ENTRADA,HORARIO_SAIDA,SALARIO_BRUTO,CARGO,DATA_CRIACAO,"
                       "DATA_ATUALIZACAO,VT, ID_USUARIO)""VALUES('{0}','{1}',{2},'{3}','{4}','{5}','{6}','{7}','{8}',"
                       "'{9}','{10}','{11}',{12}"",'{13}','{14}',{15},'{16}','{17}','{18}','{19}',{20});"
                       .format(datas[0], datas[1], datas[2], datas[3], datas[4], datas[5], datas[6], datas[7],
                               datas[8], datas[9], datas[10], datas[11], datas[12], datas[13], datas[14], datas[15],
                               datas[16], date_hour, date_hour, datas[17], datas[18]))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_"*80)
                print("O Novo Funcionário: {0} foi cadastrado com sucesso.".format(datas[0].title()))

            else:
                print("_"*80)
                print("O registro para o funcionário: {0} já existe cadastrado.".format(datas[0].title()))

        except():
            print("_"*80)
            print("Erro ao tentar cadastrar o novo Funcionário.")

        finally:
            self.close_connection()

    def update_name(self, cpf, name, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET NOME = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(name, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_"*80)
                print("O Nome do Funcionário foi alterado com sucesso.")

            else:
                print("_"*80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_"*80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_birthday(self, cpf, birthday, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET DATA_NAS = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(birthday, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_"*80)
                print("A Data de Nascimento do Funcionário foi alterada com sucesso.")

            else:
                print("_"*80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_"*80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_age(self, cpf, age, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET IDADE = {0}, DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(age, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A Idade do Funcionário foi alterada com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_sex(self, cpf, sex, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET SEXO = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(sex, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Sexo do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_rg(self, cpf, rg, user_id):
        try:
            id_func = self.return_id(cpf)
            check_rg = self.check_rg(rg)

            if id_func is not None and check_rg is None:
                sql = ("UPDATE FUNCIONARIO SET RG = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(rg, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O RG do Cliente foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_cpf(self, cpf_old, cpf_new, user_id):
        try:
            id_func = self.return_id(cpf_old)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET CPF = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(cpf_new, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O CPF do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_telephone(self, cpf, telephone, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET TELEFONE = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(telephone, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Telefone do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_cellphone(self, cpf, cellphone, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET CELULAR = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(cellphone, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Celular do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_street(self, cpf, street, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET RUA = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(street, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(" O Nome da Rua do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_number_street(self, cpf, number, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET NUMERO = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(number, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Número da Rua do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_complement(self, cpf, complement, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET COMPLEMENTO = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(complement, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Complemento do Endereço do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_cep(self, cpf, cep, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET CEP = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(cep, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O CEP do Funcionário  foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_qty_days(self, cpf, qty_days, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET QTDE_DIAS = {0}, DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(qty_days, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Quantidade de Dias na Semana de Trabalho foi alterada com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_entry_hour(self, cpf, entry_hour, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET HORARIO_ENTRADA = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(entry_hour, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Horário de Entrada do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_departure_hour(self, cpf, departure_hour, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET HORARIO_SAIDA = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(departure_hour, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Horário de Saída do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_salary(self, cpf, salary, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET SALARIO_BRUTO = {0}, DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(salary, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Salário do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_vt(self, cpf, vt, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET VT = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(vt, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                if vt is 'Y':
                    print("O Vale Transporte do Funcionário foi alterado com sucesso para sim.")
                else:
                    print("O Vale Transporte do Funcionário foi alterado com sucesso para não.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def update_job_role(self, cpf, job_role, user_id):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = ("UPDATE FUNCIONARIO SET CARGO = '{0}', DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                       " WHERE ID_FUNC = {3};".format(job_role, date_hour, user_id, id_func))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Cargo do Funcionário foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este registro cadastrado no sistema.")

        except():
            print("_" * 80)
            print("Erro ao tentar atualizar está informação do funcionário.")
        finally:
            self.close_connection()

    def delete(self, cpf):
        try:
            id_func = self.return_id(cpf)

            if id_func is not None:
                sql = "DELETE FROM FUNCIONARIO WHERE ID_FUNC = {0};".format(id_func)
                self.cursor.execute(sql)
                self.connection.commit()
                print("_"*80)
                print("O registro foi deletado com sucesso.")

            else:
                print("_"*80)
                print("Não existe esse registro cadastrado no sistema.")

        except():
            print("_"*80)
            print("Erro ao tentar deletar o registro do funcionário.")
        finally:
            self.close_connection()

    def select_all(self):
        try:
            sql = "SELECT * FROM FUNCIONARIOS_CADASTRADOS ORDER BY NOME;"
            self.cursor.execute(sql)
            registers_all = self.cursor.fetchall()

            print("\t \t \t Funcionários")
            print("_"*80)
            for datas in registers_all:
                id_func = datas[0]
                name = datas[1]
                birthday = datas[2]
                age = datas[3]
                sex = datas[4]
                rg = datas[5]
                cpf = datas[6]
                telephone = datas[7]
                cellphone = datas[8]
                street = datas[9]
                number = datas[10]
                complement = datas[11]
                cep = datas[12]
                qtd_days = datas[13]
                entry_time = datas[14]
                departure_time = datas[15]
                job_role = datas[16]
                vl_transp_vourcher = datas[17]
                vl_pay_inss = datas[18]
                salary_gross = datas[19]
                net_salary = datas[20]
                daily_workload = datas[21]
                weekly_worload = datas[22]
                monthly_workoload = datas[23]
                create_date = datas[24]
                update_date = datas[25]
                user_id = datas[26]

                print(f"Código do Funcionário: {id_func}")
                print(f"Nome: {name.title()}")
                print(f"Data de Nascimento: {birthday}")
                print(f"Idade: {age}")

                if sex is "M":
                    print("Sexo: Masculino")

                else:
                    print("Sexo: Feminino")

                print(f"RG: {rg}")
                print(f"CPF: {cpf}")
                print(f"Telefone: {telephone}")
                print(f"Celular: {cellphone}")
                print(f"Rua: {street.title()}")
                print(f"Número: {number}")

                if complement is not None:
                    print(f"Complemento: {complement.title()}")

                else:
                    print(f"Complemento: {complement}")

                print(f"CEP: {cep}")
                print(f"Quantidade de Dias a trabalhar por semana: {qtd_days}")
                print(f"Horário de Entrada: {entry_time}")
                print(f"Horário de Saída: {departure_time}")
                print(f"Salário Bruto: {salary_gross}")
                print(f"Salário Líquido: {net_salary}")
                print(f"Valor Pago por Mês VT: {vl_transp_vourcher}")
                print(f"Valor Pago por Mês INSS: {vl_pay_inss}")
                print(f"Carga Hóraria Diária: {daily_workload} ")
                print(f"Carga Hóraria Semanal: {weekly_worload}")
                print(f"Carga Hóraria Mensal: {monthly_workoload}")
                print(f"Cargo: {job_role.title()}")
                print(f"Data de Criação: {create_date}")
                print(f"Data de Atualização: {update_date}")
                print(f"Código Do Usuário que Realizou a Última Atualização: {user_id}")
                print("_"*80)

            if len(registers_all) > 1:
                print(f"Quantidade de funcionários: {len(registers_all)}")

            elif len(registers_all) == 1:
                print("Você possuí somente um funcionário cadastrado no sistema.")

            else:
                print("Você não possuí nenhum funcionário cadastrado.")

        except():
            print("_"*80)
            print("Erro ao tentar consultar todos os registros de todos os funcionários.")

        finally:
            self.close_connection()

    def search_employee(self, nome):
        try:
            sql = f"SELECT * FROM FUNCIONARIOS_CADASTRADOS WHERE UPPER(NOME) LIKE '%{nome.upper()}%' ORDER BY NOME;"
            self.cursor.execute(sql)
            registers_all = self.cursor.fetchall()

            print("\t \t \t Funcionários")
            print("_" * 80)
            if registers_all is not None:
                for datas in registers_all:
                    id_func = datas[0]
                    name = datas[1]
                    birthday = datas[2]
                    age = datas[3]
                    sex = datas[4]
                    rg = datas[5]
                    cpf = datas[6]
                    telephone = datas[7]
                    cellphone = datas[8]
                    street = datas[9]
                    number = datas[10]
                    complement = datas[11]
                    cep = datas[12]
                    qtd_days = datas[13]
                    entry_time = datas[14]
                    departure_time = datas[15]
                    job_role = datas[16]
                    vl_transp_vourcher = datas[17]
                    vl_pay_inss = datas[18]
                    salary_gross = datas[19]
                    net_salary = datas[20]
                    daily_workload = datas[21]
                    weekly_worload = datas[22]
                    monthly_workoload = datas[23]
                    create_date = datas[24]
                    update_date = datas[25]
                    user_id = datas[26]

                    print(f"Código do Funcionário: {id_func}")
                    print(f"Nome: {name.title()}")
                    print(f"Data de Nascimento: {birthday}")
                    print(f"Idade: {age}")

                    if sex is "M":
                        print("Sexo: Masculino")

                    else:
                        print("Sexo: Feminino")

                    print(f"RG: {rg}")
                    print(f"CPF: {cpf}")
                    print(f"Telefone: {telephone}")
                    print(f"Celular: {cellphone}")
                    print(f"Rua: {street.title()}")
                    print(f"Número: {number}")

                    if complement is not None:
                        print(f"Complemento: {complement.title()}")

                    else:
                        print(f"Complemento: {complement}")

                    print(f"CEP: {cep}")
                    print(f"Quantidade de Dias a trabalhar por semana: {qtd_days}")
                    print(f"Horário de Entrada: {entry_time}")
                    print(f"Horário de Saída: {departure_time}")
                    print(f"Salário Bruto: {salary_gross}")
                    print(f"Salário Líquido: {net_salary}")
                    print(f"Valor Pago por Mês VT: {vl_transp_vourcher}")
                    print(f"Valor Pago por Mês INSS: {vl_pay_inss}")
                    print(f"Carga Hóraria Diária: {daily_workload} ")
                    print(f"Carga Hóraria Semanal: {weekly_worload}")
                    print(f"Carga Hóraria Mensal: {monthly_workoload}")
                    print(f"Cargo: {job_role.title()}")
                    print(f"Data de Criação: {create_date}")
                    print(f"Data de Atualização: {update_date}")
                    print(f"Código Do Usuário que Realizou a Última Atualização: {user_id}")
                    print("_" * 80)

                if len(registers_all) > 1:
                    print(f"Quantidade de funcionários: {len(registers_all)}")

                elif len(registers_all) == 1:
                    print("Você possuí somente um funcionário cadastrado no sistema.")

                else:
                    print("Você não possuí nenhum funcionário cadastrado com este nome.")

        except():
            print("_" * 80)
            print("Erro ao tentar consultar todos os registros de todos os funcionários.")

        finally:
            self.close_connection()

    def search_id_func(self, id_employee):
        try:
            sql = f"SELECT * FROM FUNCIONARIOS_CADASTRADOS WHERE ID_FUNC = {id_employee};"
            self.cursor.execute(sql)
            datas = self.cursor.fetchone()

            print("\t \t \t Funcionários")
            print("_" * 80)
            if datas is not None:
                id_func = datas[0]
                name = datas[1]
                birthday = datas[2]
                age = datas[3]
                sex = datas[4]
                rg = datas[5]
                cpf = datas[6]
                telephone = datas[7]
                cellphone = datas[8]
                street = datas[9]
                number = datas[10]
                complement = datas[11]
                cep = datas[12]
                qtd_days = datas[13]
                entry_time = datas[14]
                departure_time = datas[15]
                job_role = datas[16]
                vl_transp_vourcher = datas[17]
                vl_pay_inss = datas[18]
                salary_gross = datas[19]
                net_salary = datas[20]
                daily_workload = datas[21]
                weekly_worload = datas[22]
                monthly_workoload = datas[23]
                create_date = datas[24]
                update_date = datas[25]
                user_id = datas[26]

                print(f"Código do Funcionário: {id_func}")
                print(f"Nome: {name.title()}")
                print(f"Data de Nascimento: {birthday}")
                print(f"Idade: {age}")

                if sex is "M":
                    print("Sexo: Masculino")

                else:
                    print("Sexo: Feminino")

                print(f"RG: {rg}")
                print(f"CPF: {cpf}")
                print(f"Telefone: {telephone}")
                print(f"Celular: {cellphone}")
                print(f"Rua: {street.title()}")
                print(f"Número: {number}")

                if complement is not None:
                    print(f"Complemento: {complement.title()}")

                else:
                    print(f"Complemento: {complement}")

                print(f"CEP: {cep}")
                print(f"Quantidade de Dias a trabalhar por semana: {qtd_days}")
                print(f"Horário de Entrada: {entry_time}")
                print(f"Horário de Saída: {departure_time}")
                print(f"Salário Bruto: {salary_gross}")
                print(f"Salário Líquido: {net_salary}")
                print(f"Valor Pago por Mês VT: {vl_transp_vourcher}")
                print(f"Valor Pago por Mês INSS: {vl_pay_inss}")
                print(f"Carga Hóraria Diária: {daily_workload} ")
                print(f"Carga Hóraria Semanal: {weekly_worload}")
                print(f"Carga Hóraria Mensal: {monthly_workoload}")
                print(f"Cargo: {job_role.title()}")
                print(f"Data de Criação: {create_date}")
                print(f"Data de Atualização: {update_date}")
                print(f"Código Do Usuário que Realizou a Última Atualização: {user_id}")
                print("_" * 80)

        except():
            print("_" * 80)
            print("Erro ao tentar consultar todos os registros de todos os funcionários.")

        finally:
            self.close_connection()
    def data_load_csv(user_id):
        try:
            datas = []
            cont_linhas = 0
            date_now = DateHourNow()
            date_hour_now = date_now.get_date_hour_now()
            validate_date = Validate()

            list_files = os.listdir(
                'C:\\Users\\joaovpinto\\PycharmProject\\Sistema_Locadora\\Sistema_Locadora'
                '\\Operations_Files\\Directory_Uploads\\CSV')
            name_file = input("Nome do Arquivo sem a extensão: ")
            while name_file is "":
                print("_" * 80)
                print("Por favor digite o nome do arquivo.")
                name_file = input("Nome do Arquivo sem a extensão: ")

            if name_file.count(".csv") == 0:
                name_file = name_file + ".csv"

            if name_file in list_files:
                with open(
                        "C:\\Users\\joaovpinto\\PycharmProject\\Sistema_Locadora\\Sistema_Locadora\\Operations_Files"
                        "\\Directory_Uploads\\CSV\\" + name_file,
                        "r") as ficheiro:
                    reader = csv.reader(ficheiro)
                    next(reader)
                    print("_" * 80)
                    print("\t \t \t Programa de Carga de DVD's e Jogos.")
                    print("Nome do Arquivo: ", name_file)
                    print("Diretório do Arquivo: CSV")
                    print("Data e Horário de Execução do Programa: ",
                          date_hour_now)

                    for line in reader:
                        text = str(line).replace("'", "").replace(
                            "[", "").replace("']", "").replace("[ ", "")

                        name_dvd_game = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        genare = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        classification_age = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        type_media = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        price = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        qty = text[:text.find(";")]
                        text = text[text.find(";") + 1:]

                        datas.insert(0, name_dvd_game)
                        datas.insert(1, genare)
                        datas.insert(2, classification_age)
                        datas.insert(3, type_media)
                        datas.insert(4, price)
                        datas.insert(5, qty)
                        datas.insert(6, int(user_id))

                        print("_" * 80)
                        print("Nome do Dvd ou Jogo: ", name_dvd_game)
                        print("Genêro: ", genare)
                        print("Classificação de Idade: ", classification_age)
                        print("Tipo: ", type_media)
                        print("Preço: ", price)
                        print("Quantidade: ", qty)

                        insert_dvd_game.insert_multiple(datas)
                        cont_linhas += 1

                    print("_" * 80)
                    print("Quantidade de registros cadastrados com sucesso: ",
                          cont_linhas)
                    insert_dvd_game.close_connection()
                    ficheiro.close()

            else:
                print("_" * 80)
                print(
                    f"O Arquivo {name_file} não existe salvo dentro do diretório CSV."
                )
                print("Por favor verifique o diretório!")
                insert_dvd_game.close_connection()

        except csv.Error as e:
            print("_" * 80)
            sys.exit("Ficheiro: {0}\n Linha:{1}\n Erro: e".format(
                ficheiro, reader.line_num, e))
            ficheiro.close()
            insert_dvd_game.close_connection()

        except ():
            print("_" * 80)
            print("Erro ao tentar ler o arquivo: ")
            ficheiro.close()
            insert_dvd_game.close_connection()
Beispiel #9
0
class DvdGame(Connection):

    global date_hour
    now = DateHourNow()
    date_hour = now.get_date_hour_now()

    def check_qtde_dvd_games_avaible(self, id_dvd_jogo):
        try:
            select_qty_dvd_games = "SELECT QTDE FROM DVD_JOGO WHERE ID_DVD_JOGO = {0};".format(
                id_dvd_jogo)
            self.cursor.execute(select_qty_dvd_games)
            qty_dvds_games = self.cursor.fetchone()

            if qty_dvds_games is not None:
                return qty_dvds_games[0]

            else:
                return int(0)

        except ():
            print("_" * 80)
            print(
                "Erro ao tentar recuperar a quantidade de Dvds ou Jogos cadastrados da tabela DVD_JOGOS."
            )

    def return_id(self, nome_dvd_jogo):
        try:
            select_id_dvd_game = "SELECT ID_DVD_JOGO FROM DVD_JOGO WHERE UPPER(NOME) = '{0}';"\
                                .format(nome_dvd_jogo.upper())

            self.cursor.execute(select_id_dvd_game)
            id_dvd_game = self.cursor.fetchone()

            if id_dvd_game is not None:
                return id_dvd_game[0]

            else:
                return None

        except ():
            self.close_connection()
            print("_" * 80)
            print("Erro ao tentar recuperar o registro do id_dvd_game.")

    def insert(self, datas=[]):
        try:
            id_dvd_game = self.return_id(datas[0])

            if id_dvd_game is None:
                sql = (
                    "INSERT INTO DVD_JOGO(NOME,GENERO,CLASSIFICACAO_IDADE,TIPO,PRECO,DATA_FABRICACAO,QTDE"
                    ",DATA_CRIACAO,DATA_ATUALIZACAO, ID_USUARIO)"
                    f"VALUES('{datas[0]}','{datas[1]}',{datas[2]},'{datas[3]}',{datas[4]},"
                    f"'{datas[5]}',{datas[6]},'{date_hour}','{date_hour}',{datas[7]});"
                )

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(
                    "O Registro do (Dvd ou Jogo) foi cadastrado com sucesso.\nNome: {0}"
                    .format(datas[0].title()))
            else:
                print("_" * 80)
                print(
                    "Este DVD ou jogo cujo o nome é: {0} já se encontra cadastrado."
                    .format(datas[0].title()))

        except ():
            print("_" * 80)
            print("Erro ao tentar inserir um novo Dvd ou jogo. ")

        finally:
            self.close_connection()

    def insert_multiple(self, datas=[]):
        try:
            id_dvd_game = self.return_id(datas[0])

            if id_dvd_game is None:
                self.cursor.callproc("INSERT_CARGA_CSV_P", [
                    datas[0], datas[1], datas[2], datas[3], datas[4], datas[5],
                    datas[6]
                ])
                print("_" * 80)
                print(
                    "O Registro do (Dvd ou Jogo) foi cadastrado com sucesso.\nNome: {0}"
                    .format(datas[0].title()))
            else:
                print("_" * 80)
                print(
                    "Este DVD ou jogo cujo o nome é: {0} já se encontra cadastrado."
                    .format(datas[0].title()))

        except ():
            print("_" * 80)
            print("Erro ao tentar inserir um novo Dvd ou jogo. ")
            self.close_connection()

    def update_name(self, name_old, new_name, user_id):
        try:
            id_dvd_game = self.return_id(name_old)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET NOME = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(new_name, date_hour,
                                                       user_id, id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Nome do Dvd ou Jogo foi alterado com sucesso.")

            else:
                print("_" * 80)
                print("Não existe este DVD ou Jogo cadastrado no sistema.")

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_genare(self, name_dvd_game, genare, user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET GENERO = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(genare, date_hour,
                                                       user_id, id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Gênero do DVD ou Jogo foi alterado com sucesso.")

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_classification_age(self, name_dvd_game, classification_age,
                                  user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET CLASSIFICACAO_IDADE = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(classification_age,
                                                       date_hour, user_id,
                                                       id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A Classificação de Idade foi alterada com sucesso.")

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_type_dvd_game(self, name_dvd_game, type_dvd_game, user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET TIPO = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(type_dvd_game,
                                                       date_hour, user_id,
                                                       id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Tipo do DVD ou Jogo foi alterado com sucesso.")

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_price(self, name_dvd_game, price, user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET PRECO = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(price, date_hour,
                                                       user_id, id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("O Preço do DVD ou Jogo foi alterado com sucesso.")

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_fabrication_date(self, name_dvd_game, fabrication_date,
                                user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET DATA_FABRICACAO = '{0}',DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(fabrication_date,
                                                       date_hour, user_id,
                                                       id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(
                    "A Data de Fabricação do DVD ou Jogo foi alterado com sucesso."
                )

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def update_quantity(self, name_dvd_game, quantity, user_id):
        try:
            id_dvd_game = self.return_id(name_dvd_game)
            if id_dvd_game is not None:
                sql = (
                    "UPDATE DVD_JOGO SET QTDE = {0},DATA_ATUALIZACAO = '{1}', ID_USUARIO = {2}"
                    " WHERE ID_DVD_JOGO = {3};".format(quantity, date_hour,
                                                       user_id, id_dvd_game))

                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print("A Quantidade de DVD ou Jogo foi alterado com sucesso.")

            else:
                print("_" * 80)
                print(
                    "Não existe registro do DVD ou Jogo cadastrado no sistema."
                )

        except ():
            print("_" * 80)
            print("Erro ao tentar realizar o update do Dvd Ou Jogo.")
        finally:
            self.close_connection()

    def delete(self, nome_dvd_jogo):
        try:
            id_dvd_game = self.return_id(nome_dvd_jogo)

            if id_dvd_game is not None:
                sql = ("DELETE FROM DVD_JOGO WHERE ID_DVD_JOGO = {0};".format(
                    id_dvd_game))
                self.cursor.execute(sql)
                self.connection.commit()
                print("_" * 80)
                print(
                    "O registro do Dvd Ou Jogo:{0} foi deletado com sucesso.".
                    format(nome_dvd_jogo.title()))

            else:
                print("_" * 80)
                print("Não existe registro pra este Dvd Ou Jogo.")

        except ():
            print("_" * 80)
            print("Erro ao tentar deletar este registro:{0}".format(
                nome_dvd_jogo))
        finally:
            self.close_connection()

    def select_all(self):
        try:
            sql = "SELECT * FROM DVD_JOGOS_V ORDER BY NOME;"
            self.cursor.execute(sql)
            datas = self.cursor.fetchall()

            print("\t \t \t Dvd's e Jogos")
            print("_" * 80)
            for registers in datas:
                id_dvd_jogo = registers[0]
                name = registers[1]
                genare = registers[2]
                classification_age = registers[3]
                type_reg = registers[4]
                price = registers[5]
                date_fab = registers[6]
                date_insert = registers[7]
                quantity = registers[8]
                update_date = registers[10]
                user_id = registers[11]

                print("Código do (Dvd ou Jogo): {0}".format(id_dvd_jogo))
                print("Nome: {0} ".format(name.title()))
                print("Gênero: {0} ".format(genare.title()))
                print(
                    "Classificação de Idade: {0} ".format(classification_age))
                print("Tipo: {0} ".format(type_reg.title()))
                print("Preço: {0} ".format(price))
                print("Data de Fabricação: {0} ".format(date_fab))
                print("Data de Cadastro: {0} ".format(date_insert))
                print("Quantidade: {0} ".format(quantity))
                print("Data de Atualização: {0}".format(update_date))
                print(
                    "Código Do Usuário que Realizou a Última Atualização: {0}".
                    format(user_id))
                print("_" * 80)

            if len(datas) > 1:
                print("Quantidade de registros: {0} ".format(len(datas)))

            elif len(datas) == 1:
                print("Você possuí somente: {0} registro cadastrado. ".format(
                    len(datas)))

            else:
                print("Não existe nenhum dvd ou jogo cadastrado.")

        except ():
            print("_" * 80)
            print("Erro ao tentar retornar todos os registros.")
        finally:
            self.close_connection()

    def search_dvd_game(self, name_dvd_game):
        try:
            sql = f"SELECT * FROM DVD_JOGOS_V WHERE UPPER(NOME) LIKE '%{name_dvd_game.upper()}%';"
            self.cursor.execute(sql)
            records = self.cursor.fetchall()

            print("\t \t \t Dvd e Jogos")
            print("_" * 80)
            if records is not None:
                for datas in records:
                    print("_" * 80)
                    id_dvd_jogo = datas[0]
                    name = datas[1]
                    genare = datas[2]
                    classification_age = datas[3]
                    type_reg = datas[4]
                    price = datas[5]
                    date_fab = datas[6]
                    date_insert = datas[7]
                    quantity = datas[8]
                    update_date = datas[10]
                    user_id = datas[11]

                    print("Código do (Dvd ou Jogo): {0}".format(id_dvd_jogo))
                    print("Nome: {0} ".format(name.title()))
                    print("Gênero: {0} ".format(genare.title()))
                    print("Classificação de Idade: {0} ".format(
                        classification_age))
                    print("Tipo: {0} ".format(type_reg.title()))
                    print("Preço: {0} ".format(price))
                    print("Data de Fabricação: {0} ".format(date_fab))
                    print("Data de Cadastro: {0} ".format(date_insert))
                    print("Quantidade: {0} ".format(quantity))
                    print("Data de Atualização: {0}".format(update_date))
                    print(
                        "Código Do Usuário que Realizou a Última Atualização: {0}"
                        .format(user_id))

            else:
                print("Não existe este Dvd ou Jogo cadastrado no sistema.")

        except ():
            print("_" * 80)
            print("Erro ao tentar retornar todos os registros.")
        finally:
            self.close_connection()