feat: enhance dashboard and event pages with ended events payout functionality

- Replace 'Recent Ticket Sales' section with 'Événements Terminés' on dashboard
- Add dedicated section for ended events with payout request capabilities
- Display event revenue, ticket sales count, and payout status for ended events
- Implement payout request buttons with status indicators (pending, processing, completed, failed)
- Translate payout section in individual event page to French
- Add visual indicators and confirmations for payout requests
- Improve UX with color-coded status badges and action buttons

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
kbe
2025-09-17 01:37:36 +02:00
parent 59e1854803
commit e4509b1c43
2 changed files with 192 additions and 84 deletions

View File

@@ -293,46 +293,68 @@
<!-- Payout section -->
<% if @event.event_ended? && @event.can_request_payout? %>
<hr class="border-gray-200">
<div class="space-y-3">
<h4 class="text-md font-medium text-gray-900">Paiement des revenus</h4>
<div class="text-sm text-gray-500">
<p>Revenus disponibles : <span class="font-medium">€<%= @event.net_earnings_cents / 100.0 %></span></p>
<p>Frais de plateforme : <span class="font-medium">€<%= @event.total_fees_cents / 100.0 %></span></p>
<div class="space-y-4">
<h4 class="text-lg font-medium text-gray-900">Paiement des Revenus</h4>
<!-- Earnings Summary -->
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
<div class="bg-gray-50 rounded-lg p-4">
<p class="text-sm text-gray-500">Revenus Bruts</p>
<p class="text-lg font-bold text-gray-900">€<%= @event.total_earnings_cents / 100.0 %></p>
</div>
<div class="bg-gray-50 rounded-lg p-4">
<p class="text-sm text-gray-500">Frais Plateforme</p>
<p class="text-lg font-bold text-gray-900">-€<%= @event.total_fees_cents / 100.0 %></p>
</div>
<div class="payout-summary-card">
<p class="payout-summary-label">Revenus Nets</p>
<p class="payout-summary-amount">€<%= @event.net_earnings_cents / 100.0 %></p>
</div>
</div>
<!-- Payout Status -->
<% if @event.payout_status != "not_requested" %>
<div class="bg-blue-50 rounded-lg p-4 border border-blue-200">
<div class="flex items-center">
<% case @event.payout_status %>
<% when "requested" %>
<i data-lucide="clock" class="w-5 h-5 text-blue-500 mr-2"></i>
<span class="font-medium text-blue-800">Paiement Demandé</span>
<% when "processing" %>
<i data-lucide="refresh-cw" class="w-5 h-5 text-blue-500 mr-2"></i>
<span class="font-medium text-blue-800">Paiement en Traitement</span>
<% when "completed" %>
<i data-lucide="check-circle" class="w-5 h-5 text-green-500 mr-2"></i>
<span class="font-medium text-green-800">Paiement Complété</span>
<% when "failed" %>
<i data-lucide="x-circle" class="w-5 h-5 text-red-500 mr-2"></i>
<span class="font-medium text-red-800">Paiement Échoué</span>
<% end %>
</div>
<p class="text-sm text-gray-600 mt-1">Votre demande de paiement est en cours de traitement. Vous recevrez un email quand elle sera terminée.</p>
</div>
<% end %>
<!-- Payout Action -->
<% if @event.payout_status == "not_requested" %>
<%= button_to promoter_payouts_path(event_id: @event.id), method: :post,
data: { confirm: "Êtes-vous sûr de vouloir demander le paiement des revenus ?" },
class: "w-full inline-flex items-center justify-center px-4 py-3 bg-green-600 text-white font-medium text-sm rounded-lg hover:bg-green-700 transition-colors duration-200" do %>
<i data-lucide="dollar-sign" class="w-4 h-4 mr-2"></i>
Demander le paiement
data: { confirm: "Êtes-vous sûr de vouloir demander un paiement de €#{@event.net_earnings_cents / 100.0} ? Cette action ne peut pas être annulée." },
class: "payout-action-button primary" do %>
<i data-lucide="dollar-sign" class="w-5 h-5 mr-2"></i>
Demander le Paiement de €<%= @event.net_earnings_cents / 100.0 %>
<% end %>
<% elsif @event.payout_status == "requested" %>
<div class="w-full inline-flex items-center justify-center px-4 py-3 bg-yellow-100 text-yellow-800 font-medium text-sm rounded-lg">
<i data-lucide="clock" class="w-4 h-4 mr-2"></i>
Paiement demandé
</div>
<% elsif @event.payout_status == "processing" %>
<div class="w-full inline-flex items-center justify-center px-4 py-3 bg-blue-100 text-blue-800 font-medium text-sm rounded-lg">
<i data-lucide="refresh-cw" class="w-4 h-4 mr-2"></i>
Paiement en cours
</div>
<% elsif @event.payout_status == "completed" %>
<div class="w-full inline-flex items-center justify-center px-4 py-3 bg-green-100 text-green-800 font-medium text-sm rounded-lg">
<i data-lucide="check-circle" class="w-4 h-4 mr-2"></i>
Paiement effectué
</div>
<% elsif @event.payout_status == "failed" %>
<div class="w-full inline-flex items-center justify-center px-4 py-3 bg-red-100 text-red-800 font-medium text-sm rounded-lg">
<i data-lucide="x-circle" class="w-4 h-4 mr-2"></i>
Paiement échoué
</div>
<%= button_to promoter_payouts_path(event_id: @event.id), method: :post,
data: { confirm: "Êtes-vous sûr de vouloir redemander le paiement des revenus ?" },
class: "w-full inline-flex items-center justify-center px-4 py-3 bg-green-600 text-white font-medium text-sm rounded-lg hover:bg-green-700 transition-colors duration-200" do %>
<i data-lucide="dollar-sign" class="w-4 h-4 mr-2"></i>
Redemander le paiement
data: { confirm: "Êtes-vous sûr de vouloir demander un nouveau paiement de €#{@event.net_earnings_cents / 100.0} ?" },
class: "payout-action-button warning" do %>
<i data-lucide="refresh-ccw" class="w-5 h-5 mr-2"></i>
Réessayer le Paiement
<% end %>
<% else %>
<%= link_to "Voir les Détails du Paiement", promoter_payouts_path,
class: "payout-action-button secondary" %>
<% end %>
</div>
<% end %>