diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index e6a6b91..c421b7d 100755 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -39,6 +39,52 @@ class PagesController < ApplicationController .can_retry_payment .order(:expires_at) + # Promoter-specific data if user is a promoter + if current_user.promoter? + @promoter_events = current_user.events.includes(:orders, :tickets) + .order(created_at: :desc) + .limit(5) + + # Revenue metrics for promoter + @total_revenue = current_user.events + .joins(:orders) + .where(orders: { status: ['paid', 'completed'] }) + .sum('orders.total_amount_cents') / 100.0 + + @total_tickets_sold = current_user.events + .joins(:tickets) + .where(tickets: { status: 'active' }) + .count + + @active_events_count = current_user.events.where(state: 'published').count + @draft_events_count = current_user.events.where(state: 'draft').count + + # Recent orders for promoter events + @recent_orders = Order.joins(:event) + .where(events: { user: current_user }) + .where(status: ['paid', 'completed']) + .includes(:event, :user, tickets: :ticket_type) + .order(created_at: :desc) + .limit(10) + + # Monthly revenue trend (last 6 months) + @monthly_revenue = (0..5).map do |months_ago| + start_date = months_ago.months.ago.beginning_of_month + end_date = months_ago.months.ago.end_of_month + + revenue = current_user.events + .joins(:orders) + .where(orders: { status: ['paid', 'completed'] }) + .where(orders: { created_at: start_date..end_date }) + .sum('orders.total_amount_cents') / 100.0 + + { + month: start_date.strftime("%B %Y"), + revenue: revenue + } + end.reverse + end + # Simplified upcoming events preview - only show if user has orders if @user_orders.any? ordered_event_ids = @user_orders.map(&:event).map(&:id) diff --git a/app/models/user.rb b/app/models/user.rb index be9ca19..46c1bd5 100755 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -40,9 +40,8 @@ class User < ApplicationRecord # Authorization methods def can_manage_events? - # For now, all authenticated users can manage events - # This can be extended later with role-based permissions - true + # Only professional users can manage events + is_professionnal? end def promoter? diff --git a/app/views/components/_header.html.erb b/app/views/components/_header.html.erb index a0eda2f..ac57370 100755 --- a/app/views/components/_header.html.erb +++ b/app/views/components/_header.html.erb @@ -19,6 +19,18 @@ Tableau de bord <% end %> + <% if user_signed_in? && current_user.promoter? %> + <%= link_to new_promoter_event_path, + class: "text-gray-700 hover:text-brand-primary py-2 text-sm font-medium transition-colors duration-200 relative after:absolute after:bottom-0 after:left-0 after:h-0.5 after:w-0 hover:after:w-full after:bg-brand-primary after:transition-all after:duration-200" do %> + Créer un événement + <% end %> + + <%= link_to promoter_events_path, + class: "text-gray-700 hover:text-brand-primary py-2 text-sm font-medium transition-colors duration-200 relative after:absolute after:bottom-0 after:left-0 after:h-0.5 after:w-0 hover:after:w-full after:bg-brand-primary after:transition-all after:duration-200" do %> + Mes événements + <% end %> + <% end %> + + + <%= render 'components/breadcrumb', crumbs: [ + { name: 'Accueil', path: root_path }, + { name: 'Tableau de bord', path: dashboard_path } + ] %> +
Revenus Total
+€<%= number_with_delimiter(@total_revenue, delimiter: ' ') %>
+Billets Vendus
+<%= @total_tickets_sold %>
+Événements Publiés
+<%= @active_events_count %>
+Brouillons
+<%= @draft_events_count %>
+Derniers 6 mois
+Dernières commandes pour vos événements
+| Événement | +Client | +Billets | +Montant | +Date | +
|---|---|---|---|---|
| <%= order.event.name %> | +<%= order.user.email %> | +<%= order.tickets.count %> | +€<%= order.total_amount_euros %> | +<%= order.created_at.strftime("%d/%m/%Y") %> | +