Class: Editor::TicketsController

Inherits:
ApplicationController show all
Defined in:
app/controllers/editor/tickets_controller.rb

Overview

This controller manage Ticket model for editors

Instance Method Summary collapse

Methods inherited from ApplicationController

#authenticate_editor!

Methods inherited from ApplicationController

#access_denied!, #default_url_options, #record_not_found!, #set_turbo, #switch_locale

Instance Method Details

#check_happeningObject (private)



67
68
69
# File 'app/controllers/editor/tickets_controller.rb', line 67

def check_happening
  access_denied! unless event_ids.include?(Happening.find(ticket_params[:happening_id]).event_id)
end

#createObject

POST /editor/events/:event_id/happenings/:happening_id/tickets/



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/controllers/editor/tickets_controller.rb', line 33

def create
  @ticket = Ticket.new(ticket_params)
  @ticket.by_editor = true
  if @ticket.save
    broadcast_action_to "editor:happening_#{@ticket.happening_id}", action: :prepend, target: "editor_tickets",
                                                                    locals: { ticket: self }, partial: "editor/tickets/ticket"
    render turbo_stream: [
      turbo_stream.replace("editor_ticket_#{@ticket.id}", partial: "ticket", locals: { ticlet: @ticket }),
      turbo_stream.replace("modal", partial: "modal_empty")
    ]

    render "empty_modal"
  else
    @status = { error: "Creatione prenotazione fallita" }
    render action: "new"
  end
end

#destroyObject

DELETE /editor/events/:event_id/happenings/:happening_id/tickets/:id



61
62
63
# File 'app/controllers/editor/tickets_controller.rb', line 61

def destroy
  @ticket.destroy
end

#editObject

GET /editor/events/:event_id/happenings/:happening_id/tickets/:id/edit



28
29
30
# File 'app/controllers/editor/tickets_controller.rb', line 28

def edit
  @users = User.pluck :email, :id
end

#event_idsObject (private)

set @event before any action



72
73
74
# File 'app/controllers/editor/tickets_controller.rb', line 72

def event_ids
  current_user.events.pluck(:id)
end

#filter_paramsObject (private)

Filter params for search an Ticket



93
94
95
# File 'app/controllers/editor/tickets_controller.rb', line 93

def filter_params
  params.fetch(:filter, {}).permit(:category, :from, :scope, :text, :to)
end

#happening_id(value) ⇒ Object (private)

Set @happening before any action



77
78
79
# File 'app/controllers/editor/tickets_controller.rb', line 77

def happening_id(value)
  Happening.find_by(id: value, event_id: event_ids).id
end

#indexObject

GET /editor/tickets



11
12
13
14
15
16
17
18
19
# File 'app/controllers/editor/tickets_controller.rb', line 11

def index
  @scope = filter_params[:scope]
  search = {}
  search[:happening] = { start_at: ((filter_params[:from].try(:to_date) || Date.today)..filter_params[:to].try(:to_date).try(:end_of_day)) }
  search[:happening_id] = @scope if @scope.present?
  search[:user_id] = filter_params[:category] if filter_params[:category].present?
  @text = [ "events.title ilike :text or users.email ilike :text", { text: "%#{filter_params[:text]}%" } ] if filter_params[:text].present?
  @pagy, @tickets = pagy Ticket.includes(happening: [ :event ]).where(search).where(@text), items: 10
end

#newObject

GET /editor/events/:event_id/happenings/:happening_id/tickets/new



22
23
24
25
# File 'app/controllers/editor/tickets_controller.rb', line 22

def new
  @ticket = Ticket.new(happening_id: happening_id(filter_params[:happening_id]))
  @users = User.pluck :email, :id
end

#set_ticketObject (private)

Set ticket when needed



82
83
84
85
# File 'app/controllers/editor/tickets_controller.rb', line 82

def set_ticket
  @ticket = Ticket.includes(:happening).find(params[:id])
  access_denied! unless event_ids.include?(@ticket.happening.event_id)
end

#ticket_paramsObject (private)

Filter params for set a ticket



88
89
90
# File 'app/controllers/editor/tickets_controller.rb', line 88

def ticket_params
  params.require(:ticket).permit(:happening_id, :user_id, :seats)
end

#updateObject

PATCH/PUT /editor/events/:event_id/happenings/:happening_id/tickets/:id



52
53
54
55
56
57
58
# File 'app/controllers/editor/tickets_controller.rb', line 52

def update
  if @ticket.update(ticket_params.merge(by_editor: true))
    render partial: "modal_empty"
  else
    render partial: "form", locals: { ticket: @ticket, happening: @happening, event: @event }
  end
end