Billing Stripe, link regia mobile e staff solo trasmissione.
Aggiunge fatturazione club, pagina regia condivisibile senza account, roster squadre e rimuove la modalità controller dall'app (v1.1.0). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
94
backend/app/views/shared/_billing_documents.html.erb
Normal file
94
backend/app/views/shared/_billing_documents.html.erb
Normal file
@@ -0,0 +1,94 @@
|
||||
<%# locals: (club:, payments:, invoices:) %>
|
||||
<section class="billing-documents" style="margin-top:40px">
|
||||
<h2>Pagamenti e fatture</h2>
|
||||
<p style="color:#888;font-size:0.9rem">
|
||||
Qui trovi lo storico dei pagamenti e le fatture emesse alla società.
|
||||
I pagamenti premium sono elaborati in modo sicuro tramite Stripe.
|
||||
</p>
|
||||
|
||||
<% unless club.billing_profile_complete? %>
|
||||
<div class="flash alert" style="margin:16px 0">
|
||||
<strong>Dati di fatturazione incompleti.</strong>
|
||||
Compila ragione sociale, indirizzo, P.IVA/CF e SDI o PEC per ricevere le fatture.
|
||||
<%= link_to "Completa ora", public_club_billing_profile_path(club), class: "btn btn-secondary", style: "margin-top:10px;display:inline-block" %>
|
||||
</div>
|
||||
<% else %>
|
||||
<p style="color:#888;font-size:0.88rem">
|
||||
Intestatario: <%= club.billing_profile_summary %>
|
||||
· <%= link_to "Modifica dati", public_club_billing_profile_path(club) %>
|
||||
</p>
|
||||
<% end %>
|
||||
|
||||
<% if MatchLiveTv.stripe_enabled? && club.subscription&.stripe_customer_id.present? %>
|
||||
<%= button_to "Sincronizza pagamenti da Stripe",
|
||||
public_club_billing_sync_payments_path(club),
|
||||
class: "btn btn-secondary",
|
||||
style: "margin:12px 0" %>
|
||||
<% end %>
|
||||
|
||||
<h3 style="margin-top:28px;font-size:1.1rem">Pagamenti effettuati</h3>
|
||||
<% if payments.any? %>
|
||||
<table class="data billing-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Data</th>
|
||||
<th>Descrizione</th>
|
||||
<th>Importo</th>
|
||||
<th>Stato</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% payments.each do |payment| %>
|
||||
<tr>
|
||||
<td><%= payment.paid_at ? l(payment.paid_at, format: :short) : "—" %></td>
|
||||
<td><%= payment.description.presence || payment.plan_slug&.humanize || "Abbonamento" %></td>
|
||||
<td><%= payment.formatted_amount %></td>
|
||||
<td><%= payment.status %></td>
|
||||
<td>
|
||||
<% if payment.receipt_url.present? %>
|
||||
<%= link_to "Ricevuta Stripe", payment.receipt_url, target: "_blank", rel: "noopener" %>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% else %>
|
||||
<p style="color:#888">Nessun pagamento registrato. Dopo un abbonamento premium comparirà qui (anche tramite «Sincronizza pagamenti»).</p>
|
||||
<% end %>
|
||||
|
||||
<h3 style="margin-top:28px;font-size:1.1rem">Fatture</h3>
|
||||
<% if invoices.any? %>
|
||||
<table class="data billing-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Numero</th>
|
||||
<th>Data</th>
|
||||
<th>Importo</th>
|
||||
<th>Stato</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<% invoices.each do |invoice| %>
|
||||
<tr>
|
||||
<td><%= invoice.number %></td>
|
||||
<td><%= l(invoice.issued_on) %></td>
|
||||
<td><%= invoice.formatted_amount %></td>
|
||||
<td><%= invoice.status %></td>
|
||||
<td>
|
||||
<% if invoice.downloadable? %>
|
||||
<%= link_to "Scarica PDF", public_club_billing_invoice_path(club, invoice) %>
|
||||
<% else %>
|
||||
<span style="color:#888">PDF in preparazione</span>
|
||||
<% end %>
|
||||
</td>
|
||||
</tr>
|
||||
<% end %>
|
||||
</tbody>
|
||||
</table>
|
||||
<% else %>
|
||||
<p style="color:#888">Nessuna fattura disponibile. Compariranno qui dopo l’emissione.</p>
|
||||
<% end %>
|
||||
</section>
|
||||
Reference in New Issue
Block a user