diff --git a/core/observers/Notifications.py b/core/observers/Notifications.py index 101daaf..9a4ec6c 100644 --- a/core/observers/Notifications.py +++ b/core/observers/Notifications.py @@ -8,6 +8,8 @@ class EventType(Enum): SYSTEM_DISABLE = auto() PROFILE_CREATED = auto() PROFILE_DELETED = auto() + STATUS_UPDATE = auto() + RESUME_ACTIONS = auto() class Notifications: _subscribers = {} diff --git a/core/services/subscriptions/subscriptions_by_protocol.py b/core/services/subscriptions/subscriptions_by_protocol.py index ef2c57a..7b7b7cd 100644 --- a/core/services/subscriptions/subscriptions_by_protocol.py +++ b/core/services/subscriptions/subscriptions_by_protocol.py @@ -7,6 +7,7 @@ from core.services.payment_phase.payment_state import OverallPaymentCycle, Payme from core.models.enum_models import ProtocolChoice, PaymentCategory from core.observers.ConnectionObserver import ConnectionObserver from core.models.pydantic_models.type_checker import validate_model +from core.observers.Notifications import Notifications, EventType from core.models.pydantic_models.ServerReply import SubscriptionInvoice from core.models.Subscription import Subscription from core.utils.type_checker import type_checker @@ -38,6 +39,9 @@ def _api_call_for_invoice(url: str, payload: dict, connection_observer: Connecti logger.info(f"Doing the API call with this payload: {payload}") + notification = "Sending to API.." + Notifications.emit(EventType.STATUS_UPDATE, notification) + result = api_call_and_extraction( desired_type="data", method=ApiCall.POST, @@ -107,6 +111,8 @@ def error_about_mismatch(category: PaymentCategory) -> Result: def evaluate_repeat_cycle(payment_cycle: OverallPaymentCycle, profile_id: int) -> Result: if the_same_payment_cycle(payment_cycle=payment_cycle, profile_id=profile_id): logger.info("It's the same as before, returning the data") + notification = f"Resuming Profile {profile_id}'s Payment" + Notifications.emit(EventType.STATUS_UPDATE, notification) return Result(valid=True, data=payment_cycle.billing_data) else: error_msg = f"You activated profile {profile_id}, but profile {payment_cycle.billing_data.instance_id} has active billing, stop that?" @@ -182,6 +188,8 @@ def start_new_payment_cycle(category: PaymentCategory, profile_id: Optional[int] payment_cycle.begin() if payment_cycle.billing_data: + notification = "Starting Billing Cycle" + Notifications.emit(EventType.STATUS_UPDATE, notification) return Result(valid=True, data=payment_cycle) return Result(valid=False, error_type=ResultError.UNKNOWN, message="Failed to create billing data.") @@ -241,6 +249,10 @@ def return_pre_existing_invoice(billing_code: str, connection_observer: Connecti result = _api_call_for_invoice(url=url, payload=payload, connection_observer=connection_observer) + if result.valid: + notification = "Got Pre-Existing Invoice" + Notifications.emit(EventType.STATUS_UPDATE, notification) + #----------------------------- # EXPIRED? CLARIFY ON WHAT'S EXPIRED (TICKETS VS INDIVIDUAL) #----------------------------- @@ -321,6 +333,9 @@ def get_ticket_invoice(connection_observer: ConnectionObserver) -> Result: billing_data.save() payment_cycle.got_invoice = True + + notification = "Got Invoice" + Notifications.emit(EventType.STATUS_UPDATE, notification) return Result(valid=True, data=final_invoice) @@ -386,6 +401,8 @@ def create_individual_invoice(payment_cycle: OverallPaymentCycle, connection_obs result = _api_call_for_invoice(url=url, payload=payload, connection_observer=connection_observer) if not result.valid: + notification = result.message + Notifications.emit(EventType.STATUS_UPDATE, notification) return result final_invoice = result.data @@ -498,6 +515,9 @@ def wipe_billing_cycle(inserted_profile_id: Optional[int] = None) -> Result: # if no profile id was given, wipe it and move on: if not inserted_profile_id: payment_cycle.wipe() + notification = "Stopped Checking if Paid" + Notifications.emit(EventType.STATUS_UPDATE, notification) + Notifications.emit(EventType.RESUME_ACTIONS, True) return Result(valid=True) # from here on assume we were given a profile id @@ -565,6 +585,8 @@ def wipe_subscription(profile_id: int) -> Result: profile.subscription = None ProfileController.update(profile) + notification = "Cleared Expired Subcription" + Notifications.emit(EventType.STATUS_UPDATE, notification) return Result(valid=True)