Class: EventsController
- Inherits:
-
ApplicationController
- Object
- ActionController::Base
- ApplicationController
- EventsController
- Defined in:
- app/controllers/events_controller.rb
Overview
This controller manage the views refering to Event model
-
before_action :ApplicationController#powered_in!, except: :reserve
-
before_action :set_event, only: [:edit, :destroy, :confirmed, :confirmed_users]
-
before_action :set_user, only: [:new, :create, :reserve, :meeting_destroy, :meeting_sendmail, :confirmed]
-
before_action :set_meetings, only: [:reserve, :meeting_destroy, :meeting_sendmail]
Instance Method Summary collapse
-
#agenda ⇒ Json
GET /events/agenda.
- #confirmed ⇒ Object
- #confirmed_users ⇒ Object
-
#create ⇒ Object
POST /events POST /events.json.
-
#destroy ⇒ Object
DELETE /events/1 DELETE /events/1.json.
-
#edit ⇒ Object
GET /events/1/edit.
-
#index ⇒ Object
GET /events.
-
#meeting_destroy ⇒ Object
DELETE /events/1 DELETE /events/1.json.
- #meeting_sendmail ⇒ Object
- #meetings ⇒ Object
-
#new ⇒ Object
GET /events/new.
- #print ⇒ Object
- #reserve ⇒ Object
Methods inherited from ApplicationController
#admin_in!, #doctor_in!, #powered_in!, #secretary_in!, #translate_errors
Instance Method Details
#agenda ⇒ Json
GET /events/agenda
render a json with the events to popolate the calendari
-
set @start date for the query from params, if empty is set to beginning of the month
-
set @stop date for the query from params, if empty is set to end of month
-
set @events with Event.between param :start and param :stop
32 33 34 35 36 37 |
# File 'app/controllers/events_controller.rb', line 32 def agenda start = params[:start].presence || Time.zone.today.at_beginning_of_month stop = params[:end].presence || Time.zone.today.at_end_of_month @events = Event.between(start_on: start, stop_on: stop) render json: @events.map { |event| { id: "event-#{event.id}", title: "#{event.city} (#{event.meetings.confirmed.joins(:audit).group(:user_id).count.count}/#{event.users.distinct.count})", start: event.date_on, allDay: true, date_on: event.date_on, gender: event.gender, city: I18n.t(event.city, scope: 'user.cities', default: event.city), className: [event.gender.to_s], url: event_path(id: event.id) } } end |
#confirmed ⇒ Object
165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'app/controllers/events_controller.rb', line 165 def confirmed @meeting = @user.meetings.find_by(event: @event) @meeting.sended_at = Time.zone.now if @meeting.save && @user.email.present? if @event.status(@user) == 'proposed' if @event.analisys? @response = Notifier.user_event_analisys(@user, @event).deliver_now elsif @event.visit? @response = Notifier.user_event_visit(@user, @event).deliver_now end else @response = Notifier.user_event_confirmed(@user, @event).deliver_now end end @zone = params[:zone].presence || 'users' if @zone == 'users' @event = Event.new set_timer render partial: 'new', locals: { meeting: @meeting, event: @event, user: @user, view: @view, timer: @timer }, status: :ok elsif @zone == 'events' render partial: 'events/meeting', locals: { meeting: @meeting, event: @event, user: @user, timer: @timer }, status: :ok end end |
#confirmed_users ⇒ Object
189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'app/controllers/events_controller.rb', line 189 def confirmed_users @meetings = @event.meetings.joins(:user).order('meetings.start_at asc, users.label asc').to_a.uniq { |a| a.user.id } @meetings.each do |meeting| user = meeting.user response = user.email.blank? ? false : Notifier.user_event_confirmed(user, @event).deliver_now if response meeting.sended_at = Time.zone.now meeting.save end end render turbo_stream: [ turbo_stream.update("event_#{@event.id}_meetings", partial: 'events/meeting', collection: @meetings, as: :meeting, locals: { event: @event }) ] end |
#create ⇒ Object
POST /events POST /events.json
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'app/controllers/events_controller.rb', line 64 def create @current_event = Event.find_or_initialize_by(date_on: params[:event][:date_on].to_date, gender: Event.genders[params[:event][:gender]], city: params[:event][:city]) if params[:event][:ids] != [''] @result = @current_event.update(event_params) else @result = false @message = t('select_one_category', scope: 'message.meeting').to_s end @event = Event.new if @result set_timer flash.now[:success] = 'Creazione avvenuta con successo' render turbo_stream: [ turbo_stream.replace(:flashes, partial: "flashes"), turbo_stream.replace("user_#{@user.id}_event_form", partial: "events/form", locals: {user: @user, event: @event, timer: @timer, view: @view}), turbo_stream.update("user_#{@user.id}_events", partial: "events/events", locals: {user: @user}), turbo_stream.update("user_#{@user.id}", partial: "users/user", locals: {user: @user}) ] else set_timer flash.now[:error] = @message render turbo_stream: [ turbo_stream.replace(:flashes, partial: "flashes"), turbo_stream.replace("user_#{@user.id}_event_form", partial: "events/form", locals: {user: @user, event: @event, timer: @timer, view: @view}) ] end end |
#destroy ⇒ Object
DELETE /events/1 DELETE /events/1.json
120 121 122 123 124 125 126 127 128 |
# File 'app/controllers/events_controller.rb', line 120 def destroy old_event = @event old_event.destroy flash.now[:success] = 'Cancellazione avvenuta con successo' render turbo_stream: [ turbo_stream.replace(:flashes, partial: "flashes", locals: {force: 'true'}), turbo_stream.update('yield', partial: "events/index") ] end |
#edit ⇒ Object
GET /events/1/edit
51 52 53 54 55 56 57 58 59 60 |
# File 'app/controllers/events_controller.rb', line 51 def edit @event = Event.find(@event.id) @meetings = @event.meetings.joins(:user).order('meetings.start_at asc, users.label asc').to_a.uniq { |a| a.user.id } @title = "#{t @event.gender, scope: 'event.genders'} #{@event.city.capitalize} del #{l @event.date_on}" timer = [] Settings.events.ranges.each do |range| timer += (range.start_time.in_time_zone.to_datetime.to_i .. range.end_time.in_time_zone.to_datetime.to_i).step(range.interval.minutes).map{|t| Time.zone.at(t).strftime('%H:%M') } end @timer = timer.uniq.sort end |
#index ⇒ Object
GET /events
render events index
-
set @meetings with all future events
21 22 23 |
# File 'app/controllers/events_controller.rb', line 21 def index # @meetings = Event.future.where(id: Meeting.waiting.distinct(:event_id).pluck(:event_id)) end |
#meeting_destroy ⇒ Object
DELETE /events/1 DELETE /events/1.json
136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 |
# File 'app/controllers/events_controller.rb', line 136 def meeting_destroy @zone = params[:zone].presence || 'users' @meetings.destroy_all @destroyed = !Event.exists?(@event.id) if @zone == 'users' # && !@destroyed @event = Event.new flash.now[:success] = 'Cancellazione avvenuta con successo' elsif @zone != 'users' && !@destroyed flash.now[:success] = 'Modifica avvenuta con successo' end render turbo_stream: [ turbo_stream.replace(:flashes, partial: "flashes"), turbo_stream.update("user_#{@user.id}_events", partial: "events/events", locals: {user: @user}), turbo_stream.update("user_#{@user.id}", partial: "users/user", locals: {user: @user}), turbo_stream.update("event_#{@event.id}_meetings", partial: 'events/meeting', collection: @event.meetings.joins(:user).order('meetings.start_at asc, users.label asc').to_a.uniq { |a| a.user.id }, as: :meeting, locals: {event: @event}), ] end |
#meeting_sendmail ⇒ Object
154 155 156 157 158 |
# File 'app/controllers/events_controller.rb', line 154 def meeting_sendmail @zone = params[:zone].presence || 'users' Notifier.user_event(@user, @event).deliver_now @meetings.update(sended_at: Time.zone.now) end |
#meetings ⇒ Object
130 131 132 |
# File 'app/controllers/events_controller.rb', line 130 def meetings @meetings = @event.meetings.joins(:user).order('meetings.start_at asc, users.label asc').to_a.uniq { |a| a.user.id } end |
#new ⇒ Object
GET /events/new
render
42 43 44 45 46 47 48 |
# File 'app/controllers/events_controller.rb', line 42 def new @setdatevalue = '' @setdatevalue = params[:date] if params[:date].present? @event = Event.new @title = "Gestione eventi #{@user.label}" set_timer end |
#print ⇒ Object
160 161 162 163 |
# File 'app/controllers/events_controller.rb', line 160 def print @filter = params[:filter] @filename = @filter.blank? ? 'print.xlsx' : "#{@filter}.xlsx" end |
#reserve ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 |
# File 'app/controllers/events_controller.rb', line 92 def reserve @template = params[:template].presence || 'user' @event.user = @user old_status = @event.status(@user) @result = @event.update_status! if current_user.secretary? || (current_user == @user && @event.status(@user) == 'proposed') @meeting = @user.meetings.find_by(event: @event) @response = Notifier.user_event_confirmed(@user, @event).deliver_now if @result && current_user.secretary? && (@event.status(@user) != old_status) if @template == 'user' render partial: 'home/user_event', locals: { meeting: @meeting, event: @event, user: @user } else if @template == 'secretary' set_timer render turbo_stream: [ turbo_stream.replace("user_#{@user.id}", partial: 'users/user', locals: { meeting: @meeting, event: @event, user: @user, timer: @timer }), turbo_stream.replace("user_#{@user.id}_event_#{@event.id}", partial: 'users/user_event', locals: { event: @event, user: @user }) ] else render turbo_stream: [ turbo_stream.replace("meeting_#{@meeting.id}", partial: 'events/meeting', locals: { meeting: @meeting, event: @event, user: @user }), turbo_stream.replace("event_#{@event.id}_summary", partial: 'events/summary', locals: { meeting: @meeting, event: @event, user: @user }), turbo_stream.update('yield', partial: "events/index") ] end end end |