Class: DmEvent::Admin::WorkshopsController

Inherits:
AdminController
  • Object
show all
Includes:
CsvExporter, DmCore::PermittedParams, PermittedParams
Defined in:
app/controllers/dm_event/admin/workshops_controller.rb

Instance Method Summary collapse

Methods included from PermittedParams

#registration_params, #system_email_params, #workshop_params, #workshop_price_params

Instance Method Details

#additional_configurationObject

Handle any additional configuration, such as selecting the attached blog/forum




111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 111

def additional_configuration
  authorize! :manage_events, @workshop
  if put_or_post?
    if @workshop.valid?
      new_blog_id = params[:workshop].delete(:cms_blog).to_i
      if @workshop.cms_blog.try(:id) != new_blog_id
        @workshop.cms_blog = new_blog_id == 0 ? nil : CmsBlog.find(new_blog_id)
      end
  
      new_forum_id = params[:workshop].delete(:forum).to_i
      if @workshop.forum.try(:id) != new_forum_id
        @workshop.forum = new_forum_id == 0 ? nil : Forum.find(new_forum_id)
      end

      #--- remove any extra "custom_field" attributes left during the field definition
      if params[:workshop][:custom_field_defs_attributes]
        params[:workshop][:custom_field_defs_attributes].each_key {|key| params[:workshop][:custom_field_defs_attributes][key].delete(:custom_field)}
      end
      
      @workshop.update_attributes(workshop_params)
      redirect_to additional_configuration_admin_workshop_url(@workshop), notice: 'Workshop was successfully updated.'
    else
      render action: :additional_configuration
    end
  end
end

#ajax_toggle_permissionObject




180
181
182
183
184
185
186
187
188
189
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 180

def ajax_toggle_permission
  authorize! :manage_events, :all
  user = User.find(params[:user_id])
  role = params[:role].to_sym
  if user && [:manage_event, :manage_event_registration, :manage_event_finance].include?(role)
    user.has_role?(role, @workshop) ? user.remove_role(role, @workshop) : user.add_role(role, @workshop)
    user.save!
  end
  render nothing: true
end

#createObject




29
30
31
32
33
34
35
36
37
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 29

def create
  authorize! :manage_events, :all
  @workshop = Workshop.new(workshop_params)
  if @workshop.save
    redirect_to admin_workshop_url(@workshop), notice: 'Workshop was successfully created.'
  else
    render action: :new
  end
end

#destroyObject




68
69
70
71
72
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 68

def destroy
  authorize! :manage_events, :all
  @workshop.destroy
  redirect_to admin_workshops_url, notice: 'Workshop was successfully deleted.'
end

#editObject




24
25
26
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 24

def edit
  authorize! :manage_events, @workshop
end

#edit_system_emailObject

Edit/create of the registration state emails. :email_type is passed in to determine which one we’re editing




77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 77

def edit_system_email
  authorize! :manage_events, @workshop
  redirect_to(admin_workshop_url(@workshop), error: 'Invalid system email type') if params[:email_type].blank?
  # [todo] verify that the email_type is one of the Registration.aasm.states
  
  @system_email = @workshop.send("#{params[:email_type]}_email") || @workshop.send("build_#{params[:email_type]}_email")
  @system_email.email_type = params[:email_type]
  if put_or_post?
    @system_email.attributes = system_email_params
    if @system_email.save
      redirect_to edit_system_email_admin_workshop_path(@workshop, email_type: @system_email.email_type), notice: 'Email was successfully updated.'
    end
  end    
end

#financialsObject




93
94
95
96
97
98
99
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 93

def financials
  authorize! :manage_event_finances, @workshop
  @financials = @workshop.financial_details
  @payments   = PaymentHistory.where(owner_type: 'Registration', owner_id: @workshop.registrations.pluck(:id)).includes(:user_profile, owner: [:user_profile])
  @unpaid     = @workshop.registrations.unpaid.includes(:user_profile, :workshop_price)
  @unpaid     = @unpaid.to_a.delete_if {|i| i.payment_owed.zero?}.sort_by {|i| i.full_name.downcase}
end

#indexObject




11
12
13
14
15
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 11

def index
  authorize! :access_event_section, :all
  @workshops      = Workshop.upcoming.select {|w| can?(:list_events, w)}
  @workshops_past = Workshop.past.select {|w| can?(:list_events, w)}
end

#lost_usersObject




148
149
150
151
152
153
154
155
156
157
158
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 148

def lost_users
  authorize! :manage_event_registrations, @workshop
  if put_or_post?
    @days_ago = params[:lost_users][:days_ago].to_i
    @days_ago = 60 if @days_ago > 60
  else
    @days_ago   = 10
  end
  # @lost_users = Workshop.lost_users(@days_ago)
  @lost_users = @workshop.lost_users(@days_ago)
end

#newObject




18
19
20
21
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 18

def new
  authorize! :manage_events, :all
  @workshop = Workshop.new
end

#permissionsObject




161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 161

def permissions
  authorize! :manage_events, :all
  if put_or_post?
    if params[:user][:user_id]
      user = User.find(params[:user][:user_id])
      if user
        roles = params[:user].delete(:roles)
        [:manage_event, :manage_event_registration, :manage_event_finance].each do |role|
          roles[role].as_boolean ? user.add_role(role, @workshop) : user.remove_role(role, @workshop)
        end
        user.save!
      end
    end
  end
  @event_managers = User.with_role(:event_manager)
  @event_managers_alacarte = User.with_role(:event_manager_alacarte)
end

#send_payment_reminder_emailsObject




139
140
141
142
143
144
145
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 139

def send_payment_reminder_emails
  authorize! :manage_event_finances, @workshop
  status  = @workshop.send_payment_reminder_emails(params[:registration_id])
  msg     = "Reminder emails sent ==>  Success: #{status[:success]}  Failed: #{status[:failed]}"
  status[:failed] > 0 ? (flash[:warning] = msg) : (flash[:notice] = msg)
  redirect_to financials_admin_workshop_url(@workshop)
end

#showObject




50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 50

def show
  authorize! :list_events, @workshop
  respond_to do |format|
    format.html # show.html.erb
    format.json { 
      permissions = {
        manage_events: can?(:manage_events, @workshop),
        manage_event_registrations: can?(:manage_event_registrations, @workshop),
        manage_event_finances: can?(:manage_event_finances, @workshop)
      }
      render json: RegistrationDatatable.new(view_context, current_user, permissions)
    }
    format.xls  { data_export(Registration.csv_columns(@workshop), @workshop.registrations, filename: @workshop.slug, expressions: true, format: 'xls') if can?(:manage_event_registrations, @workshop)}
    format.csv  { data_export(Registration.csv_columns(@workshop), @workshop.registrations, filename: @workshop.slug, expressions: true, format: 'csv') if can?(:manage_event_registrations, @workshop)}
  end
end

#updateObject




40
41
42
43
44
45
46
47
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 40

def update
  authorize! :manage_events, @workshop
  if @workshop.update_attributes(workshop_params)
    redirect_to admin_workshop_url(@workshop), notice: 'Workshop was successfully updated.'
  else
    render action: :edit
  end
end

#user_outstanding_balancesObject

Generate a list of all outstanding balances across all workshops




103
104
105
106
107
# File 'app/controllers/dm_event/admin/workshops_controller.rb', line 103

def user_outstanding_balances
  authorize! :manage_events, :all
  @unpaid = Registration.unpaid.includes(:user_profile, :workshop_price)
  @unpaid = @unpaid.to_a.delete_if {|i| i.balance_owed.zero?}.group_by {|i| i.full_name}.sort_by {|i| i[0].downcase}
end