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