From 4273baebc2ab903ce220b4632e282d6c7eb4e3a7 Mon Sep 17 00:00:00 2001 From: SimplifiedPrivacy Date: Thu, 22 Oct 2026 21:31:41 -0400 Subject: [PATCH] Use and connection with an existing billing code is now stable. --- gui/v2/actions/menu_coordinator.py | 16 +++++++ gui/v2/actions/payment_actions.py | 6 +++ gui/v2/ui/pages/id_page.py | 63 +++++++++++++-------------- gui/v2/ui/styles/css/id_page_style.py | 14 ++++++ 4 files changed, 67 insertions(+), 32 deletions(-) create mode 100644 gui/v2/ui/styles/css/id_page_style.py diff --git a/gui/v2/actions/menu_coordinator.py b/gui/v2/actions/menu_coordinator.py index 414f76c..ac0faf0 100644 --- a/gui/v2/actions/menu_coordinator.py +++ b/gui/v2/actions/menu_coordinator.py @@ -5,6 +5,7 @@ from core.services.profiles.profile_connections import enable_profile #, disable from core.controllers.ProfileController import ProfileController from core.models.Configuration import Configuration, ConnectionChoice from core.services.subscriptions.subscriptions_by_protocol import get_profile_subscription, start_new_payment_cycle, wipe_subscription, evaluate_repeat_cycle +from core.services.payment_phase.pre_existing import check_then_save_billing_code from core.utils.check_if_time_lapsed import check_if_time_lapsed from core.models.enum_models import PaymentCategory from core.utils.type_checker import type_checker @@ -223,3 +224,18 @@ def connect_profile(profile_id: int, ui_caller: Callable) -> Result: +def connect_with_billing_code(profile_id: int, billing_code: str) -> Result: + """Apply a pre-existing billing code to a profile""" + + print(f"billing_code is {billing_code}") + + paid_result = check_then_save_billing_code( + profile_id=profile_id, + billing_code=billing_code, + connection_observer=connection_observer + ) + + if not paid_result.valid: + return paid_result + + return literally_connect(profile_id=profile_id) diff --git a/gui/v2/actions/payment_actions.py b/gui/v2/actions/payment_actions.py index abf57c3..8a8603b 100644 --- a/gui/v2/actions/payment_actions.py +++ b/gui/v2/actions/payment_actions.py @@ -77,6 +77,12 @@ def reset_individual_billing_cycle() -> Result: # return wiped_result +@type_checker +def connect_with_subscription_already(profile_id: int, billing_code: str, ui_caller: Callable) -> Result: + logger.info(f"Using a pre-existing billing code for profile {str(profile_id)}") + + + @type_checker def start_individual_payment(profile_id: int, ui_caller: Callable) -> Result: logger.info(f"Attempting to start individual billing state for profile {str(profile_id)}") diff --git a/gui/v2/ui/pages/id_page.py b/gui/v2/ui/pages/id_page.py index a0c9558..347c130 100755 --- a/gui/v2/ui/pages/id_page.py +++ b/gui/v2/ui/pages/id_page.py @@ -8,18 +8,20 @@ from PyQt6.QtGui import QIcon, QPixmap from PyQt6.QtCore import Qt from PyQt6 import QtCore -from core.models.enum_models import PaymentCategory -# from core.services.payment_phase.ticket_config_tools import do_we_have_billing_id +# core +# from core.models.enum_models import PaymentCategory from core.services.prepare_tickets.ticket_tracker import delete_ticket_data -from core.models.Result import Result, ResultError - +from core.models.Result import Result +# from core.services.payment_phase.ticket_config_tools import do_we_have_billing_id +# gui +from gui.v2.infrastructure.take_plumbing_action import take_action from gui.v2.ui.pages.Page import Page from gui.v2.ui.popups.message_box import style_message_box, mark_confirm_button -from gui.v2.actions.menu_tasks import enable_profile +from gui.v2.actions.menu_coordinator import connect_with_billing_code from gui.v2.actions.payment_actions import start_individual_payment from gui.v2.actions.ticket_actions import start_ticket, fetch_ticket_invoice - +from gui.v2.ui.styles.css.id_page_style import COLUMN_BUTTON_CSS HOW_MANY_PROFILES_DEFAULT = 6 @@ -49,20 +51,30 @@ class IdPage(Page): pattern = r'^[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}-[A-Z0-9]{4}$' if re.match(pattern, text): self.update_status.update_status('Enabling profile in progress...') - profile_data = { - 'id': int(self.update_status.current_profile_id), - 'billing_code': str(text) - } - menu_page = self.find_menu_page() - if menu_page: - self.profile_enable_worker = enable_profile( - profile_data, menu_page.handle_task_result, allow_uninstalled_tor=True, - ) - else: + billing_code = str(text) + if not billing_code: self.update_status.update_status( 'Incorrect format for the billing code') + # profile id: + profile_id = int(self.update_status.current_profile_id) + + menu_page = self.custom_window.navigator.get_cached("menu") + if not menu_page: + return + + # menu page recieves result: + take_action( + action=connect_with_billing_code, + ui_caller=menu_page.post_connect, + profile_id=profile_id, + billing_code=billing_code + ) + + # navigate to the main menu to see/recieve result: + self.custom_window.navigator.navigate("menu") + def find_menu_page(self): return self.custom_window.navigator.get_cached("menu") @@ -74,18 +86,7 @@ class IdPage(Page): self.button_go.clicked.connect(self.go_selected) column_title_style = "color: #00ffff; font-size: 18px; font-weight: bold;" - column_button_style = """ - QPushButton { - background-color: #000000; - color: #00ffff; - border: 2px solid #00ffff; - border-radius: 10px; - font-size: 15px; - font-weight: bold; - padding: 10px; - } - QPushButton:hover { background-color: #003333; } - """ + column_button_style = COLUMN_BUTTON_CSS column_desc_style = "color: #888888; font-size: 12px; font-style: italic;" self.single_title = QLabel("Single Profile", self) @@ -115,7 +116,7 @@ class IdPage(Page): self.multiple_button.clicked.connect(self.go_multiple_profiles) self.multiple_desc = QLabel( - f"Buy a bundle of {HOW_MANY_PROFILES_DEFAULT} tickets at once, which are cryptographically seperated from each other.", self) + f"Buy a bundle of {HOW_MANY_PROFILES_DEFAULT} tickets at once, which are cryptographically separated from each other.", self) self.multiple_desc.setGeometry(285, 335, 240, 80) self.multiple_desc.setStyleSheet(column_desc_style) self.multiple_desc.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter) @@ -173,9 +174,6 @@ class IdPage(Page): return if result.valid: - # billing_data = result.data - # billing_code = billing_data.billing_code - # print(f"billing_code is {billing_code}") self.custom_window.navigator.navigate("duration_selection") else: if result.message: @@ -286,3 +284,4 @@ class IdPage(Page): def reverse(self): self.custom_window.navigator.navigate("menu") + diff --git a/gui/v2/ui/styles/css/id_page_style.py b/gui/v2/ui/styles/css/id_page_style.py new file mode 100644 index 0000000..87b761f --- /dev/null +++ b/gui/v2/ui/styles/css/id_page_style.py @@ -0,0 +1,14 @@ + + +COLUMN_BUTTON_CSS = """ + QPushButton { + background-color: #000000; + color: #00ffff; + border: 2px solid #00ffff; + border-radius: 10px; + font-size: 15px; + font-weight: bold; + padding: 10px; + } + QPushButton:hover { background-color: #003333; } +"""