Exemplo n.º 1
0
class UI_Class(Frame):
    def __init__(self, master):
        super().__init__(master)
        self.master = master

        self.user = User()
        self.account = Account()

        self.master.geometry("500x500")
        self.master.title("Most Secure banking")
        self.master.geometry("500x500")
        self.master.config(bg='orange')
        # pages
        self.entry_page = Frame(self.master)
        self.user_create_page = Frame(self.master)
        self.user_logged_page = Frame(self.master)
        self.user_login_page = Frame(self.master)

        self.user_deposit_page = Frame(self.master)
        self.user_withdraw_page = Frame(self.master)
        self.user_edit_page = Frame(self.master)
        self.user_delete_page = Frame(self.master)
        self.user_send_page = Frame(self.master)
        self.user_overview_page = Frame(self.master)

        self.UI_elements()
        self.create_entry_page()
        self.open_windows = []

    # Pages
    def create_entry_page(self):

        self.entry_page.config(bg='orange')
        self.entry_page.grid(row=0)
        self.entry_logo_label.grid(row=0, sticky=N, pady=10)
        self.entry_logo_label_2.grid(row=1, sticky=N)

        self.entry_create_button.grid(row=3, pady=10)
        self.entry_login_button.grid(row=4,  pady=10)
        self.entry_exit_button.grid(row=5,  pady=10)

    def create_page(self):
        self.entry_page.grid_remove()
        self.user_create_page.config(bg='orange')

        self.user_create_page.grid(row=0)
        self.create_label_1.grid(row=0, column=0)
        self.create_entry_1.grid(row=0, column=1)

        self.create_label_2.grid(row=1, column=0)
        self.create_entry_2.grid(row=1, column=1)

        self.create_label_3.grid(row=2, column=0)
        self.create_entry_3.grid(row=2, column=1)

        self.create_submit_button.grid(row=3, sticky=W)
        self.create_home_button.grid(row=4, sticky=W)

    def login_page(self):
        self.entry_page.grid_remove()
        self.user_login_page.config(bg='orange')

        self.user_login_page.grid(row=0)

        self.login_label_1.grid(row=0, column=0)
        self.login_entry_1.grid(row=0, column=1)

        self.login_label_2.grid(row=1, column=0)
        self.login_entry_2.grid(row=1, column=1)

        self.login_label_3.grid(row=2, column=0)
        self.login_entry_3.grid(row=2, column=1)

        self.login_submit_button.grid(row=3)
        self.login_home_button.grid(row=4)

    def logged_page(self):
        self.user_login_page.grid_remove()
        self.user_create_page.grid_remove()
        self.user_logged_page.config(bg='orange')

        self.user_logged_page.grid(row=0)

        self.logged_deposit_button.grid(row=0)
        self.logged_withdraw_button.grid(row=1)
        self.logged_send_money_button.grid(row=2)
        self.logged_overview_button.grid(row=3)
        self.logged_edit_personal_detail.grid(row=4)
        self.logged_delete_button.grid(row=5)
        self.logged_logout_button.grid(row=6)

    def withdraw_page(self):
        self.user_logged_page.grid_remove()
        self.user_withdraw_page.config(bg='orange')

        self.user_withdraw_page.grid(row=0)
        self.withdraw_label_1.grid(row=0, column=0)
        self.withdraw_entry_1.grid(row=0, column=1)

        self.withdraw_submit_button.grid(row=1)
        self.withdraw_home_button.grid(row=2)

    def deposit_page(self):
        self.user_logged_page.grid_remove()
        self.user_deposit_page.config(bg='orange')

        self.user_deposit_page.grid(row=0)
        self.deposit_label_1.grid(row=0, column=0)
        self.deposit_entry_1.grid(row=0, column=1)

        self.deposit_submit_button.grid(row=1)
        self.deposit_home_button.grid(row=2)

    def edit_personal_page(self):
        self.user_logged_page.grid_forget()
        self.user_edit_page.config(bg='orange')

        self.user_edit_page.grid(row=0)
        self.edit_label_1.grid(row=0, column=0)
        self.edit_entry_1.grid(row=0, column=1)

        self.edit_label_2.grid(row=1, column=0)
        self.edit_entry_2.grid(row=1, column=1)

        self.edit_submit_button.grid(row=2)
        self.edit_home_button.grid(row=3)

    def overview_page(self):
        self.user_logged_page.grid_remove()
        self.user_overview_page.config(bg='orange')

        self.user_overview_page.grid(row=0)
        name = 'Account Holder Name:   ' + self.user.name
        acc_num = 'Account Number:   ' + self.user.account_num
        balance = 'Your Balance:    ' + str(self.user.balance)
        self.overview_label_1.config(text=name)
        self.overview_label_1.grid(row=0, sticky=W)

        self.overview_label_2.config(text=acc_num)
        self.overview_label_2.grid(row=1, sticky=W)

        self.overview_label_3.config(text=balance)
        self.overview_label_3.grid(row=2, sticky=W)
        self.overview_home_button.grid(row=3, sticky=W)

    def delete_page(self):
        self.user_logged_page.grid_remove()
        self.user_delete_page.config(bg='orange')

        self.user_delete_page.grid(row=0)

        self.delete_entry_1.grid(row=0)
        self.delete_yes_button.grid(row=1, column=0)
        self.delete_no_button.grid(row=1, column=1)

    def send_page(self):
        self.user_logged_page.grid_remove()
        self.user_send_page.config(bg='orange')

        self.user_send_page.grid(row=0)

        self.send_label_1.grid(row=0, column=0)
        self.send_entry_1.grid(row=0, column=1)

        self.send_label_2.grid(row=1, column=0)
        self.send_entry_2.grid(row=1, column=1)

        self.send_submit_button.grid(row=2)
        self.send_home_button.grid(row=3)

    ###Submit buttons ####

    def check_create_user(self):
        if self.check__number(self.create_entry_2.get()):
            user_name = self.create_entry_1.get()
            user_balance = int(self.create_entry_2.get())
            user_pin = self.create_entry_3.get()

            if user_pin == '' or user_name == '' or user_balance == '':
                messagebox.showwarning(
                    "Try Again", "You have to enter all of the information!!!")
            else:
                result = self.user.create_user(
                    user_name, user_balance, user_pin)
                if result:
                    messagebox.showinfo('Operation is successful!',
                                        'Successfully created an account, \n Your account number is ' + str(self.user.account_num)+' please login to the system')

                    self.login_page()
        else:
            messagebox.showinfo("", 'Balance must be a number')

    def login(self):
        user_name = self.login_entry_1.get()
        user_account = self.login_entry_2.get()
        user_pin = self.login_entry_3.get()

        if user_name == '' or user_account == '' or user_pin == '':
            messagebox.showwarning(
                'Invalid way of Entering', 'You need to enter all of the information')
        else:
            return_result = self.user.login(user_name, user_account, user_pin)

            if return_result == True:
                self.user.account_num = user_account
                self.user.pin = user_pin
                self.user.name = user_name

                self.account.login(
                    self.user.name, self.user.balance, self.user.account_num)

                self.logged_page()
            elif return_result == False:
                messagebox.showwarning(
                    "Operation is not successful", 'Cannot find user')
            elif return_result == "Informations entered doesn't match":
                messagebox.showwarning(
                    'Not valid data', 'Your informations are not correct')

    def deposit(self):
        if self.check__number(self.deposit_entry_1.get()):
            amount = int(self.deposit_entry_1.get())
            result_user = self.user.update_balance(
                'deposit', self.user.account_num, amount)
            if result_user:
                result_account = self.account.deposit_money(amount)

            if result_account:
                messagebox.showinfo(
                    "Success", 'Operation is succesfully done.')
            self.return_logged_menu(self.user_deposit_page)
        else:
            messagebox.showerror('', 'Amount must be integer')

    def widthdraw(self):
        if self.check__number(self.withdraw_entry_1.get()):
            amount = int(self.withdraw_entry_1.get())
            result_user = self.user.update_balance(
                'withdraw', self.user.account_num, amount)
            if result_user:
                result_account = self.account.withdraw_money(amount)

            if result_account:
                messagebox.showinfo(
                    "Success", 'Operation is succesfully done.')

            self.return_logged_menu(self.user_withdraw_page)
        else:
            messagebox.showerror('', 'Amount must be integer')

    def send_submit(self):
        if self.check__number(self.send_entry_2.get()):

            to_acc_num = self.send_entry_1.get()
            amount = self.send_entry_2.get()
            return_result = self.user.send_money(to_acc_num, amount)
            if return_result > 0:
                result_account = self.account.send_money(
                    to_acc_num, amount, return_result)
            if result_account:
                messagebox.showinfo(
                    "Success", 'Operation is succesfully done.')
            else:
                messagebox.showinfo("", 'insufficient balance')
            self.return_logged_menu(self.user_send_page)
        else:
            messagebox.showerror('', 'Amount must be integer')

    def return_home(self):
        self.user.name = ''
        self.user.pin = ''
        self.user.account_num = ''
        self.user_logged_page.grid_remove()
        self.user_login_page.grid_remove()
        self.user_create_page.grid_remove()
        self.create_entry_page()

    def edit_info(self):
        name = self.edit_entry_1.get()
        pin = self.edit_entry_2.get()
        self.user.update_info(name, pin)
        self.logged_page()

    def delete_account(self):
        self.user.remove_account()
        self.account.remove_account()
        self.user.name = ''
        self.user.account_num = ''
        self.user.balance = ''
        self.user.pin = ''
        self.create_entry_page()
    #### Cancel Buttons #####

    def return_logged_menu(self, page):
        page.grid_remove()
        self.logged_page()

    def exit_pages(self):
        self.master.destroy()

    ###### UTILITIES ######
    def check__number(self, entry):
        try:
            float(entry)
            return 1
        except ValueError:
            return 0

    #### UI ELEMENTS #####

    def UI_elements(self):
        # Entry Pages
        self.entry_logo_label = Label(self.entry_page, text="Refugee Bank", font=(
            'Calibri', 14, 'bold'), bg='orange', fg='white')
        self.entry_logo_label_2 = Label(
            self.entry_page, text='"The best bank application you have ever used."', font=('Calibri', 12, 'italic'))

        self.entry_create_button = Button(
            self.entry_page, text='Register', font=('Calibri', 12, 'bold'), width=20, bg='blue', fg='white',  command=self.create_page)
        self.entry_login_button = Button(
            self.entry_page, text='Login', font=('Calibri', 12, 'bold'), width=20, bg='blue', fg='white', command=self.login_page)
        self.entry_exit_button = Button(
            self.entry_page, text='Exit', font=('Calibri', 12, 'bold'), width=20, bg='blue', fg='white', command=self.exit_pages)

        ###### CREATE PAGE ######
        # Labels
        self.create_label_1 = Label(
            self.user_create_page, text='Enter Name: ')
        self.create_label_2 = Label(
            self.user_create_page, text='Enter deposit amount: ')
        self.create_label_3 = Label(
            self.user_create_page, text='Enter desired PIN: ')

        # Entry
        self.create_entry_1 = Entry(self.user_create_page)
        self.create_entry_2 = Entry(self.user_create_page)
        self.create_entry_3 = Entry(self.user_create_page, show='*')

        # Buttons
        self.create_submit_button = Button(
            self.user_create_page, text="Submit", command=self.check_create_user)

        self.create_home_button = Button(self.user_create_page,
                                         text="Cancel", command=self.return_home)

        ###### LOGIN PAGE ######
        # Lables
        self.login_label_1 = Label(self.user_login_page,
                                   text='Enter your name: ')
        self.login_label_2 = Label(self.user_login_page,
                                   text='Enter account number: ')
        self.login_label_3 = Label(self.user_login_page,
                                   text='Enter your PIN: ')

        # Entry
        self.login_entry_1 = Entry(self.user_login_page)
        self.login_entry_2 = Entry(self.user_login_page)
        self.login_entry_3 = Entry(self.user_login_page, show='*')

        # Buttons
        self.login_submit_button = Button(
            self.user_login_page, text="Submit", command=self.login)

        self.login_home_button = Button(self.user_login_page,
                                        text="Cancel", command=self.return_home)

        ###### LOGGED PAGE ######
        # Buttons
        self.logged_withdraw_button = Button(self.user_logged_page,
                                             text="Withdraw Money", command=self.withdraw_page)
        self.logged_deposit_button = Button(self.user_logged_page,
                                            text="Deposit Money", command=self.deposit_page)
        self.logged_edit_personal_detail = Button(self.user_logged_page,
                                                  text="Edit Personal Detail", command=self.edit_personal_page)
        self.logged_delete_button = Button(self.user_logged_page,
                                           text="Delete account", command=self.delete_page)

        self.logged_send_money_button = Button(self.user_logged_page,
                                               text="Send money", command=self.send_page)
        self.logged_overview_button = Button(self.user_logged_page,
                                             text="Overview your account", command=self.overview_page)
        self.logged_logout_button = Button(self.user_logged_page,
                                           text="Logout", command=self.return_home)

        ###### DEPOSIT  PAGE ######
        # Lables
        self.deposit_label_1 = Label(self.user_deposit_page,
                                     text='Enter the amount: ')

        # Entry
        self.deposit_entry_1 = Entry(
            self.user_deposit_page, text=self.user.name)

        # Buttons
        self.deposit_submit_button = Button(
            self.user_deposit_page, text="Submit", command=self.deposit)

        self.deposit_home_button = Button(self.user_deposit_page,
                                          text="Cancel", command=lambda: self.return_logged_menu(self.user_deposit_page))

        ###### Withdraw  PAGE ######
        # Lables
        self.withdraw_label_1 = Label(self.user_withdraw_page,
                                      text='Enter the amount: ')

        # Entry
        self.withdraw_entry_1 = Entry(
            self.user_withdraw_page, text=self.user.name)

        # Buttons
        self.withdraw_submit_button = Button(
            self.user_withdraw_page, text="Submit", command=self.widthdraw)

        self.withdraw_home_button = Button(self.user_withdraw_page,
                                           text="Cancel", command=lambda: self.return_logged_menu(self.user_withdraw_page))

        ###### SEND MONEY PAGE ######
        # Lables
        self.send_label_1 = Label(self.user_send_page,
                                  text='Enter the reciever account number: ')
        self.send_label_2 = Label(self.user_send_page,
                                  text='Enter the amount: ')

        # Entry
        self.send_entry_1 = Entry(self.user_send_page)
        self.send_entry_2 = Entry(self.user_send_page)

        # Buttons
        self.send_submit_button = Button(
            self.user_send_page, text="Submit", command=self.send_submit)

        self.send_home_button = Button(self.user_send_page,
                                       text="Cancel", command=lambda: self.return_logged_menu(self.user_send_page))

        ###### EDIT PERSONAL DETAIL PAGE ######
        # Lables
        self.edit_label_1 = Label(self.user_edit_page,
                                  text='Enter your name: ')
        self.edit_label_2 = Label(self.user_edit_page,
                                  text='Enter your PIN: ')

        # Entry
        self.edit_entry_1 = Entry(self.user_edit_page, text=self.user.name)
        self.edit_entry_2 = Entry(self.user_edit_page, show='*')

        # Buttons
        self.edit_submit_button = Button(
            self.user_edit_page, text="Submit", command=self.edit_info)

        self.edit_home_button = Button(self.user_edit_page,
                                       text="Cancel", command=lambda: self.return_logged_menu(self.user_edit_page))
        ####### OVERVIEW PAGE ######
        # Labels
        self.overview_label_1 = Label(self.user_overview_page,
                                      text='Account Holder Name: '+self.user.name)
        self.overview_label_2 = Label(self.user_overview_page,
                                      text='Account Number: '+str(self.user.account_num))
        self.overview_label_3 = Label(self.user_overview_page,
                                      text='Your Balance: '+self.user.balance)

        # Button
        self.overview_home_button = Button(self.user_overview_page,
                                           text="Return", command=lambda: self.return_logged_menu(self.user_overview_page))

        ###### DELETE PAGE ######
        # Labels
        self.delete_entry_1 = Label(
            self.user_delete_page, text='Would you like to delete your account? \nThink about it again!!!!')

        # Buttons
        self.delete_yes_button = Button(
            self.user_delete_page, text='YES', command=self.delete_account)
        self.delete_no_button = Button(
            self.user_delete_page, text="No", command=lambda: self.return_logged_menu(self.user_delete_page))