# Legacy tickets controller - redirects to new order system # # This controller now primarily handles legacy redirects and backward compatibility # Most ticket creation functionality has been moved to OrdersController class TicketsController < ApplicationController before_action :authenticate_user!, only: [ :payment_success, :payment_cancel ] before_action :set_event, only: [ :checkout, :retry_payment ] # Redirect to order-based checkout def checkout # Check for draft order if session[:draft_order_id].present? order = current_user.orders.find_by(id: session[:draft_order_id], status: "draft") if order.present? redirect_to order_checkout_path(order) return end end # No order found @event = Event.includes(:ticket_types).find(params[:id]) redirect_to event_path(@event.slug, @event), alert: "Aucun billet en attente de paiement" end # Redirect to order-based payment success def payment_success redirect_to order_payment_success_path(session_id: params[:session_id]) end # Redirect to order-based payment cancel def payment_cancel redirect_to order_payment_cancel_path end # Redirect retry payment to order system def retry_payment @event = Event.includes(:ticket_types).find(params[:id]) # Look for draft order for this event order = current_user.orders.find_by(event: @event, status: "draft") if order&.can_retry_payment? redirect_to retry_payment_order_path(order) else redirect_to event_path(@event.slug, @event), alert: "Aucune commande disponible pour un nouveau paiement" end end def show @ticket = current_user.orders.joins(:tickets).find(params[:ticket_id]) @event = @ticket.event rescue ActiveRecord::RecordNotFound redirect_to dashboard_path, alert: "Billet non trouvé" end private def set_event event_id = params[:id] || session[:event_id] Rails.logger.debug "TicketsController#set_event - params[:id]: #{params[:id].inspect}, session[:event_id]: #{session[:event_id].inspect}" unless event_id Rails.logger.error "TicketsController#set_event - No event ID found" redirect_to events_path, alert: "Aucun événement spécifié" return end @event = Event.includes(:ticket_types).find(event_id) Rails.logger.debug "TicketsController#set_event - Found event: #{@event.id} - #{@event.name}" rescue ActiveRecord::RecordNotFound Rails.logger.error "TicketsController#set_event - Event not found with ID: #{event_id}" redirect_to events_path, alert: "Événement non trouvé" end def create_stripe_session line_items = @tickets.map do |ticket| { price_data: { currency: "eur", product_data: { name: "#{@event.name} - #{ticket.ticket_type.name}", description: ticket.ticket_type.description }, unit_amount: ticket.price_cents }, quantity: 1 } end Stripe::Checkout::Session.create( payment_method_types: [ "card" ], line_items: line_items, mode: "payment", success_url: payment_success_url + "?session_id={CHECKOUT_SESSION_ID}", cancel_url: payment_cancel_url, metadata: { event_id: @event.id, user_id: current_user.id, ticket_ids: @tickets.pluck(:id).join(",") } ) end end