diff --git a/app/modules/services/subscriptions_ui.py b/app/modules/services/subscriptions_ui.py index 64dcf4f..a308e82 100644 --- a/app/modules/services/subscriptions_ui.py +++ b/app/modules/services/subscriptions_ui.py @@ -514,6 +514,35 @@ def subscription_bulk_submit( if plan_effective_from and plan_effective_to and plan_effective_to < plan_effective_from: return RedirectResponse("/services/subscriptions/bulk?error=period", 303) + if ( + generation_mode == "subscription_only" + and auto_generate_periods is not None + and recurrence_type == "monthly" + and plan_effective_from is not None + ): + if plan_effective_from.month == 1: + initial_monthly_period = f"{plan_effective_from.year - 1:04d}-12" + else: + initial_monthly_period = ( + f"{plan_effective_from.year:04d}-{plan_effective_from.month - 1:02d}" + ) + try: + requested_periods = [normalize_period_label( + initial_monthly_period, + financial_year=selected_financial_year, + recurrence_type=recurrence_type, + )] + except ValueError: + return RedirectResponse("/services/subscriptions/bulk?error=period", 303) + + locked = redirect_if_financial_year_locked( + db, + tenant_id=tenant_id, + year_code=selected_financial_year, + redirect_url="/services/subscriptions/bulk?error=financial_year", + ) + if locked: + return locked for token in selected_tokens: try: client, scope_type, scope_key, business_unit_id, client_branch_id, registration_id = resolve_scope_target(