From b5e1a1676b2c51fe7ff1f5244a09e4f8d0a2e7bf Mon Sep 17 00:00:00 2001 From: ivanho-git Date: Sun, 8 Jun 2025 00:03:25 +0530 Subject: [PATCH 01/26] Update passwordGenerator.py --- .../passwordGenerator.py | 164 +++++------------- 1 file changed, 44 insertions(+), 120 deletions(-) diff --git a/password_programs_multiple/passwordGenerator.py b/password_programs_multiple/passwordGenerator.py index 1bde3d18051..d1a76773e62 100644 --- a/password_programs_multiple/passwordGenerator.py +++ b/password_programs_multiple/passwordGenerator.py @@ -1,125 +1,49 @@ # PasswordGenerator GGearing 314 01/10/19 # modified Prince Gangurde 4/4/2020 -from random import randint +import random import pycountry -case = randint(1, 2) -number = randint(1, 999) - -# TODO: Pick random country from it - -countries = list(pycountry.countries) -country_names = [country.name for country in countries] - -print(country_names) - -# TODO: Try to add languages, too. - -specialCharacters = ( - "!", - "@", - "#", - "$", - "%", - "/", - "?", - ":", - "<", - ">", - "|", - "&", - "*", - "-", - "=", - "+", - "_", -) - -animals = ( - "ant", - "alligator", - "baboon", - "badger", - "barb", - "bat", - "beagle", - "bear", - "beaver", - "bird", - "bison", - "bombay", - "bongo", - "booby", - "butterfly", - "bee", - "camel", - "cat", - "caterpillar", - "catfish", - "cheetah", - "chicken", - "chipmunk", - "cow", - "crab", - "deer", - "dingo", - "dodo", - "dog", - "dolphin", - "donkey", - "duck", - "eagle", - "earwig", - "elephant", - "emu", - "falcon", - "ferret", - "fish", - "flamingo", - "fly", - "fox", - "frog", - "gecko", - "gibbon", - "giraffe", - "goat", - "goose", - "gorilla", -) - -colour = ( - "red", - "orange", - "yellow", - "green", - "blue", - "indigo", - "violet", - "purple", - "magenta", - "cyan", - "pink", - "brown", - "white", - "grey", - "black", -) - -chosenanimal = animals[ - randint(0, len(animals) - 1) -] # randint will return max lenght but , tuple has index from 0 to len-1 -chosencolour = colour[randint(0, len(colour) - 1)] -chosenSpecialCharacter = specialCharacters[randint(0, len(specialCharacters) - 1)] - -if case == 1: - chosenanimal = chosenanimal.upper() - print(chosencolour + str(number) + chosenanimal + chosenSpecialCharacter) -else: - chosencolour = chosencolour.upper() - print(chosenanimal + str(number) + chosencolour + chosenSpecialCharacter) - -# Try to consolidate unify the characters. - - -# The program can be further improved. +def generate_password(): + # Define characters and word sets + special_characters = list("!@#$%/?<>|&*-=+_") + + animals = ( + "ant", "alligator", "baboon", "badger", "barb", "bat", "beagle", "bear", "beaver", "bird", + "bison", "bombay", "bongo", "booby", "butterfly", "bee", "camel", "cat", "caterpillar", + "catfish", "cheetah", "chicken", "chipmunk", "cow", "crab", "deer", "dingo", "dodo", "dog", + "dolphin", "donkey", "duck", "eagle", "earwig", "elephant", "emu", "falcon", "ferret", "fish", + "flamingo", "fly", "fox", "frog", "gecko", "gibbon", "giraffe", "goat", "goose", "gorilla" + ) + + colours = ( + "red", "orange", "yellow", "green", "blue", "indigo", "violet", "purple", + "magenta", "cyan", "pink", "brown", "white", "grey", "black" + ) + + # Get random values + animal = random.choice(animals) + colour = random.choice(colours) + number = random.randint(1, 999) + special = random.choice(special_characters) + case_choice = random.choice(["upper_colour", "upper_animal"]) + + # Pick a random country and language + country = random.choice(list(pycountry.countries)).name + languages = [lang.name for lang in pycountry.languages if hasattr(lang, "name")] + language = random.choice(languages) + + # Apply casing + if case_choice == "upper_colour": + colour = colour.upper() + else: + animal = animal.upper() + + # Combine to form password + password = f"{colour}{number}{animal}{special}" + print("Generated Password:", password) + print("Based on Country:", country) + print("Language Hint:", language) + +# Run it +generate_password() From edc215d9d3295416612dbe740af32cd01224cbce Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Mon, 9 Jun 2025 12:59:22 +0530 Subject: [PATCH 02/26] show employee list part done --- bank_managment_system/QTFrontend.py | 80 +++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 443276df1fe..d114a32347b 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -382,6 +382,86 @@ def create_add_employee_page(parent, title, submit_text="Submit",update_btn:bool return page, name_edit, password_edit, salary_edit, position_edit, update_button else: return page, name_edit, password_edit, salary_edit, position_edit, submit_button # Unpack as name_edit, password_edit, etc. + +def show_employee_list_page(parent, title): + page, main_layout = create_page_with_header(parent, title) + + content_frame = create_styled_frame(page, style="background-color: #f9f9f9; border-radius: 10px; padding: 15px;") + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + + # Table frame + table_frame = create_styled_frame(content_frame, style="background-color: #ffffff; border-radius: 8px; padding: 10px;") + table_layout = QtWidgets.QVBoxLayout(table_frame) + table_layout.setSpacing(0) + + # Header row + header_frame = create_styled_frame(table_frame, style="background-color: #f5f5f5; ; border-radius: 8px 8px 0 0; padding: 10px;") + header_layout = QtWidgets.QHBoxLayout(header_frame) + header_layout.setContentsMargins(10, 5, 10, 5) + headers = ["Name", "Position", "Salary"] + for i, header in enumerate(headers): + header_label = QtWidgets.QLabel(header, header_frame) + header_label.setStyleSheet("font-weight: bold; font-size: 14px; color: #333333; padding: 0px; margin: 0px;") + if i == 2: # Right-align salary header + header_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) + else: + header_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + header_layout.addWidget(header_label, 1 if i < 2 else 0) # Stretch name and position, not salary + table_layout.addWidget(header_frame) + + # Employee rows + employees = backend.show_employees_for_update() + for row, employee in enumerate(employees): + row_frame = create_styled_frame(table_frame, style=f"background-color: {'#fafafa' if row % 2 else '#ffffff'}; padding: 8px;") + row_layout = QtWidgets.QHBoxLayout(row_frame) + row_layout.setContentsMargins(10, 5, 10, 5) + + # Name + name_label = QtWidgets.QLabel(employee[0], row_frame) + name_label.setStyleSheet("font-size: 14px; color: #333333; padding: 0px; margin: 0px;") + name_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + row_layout.addWidget(name_label, 1) + + # Position + position_label = QtWidgets.QLabel(employee[3], row_frame) + position_label.setStyleSheet("font-size: 14px; color: #333333; padding: 0px; margin: 0px;") + position_label.setAlignment(QtCore.Qt.AlignLeft | QtCore.Qt.AlignVCenter) + row_layout.addWidget(position_label, 1) + + # Salary (formatted as currency) + salary_label = QtWidgets.QLabel(f"${float(employee[2]):,.2f}", row_frame) + salary_label.setStyleSheet("font-size: 14px; color: #333333; padding: 0px; margin: 0px;") + salary_label.setAlignment(QtCore.Qt.AlignRight | QtCore.Qt.AlignVCenter) + row_layout.addWidget(salary_label, 0) + + table_layout.addWidget(row_frame) + + # Add stretch to prevent rows from expanding vertically + table_layout.addStretch() + + # Back button + back_button = QtWidgets.QPushButton("Back", content_frame) + back_button.setStyleSheet(""" + QPushButton { + background-color: #6c757d; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-size: 14px; + } + QPushButton:hover { + background-color: #5a6268; + } + """) + back_button.clicked.connect(lambda: parent.setCurrentIndex(3)) + + content_layout.addWidget(table_frame) + main_layout.addWidget(back_button, alignment=QtCore.Qt.AlignLeft) + main_layout.addWidget(content_frame) + + return page def setup_main_window(main_window): """Set up the main window with a stacked widget containing home, admin, and employee pages.""" From e1a26bf457bec5325158df76ce6d81517b2bd63d Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Mon, 9 Jun 2025 13:00:06 +0530 Subject: [PATCH 03/26] small change related show employe list and other --- bank_managment_system/QTFrontend.py | 37 +++++++++++++++++++---------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index d114a32347b..30f6cd653ee 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -342,7 +342,7 @@ def create_add_employee_page(parent, title, submit_text="Submit",update_btn:bool form_frame = create_styled_frame(content_frame, min_size=(340, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") form_layout = QtWidgets.QVBoxLayout(form_frame) - form_layout.setSpacing(20) + form_layout.setSpacing(10) # Define input fields fields = ["Name :", "Password :", "Salary :", "Position :"] @@ -378,6 +378,22 @@ def create_add_employee_page(parent, title, submit_text="Submit",update_btn:bool form_layout.addWidget(button_frame) content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) main_layout.addWidget(content_frame) + back_btn = QtWidgets.QPushButton("Back", content_frame) + back_btn.setStyleSheet(""" + QPushButton { + background-color: #6c757d; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-size: 14px; + } + QPushButton:hover { + background-color: #5a6268; + } + """) + back_btn.clicked.connect(lambda: parent.setCurrentIndex(3)) + main_layout.addWidget(back_btn, 0,alignment=QtCore.Qt.AlignLeft) if update_btn: return page, name_edit, password_edit, salary_edit, position_edit, update_button else: @@ -526,15 +542,6 @@ def update_employee_data(name, password, salary, position, name_to_update): except: show_popup_message(stacked_widget,"Please fill in all fields",3) - def fetch_employee_data(name): - try: - cur = backend.cur - cur.execute("SELECT * FROM staff WHERE name = ?", (name,)) - employee_data = cur.fetchone() - return employee_data - except: - print("Error fetching employee data") - return None # Create Home Page @@ -570,7 +577,7 @@ def fetch_employee_data(name): add_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(4)) update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(5)) - + list_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(7)) # Create Add Employee Page add_employee_page, emp_name, emp_password, emp_salary, emp_position, emp_submit = create_add_employee_page( stacked_widget, @@ -648,7 +655,9 @@ def update_employee_data(name, password, salary, position, name_to_update): emp_position.text() ) ) - + # show employee list page + employee_list_page = show_employee_list_page(stacked_widget,"Employee List") + # Create Employee Login Page employee_page, employee_name, employee_password, employee_submit = create_login_page( stacked_widget, @@ -664,12 +673,14 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget.addWidget(add_employee_page)#4 stacked_widget.addWidget(update_employee_page1)#5 stacked_widget.addWidget(update_employee_page2)#6 + stacked_widget.addWidget(employee_list_page)#7 + main_layout.addWidget(stacked_widget) main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(5) + stacked_widget.setCurrentIndex(3) return stacked_widget, { "admin_name": admin_name, From f1381aa84f3a433fbb713d1e8e830241a42dcb0d Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Mon, 9 Jun 2025 18:26:59 +0530 Subject: [PATCH 04/26] add total money page in admin side --- bank_managment_system/QTFrontend.py | 38 +++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 30f6cd653ee..4253d186615 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -478,6 +478,37 @@ def show_employee_list_page(parent, title): main_layout.addWidget(content_frame) return page +def show_total_money(parent, title): + page, main_layout = create_page_with_header(parent, title) + + content_frame = create_styled_frame(page, style="background-color: #f9f9f9; border-radius: 10px; padding: 15px;") + content_layout = QtWidgets.QVBoxLayout(content_frame) + content_layout.setProperty("spacing", 10) + all = backend.all_money() + + # Total money label + total_money_label = QtWidgets.QLabel(f"Total Money: ${all}", content_frame) + total_money_label.setStyleSheet("font-size: 24px; font-weight: bold; color: #333333;") + content_layout.addWidget(total_money_label, alignment=QtCore.Qt.AlignCenter) + # Back button + back_button = QtWidgets.QPushButton("Back", content_frame) + back_button.setStyleSheet(""" + QPushButton { + background-color: #6c757d; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-size: 14px; + } + QPushButton:hover { + background-color: #5a6268; + } + """) + back_button.clicked.connect(lambda: parent.setCurrentIndex(3)) + content_layout.addWidget(back_button, alignment=QtCore.Qt.AlignCenter) + main_layout.addWidget(content_frame) + return page def setup_main_window(main_window): """Set up the main window with a stacked widget containing home, admin, and employee pages.""" @@ -578,6 +609,8 @@ def update_employee_data(name, password, salary, position, name_to_update): add_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(4)) update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(5)) list_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(7)) + back_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(0)) + money_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(8)) # Create Add Employee Page add_employee_page, emp_name, emp_password, emp_salary, emp_position, emp_submit = create_add_employee_page( stacked_widget, @@ -645,7 +678,6 @@ def update_employee_data(name, password, salary, position, name_to_update): ) ) - emp_submit.clicked.connect( lambda: add_employee_form_submit( @@ -663,7 +695,7 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget, title="Employee Login" ) - + admin_total_money = show_total_money(stacked_widget,"Total Money") # Add pages to stacked widget stacked_widget.addWidget(home_page)#0 @@ -674,6 +706,8 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget.addWidget(update_employee_page1)#5 stacked_widget.addWidget(update_employee_page2)#6 stacked_widget.addWidget(employee_list_page)#7 + stacked_widget.addWidget(admin_total_money)#8 + main_layout.addWidget(stacked_widget) From 80adbb66a06b2c7da63a816f777ed38990eb0f85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 18:11:39 +0000 Subject: [PATCH 05/26] Bump twilio from 9.6.1 to 9.6.2 Bumps [twilio](https://github.com/twilio/twilio-python) from 9.6.1 to 9.6.2. - [Release notes](https://github.com/twilio/twilio-python/releases) - [Changelog](https://github.com/twilio/twilio-python/blob/main/CHANGES.md) - [Commits](https://github.com/twilio/twilio-python/compare/9.6.1...9.6.2) --- updated-dependencies: - dependency-name: twilio dependency-version: 9.6.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 3127185a39a..4ab52770927 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -28,7 +28,7 @@ requests==2.32.3 quo==2023.5.1 PyPDF2==3.0.1 pyserial==3.5 -twilio==9.6.1 +twilio==9.6.2 tabula==1.0.5 nltk==3.9.1 Pillow==11.2.1 From 88725ede4293510c0fb0745b1e0a2e7169c4cd85 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Jun 2025 18:17:40 +0000 Subject: [PATCH 06/26] Bump protobuf from 6.30.2 to 6.31.1 Bumps [protobuf](https://github.com/protocolbuffers/protobuf) from 6.30.2 to 6.31.1. - [Release notes](https://github.com/protocolbuffers/protobuf/releases) - [Changelog](https://github.com/protocolbuffers/protobuf/blob/main/protobuf_release.bzl) - [Commits](https://github.com/protocolbuffers/protobuf/compare/v6.30.2...v6.31.1) --- updated-dependencies: - dependency-name: protobuf dependency-version: 6.31.1 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 3127185a39a..e2d2632f022 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -105,7 +105,7 @@ psutil==7.0.0 mediapipe==0.10.21 rich==14.0.0 httplib2==0.22.0 -protobuf==6.30.2 +protobuf==6.31.1 colorama==0.4.6 plyer==2.1.0 Flask-Ask==0.9.8 From 2e8061834ecf19716250efdd6d6af30892ed2af5 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Tue, 10 Jun 2025 12:35:55 +0530 Subject: [PATCH 07/26] re organize pages and name change --- bank_managment_system/QTFrontend.py | 112 ++++++++++++++++------------ 1 file changed, 66 insertions(+), 46 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 4253d186615..f83449f0d41 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -4,6 +4,20 @@ import backend backend.connect_database() employee_data = None +# Page Constants (for reference) +HOME_PAGE = 0 +ADMIN_PAGE = 1 +EMPLOYEE_PAGE = 2 +ADMIN_MENU_PAGE = 3 +ADD_EMPLOYEE_PAGE = 4 +UPDATE_EMPLOYEE_PAGE1 = 5 +UPDATE_EMPLOYEE_PAGE2 = 6 +EMPLOYEE_LIST_PAGE = 7 +ADMIN_TOTAL_MONEY = 8 +# ------------------------------------------------------------------------------------------------------------- +# === Reusable UI Component Functions === +# ------------------------------------------------------------------------------------------------------------- + def create_styled_frame(parent, min_size=None, style=""): """Create a styled QFrame with optional minimum size and custom style.""" frame = QtWidgets.QFrame(parent) @@ -133,7 +147,23 @@ def on_reject(): button_box.rejected.connect(on_reject) dialog.exec_() +# ------------------------------------------------------------------------------------------------------------- +# === Page Creation Functions == +# ------------------------------------------------------------------------------------------------------------- +def create_page_with_header(parent, title_text): + """Create a page with a styled header and return the page + main layout.""" + page = QtWidgets.QWidget(parent) + main_layout = QtWidgets.QVBoxLayout(page) + main_layout.setContentsMargins(20, 20, 20, 20) + main_layout.setSpacing(20) + header_frame = create_styled_frame(page, style="background-color: #ffffff; border-radius: 10px; padding: 10px;") + header_layout = QtWidgets.QVBoxLayout(header_frame) + title_label = create_styled_label(header_frame, title_text, font_size=30) + header_layout.addWidget(title_label, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop) + + main_layout.addWidget(header_frame, 0, QtCore.Qt.AlignTop) + return page, main_layout def get_employee_name(parent, name_field_text="Enter Employee Name"): page, main_layout = create_page_with_header(parent, "Employee Data Update") @@ -170,7 +200,7 @@ def on_search_button_clicked(): cur.execute("SELECT * FROM staff WHERE name = ?", (entered_name,)) employee_data = cur.fetchone() print(f"Employee Data: {employee_data}") - parent.setCurrentIndex(6) + parent.setCurrentIndex(UPDATE_EMPLOYEE_PAGE2) # if employee_data: # QtWidgets.QMessageBox.information(parent, "Employee Found", @@ -191,7 +221,7 @@ def on_search_button_clicked(): def create_login_page(parent ,title, name_field_text="Name :", password_field_text="Password :", submit_text="Submit",): """Create a login page with a title, name and password fields, and a submit button.""" - page, main_layout = create_page_with_header(parent, "Admin Menu") + page, main_layout = create_page_with_header(parent, title) # Content frame content_frame = create_styled_frame(page) @@ -293,21 +323,6 @@ def create_home_page(parent, on_admin_clicked, on_employee_clicked, on_exit_clic return page -def create_page_with_header(parent, title_text): - """Create a page with a styled header and return the page + main layout.""" - page = QtWidgets.QWidget(parent) - main_layout = QtWidgets.QVBoxLayout(page) - main_layout.setContentsMargins(20, 20, 20, 20) - main_layout.setSpacing(20) - - header_frame = create_styled_frame(page, style="background-color: #ffffff; border-radius: 10px; padding: 10px;") - header_layout = QtWidgets.QVBoxLayout(header_frame) - title_label = create_styled_label(header_frame, title_text, font_size=30) - header_layout.addWidget(title_label, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignTop) - - main_layout.addWidget(header_frame, 0, QtCore.Qt.AlignTop) - return page, main_layout - def create_admin_menu_page(parent): page, main_layout = create_page_with_header(parent, "Admin Menu") @@ -392,7 +407,7 @@ def create_add_employee_page(parent, title, submit_text="Submit",update_btn:bool background-color: #5a6268; } """) - back_btn.clicked.connect(lambda: parent.setCurrentIndex(3)) + back_btn.clicked.connect(lambda: parent.setCurrentIndex(ADMIN_MENU_PAGE)) main_layout.addWidget(back_btn, 0,alignment=QtCore.Qt.AlignLeft) if update_btn: return page, name_edit, password_edit, salary_edit, position_edit, update_button @@ -471,7 +486,7 @@ def show_employee_list_page(parent, title): background-color: #5a6268; } """) - back_button.clicked.connect(lambda: parent.setCurrentIndex(3)) + back_button.clicked.connect(lambda: parent.setCurrentIndex(ADMIN_MENU_PAGE)) content_layout.addWidget(table_frame) main_layout.addWidget(back_button, alignment=QtCore.Qt.AlignLeft) @@ -505,10 +520,14 @@ def show_total_money(parent, title): background-color: #5a6268; } """) - back_button.clicked.connect(lambda: parent.setCurrentIndex(3)) + back_button.clicked.connect(lambda: parent.setCurrentIndex(ADMIN_MENU_PAGE)) content_layout.addWidget(back_button, alignment=QtCore.Qt.AlignCenter) main_layout.addWidget(content_frame) return page + +# ------------------------------------------------------------------------------------------------------------- +# === Main Window Setup === +# ------------------------------------------------------------------------------------------------------------- def setup_main_window(main_window): """Set up the main window with a stacked widget containing home, admin, and employee pages.""" @@ -523,10 +542,10 @@ def setup_main_window(main_window): # Create pages def switch_to_admin(): - stacked_widget.setCurrentIndex(1) + stacked_widget.setCurrentIndex(ADMIN_PAGE) def switch_to_employee(): - stacked_widget.setCurrentIndex(2) + stacked_widget.setCurrentIndex(EMPLOYEE_PAGE) def exit_app(): QtWidgets.QApplication.quit() @@ -537,7 +556,7 @@ def admin_login_menu_page(name, password): success = backend.check_admin(name, password) if success: QtWidgets.QMessageBox.information(stacked_widget, "Login Successful", f"Welcome, {name}!") - stacked_widget.setCurrentIndex(3) + stacked_widget.setCurrentIndex(ADMIN_MENU_PAGE) else: QtWidgets.QMessageBox.warning(stacked_widget, "Login Failed", "Incorrect name or password.") except Exception as e: @@ -606,11 +625,11 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget ) - add_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(4)) - update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(5)) - list_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(7)) - back_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(0)) - money_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(8)) + add_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(ADD_EMPLOYEE_PAGE)) + update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(UPDATE_EMPLOYEE_PAGE)) + list_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_LIST_PAGE)) + back_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(HOME_PAGE)) + money_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(ADMIN_TOTAL_MONEY)) # Create Add Employee Page add_employee_page, emp_name, emp_password, emp_salary, emp_position, emp_submit = create_add_employee_page( stacked_widget, @@ -618,25 +637,25 @@ def update_employee_data(name, password, salary, position, name_to_update): ) # Update Employee Page - update_employee_page1 = get_employee_name(stacked_widget) + u_employee_page1 = get_employee_name(stacked_widget) # apply the update_employee_data function to the submit button - update_employee_page2 ,update_employee_name, update_employee_password, update_employee_salary, update_employee_position,update_employee_update = create_add_employee_page(stacked_widget,"Update Employee Details",update_btn=True) + u_employee_page2 ,u_employee_name, u_employee_password, u_employee_salary, u_employee_position,u_employee_update = create_add_employee_page(stacked_widget,"Update Employee Details",update_btn=True) def populate_employee_data(): global employee_data if employee_data: print("employee_data is not None") - update_employee_name.setText(str(employee_data[0])) # Name - update_employee_password.setText(str(employee_data[1])) # Password - update_employee_salary.setText(str(employee_data[2])) # Salary - update_employee_position.setText(str(employee_data[3])) # Position + u_employee_name.setText(str(employee_data[0])) # Name + u_employee_password.setText(str(employee_data[1])) # Password + u_employee_salary.setText(str(employee_data[2])) # Salary + u_employee_position.setText(str(employee_data[3])) # Position else: # Clear fields if no employee data is available print("employee_data is None") - update_employee_name.clear() - update_employee_password.clear() - update_employee_salary.clear() - update_employee_position.clear() + u_employee_name.clear() + u_employee_password.clear() + u_employee_salary.clear() + u_employee_position.clear() QtWidgets.QMessageBox.warning(stacked_widget, "No Data", "No employee data available to display.") def on_page_changed(index): if index == 6: # update_employee_page2 is at index 6 @@ -668,12 +687,12 @@ def update_employee_data(name, password, salary, position, name_to_update): show_popup_message(stacked_widget, "Employee updated successfully.", 3, False) except Exception as e: show_popup_message(stacked_widget, f"Error updating employee: {str(e)}", 5) - update_employee_update.clicked.connect( + u_employee_update.clicked.connect( lambda: update_employee_data( - update_employee_name.text().strip(), - update_employee_password.text().strip(), - update_employee_salary.text().strip(), - update_employee_position.text().strip(), + u_employee_name.text().strip(), + u_employee_password.text().strip(), + u_employee_salary.text().strip(), + u_employee_position.text().strip(), employee_data[0] if employee_data else "" ) ) @@ -703,8 +722,8 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget.addWidget(employee_page)#2 stacked_widget.addWidget(admin_menu_page)#3 stacked_widget.addWidget(add_employee_page)#4 - stacked_widget.addWidget(update_employee_page1)#5 - stacked_widget.addWidget(update_employee_page2)#6 + stacked_widget.addWidget(u_employee_page1)#5 + stacked_widget.addWidget(u_employee_page2)#6 stacked_widget.addWidget(employee_list_page)#7 stacked_widget.addWidget(admin_total_money)#8 @@ -714,7 +733,7 @@ def update_employee_data(name, password, salary, position, name_to_update): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(3) + stacked_widget.setCurrentIndex(EMPLOYEE_PAGE) return stacked_widget, { "admin_name": admin_name, @@ -736,6 +755,7 @@ def main(): main_window.show() sys.exit(app.exec_()) +# ------------------------------------------------------------------------------------------------------------- if __name__ == "__main__": main() From f846a95d5ac9e44cec2a0b851f930b4616b380ae Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Tue, 10 Jun 2025 12:39:01 +0530 Subject: [PATCH 08/26] admin side all update completed --- bank_managment_system/QTFrontend.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index f83449f0d41..465de612842 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -626,7 +626,7 @@ def update_employee_data(name, password, salary, position, name_to_update): ) add_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(ADD_EMPLOYEE_PAGE)) - update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(UPDATE_EMPLOYEE_PAGE)) + update_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(UPDATE_EMPLOYEE_PAGE1)) list_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_LIST_PAGE)) back_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(HOME_PAGE)) money_button.clicked.connect(lambda: stacked_widget.setCurrentIndex(ADMIN_TOTAL_MONEY)) From 8c54ffa3a054c01d0dbb77252e445edceb651e64 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Tue, 10 Jun 2025 17:28:57 +0530 Subject: [PATCH 09/26] employee menu page design --- bank_managment_system/QTFrontend.py | 50 +++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 465de612842..56103a7cd99 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -14,6 +14,7 @@ UPDATE_EMPLOYEE_PAGE2 = 6 EMPLOYEE_LIST_PAGE = 7 ADMIN_TOTAL_MONEY = 8 +EMPLOYEE_MENU_PAGE = 9 # ------------------------------------------------------------------------------------------------------------- # === Reusable UI Component Functions === # ------------------------------------------------------------------------------------------------------------- @@ -525,6 +526,31 @@ def show_total_money(parent, title): main_layout.addWidget(content_frame) return page +def create_employee_menu_page(parent, title): + page, main_layout = create_page_with_header(parent, title) + + button_frame = create_styled_frame(page) + button_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + button_layout = QtWidgets.QVBoxLayout(button_frame) + + button_container = create_styled_frame(button_frame, min_size=(300, 0), style="background-color: #ffffff; border-radius: 15px; padding: 20px;") + button_container_layout = QtWidgets.QVBoxLayout(button_container) + button_container_layout.setSpacing(15) + + # Define button labels + button_labels = ["Create Account ", "Show Details", "Add Balance", "Withdraw Money", "Chack Balanace", "Update Account", "list of all Members", "Delete Account", "Back"] + buttons = [] + + for label in button_labels: + btn:QtWidgets.QPushButton = create_styled_button(button_container, label) + button_container_layout.addWidget(btn) + buttons.append(btn) + + button_layout.addWidget(button_container, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(button_frame) + + return page, *buttons # Unpack as add_button, update_employee, etc. + # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- @@ -601,7 +627,9 @@ def update_employee_data(name, password, salary, position, name_to_update): switch_to_employee, exit_app ) - + # ------------------------------------------------------------------------------------------------ + # -------------------------------------Admin panel page --------------------------------------- + # ------------------------------------------------------------------------------------------------ # Create Admin Login Page admin_page, admin_name, admin_password, admin_submit = create_login_page( stacked_widget, @@ -708,13 +736,28 @@ def update_employee_data(name, password, salary, position, name_to_update): ) # show employee list page employee_list_page = show_employee_list_page(stacked_widget,"Employee List") + admin_total_money = show_total_money(stacked_widget,"Total Money") + # ------------------------------------------------------------------------------------------------ + # -------------------------------------Employee panel page --------------------------------------- + # ------------------------------------------------------------------------------------------------ # Create Employee Login Page employee_page, employee_name, employee_password, employee_submit = create_login_page( stacked_widget, title="Employee Login" ) - admin_total_money = show_total_money(stacked_widget,"Total Money") + + employee_menu_page, E_Create_Account, E_Show_Details, E_add_Balance, E_Withdraw_Money, E_Chack_Balanace, E_Update_Account, E_list_of_all_Members, E_Delete_Account, E_Back= create_employee_menu_page(stacked_widget,"Employee Menu") + # List of all page + # E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) + # E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE)) + # E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_PAGE)) + # E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_PAGE)) + # E_Chack_Balanace.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CHECK_BALANCE_PAGE)) + # E_Update_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_UPDATE_ACCOUNT_PAGE)) + # E_list_of_all_Members.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_LIST_OF_ALL_MEMBERS_PAGE)) + # E_Delete_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_DELETE_ACCOUNT_PAGE)) + # E_Back.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE)) # Add pages to stacked widget stacked_widget.addWidget(home_page)#0 @@ -726,6 +769,7 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget.addWidget(u_employee_page2)#6 stacked_widget.addWidget(employee_list_page)#7 stacked_widget.addWidget(admin_total_money)#8 + stacked_widget.addWidget(employee_menu_page)#9 @@ -733,7 +777,7 @@ def update_employee_data(name, password, salary, position, name_to_update): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(EMPLOYEE_PAGE) + stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE) return stacked_widget, { "admin_name": admin_name, From 4071a947ad28c5ae517f3246a12ee80d4ec740ee Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:09:34 +0000 Subject: [PATCH 10/26] Bump yfinance from 0.2.61 to 0.2.62 Bumps [yfinance](https://github.com/ranaroussi/yfinance) from 0.2.61 to 0.2.62. - [Release notes](https://github.com/ranaroussi/yfinance/releases) - [Changelog](https://github.com/ranaroussi/yfinance/blob/main/CHANGELOG.rst) - [Commits](https://github.com/ranaroussi/yfinance/compare/0.2.61...0.2.62) --- updated-dependencies: - dependency-name: yfinance dependency-version: 0.2.62 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index b4f8b15d2a1..65bee3b5d8c 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -66,7 +66,7 @@ speechtotext==0.0.3 wikipedia==1.4.0 tqdm==4.67.1 Menu==3.2.2 -yfinance==0.2.61 +yfinance==0.2.62 tweepy==4.15.0 tkcalendar==1.6.1 pytube==15.0.0 From b648c9230decba62ba5e462f1bd8d8612826b4c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 10 Jun 2025 18:09:39 +0000 Subject: [PATCH 11/26] Bump requests from 2.32.3 to 2.32.4 Bumps [requests](https://github.com/psf/requests) from 2.32.3 to 2.32.4. - [Release notes](https://github.com/psf/requests/releases) - [Changelog](https://github.com/psf/requests/blob/main/HISTORY.md) - [Commits](https://github.com/psf/requests/compare/v2.32.3...v2.32.4) --- updated-dependencies: - dependency-name: requests dependency-version: 2.32.4 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- ImageDownloader/requirements.txt | 2 +- requirements_with_versions.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ImageDownloader/requirements.txt b/ImageDownloader/requirements.txt index d80d9fc2a3a..bd6f2345868 100644 --- a/ImageDownloader/requirements.txt +++ b/ImageDownloader/requirements.txt @@ -1 +1 @@ -requests==2.32.3 +requests==2.32.4 diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index b4f8b15d2a1..3a7b0e5817c 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -24,7 +24,7 @@ Flask==3.1.1 selenium==4.33.0 firebase-admin==6.8.0 ujson==5.10.0 -requests==2.32.3 +requests==2.32.4 quo==2023.5.1 PyPDF2==3.0.1 pyserial==3.5 From 0592686e449a5b7eacacc6158e060c8b6dd19cfa Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 18:12:01 +0000 Subject: [PATCH 12/26] Bump pytest from 8.3.5 to 8.4.0 Bumps [pytest](https://github.com/pytest-dev/pytest) from 8.3.5 to 8.4.0. - [Release notes](https://github.com/pytest-dev/pytest/releases) - [Changelog](https://github.com/pytest-dev/pytest/blob/main/CHANGELOG.rst) - [Commits](https://github.com/pytest-dev/pytest/compare/8.3.5...8.4.0) --- updated-dependencies: - dependency-name: pytest dependency-version: 8.4.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 802171ec26a..e519cc6d7ad 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -97,7 +97,7 @@ newspaper==0.1.0.7 opencv-python==4.11.0.86 tensorflow==2.18.1 pandas==2.2.3 -pytest==8.3.5 +pytest==8.4.0 qrcode==8.2 googletrans==4.0.2 slab==1.8.0 From 83be08c51b582e31a314968e2ef0b64aab004951 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Jun 2025 18:12:15 +0000 Subject: [PATCH 13/26] Bump google-api-python-client from 2.171.0 to 2.172.0 Bumps [google-api-python-client](https://github.com/googleapis/google-api-python-client) from 2.171.0 to 2.172.0. - [Release notes](https://github.com/googleapis/google-api-python-client/releases) - [Commits](https://github.com/googleapis/google-api-python-client/compare/v2.171.0...v2.172.0) --- updated-dependencies: - dependency-name: google-api-python-client dependency-version: 2.172.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 802171ec26a..618ffee5dee 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -58,7 +58,7 @@ requests-mock==1.12.1 pyglet==2.1.6 urllib3==2.4.0 thirdai==0.9.33 -google-api-python-client==2.171.0 +google-api-python-client==2.172.0 sound==0.1.0 xlwt==1.3.0 pygame==2.6.1 From 0b07b935bec2b9ec6dba884399ee1f4fe0539b9e Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Thu, 12 Jun 2025 13:20:51 +0530 Subject: [PATCH 14/26] update show_popup_message function --- bank_managment_system/QTFrontend.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 56103a7cd99..742c34ff62c 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -85,7 +85,7 @@ def create_input_field(parent, label_text, min_label_size=(120, 0)): layout.addWidget(line_edit) return frame, line_edit -def show_popup_message(parent, message: str, page: int = None, show_cancel: bool = True): +def show_popup_message(parent, message: str, page: int = None, show_cancel: bool = True,cancel_page: int = HOME_PAGE): """Reusable popup message box. Args: @@ -141,7 +141,7 @@ def on_accept(): def on_reject(): if page is not None: - parent.setCurrentIndex(page) + parent.setCurrentIndex(cancel_page) dialog.reject() button_box.accepted.connect(on_accept) From e0257c59404255aab038f44c568a48e32b533506 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Thu, 12 Jun 2025 13:40:39 +0530 Subject: [PATCH 15/26] create bank account page done --- bank_managment_system/QTFrontend.py | 156 +++++++++++++++++++++++++++- 1 file changed, 152 insertions(+), 4 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 742c34ff62c..7fbf3ffb9d5 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -525,7 +525,8 @@ def show_total_money(parent, title): content_layout.addWidget(back_button, alignment=QtCore.Qt.AlignCenter) main_layout.addWidget(content_frame) return page - + +#-----------employees menu pages----------- def create_employee_menu_page(parent, title): page, main_layout = create_page_with_header(parent, title) @@ -550,7 +551,101 @@ def create_employee_menu_page(parent, title): main_layout.addWidget(button_frame) return page, *buttons # Unpack as add_button, update_employee, etc. + +def create_account_page(parent, title): + page, main_layout = create_page_with_header(parent, title) + + content_frame = create_styled_frame(page) + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + + form_frame = create_styled_frame(content_frame, min_size=(400, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") + form_layout = QtWidgets.QVBoxLayout(form_frame) + form_layout.setSpacing(3) + + # Define input fields + fields = ["Name :", "Age :", "Address","Balance :", "Mobile number :"] + edits = [] + + for i, field in enumerate(fields): + field_frame, field_edit = create_input_field(form_frame, field,min_label_size=(160, 0)) + form_layout.addWidget(field_frame) + if i == 0: + name_edit = field_edit + elif i == 1: + Age_edit = field_edit + elif i == 2: + Address_edit = field_edit + elif i == 3: + Balance_edit = field_edit + elif i == 4: + Mobile_number_edit = field_edit + edits.append(field_edit) + # Dropdown for account type + account_type_label = QtWidgets.QLabel("Account Type :", form_frame) + account_type_label.setStyleSheet("font-size: 14px; font-weight: bold; color: #333333;") + form_layout.addWidget(account_type_label) + account_type_dropdown = QtWidgets.QComboBox(form_frame) + account_type_dropdown.addItems(["Savings", "Current", "Fixed Deposit"]) + account_type_dropdown.setStyleSheet(""" + QComboBox { + padding: 5px; + border: 1px solid #ccc; + border-radius: 4px; + background-color: white; + min-width: 200px; + font-size: 14px; + } + QComboBox:hover { + border: 1px solid #999; + } + QComboBox::drop-down { + border: none; + width: 25px; + } + QComboBox::down-arrow { + width: 12px; + height: 12px; + } + QComboBox QAbstractItemView { + border: 1px solid #ccc; + background-color: white; + selection-background-color: #0078d4; + selection-color: white; + } + """) + form_layout.addWidget(account_type_dropdown) + + # Submit button + button_frame = create_styled_frame(form_frame, style="padding: 7px;") + button_layout = QtWidgets.QVBoxLayout(button_frame) + + + submit_button = create_styled_button(button_frame, "Submit", min_size=(100, 50)) + button_layout.addWidget(submit_button, 0, QtCore.Qt.AlignHCenter) + + form_layout.addWidget(button_frame) + content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(content_frame) + back_btn = QtWidgets.QPushButton("Back", content_frame) + back_btn.setStyleSheet(""" + QPushButton { + background-color: #6c757d; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-size: 14px; + } + QPushButton:hover { + background-color: #5a6268; + } + """) + back_btn.clicked.connect(lambda: parent.setCurrentIndex(ADMIN_MENU_PAGE)) + main_layout.addWidget(back_btn, 0,alignment=QtCore.Qt.AlignLeft) + + return page,( name_edit, Age_edit,Address_edit,Balance_edit,Mobile_number_edit, account_type_dropdown ,submit_button) # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- @@ -746,10 +841,10 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget, title="Employee Login" ) - + employee_submit.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE)) employee_menu_page, E_Create_Account, E_Show_Details, E_add_Balance, E_Withdraw_Money, E_Chack_Balanace, E_Update_Account, E_list_of_all_Members, E_Delete_Account, E_Back= create_employee_menu_page(stacked_widget,"Employee Menu") # List of all page - # E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) + E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) # E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE)) # E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_PAGE)) # E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_PAGE)) @@ -759,7 +854,59 @@ def update_employee_data(name, password, salary, position, name_to_update): # E_Delete_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_DELETE_ACCOUNT_PAGE)) # E_Back.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE)) - # Add pages to stacked widget + employee_create_account_page,all_employee_menu_btn = create_account_page(stacked_widget, "Create Account") + submit_button = all_employee_menu_btn[6].clicked.connect(lambda: add_account_form_submit( + all_employee_menu_btn[0].text().strip(), + all_employee_menu_btn[1].text().strip(), + all_employee_menu_btn[2].text().strip(), + all_employee_menu_btn[3].text().strip(), + all_employee_menu_btn[5].currentText(), + all_employee_menu_btn[4].text().strip() + )) + + def add_account_form_submit(name, age, address, balance, account_type, mobile): + if ( + len(name) != 0 + and len(age) != 0 + and len(address) != 0 + and len(balance) != 0 + and len(account_type) != 0 + and len(mobile) != 0 + ): + try: + balance = int(balance) + except ValueError: + show_popup_message(stacked_widget, "Balance must be a valid number", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if balance < 0: + show_popup_message(stacked_widget, "Balance cannot be negative",EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if account_type not in ["Savings", "Current","Fixed Deposit"]: + show_popup_message(stacked_widget, "Invalid account type", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if len(mobile) != 10: + show_popup_message(stacked_widget, "Mobile number must be 10 digits", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if not mobile.isdigit(): + show_popup_message(stacked_widget, "Mobile number must contain only digits", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if not name.isalpha(): + show_popup_message(stacked_widget, "Name must contain only alphabets", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if not age.isdigit(): + show_popup_message(stacked_widget, "Age must contain only digits", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if int(age) < 18: + show_popup_message(stacked_widget, "Age must be greater than 18", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + if len(address) < 10: + show_popup_message(stacked_widget, "Address must be at least 10 characters long", EMPLOYEE_CREATE_ACCOUNT_PAGE) + return + backend.create_customer(name, age, address, balance, account_type, mobile) + show_popup_message(stacked_widget, "Account created successfully", EMPLOYEE_MENU_PAGE, False) + else: + show_popup_message(stacked_widget, "Please fill in all fields", EMPLOYEE_CREATE_ACCOUNT_PAGE) + # Add pages to stacked widget stacked_widget.addWidget(home_page)#0 stacked_widget.addWidget(admin_page)#1 stacked_widget.addWidget(employee_page)#2 @@ -770,6 +917,7 @@ def update_employee_data(name, password, salary, position, name_to_update): stacked_widget.addWidget(employee_list_page)#7 stacked_widget.addWidget(admin_total_money)#8 stacked_widget.addWidget(employee_menu_page)#9 + stacked_widget.addWidget(employee_create_account_page)#10 From 5631bfd872f21517b6ec8dff5b799d1dd70f6797 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Thu, 12 Jun 2025 14:58:02 +0530 Subject: [PATCH 16/26] chnage all show pop msg page number to name --- bank_managment_system/QTFrontend.py | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 7fbf3ffb9d5..b7a8b190408 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -3,6 +3,7 @@ import sys import backend backend.connect_database() + employee_data = None # Page Constants (for reference) HOME_PAGE = 0 @@ -15,6 +16,7 @@ EMPLOYEE_LIST_PAGE = 7 ADMIN_TOTAL_MONEY = 8 EMPLOYEE_MENU_PAGE = 9 +EMPLOYEE_CREATE_ACCOUNT_PAGE = 10 # ------------------------------------------------------------------------------------------------------------- # === Reusable UI Component Functions === # ------------------------------------------------------------------------------------------------------------- @@ -85,7 +87,7 @@ def create_input_field(parent, label_text, min_label_size=(120, 0)): layout.addWidget(line_edit) return frame, line_edit -def show_popup_message(parent, message: str, page: int = None, show_cancel: bool = True,cancel_page: int = HOME_PAGE): +def show_popup_message(parent, message: str, page: int = None, show_cancel: bool = False,cancel_page: int = HOME_PAGE): """Reusable popup message box. Args: @@ -261,7 +263,7 @@ def on_login_button_clicked(parent, name_field, password_field): password = password_field.text().strip() if not name or not password: - show_popup_message(parent, "Please enter your name and password.", 0) + show_popup_message(parent, "Please enter your name and password.",HOME_PAGE) else: try: # Ideally, here you'd call a backend authentication check @@ -650,7 +652,7 @@ def create_account_page(parent, title): # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- -def setup_main_window(main_window): +def setup_main_window(main_window: QtWidgets.QMainWindow): """Set up the main window with a stacked widget containing home, admin, and employee pages.""" main_window.setObjectName("MainWindow") main_window.resize(800, 600) @@ -692,11 +694,11 @@ def add_employee_form_submit(name, password, salary, position): and len(position) != 0 ): backend.create_employee(name, password, salary, position) - show_popup_message(stacked_widget,"Employee added successfully",3,False) + show_popup_message(stacked_widget,"Employee added successfully",ADMIN_MENU_PAGE) else: print("Please fill in all fields") - show_popup_message(stacked_widget,"Please fill in all fields",3) + show_popup_message(stacked_widget,"Please fill in all fields",ADD_EMPLOYEE_PAGE) def update_employee_data(name, password, salary, position, name_to_update): try: cur = backend.cur @@ -708,10 +710,10 @@ def update_employee_data(name, password, salary, position, name_to_update): cur.execute("UPDATE staff SET salary = ? WHERE name = ?", (salary, name)) cur.execute("UPDATE staff SET position = ? WHERE name = ?", (position, name)) backend.conn.commit() - show_popup_message(stacked_widget,"Employee Upadate successfully",3,False) + show_popup_message(stacked_widget,"Employee Upadate successfully",UPDATE_EMPLOYEE_PAGE2) except: - show_popup_message(stacked_widget,"Please fill in all fields",3) + show_popup_message(stacked_widget,"Please fill in all fields",UPDATE_EMPLOYEE_PAGE2) @@ -789,10 +791,10 @@ def on_page_changed(index): def update_employee_data(name, password, salary, position, name_to_update): try: if not name_to_update: - show_popup_message(stacked_widget, "Original employee name is missing.", 5) + show_popup_message(stacked_widget, "Original employee name is missing.", UPDATE_EMPLOYEE_PAGE2) return if not (name or password or salary or position): - show_popup_message(stacked_widget, "Please fill at least one field to update.", 5) + show_popup_message(stacked_widget, "Please fill at least one field to update.", UPDATE_EMPLOYEE_PAGE2) return if name: backend.update_employee_name(name, name_to_update) @@ -807,9 +809,9 @@ def update_employee_data(name, password, salary, position, name_to_update): return if position: backend.update_employee_position(position, name_to_update) - show_popup_message(stacked_widget, "Employee updated successfully.", 3, False) + show_popup_message(stacked_widget, "Employee updated successfully.", ADMIN_MENU_PAGE) except Exception as e: - show_popup_message(stacked_widget, f"Error updating employee: {str(e)}", 5) + show_popup_message(stacked_widget, f"Error updating employee: {str(e)}",UPDATE_EMPLOYEE_PAGE2,show_cancel=True,cancel_page=ADMIN_MENU_PAGE) u_employee_update.clicked.connect( lambda: update_employee_data( u_employee_name.text().strip(), @@ -925,7 +927,7 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE) + stacked_widget.setCurrentIndex(HOME_PAGE) return stacked_widget, { "admin_name": admin_name, @@ -951,4 +953,6 @@ def main(): if __name__ == "__main__": main() +# TO-DO: +# 1.refese the employee list page after add or delete or update employee From d5411c57ea2806047310f2b9c5c00ecd61218561 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Thu, 12 Jun 2025 15:42:44 +0530 Subject: [PATCH 17/26] show user bank details --- bank_managment_system/QTFrontend.py | 35 +++++++++++++++++++++++++++-- 1 file changed, 33 insertions(+), 2 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index b7a8b190408..506207d2cfb 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -648,6 +648,27 @@ def create_account_page(parent, title): main_layout.addWidget(back_btn, 0,alignment=QtCore.Qt.AlignLeft) return page,( name_edit, Age_edit,Address_edit,Balance_edit,Mobile_number_edit, account_type_dropdown ,submit_button) + +def create_show_details_page1(parent, title): + page, main_layout = create_page_with_header(parent, title) + content_frame = create_styled_frame(page) + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + + form_frame = create_styled_frame(content_frame, min_size=(400, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") + form_layout = QtWidgets.QVBoxLayout(form_frame) + form_layout.setSpacing(3) + # Define input fields + bannk_user = create_input_field(form_frame, "Enter Bank account Number :", min_label_size=(180, 0)) + form_layout.addWidget(bannk_user[0]) + user_account_number= bannk_user[1] + submit_button = create_styled_button(form_frame, "Submit", min_size=(100, 50)) + form_layout.addWidget(submit_button) + content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(content_frame) + + return page,(user_account_number,submit_button) + # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- @@ -857,7 +878,7 @@ def update_employee_data(name, password, salary, position, name_to_update): # E_Back.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_MENU_PAGE)) employee_create_account_page,all_employee_menu_btn = create_account_page(stacked_widget, "Create Account") - submit_button = all_employee_menu_btn[6].clicked.connect(lambda: add_account_form_submit( + all_employee_menu_btn[6].clicked.connect(lambda: add_account_form_submit( all_employee_menu_btn[0].text().strip(), all_employee_menu_btn[1].text().strip(), all_employee_menu_btn[2].text().strip(), @@ -905,10 +926,19 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): show_popup_message(stacked_widget, "Address must be at least 10 characters long", EMPLOYEE_CREATE_ACCOUNT_PAGE) return backend.create_customer(name, age, address, balance, account_type, mobile) + all_employee_menu_btn[0].setText("") + all_employee_menu_btn[1].setText("") + all_employee_menu_btn[2].setText("") + all_employee_menu_btn[3].setText("") + all_employee_menu_btn[4].setText("") + all_employee_menu_btn[5].currentText(), show_popup_message(stacked_widget, "Account created successfully", EMPLOYEE_MENU_PAGE, False) else: show_popup_message(stacked_widget, "Please fill in all fields", EMPLOYEE_CREATE_ACCOUNT_PAGE) # Add pages to stacked widget + + show_bank_user_data_page1,show_bank_user_other = create_show_details_page1(stacked_widget, "Show Details") + show_bank_user_other[1].clicked.connect(lambda: print(show_bank_user_other[0].text())) stacked_widget.addWidget(home_page)#0 stacked_widget.addWidget(admin_page)#1 stacked_widget.addWidget(employee_page)#2 @@ -920,6 +950,7 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): stacked_widget.addWidget(admin_total_money)#8 stacked_widget.addWidget(employee_menu_page)#9 stacked_widget.addWidget(employee_create_account_page)#10 + stacked_widget.addWidget(show_bank_user_data_page1)#11 @@ -927,7 +958,7 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(HOME_PAGE) + stacked_widget.setCurrentIndex(11) return stacked_widget, { "admin_name": admin_name, From 3d3ff62847c6a7f4edcf4c4f313cc4694abbfe8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 18:22:07 +0000 Subject: [PATCH 18/26] Bump aiohttp from 3.12.9 to 3.12.12 --- updated-dependencies: - dependency-name: aiohttp dependency-version: 3.12.12 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- async_downloader/requirements.txt | 2 +- requirements_with_versions.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/async_downloader/requirements.txt b/async_downloader/requirements.txt index 6efd61c224a..d7fb9f5f95b 100644 --- a/async_downloader/requirements.txt +++ b/async_downloader/requirements.txt @@ -1 +1 @@ -aiohttp==3.12.9 +aiohttp==3.12.12 diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 64496f26854..4fe30fc615a 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -1,5 +1,5 @@ pafy==0.5.5 -aiohttp==3.12.9 +aiohttp==3.12.12 fuzzywuzzy==0.18.0 hupper==1.12.1 seaborn==0.13.2 From 8990c6e47657f28b2dd996fa939e1d4198d72620 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 12 Jun 2025 18:22:15 +0000 Subject: [PATCH 19/26] Bump openai from 1.84.0 to 1.86.0 Bumps [openai](https://github.com/openai/openai-python) from 1.84.0 to 1.86.0. - [Release notes](https://github.com/openai/openai-python/releases) - [Changelog](https://github.com/openai/openai-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/openai/openai-python/compare/v1.84.0...v1.86.0) --- updated-dependencies: - dependency-name: openai dependency-version: 1.86.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index 64496f26854..eb289195187 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -49,7 +49,7 @@ auto-mix-prep==0.2.0 lib==4.0.0 pywifi==1.1.12 patterns==0.3 -openai==1.84.0 +openai==1.86.0 background==0.2.1 pydantic==2.11.4 openpyxl==3.1.2 From ff841d73ecf393a6c24c26a1975b192b9863dd29 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Fri, 13 Jun 2025 11:20:31 +0530 Subject: [PATCH 20/26] show user account page done --- bank_managment_system/QTFrontend.py | 87 +++++++++++++++++++++++++++-- 1 file changed, 83 insertions(+), 4 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index 506207d2cfb..bd07d8128a4 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -17,6 +17,8 @@ ADMIN_TOTAL_MONEY = 8 EMPLOYEE_MENU_PAGE = 9 EMPLOYEE_CREATE_ACCOUNT_PAGE = 10 +EMPLOYEE_SHOW_DETAILS_PAGE1 = 11 +EMPLOYEE_SHOW_DETAILS_PAGE2 = 12 # ------------------------------------------------------------------------------------------------------------- # === Reusable UI Component Functions === # ------------------------------------------------------------------------------------------------------------- @@ -572,6 +574,7 @@ def create_account_page(parent, title): for i, field in enumerate(fields): field_frame, field_edit = create_input_field(form_frame, field,min_label_size=(160, 0)) form_layout.addWidget(field_frame) + field_edit.setFont(QtGui.QFont("Arial", 12)) if i == 0: name_edit = field_edit elif i == 1: @@ -644,7 +647,7 @@ def create_account_page(parent, title): background-color: #5a6268; } """) - back_btn.clicked.connect(lambda: parent.setCurrentIndex(ADMIN_MENU_PAGE)) + back_btn.clicked.connect(lambda: parent.setCurrentIndex(EMPLOYEE_MENU_PAGE)) main_layout.addWidget(back_btn, 0,alignment=QtCore.Qt.AlignLeft) return page,( name_edit, Age_edit,Address_edit,Balance_edit,Mobile_number_edit, account_type_dropdown ,submit_button) @@ -668,6 +671,61 @@ def create_show_details_page1(parent, title): main_layout.addWidget(content_frame) return page,(user_account_number,submit_button) + +def create_show_details_page2(parent, title): + page, main_layout = create_page_with_header(parent, title) + content_frame = create_styled_frame(page) + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + + form_frame = create_styled_frame(content_frame, min_size=(400, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") + form_layout = QtWidgets.QVBoxLayout(form_frame) + form_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + form_layout.setSpacing(3) + + # Define input fields + + labeles = ["Account No: ","Name: ", "Age:", "Address: ", "Balance: ", "Mobile Number: ", "Account Type: "] + for i in range(len(labeles)): + label_frame, input_field = create_input_field(form_frame, labeles[i], min_label_size=(180, 30)) + form_layout.addWidget(label_frame) + input_field.setReadOnly(True) + input_field.setFont(QtGui.QFont("Arial", 12)) + if i == 0: + account_no_field = input_field + elif i == 1: + name_field = input_field + elif i == 2: + age_field = input_field + elif i == 3: + address_field = input_field + elif i == 4: + balance_field = input_field + elif i == 5: + mobile_number_field = input_field + elif i == 6: + account_type_field = input_field + + exite_btn = create_styled_button(form_frame, "Exit", min_size=(100, 50)) + exite_btn.setStyleSheet(""" + QPushButton { + background-color: #6c757d; + color: white; + border: none; + border-radius: 4px; + padding: 8px 16px; + font-size: 14px; + } + QPushButton:hover { + background-color: #5a6268; + } + """) + exite_btn.clicked.connect(lambda: parent.setCurrentIndex(EMPLOYEE_MENU_PAGE)) + content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(content_frame) + main_layout.addWidget(exite_btn) + + return page,(account_no_field,name_field,age_field,address_field,balance_field,mobile_number_field,account_type_field,exite_btn) # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === @@ -868,7 +926,7 @@ def update_employee_data(name, password, salary, position, name_to_update): employee_menu_page, E_Create_Account, E_Show_Details, E_add_Balance, E_Withdraw_Money, E_Chack_Balanace, E_Update_Account, E_list_of_all_Members, E_Delete_Account, E_Back= create_employee_menu_page(stacked_widget,"Employee Menu") # List of all page E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) - # E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE)) + E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE1)) # E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_PAGE)) # E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_PAGE)) # E_Chack_Balanace.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CHECK_BALANCE_PAGE)) @@ -937,8 +995,28 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): show_popup_message(stacked_widget, "Please fill in all fields", EMPLOYEE_CREATE_ACCOUNT_PAGE) # Add pages to stacked widget - show_bank_user_data_page1,show_bank_user_other = create_show_details_page1(stacked_widget, "Show Details") - show_bank_user_other[1].clicked.connect(lambda: print(show_bank_user_other[0].text())) + show_bank_user_data_page1,show_bank_user_other1 = create_show_details_page1(stacked_widget, "Show Details") + show_bank_user_data_page2,show_bank_user_other2 = create_show_details_page2(stacked_widget, "Show Details") + + show_bank_user_other1[1].clicked.connect(lambda: show_bank_user_data_page1_submit_btn(int(show_bank_user_other1[0].text().strip()))) + def show_bank_user_data_page1_submit_btn(name:int): + account_data = backend.get_details(name) + if account_data: + show_bank_user_other1[0].setText("") + show_bank_user_other2[0].setText(str(account_data[0])) + show_bank_user_other2[1].setText(str(account_data[1])) + show_bank_user_other2[2].setText(str(account_data[2])) + show_bank_user_other2[3].setText(str(account_data[3])) + show_bank_user_other2[4].setText(str(account_data[4])) + show_bank_user_other2[5].setText(str(account_data[5])) + show_bank_user_other2[6].setText(str(account_data[6])) + stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE2) + else: + show_popup_message(stacked_widget, "Account not found", EMPLOYEE_SHOW_DETAILS_PAGE1) + + + + stacked_widget.addWidget(home_page)#0 stacked_widget.addWidget(admin_page)#1 stacked_widget.addWidget(employee_page)#2 @@ -951,6 +1029,7 @@ def add_account_form_submit(name, age, address, balance, account_type, mobile): stacked_widget.addWidget(employee_menu_page)#9 stacked_widget.addWidget(employee_create_account_page)#10 stacked_widget.addWidget(show_bank_user_data_page1)#11 + stacked_widget.addWidget(show_bank_user_data_page2)#12 From 4654bf3b1d7c1f677fdd2ea1f6dcaad2ee311270 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Fri, 13 Jun 2025 16:55:39 +0530 Subject: [PATCH 21/26] update bank balance of user --- bank_managment_system/QTFrontend.py | 122 +++++++++++++++++++++++++++- 1 file changed, 118 insertions(+), 4 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index bd07d8128a4..a519388c6b7 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -19,6 +19,10 @@ EMPLOYEE_CREATE_ACCOUNT_PAGE = 10 EMPLOYEE_SHOW_DETAILS_PAGE1 = 11 EMPLOYEE_SHOW_DETAILS_PAGE2 = 12 +EMPLOYEE_ADD_BALANCE_SEARCH = 13 +EMPLOYEE_ADD_BALANCE_PAGE = 14 + +FONT_SIZE = QtGui.QFont("Segoe UI", 12) # ------------------------------------------------------------------------------------------------------------- # === Reusable UI Component Functions === # ------------------------------------------------------------------------------------------------------------- @@ -83,7 +87,25 @@ def create_input_field(parent, label_text, min_label_size=(120, 0)): label.setMinimumSize(QtCore.QSize(*min_label_size)) line_edit = QtWidgets.QLineEdit(frame) - line_edit.setStyleSheet("background-color: rgb(168, 168, 168);") + line_edit.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") + + layout.addWidget(label) + layout.addWidget(line_edit) + return frame, line_edit + +def create_input_field_V(parent, label_text, min_label_size=(120, 0)): + """Create a horizontal layout with a label and a QLineEdit.""" + frame = create_styled_frame(parent, style="padding: 7px;") + layout = QtWidgets.QVBoxLayout(frame) + layout.setContentsMargins(0, 0, 0, 0) + layout.setSpacing(0) + + label = create_styled_label(frame, label_text, font_size=12, bold=True, style="color: #2c3e50;") + if min_label_size: + label.setMinimumSize(QtCore.QSize(*min_label_size)) + + line_edit = QtWidgets.QLineEdit(frame) + line_edit.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") layout.addWidget(label) layout.addWidget(line_edit) @@ -152,6 +174,28 @@ def on_reject(): button_box.rejected.connect(on_reject) dialog.exec_() + +def search_result(parent, title,label_text): + page, main_layout = create_page_with_header(parent, title) + content_frame = create_styled_frame(page) + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + content_layout.alignment + + form_frame = create_styled_frame(content_frame, min_size=(400, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") + form_layout = QtWidgets.QVBoxLayout(form_frame) + form_layout.setSpacing(3) + # Define input fields + user = create_input_field(form_frame, label_text, min_label_size=(180, 0)) + form_layout.addWidget(user[0]) + user_account_number= user[1] + user_account_number.setFont(QtGui.QFont("Segoe UI", 12)) + submit_button = create_styled_button(form_frame, "Submit", min_size=(100, 50)) + form_layout.addWidget(submit_button) + content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(content_frame) + + return page,(user_account_number,submit_button) # ------------------------------------------------------------------------------------------------------------- # === Page Creation Functions == # ------------------------------------------------------------------------------------------------------------- @@ -727,6 +771,49 @@ def create_show_details_page2(parent, title): return page,(account_no_field,name_field,age_field,address_field,balance_field,mobile_number_field,account_type_field,exite_btn) +def update_user_balance(parent, title): + page, main_layout = create_page_with_header(parent, title) + content_frame = create_styled_frame(page) + content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) + content_layout = QtWidgets.QVBoxLayout(content_frame) + content_layout.alignment + + form_frame = create_styled_frame(content_frame, min_size=(400, 200), style="background-color: #ffffff; border-radius: 15px; padding: 10px;") + form_layout = QtWidgets.QVBoxLayout(form_frame) + form_layout.setSpacing(3) + # Define input fields + user = create_input_field(form_frame, "User Name: ", min_label_size=(180, 0)) + user_balance = create_input_field(form_frame, "Balance: ", min_label_size=(180, 0)) + user_update_balance = create_input_field_V(form_frame, "Add amount: ", min_label_size=(180, 0)) + + # Add input fields to the form layout + form_layout.addWidget(user[0]) + form_layout.addWidget(user_balance[0]) + form_layout.addWidget(user_update_balance[0]) + + # Store the input fields in variables + user_account_name= user[1] + user_account_name.setReadOnly(True) + user_account_name.setStyleSheet("background-color: #8a8a8a; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") + user_balance_field = user_balance[1] + user_balance_field.setReadOnly(True) + user_balance_field.setStyleSheet("background-color: #8a8a8a; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") + user_update_balance_field = user_update_balance[1] + user_update_balance_field.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") + + + # Set the font size for the input fields + user_account_name.setFont(QtGui.QFont("Segoe UI", 12)) + user_balance_field.setFont(QtGui.QFont("Segoe UI", 12)) + user_update_balance_field.setFont(QtGui.QFont("Segoe UI", 12)) + + # Add a submit button + submit_button = create_styled_button(form_frame, "Submit", min_size=(100, 50)) + form_layout.addWidget(submit_button) + content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) + main_layout.addWidget(content_frame) + + return page,(user_account_name,user_balance_field,user_update_balance_field,submit_button) # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- @@ -927,7 +1014,7 @@ def update_employee_data(name, password, salary, position, name_to_update): # List of all page E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE1)) - # E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_PAGE)) + E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_SEARCH)) # E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_PAGE)) # E_Chack_Balanace.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CHECK_BALANCE_PAGE)) # E_Update_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_UPDATE_ACCOUNT_PAGE)) @@ -1014,9 +1101,34 @@ def show_bank_user_data_page1_submit_btn(name:int): else: show_popup_message(stacked_widget, "Account not found", EMPLOYEE_SHOW_DETAILS_PAGE1) + add_balance_search_page,add_balance_search_other = search_result(stacked_widget, "Add Balance","Enter Account Number: ") + add_balance_search_other[1].clicked.connect(lambda: add_balance_page_submit_btn(int(add_balance_search_other[0].text().strip()))) - + add_balance_page,add_balance_other =update_user_balance(stacked_widget, "Add Balance User Account") + add_balance_other[3].clicked.connect(lambda:update_user_account_balance(add_balance_other[2].text().strip())) + # user_account_name,user_balance_field,user_update_balance_field,submit_button + + + def add_balance_page_submit_btn(account_number:int): + check = backend.check_acc_no(account_number) + if check: + account_data = backend.get_details(account_number) + add_balance_other[0].setText(str(account_data[1])) + add_balance_other[1].setText(str(account_data[4])) + stacked_widget.setCurrentIndex(14) + return account_data + else: + show_popup_message(stacked_widget, "Account not found", EMPLOYEE_ADD_BALANCE_SEARCH,show_cancel=True,cancel_page=EMPLOYEE_MENU_PAGE) + + def update_user_account_balance(add_money:int): + account_number=int(add_balance_search_other[0].text().strip()) + backend.update_balance(add_money,account_number) + add_balance_other[0].setText("") + add_balance_other[1].setText("") + show_popup_message(stacked_widget, "Balance updated successfully", EMPLOYEE_MENU_PAGE) + add_balance_search_other[0].setText("") + stacked_widget.addWidget(home_page)#0 stacked_widget.addWidget(admin_page)#1 stacked_widget.addWidget(employee_page)#2 @@ -1030,6 +1142,8 @@ def show_bank_user_data_page1_submit_btn(name:int): stacked_widget.addWidget(employee_create_account_page)#10 stacked_widget.addWidget(show_bank_user_data_page1)#11 stacked_widget.addWidget(show_bank_user_data_page2)#12 + stacked_widget.addWidget(add_balance_search_page)#13 + stacked_widget.addWidget(add_balance_page)#14 @@ -1037,7 +1151,7 @@ def show_bank_user_data_page1_submit_btn(name:int): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(11) + stacked_widget.setCurrentIndex(13) return stacked_widget, { "admin_name": admin_name, From 799cedb58705f221679e0fba677c1414ccb7c9f3 Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Fri, 13 Jun 2025 17:12:01 +0530 Subject: [PATCH 22/26] update size of the font in all input field --- bank_managment_system/QTFrontend.py | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index a519388c6b7..cbf3c92be23 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -87,6 +87,7 @@ def create_input_field(parent, label_text, min_label_size=(120, 0)): label.setMinimumSize(QtCore.QSize(*min_label_size)) line_edit = QtWidgets.QLineEdit(frame) + line_edit.setFont(FONT_SIZE) line_edit.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") layout.addWidget(label) @@ -106,6 +107,7 @@ def create_input_field_V(parent, label_text, min_label_size=(120, 0)): line_edit = QtWidgets.QLineEdit(frame) line_edit.setStyleSheet("background-color: #f0f0f0; border: 1px solid #ccc; border-radius: 4px; padding: 8px;") + line_edit.setFont(FONT_SIZE) layout.addWidget(label) layout.addWidget(line_edit) @@ -189,7 +191,7 @@ def search_result(parent, title,label_text): user = create_input_field(form_frame, label_text, min_label_size=(180, 0)) form_layout.addWidget(user[0]) user_account_number= user[1] - user_account_number.setFont(QtGui.QFont("Segoe UI", 12)) + user_account_number.setFont(FONT_SIZE) submit_button = create_styled_button(form_frame, "Submit", min_size=(100, 50)) form_layout.addWidget(submit_button) content_layout.addWidget(form_frame, 0, QtCore.Qt.AlignHCenter | QtCore.Qt.AlignVCenter) @@ -803,9 +805,9 @@ def update_user_balance(parent, title): # Set the font size for the input fields - user_account_name.setFont(QtGui.QFont("Segoe UI", 12)) - user_balance_field.setFont(QtGui.QFont("Segoe UI", 12)) - user_update_balance_field.setFont(QtGui.QFont("Segoe UI", 12)) + user_account_name.setFont(FONT_SIZE) + user_balance_field.setFont(FONT_SIZE) + user_update_balance_field.setFont(FONT_SIZE) # Add a submit button submit_button = create_styled_button(form_frame, "Submit", min_size=(100, 50)) @@ -1151,7 +1153,7 @@ def update_user_account_balance(add_money:int): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(13) + stacked_widget.setCurrentIndex(0) return stacked_widget, { "admin_name": admin_name, From 4017befcf3bb27184c9b41d4acc0379ab8fa24c0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:00:10 +0000 Subject: [PATCH 23/26] Bump firebase-admin from 6.8.0 to 6.9.0 Bumps [firebase-admin](https://github.com/firebase/firebase-admin-python) from 6.8.0 to 6.9.0. - [Release notes](https://github.com/firebase/firebase-admin-python/releases) - [Commits](https://github.com/firebase/firebase-admin-python/compare/v6.8.0...v6.9.0) --- updated-dependencies: - dependency-name: firebase-admin dependency-version: 6.9.0 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index cadeb76ac9c..ba420f59f34 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -22,7 +22,7 @@ win10toast==0.9 Counter==1.0.0 Flask==3.1.1 selenium==4.33.0 -firebase-admin==6.8.0 +firebase-admin==6.9.0 ujson==5.10.0 requests==2.32.4 quo==2023.5.1 From c1b9387345a0924d7f257a0a0cb103dbe7457f58 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:00:14 +0000 Subject: [PATCH 24/26] Bump xor-cipher from 5.0.1 to 5.0.2 Bumps [xor-cipher](https://github.com/GDPSApp/xor-cipher-python) from 5.0.1 to 5.0.2. - [Release notes](https://github.com/GDPSApp/xor-cipher-python/releases) - [Changelog](https://github.com/GDPSApp/xor-cipher-python/blob/main/CHANGELOG.md) - [Commits](https://github.com/GDPSApp/xor-cipher-python/compare/v5.0.1...v5.0.2) --- updated-dependencies: - dependency-name: xor-cipher dependency-version: 5.0.2 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index cadeb76ac9c..80c583248a8 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -70,7 +70,7 @@ yfinance==0.2.62 tweepy==4.15.0 tkcalendar==1.6.1 pytube==15.0.0 -xor-cipher==5.0.1 +xor-cipher==5.0.2 bird==0.1.2 mechanize==0.4.10 translate==3.6.1 From 28b00598a79c2e3b4d754166abb75b4bfeb11b22 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 13 Jun 2025 19:01:02 +0000 Subject: [PATCH 25/26] Bump pydantic from 2.11.4 to 2.11.6 Bumps [pydantic](https://github.com/pydantic/pydantic) from 2.11.4 to 2.11.6. - [Release notes](https://github.com/pydantic/pydantic/releases) - [Changelog](https://github.com/pydantic/pydantic/blob/main/HISTORY.md) - [Commits](https://github.com/pydantic/pydantic/compare/v2.11.4...v2.11.6) --- updated-dependencies: - dependency-name: pydantic dependency-version: 2.11.6 dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- requirements_with_versions.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/requirements_with_versions.txt b/requirements_with_versions.txt index cadeb76ac9c..3247cc8ab2e 100644 --- a/requirements_with_versions.txt +++ b/requirements_with_versions.txt @@ -51,7 +51,7 @@ pywifi==1.1.12 patterns==0.3 openai==1.86.0 background==0.2.1 -pydantic==2.11.4 +pydantic==2.11.6 openpyxl==3.1.2 pytesseract==0.3.13 requests-mock==1.12.1 From da0068177c939b02f5ca627c6f4449c2f62a05cd Mon Sep 17 00:00:00 2001 From: Pratyanj Date: Sat, 14 Jun 2025 12:34:28 +0530 Subject: [PATCH 26/26] add withdraw_money_page page working --- bank_managment_system/QTFrontend.py | 48 ++++++++++++++++++++++++----- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/bank_managment_system/QTFrontend.py b/bank_managment_system/QTFrontend.py index cbf3c92be23..9a1a54106f1 100644 --- a/bank_managment_system/QTFrontend.py +++ b/bank_managment_system/QTFrontend.py @@ -21,6 +21,8 @@ EMPLOYEE_SHOW_DETAILS_PAGE2 = 12 EMPLOYEE_ADD_BALANCE_SEARCH = 13 EMPLOYEE_ADD_BALANCE_PAGE = 14 +EMPLOYEE_WITHDRAW_MONEY_SEARCH = 15 +EMPLOYEE_WITHDRAW_MONEY_PAGE = 16 FONT_SIZE = QtGui.QFont("Segoe UI", 12) # ------------------------------------------------------------------------------------------------------------- @@ -773,7 +775,7 @@ def create_show_details_page2(parent, title): return page,(account_no_field,name_field,age_field,address_field,balance_field,mobile_number_field,account_type_field,exite_btn) -def update_user_balance(parent, title): +def update_user(parent, title,input_fields_label): page, main_layout = create_page_with_header(parent, title) content_frame = create_styled_frame(page) content_frame.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Expanding) @@ -786,7 +788,7 @@ def update_user_balance(parent, title): # Define input fields user = create_input_field(form_frame, "User Name: ", min_label_size=(180, 0)) user_balance = create_input_field(form_frame, "Balance: ", min_label_size=(180, 0)) - user_update_balance = create_input_field_V(form_frame, "Add amount: ", min_label_size=(180, 0)) + user_update_balance = create_input_field_V(form_frame, input_fields_label, min_label_size=(180, 0)) # Add input fields to the form layout form_layout.addWidget(user[0]) @@ -816,6 +818,7 @@ def update_user_balance(parent, title): main_layout.addWidget(content_frame) return page,(user_account_name,user_balance_field,user_update_balance_field,submit_button) + # ------------------------------------------------------------------------------------------------------------- # === Main Window Setup === # ------------------------------------------------------------------------------------------------------------- @@ -1017,7 +1020,7 @@ def update_employee_data(name, password, salary, position, name_to_update): E_Create_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CREATE_ACCOUNT_PAGE)) E_Show_Details.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE1)) E_add_Balance.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_ADD_BALANCE_SEARCH)) - # E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_PAGE)) + E_Withdraw_Money.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_WITHDRAW_MONEY_SEARCH)) # E_Chack_Balanace.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_CHECK_BALANCE_PAGE)) # E_Update_Account.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_UPDATE_ACCOUNT_PAGE)) # E_list_of_all_Members.clicked.connect(lambda: stacked_widget.setCurrentIndex(EMPLOYEE_LIST_OF_ALL_MEMBERS_PAGE)) @@ -1102,14 +1105,14 @@ def show_bank_user_data_page1_submit_btn(name:int): stacked_widget.setCurrentIndex(EMPLOYEE_SHOW_DETAILS_PAGE2) else: show_popup_message(stacked_widget, "Account not found", EMPLOYEE_SHOW_DETAILS_PAGE1) - + + # Add balance page add_balance_search_page,add_balance_search_other = search_result(stacked_widget, "Add Balance","Enter Account Number: ") add_balance_search_other[1].clicked.connect(lambda: add_balance_page_submit_btn(int(add_balance_search_other[0].text().strip()))) - add_balance_page,add_balance_other =update_user_balance(stacked_widget, "Add Balance User Account") + add_balance_page,add_balance_other =update_user(stacked_widget, "Add Balance User Account","Enter Ammount: ") add_balance_other[3].clicked.connect(lambda:update_user_account_balance(add_balance_other[2].text().strip())) - # user_account_name,user_balance_field,user_update_balance_field,submit_button def add_balance_page_submit_btn(account_number:int): @@ -1131,6 +1134,35 @@ def update_user_account_balance(add_money:int): show_popup_message(stacked_widget, "Balance updated successfully", EMPLOYEE_MENU_PAGE) add_balance_search_other[0].setText("") + # Withdraw money page + withdraw_money_search_page,withdraw_money_search_other = search_result(stacked_widget, "Withdraw Money","Enter Account Number: ") + withdraw_money_search_other[1].clicked.connect(lambda: withdraw_money_page_submit_btn(int(withdraw_money_search_other[0].text().strip()))) + + + withdraw_money_page,withdraw_money_other =update_user(stacked_widget, "Withdraw Money From User Account","Withdraw Amount: ") + withdraw_money_other[3].clicked.connect(lambda:update_user_account_withdraw(withdraw_money_other[2].text().strip())) + + def withdraw_money_page_submit_btn(account_number:int): + print(account_number) + check = backend.check_acc_no(account_number) + print(check) + if check: + account_data = backend.get_details(account_number) + withdraw_money_other[0].setText(str(account_data[1])) + withdraw_money_other[1].setText(str(account_data[4])) + stacked_widget.setCurrentIndex(16) + return account_data + else: + show_popup_message(stacked_widget, "Account not found", EMPLOYEE_WITHDRAW_MONEY_SEARCH,show_cancel=True,cancel_page=EMPLOYEE_MENU_PAGE) + + def update_user_account_withdraw(withdraw_money:int): + account_number=int(withdraw_money_search_other[0].text().strip()) + backend.deduct_balance(int(withdraw_money),int(account_number)) + withdraw_money_other[0].setText("") + withdraw_money_other[1].setText("") + show_popup_message(stacked_widget, "Balance updated successfully", EMPLOYEE_MENU_PAGE) + withdraw_money_search_other[0].setText("") + stacked_widget.addWidget(home_page)#0 stacked_widget.addWidget(admin_page)#1 stacked_widget.addWidget(employee_page)#2 @@ -1146,6 +1178,8 @@ def update_user_account_balance(add_money:int): stacked_widget.addWidget(show_bank_user_data_page2)#12 stacked_widget.addWidget(add_balance_search_page)#13 stacked_widget.addWidget(add_balance_page)#14 + stacked_widget.addWidget(withdraw_money_search_page)#15 + stacked_widget.addWidget(withdraw_money_page)#16 @@ -1153,7 +1187,7 @@ def update_user_account_balance(add_money:int): main_window.setCentralWidget(central_widget) # Set initial page - stacked_widget.setCurrentIndex(0) + stacked_widget.setCurrentIndex(9) return stacked_widget, { "admin_name": admin_name,