Aggiunge abbonamenti omaggio admin per sponsor e promozioni.

Gli admin possono concedere o revocare Premium Light/Full senza Stripe;
il piano omaggio ha priorità sui webhook e la società vede un messaggio dedicato.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 22:26:19 +02:00
parent 566104aff4
commit 82ff1972a0
24 changed files with 388 additions and 7 deletions

View File

@@ -18,6 +18,7 @@ module Billing
raise "Stripe non configurato" unless MatchLiveTv.stripe_enabled?
raise "Piano non valido" unless VALID_PLANS.include?(@plan_slug)
raise "Abbonamento omaggio: contatta il supporto per cambiare piano a pagamento" if @sub&.admin_comped?
raise "Nessun abbonamento Stripe attivo" if @sub.blank? || @sub.stripe_subscription_id.blank?
interval = resolve_interval(@sub)

View File

@@ -70,6 +70,8 @@ module Billing
PriceCatalog::DEFAULT_INTERVAL
sub = club.subscription
return sub if sub&.admin_comped?
clear_pending = sub&.pending_plan_id.present? &&
(sub.pending_plan.slug == plan.slug || infer_plan_slug_from_price(stripe_sub) == sub.pending_plan.slug)

View File

@@ -14,6 +14,7 @@ module Billing
sub = @club.subscription
return false unless sub&.stripe_subscription_id.present?
return false if sub.free?
return false if sub.admin_comped?
stripe_sub = ::Stripe::Subscription.retrieve(sub.stripe_subscription_id)