Billing: fatture manuali, profilo obbligatorio e piani Stripe mensile/annuale.

Rimuove link al portale Stripe in area cliente, aggiunge flusso admin per PDF
fattura e email, blocca checkout senza dati di fatturazione, allinea prezzi
a €4,90/€39,90 e €9,90/€69,90, locale italiano e documentazione deploy.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-06-02 17:10:12 +02:00
parent 148402a97c
commit a5e781729c
78 changed files with 2457 additions and 424 deletions

View File

@@ -0,0 +1,36 @@
<%# locals: (club:, subscription:) %>
<% return unless subscription&.premium? && subscription.stripe_subscription_id.present? && MatchLiveTv.stripe_enabled? %>
<section class="subscription-cancel" style="margin-top:24px;padding:16px;border:1px solid #333;border-radius:8px">
<% if subscription.cancel_at_period_end? %>
<p style="color:#e53935;margin:0 0 8px">
<strong>Disdetta programmata.</strong>
Il piano <strong><%= subscription.plan.name %></strong> resta attivo fino al
<% if subscription.current_period_end.present? %>
<strong><%= l_local(subscription.current_period_end.to_date) %></strong>.
<% else %>
<strong>fine del periodo già pagato</strong>.
<% end %>
Da quel giorno la società passerà automaticamente al piano <strong>Free</strong>.
</p>
<p style="color:#888;font-size:0.88rem;margin:0">
Per ripristinare l'abbonamento prima della scadenza, contatta il supporto Match Live TV.
</p>
<% else %>
<p style="color:#aaa;margin:0 0 12px;font-size:0.9rem">
Puoi disdire in qualsiasi momento: l'abbonamento resta valido fino alla fine del periodo già pagato,
poi passi al piano Free senza ulteriori addebiti.
</p>
<%= button_to "Annulla abbonamento",
public_club_billing_cancel_subscription_path(club),
method: :post,
class: "btn btn-outline",
form: {
data: {
turbo_confirm: subscription.current_period_end.present? ?
"Confermi la disdetta? Il piano #{subscription.plan.name} resterà attivo fino al #{l_local(subscription.current_period_end)}, poi passerai al Free." :
"Confermi la disdetta dell'abbonamento?"
}
} %>
<% end %>
</section>