diff --git a/app/controllers/orders_controller.rb b/app/controllers/orders_controller.rb index 14c4af4..bffa5e4 100644 --- a/app/controllers/orders_controller.rb +++ b/app/controllers/orders_controller.rb @@ -97,6 +97,14 @@ class OrdersController < ApplicationController redirect_to event_order_new_path(@event.slug, @event.id) end + # Display all user orders + def index + @orders = current_user.orders.includes(:event, tickets: :ticket_type) + .where(status: [ "paid", "completed" ]) + .order(created_at: :desc) + .page(params[:page]) + end + # Display order summary # # diff --git a/app/controllers/pages_controller.rb b/app/controllers/pages_controller.rb index 56c346c..ad6b423 100755 --- a/app/controllers/pages_controller.rb +++ b/app/controllers/pages_controller.rb @@ -17,30 +17,28 @@ class PagesController < ApplicationController # User dashboard showing personalized content # Accessible only to authenticated users def dashboard - # Metrics for dashboard cards - @booked_events = current_user.orders.joins(tickets: { ticket_type: :event }) - .where(events: { state: :published }) - .where(orders: { status: [ "paid", "completed" ] }) - .sum("1") - @events_today = Event.published.where("DATE(start_time) = ?", Date.current).count - @events_tomorrow = Event.published.where("DATE(start_time) = ?", Date.current + 1).count - @upcoming_events = Event.published.upcoming.count - - # User's booked events - @user_booked_events = Event.joins(ticket_types: { tickets: :order }) - .where(orders: { user: current_user }, tickets: { status: "active" }) - .distinct - .limit(5) + # User's orders with associated data + @user_orders = current_user.orders.includes(:event, tickets: :ticket_type) + .where(status: [ "paid", "completed" ]) + .order(created_at: :desc) + .limit(10) # Draft orders that can be retried @draft_orders = current_user.orders.includes(tickets: [ :ticket_type, :event ]) .can_retry_payment .order(:expires_at) - # Events sections - @today_events = Event.published.where("DATE(start_time) = ?", Date.current).order(start_time: :asc) - @tomorrow_events = Event.published.where("DATE(start_time) = ?", Date.current + 1).order(start_time: :asc) - @other_events = Event.published.upcoming.where.not("DATE(start_time) IN (?)", [ Date.current, Date.current + 1 ]).order(start_time: :asc).page(params[:page]) + # Simplified upcoming events preview - only show if user has orders + if @user_orders.any? + ordered_event_ids = @user_orders.map(&:event).map(&:id) + @upcoming_preview_events = Event.published + .upcoming + .where.not(id: ordered_event_ids) + .order(start_time: :asc) + .limit(6) + else + @upcoming_preview_events = [] + end end # Events page showing all published events with pagination diff --git a/app/views/orders/index.html.erb b/app/views/orders/index.html.erb new file mode 100644 index 0000000..e51f4f2 --- /dev/null +++ b/app/views/orders/index.html.erb @@ -0,0 +1,106 @@ +
Consultez l'historique de toutes vos commandes
+Vous n'avez encore passé aucune commande.
+ <%= link_to events_path, class: "inline-flex items-center px-4 py-2 bg-purple-600 text-white rounded-lg hover:bg-purple-700 transition-colors duration-200" do %> + + Découvrir les événements + <% end %> +