seminar/app/controllers/admin/seminars_controller.rb

198 lines
5.1 KiB
Ruby

# encoding: utf-8
class Admin::SeminarsController < OrbitAdminController
require 'axlsx'
before_action ->(module_app = @app_title) { set_variables module_app }
before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy]
def initialize
super
@app_title = "seminar"
end
def filter_fields(categories)
{
:category=>categories.map{|c| {:title=>(c.title.blank? ? " " : c.title), :id=>c.id}}
}
end
def index
@categories = @module_app.categories.enabled
@filter_fields = filter_fields(@categories)
@table_fields = [:category, 'seminar.title', 'seminar.event_during', 'seminar.signup_during', 'seminar.signup_count', 'seminar.export']
if !params[:sort].blank?
if params[:sort] == 'event_during'
sort = {:seminar_start_date.to_sym=>params[:order]}
elsif params[:sort] == 'signup_during'
sort = {:signup_start_date.to_sym=>params[:order]}
else
sort = {params[:sort].to_sym=>params[:order]}
end
else
sort = {:signup_start_date=>"desc"}
end
@seminars = SeminarMain.all.order_by(sort).with_categories(filters("category"))
@seminars = search_data(@seminars,[:title]).page(params[:page]).per(10)
if request.xhr?
render :partial => "index"
end
end
def export
@seminar = SeminarMain.find(params[:id])
@seminar_signups = SeminarSignup.where(:seminar_main_id => params[:id])
filename = @seminar.title.parameterize.underscore + "_export.xlsx"
respond_to do |format|
format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="' + filename + '"'
}
end
end
def new
@member = nil
@seminar = SeminarMain.new
@seminar_items = SeminarItem.all
@review = @seminar.seminar_reviews.new()
end
def create
if !seminar_params['seminar_links_attributes'].nil?
seminar_params['seminar_links_attributes'].each do |idx,link|
seminar_params['seminar_links_attributes'].delete(idx.to_s) if link['url'].blank?
end
end
seminar = SeminarMain.new(seminar_params)
seminar.create_user_id = current_user.id
seminar.update_user_id = current_user.id
seminar.save
redirect_to params['referer_url']
end
def edit
@seminar_items = SeminarItem.all
attribute = SeminarMain.where(id: params[:id])
if attribute.first.seminar_reviews.first.nil?
@review = attribute.first.seminar_reviews.new()
else
@review = attribute.first.seminar_reviews.first
end
@member = MemberProfile.find(@review.reviewer_id) rescue nil
end
def update
params[:seminar_main][:registration_status] = (params[:seminar_main][:registration_status] ? params[:seminar_main][:registration_status] : [])
uid = params[:id].split('-').last
@seminar = SeminarMain.find_by(:uid=>uid)
if params[:seminar_main][:seminar_signup_fields]
seminar_params[:seminar_signup_fields].each do |a|
@field_name = 'seminar_main'
field_status = a.last[:id].present?
@attribute_field = SeminarSignupField.add_seminar_signup_field(@seminar, a.last, a.last[:id], field_status)
@attribute = @seminar
end
flash.now[:notice] = "Updated Fields"
@seminar.seminar_signup_fields.each{|t| t.destroy if t["to_delete"] == true}
redirect_to admin_seminars_path
else
if !seminar_params['seminar_links_attributes'].nil?
seminar_params['seminar_links_attributes'].each do |idx,link|
seminar_params['seminar_links_attributes'].delete(idx.to_s) if link['url'].blank?
end
end
@seminar.update_user_id = current_user.id
if @seminar.update_attributes(seminar_params)
@seminar.seminar_signup_fields.each{|t| t.destroy if t["to_delete"] == true}
redirect_to params['referer_url']
else
flash.now[:error] = t('update.error.category')
render action: :edit
end
end
end
def set_write_off
@seminar.donation_write_off_status = true
@seminar.save
redirect_to "/admin/seminars?page=#{params['page']}"
end
def destroy
@seminar.destroy
redirect_to "/admin/seminars"
end
def seminar_signup_field
@field_name = 'seminar_main'
@attribute = SeminarMain.find(params[:id])
@attribute_type = 'seminar'
@class = 'seminars'
end
def seminar_signup
if !params[:search].blank?
@seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id, :name=>params[:search]).page(params[:page]).per(10)
else
@seminar_signups = SeminarSignup.where(:seminar_main_id => @seminar.id).page(params[:page]).per(10)
end
end
def edit_seminar_signup
@seminar_signup = SeminarSignup.find(params[:id])
@seminar = SeminarMain.find(@seminar_signup.seminar_main_id)
end
def delete_seminar_signup
@seminar_signup = SeminarSignup.find(params[:id])
@seminar_id = @seminar_signup.seminar_main_id
@seminar_signup.destroy
redirect_to "/admin/seminars/@seminar_id.to_s/seminar_signup"
end
private
def set_seminar
@seminar = SeminarMain.find(params[:id])
end
def seminar_params
params.require(:seminar_main).permit!
end
end