Mostra il piano attivo dopo il bonifico e allinea il flusso società.

Dopo la conferma admin la card restava su «Paga con bonifico»; la società parte da Free, l'owner è staff trasmissione e le mail non bloccano se manca SMTP.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-19 18:31:39 +02:00
co-authored by Cursor
parent e436f5ece4
commit 5bcb4170c7
31 changed files with 359 additions and 111 deletions
@@ -97,6 +97,21 @@ module MatchLiveTv
bank_transfer_iban.present? && bank_transfer_account_holder.present?
end
def smtp_configured?
ENV["SMTP_ADDRESS"].present?
end
# In produzione senza SMTP non blocca il flusso (es. collaudo): la mail si può inviare a mano.
def deliver_mail(mail)
if Rails.env.production? && !smtp_configured?
Rails.logger.info("[mail] skip (SMTP assente): #{mail.subject}")
return false
end
mail.deliver_now
true
end
def privacy_controller_name
ENV.fetch("PRIVACY_CONTROLLER_NAME", "Emiliano Frascaro")
end
+2
View File
@@ -309,6 +309,8 @@ it:
club: Società
plan: Piano
amount: Importo
holder: Intestatario
iban: IBAN
causal: Causale
requested: Richiesto
confirm_button: Conferma pagamento e attiva
+8 -5
View File
@@ -83,11 +83,9 @@ de:
first_team_name_placeholder: "z. B. Under 15"
plan_label: "Starttarif (für den gesamten Verein)"
plan_free: "Free — 1 Streaming-Konto pro Team, 1 Livestream"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Premium-Abrechnung
interval_yearly: "Jährlich — 59 €/Jahr (Light) oder 199 €/Jahr (Full)"
interval_monthly: "Monatlich — 7,90 €/Monat (Light) oder 24,90 €/Monat (Full)"
plan_light: "Premium Light — 59 €/Jahr"
plan_full: "Premium Full — 199 €/Jahr"
plan_hint: "Karte, Überweisung oder monatliche Abrechnung wählst du danach auf der Abo-Seite. Ein kostenpflichtiger Tarif wird erst nach der Zahlung aktiv."
submit: Verein erstellen
billing:
title: "Abonnement — %{name}"
@@ -193,6 +191,10 @@ de:
contact_trailer: für ein maßgeschneidertes Angebot.
club_payments_link: Zahlungen und Rechnungen des Vereins
streaming_staff:
principal_heading: Hauptkonto
principal_body_html: "Das Konto, mit dem der Verein registriert wurde (<strong>%{email}</strong>), ist <strong>für dieses Team vorgesehen</strong>: damit meldest du dich in der App an und startest den Livestream."
principal_score_hint_html: "Für den Punktestand von einem anderen Telefon teile während des Streams den <strong>Regie-Link</strong> (kein zweites Konto nötig)."
extra_staff_heading: Weitere Konten, die übertragen können
self_account_heading: "Dein Konto (%{email})"
self_account_hint: "Du kannst die Übertragung aus der App verwalten. Für den Punktestand von einem anderen Telefon teile den <strong>Regie-Link</strong> während des Streams (kein zweites Konto nötig)."
self_assign_submit: Das mache ich — Übertragungsverantwortlicher
@@ -613,6 +615,7 @@ de:
clubs:
already_registered: Du hast bereits einen Verein registriert
created: Verein und erstes Team erstellt.
created_complete_subscription: Verein erstellt. Schließe das Abo auf dieser Seite ab.
updated: Verein aktualisiert.
complete_billing_first: Vervollständige deine Rechnungsdaten, bevor du einen Premium-Tarif aktivierst.
comped_change_denied: "Dieser Tarif ist ein von Match Live TV verwaltetes kostenloses Abonnement. Um zu einem kostenpflichtigen Abonnement zu wechseln, kontaktiere den Support."
+8 -5
View File
@@ -78,11 +78,9 @@ en:
first_team_name_placeholder: "e.g. Under 15"
plan_label: "Starting plan (for the whole club)"
plan_free: "Free — 1 transmitter account per team, 1 live stream"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Premium billing
interval_yearly: "Yearly — €59/year (Light) or €199/year (Full)"
interval_monthly: "Monthly — €7.90/month (Light) or €24.90/month (Full)"
plan_light: "Premium Light — €59/year"
plan_full: "Premium Full — €199/year"
plan_hint: "Card, bank transfer or monthly billing are chosen later on the Subscription page. A paid plan activates only after payment."
submit: Create club
billing:
title: "Subscription — %{name}"
@@ -188,6 +186,10 @@ en:
contact_trailer: for a custom offer.
club_payments_link: Club payments and invoices
streaming_staff:
principal_heading: Main account
principal_body_html: "The account used to register the club (<strong>%{email}</strong>) is the one <strong>designated for this team</strong>: use it in the app to start the live stream."
principal_score_hint_html: "For scoring from another phone, share the <strong>control-room link</strong> during the stream (no second account needed)."
extra_staff_heading: Other accounts that can broadcast
self_account_heading: "Your account (%{email})"
self_account_hint: "You can manage streaming from the app. For scoring from another phone, share the <strong>control-room link</strong> during the stream (no second account needed)."
self_assign_submit: I'll do it — broadcast manager
@@ -608,6 +610,7 @@ en:
clubs:
already_registered: You've already registered a club
created: Club and first team created.
created_complete_subscription: Club created. Complete your subscription on this page.
updated: Club updated.
complete_billing_first: Complete your billing details before activating a premium plan.
comped_change_denied: "This plan is a complimentary subscription managed by Match Live TV. To switch to a paid subscription, contact support."
+8 -5
View File
@@ -83,11 +83,9 @@ es:
first_team_name_placeholder: "ej. Sub-15"
plan_label: "Plan inicial (para todo el club)"
plan_free: "Free — 1 cuenta de emisión por equipo, 1 directo"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Facturación premium
interval_yearly: "Anual — 59 €/año (Light) o 199 €/año (Full)"
interval_monthly: "Mensual — 7,90 €/mes (Light) o 24,90 €/mes (Full)"
plan_light: "Premium Light — 59 €/año"
plan_full: "Premium Full — 199 €/año"
plan_hint: "La tarjeta, la transferencia o la facturación mensual se eligen después, en Abono. El plan de pago se activa solo tras el pago."
submit: Crear club
billing:
title: "Suscripción — %{name}"
@@ -193,6 +191,10 @@ es:
contact_trailer: para una oferta a medida.
club_payments_link: Pagos y facturas del club
streaming_staff:
principal_heading: Cuenta principal
principal_body_html: "La cuenta con la que se registró el club (<strong>%{email}</strong>) es la <strong>designada para este equipo</strong>: con ella entras en la app y arrancas el directo."
principal_score_hint_html: "Para el marcador desde otro teléfono, durante el directo comparte el <strong>enlace de control</strong> (no hace falta una segunda cuenta)."
extra_staff_heading: Otras cuentas que pueden transmitir
self_account_heading: "Tu cuenta (%{email})"
self_account_hint: "Puedes gestionar la transmisión desde la app. Para el marcador desde otro teléfono, comparte el <strong>enlace de control</strong> durante el directo (no hace falta una segunda cuenta)."
self_assign_submit: Yo me encargo — responsable de transmisión
@@ -613,6 +615,7 @@ es:
clubs:
already_registered: Ya has registrado un club
created: Club y primer equipo creados.
created_complete_subscription: Club creado. Completa la suscripción en esta página.
updated: Club actualizado.
complete_billing_first: Completa tus datos de facturación antes de activar un plan premium.
comped_change_denied: "Este plan es una suscripción de cortesía gestionada por Match Live TV. Para pasar a una suscripción de pago, contacta con soporte."
+8 -5
View File
@@ -83,11 +83,9 @@ fr:
first_team_name_placeholder: "ex. Under 15"
plan_label: "Forfait de départ (pour tout le club)"
plan_free: "Gratuit — 1 compte diffuseur par équipe, 1 direct"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Facturation premium
interval_yearly: "Annuel — 59 €/an (Light) ou 199 €/an (Full)"
interval_monthly: "Mensuel — 7,90 €/mois (Light) ou 24,90 €/mois (Full)"
plan_light: "Premium Light — 59 €/an"
plan_full: "Premium Full — 199 €/an"
plan_hint: "Carte, virement ou mensualité se choisissent ensuite, sur la page Abonnement. Le forfait payant ne s'active qu'après le paiement."
submit: Créer le club
billing:
title: "Abonnement — %{name}"
@@ -193,6 +191,10 @@ fr:
contact_trailer: pour une offre sur mesure.
club_payments_link: Paiements et factures du club
streaming_staff:
principal_heading: Compte principal
principal_body_html: "Le compte utilisé pour enregistrer le club (<strong>%{email}</strong>) est celui <strong>désigné pour cette équipe</strong> : cest avec lui que tu te connectes à lapp et que tu lances le direct."
principal_score_hint_html: "Pour le score depuis un autre téléphone, pendant le direct partage le <strong>lien régie</strong> (pas besoin dun second compte)."
extra_staff_heading: Autres comptes autorisés à diffuser
self_account_heading: "Ton compte (%{email})"
self_account_hint: "Tu peux gérer la diffusion depuis l'application. Pour le score depuis un autre téléphone, partage le <strong>lien régie</strong> pendant le direct (pas besoin d'un second compte)."
self_assign_submit: C'est moi — responsable diffusion
@@ -613,6 +615,7 @@ fr:
clubs:
already_registered: Tu as déjà inscrit un club
created: Club et première équipe créés.
created_complete_subscription: Club créé. Termine l'abonnement sur cette page.
updated: Club mis à jour.
complete_billing_first: Complète tes données de facturation avant d'activer un forfait premium.
comped_change_denied: "Ce forfait est un abonnement offert géré par Match Live TV. Pour passer à un abonnement payant, contacte le support."
+15 -10
View File
@@ -78,11 +78,9 @@ it:
first_team_name_placeholder: "es. Under 15"
plan_label: "Piano iniziale (per tutta la società)"
plan_free: "Free — 1 account trasmettitore per squadra, 1 live"
plan_light: Premium Light
plan_full: Premium Full
interval_label: Fatturazione premium
interval_yearly: "Annuale — €59/anno (Light) o €199/anno (Full)"
interval_monthly: "Mensile — €7,90/mese (Light) o €24,90/mese (Full)"
plan_light: "Premium Light — €59/anno"
plan_full: "Premium Full — €199/anno"
plan_hint: "Carta, bonifico o cadenza mensile li scegli dopo, nella pagina Abbonamento. Il piano a pagamento si attiva solo dopo il pagamento."
submit: Crea società
billing:
title: "Abbonamento — %{name}"
@@ -188,6 +186,10 @@ it:
contact_trailer: per un'offerta su misura.
club_payments_link: Pagamenti e fatture della società
streaming_staff:
principal_heading: Account principale
principal_body_html: "L'account con cui è stata registrata la società (<strong>%{email}</strong>) è quello <strong>designato per questa squadra</strong>: con quello accedi all'app e avvii la diretta."
principal_score_hint_html: "Per il punteggio da un altro telefono, durante la diretta condividi il <strong>link regia</strong> (non serve un secondo account)."
extra_staff_heading: Altri account che possono trasmettere
self_account_heading: "Il tuo account (%{email})"
self_account_hint: "Puoi gestire la trasmissione dall'app. Per il punteggio da un altro telefono, condividi il <strong>link regia</strong> durante la diretta (non serve un secondo account)."
self_assign_submit: Sono io — responsabile trasmissione
@@ -330,7 +332,7 @@ it:
sdi_or_pec: "Codice destinatario SDI (7 caratteri) o PEC"
sdi_invalid: "Codice destinatario SDI (7 caratteri)"
actions:
current_plan: Piano attuale
current_plan: Piano attivo
contact_for_free: "Per passare al piano Free, contatta il supporto."
stripe_not_configured: Stripe non configurato
stripe_prices_not_configured: Prezzi Stripe non configurati
@@ -436,13 +438,15 @@ it:
pay_button: Paga con bonifico
pay_button_with_price: "Paga con bonifico — %{price}"
or_label: oppure
pending_title: Bonifico in attesa di conferma
pending_body_html: "Hai richiesto <strong>%{plan}</strong> (%{price}). Il piano si attiverà dopo la conferma del pagamento. Causale: <strong>%{causal}</strong>."
pending_proof_html: "Invia la distinta a %{email_link}."
pending_title: Ordine in corso
pending_body_html: "Hai richiesto <strong>%{plan}</strong> (%{price}). Resta in attesa: il piano si attiverà quando Match Live TV confermerà il pagamento."
quote_banner_title: Prezzo concordato
quote_banner_body_html: "Per questa società vale <strong>%{plan}</strong> a <strong>%{price}</strong>. Il pagamento avviene solo con bonifico (non con carta)."
quote_banner_active_title: Piano attivo
quote_banner_active_body_html: "In questo momento vale <strong>%{plan}</strong> a <strong>%{price}</strong>, fino al <strong>%{date}</strong>. Il rinnovo non è automatico."
quote_note: "Nota commerciale: %{note}"
hint: "Il piano resta quello attuale finché Match Live TV non conferma l'accredito."
confirm: "Confermi la richiesta di bonifico? Il piano resta quello attuale finché Match Live TV non conferma l'accredito."
renewal_html: "Con il bonifico l'abbonamento non si rinnova da solo: alla scadenza torna Free, salvo nuovo bonifico o rinnovo da parte nostra."
regia:
meta_title_fallback: "Regia — Match Live TV"
@@ -627,6 +631,7 @@ it:
clubs:
already_registered: Hai già registrato una società
created: Società e prima squadra create.
created_complete_subscription: Società creata. Completa l'abbonamento in questa pagina.
updated: Società aggiornata.
complete_billing_first: Completa i dati di fatturazione prima di attivare un piano premium.
comped_change_denied: "Il piano è un abbonamento omaggio gestito da Match Live TV. Per passare a un abbonamento a pagamento contatta il supporto."
@@ -646,7 +651,7 @@ it:
subscription_canceled: "Abbonamento disdetto. Resta attivo fino al %{date}; da quel giorno passerai al piano Free."
stripe_error: "Errore Stripe: %{message}"
invoice_pdf_unavailable: PDF fattura non disponibile.
bank_transfer_requested: Istruzioni per il bonifico inviate all'email di fatturazione. Il piano si attiverà dopo la conferma del pagamento.
bank_transfer_requested: Richiesta registrata. Il piano si attiverà dopo la conferma del pagamento.
quote_checkout_denied: "Per questa società è attivo un prezzo concordato: usa il pagamento con bonifico."
club_recordings:
not_authorized: Non autorizzato