From 5279ebe1a428db7bd94a547e15b401088f1d9eaa Mon Sep 17 00:00:00 2001 From: kbe Date: Tue, 16 Sep 2025 17:15:09 +0200 Subject: [PATCH] feat(event available/sold out): Promoter can mark event as sold out or available On the event page, promoter can choose to mark the event as "sold out" using the status field or as "published". Only published event can be marked as sold out if promoter thinks he cannot handle all the people available. --- app/controllers/promoter/events_controller.rb | 12 ++++++++++- app/models/event.rb | 1 - app/views/promoter/events/show.html.erb | 21 +++++++++++++++---- config/routes.rb | 1 + 4 files changed, 29 insertions(+), 6 deletions(-) diff --git a/app/controllers/promoter/events_controller.rb b/app/controllers/promoter/events_controller.rb index 31e2ada..a45c7c0 100644 --- a/app/controllers/promoter/events_controller.rb +++ b/app/controllers/promoter/events_controller.rb @@ -5,7 +5,7 @@ class Promoter::EventsController < ApplicationController before_action :authenticate_user! before_action :ensure_can_manage_events! - before_action :set_event, only: [ :show, :edit, :update, :destroy, :publish, :unpublish, :cancel, :mark_sold_out, :duplicate ] + before_action :set_event, only: [ :show, :edit, :update, :destroy, :publish, :unpublish, :cancel, :mark_sold_out, :mark_available, :duplicate ] # Display all events for the current promoter def index @@ -93,6 +93,16 @@ class Promoter::EventsController < ApplicationController end end + # Mark event as available again + def mark_available + if @event.sold_out? + @event.update(state: :published) + redirect_to promoter_event_path(@event), notice: "Event marqué comme disponible!" + else + redirect_to promoter_event_path(@event), alert: "Cet event ne peut pas être marqué comme disponible." + end + end + # Duplicate an event and all its ticket types def duplicate clone_ticket_types = params[:clone_ticket_types] == "true" diff --git a/app/models/event.rb b/app/models/event.rb index 674770c..2fa5daa 100755 --- a/app/models/event.rb +++ b/app/models/event.rb @@ -55,7 +55,6 @@ class Event < ApplicationRecord # Scope for published events ordered by start time scope :upcoming, -> { published.where("start_time >= ?", Time.current).order(start_time: :asc) } - # === Instance Methods === # Check if coordinates were successfully geocoded or are fallback coordinates diff --git a/app/views/promoter/events/show.html.erb b/app/views/promoter/events/show.html.erb index fe95cb4..ce0b4a1 100644 --- a/app/views/promoter/events/show.html.erb +++ b/app/views/promoter/events/show.html.erb @@ -132,10 +132,14 @@
-
+

Événement complet

Tous les billets pour cet événement ont été vendus.

+ <%= button_to mark_available_promoter_event_path(@event), method: :patch, class: "ml-4 inline-flex items-center px-3 py-1 bg-white border border-blue-300 text-blue-700 text-sm font-medium rounded-lg hover:bg-blue-50 transition-colors duration-200" do %> + + Marquer comme disponible + <% end %>
<% end %> @@ -273,10 +277,19 @@ Gérer les types de billets <% end %> - <%= button_to mark_sold_out_promoter_event_path(@event), method: :patch, class: "w-full inline-flex items-center justify-center px-4 py-3 bg-gray-50 text-gray-700 font-medium text-sm rounded-lg hover:bg-gray-100 transition-colors duration-200", disabled: !@event.published? do %> - - Marquer comme complet + + <% if @event.sold_out? %> + <%= button_to mark_available_promoter_event_path(@event), method: :patch, class: "w-full inline-flex items-center justify-center px-4 py-3 bg-blue-50 text-blue-700 font-medium text-sm rounded-lg hover:bg-blue-100 transition-colors duration-200" do %> + + Marquer comme disponible + <% end %> + <% elsif @event.published? %> + <%= button_to mark_sold_out_promoter_event_path(@event), method: :patch, class: "w-full inline-flex items-center justify-center px-4 py-3 bg-gray-50 text-gray-700 font-medium text-sm rounded-lg hover:bg-gray-100 transition-colors duration-200" do %> + + Marquer comme complet + <% end %> <% end %> +
<%= button_to promoter_event_path(@event), method: :delete, data: { confirm: "Êtes-vous sûr de vouloir supprimer cet événement ? Cette action est irréversible." }, diff --git a/config/routes.rb b/config/routes.rb index d4bf3be..ce1b6b6 100755 --- a/config/routes.rb +++ b/config/routes.rb @@ -81,6 +81,7 @@ Rails.application.routes.draw do patch :unpublish patch :cancel patch :mark_sold_out + patch :mark_available post :duplicate end