107 lines
3.3 KiB
Ruby
107 lines
3.3 KiB
Ruby
# 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
|