Add assign session feature.

Add copy feature.
This commit is contained in:
bohung committed 2021-04-04 00:23:52 +08:00
1 parent ed1ebc8ec3
commit f83fb71f2a
26 files changed
+879 -97

No files matched your search

+133 -25
View File
@@ -5,10 +5,10 @@ class Admin::SeminarsController < OrbitAdminController
include Admin::SeminarsHelper
helper Admin::SeminarsFieldHelper
before_action ->(module_app = @app_title) { set_variables module_app }
before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block,:update_seminar_review,:reviewer_setting,:update_reviewer_setting]
before_action :set_seminar_signup_admin_setting, only: [:seminar_signup,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block]
before_action :check_permission_for_seminar, only: [:seminar_signup,:get_reviewer_block]
before_action :check_manager_for_seminar, only: [:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:update_seminar_review]
before_action :set_seminar, only: [:edit, :set_write_off, :seminar_signup, :destroy,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block,:get_session_block,:update_seminar_review,:update_seminar_session,:reviewer_setting,:update_reviewer_setting]
before_action :set_seminar_signup_admin_setting, only: [:seminar_signup,:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:get_reviewer_block,:get_session_block]
before_action :check_permission_for_seminar, only: [:seminar_signup,:get_reviewer_block,:get_session_block]
before_action :check_manager_for_seminar, only: [:seminar_signup_admin_setting,:update_seminar_signup_admin_setting,:update_seminar_review,:update_seminar_session]
def initialize
super
@app_title = "seminar"
@@ -89,9 +89,12 @@ class Admin::SeminarsController < OrbitAdminController
#render :html => seminar_params and return
@seminar.update_attributes(seminar_params)
unassigned_seminar_signup_ids = @seminar.seminar_signup_ids.map{|s| s.to_s}
unassigned_mode_1_seminar_signup_ids = unassigned_seminar_signup_ids.dup
@seminar.seminar_reviews.each do |sr|
unassigned_mode_1_seminar_signup_ids = unassigned_mode_1_seminar_signup_ids - sr.get_all_seminar_signup_ids(1)
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
@seminar.unassigned_mode_1_seminar_signup_ids = unassigned_mode_1_seminar_signup_ids
@seminar.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
@seminar.save
redirect_to admin_seminars_path
@@ -119,10 +122,14 @@ class Admin::SeminarsController < OrbitAdminController
end
unless @can_edit
if @seminar_signups.class != Array
seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:seminar_signup_ids).flatten
remove_seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:remove_seminar_signup_ids).flatten
default_seminar_signup_ids = SeminarReview.where(:reviewer_id=>reviewer_id).pluck(:default_seminar_signup_ids).flatten
all_seminar_signup_ids = seminar_signup_ids - remove_seminar_signup_ids + default_seminar_signup_ids
seminar_review = SeminarReview.where(:reviewer_id=>reviewer_id)
seminar_signup_ids = seminar_review.pluck(:seminar_signup_ids).flatten
remove_seminar_signup_ids = seminar_review.pluck(:remove_seminar_signup_ids).flatten
assign_ids = []
seminars = SeminarMain.where(:id.in => seminar_review.pluck(:seminar_main_id))
final_assign_signup_ids = SeminarSession.where(:id.in=>seminar_review.pluck(:seminar_session_ids).flatten,:seminar_main_id.in=>seminars.where(:assign_mode=>1).pluck(:id)).pluck(:seminar_signup_ids).flatten
default_seminar_signup_ids = seminar_review.where(:seminar_main_id.in=>seminars.where(:assign_mode=>0).pluck(:id)).pluck(:default_seminar_signup_ids).flatten
all_seminar_signup_ids = seminar_signup_ids - remove_seminar_signup_ids + final_assign_signup_ids + default_seminar_signup_ids
ids2 = SeminarSignup.where(:seminar_main_id.in=> SeminarMain.where(:organizer_id=>current_user.member_profile_id).pluck(:id)).pluck(:id)
@@ -130,6 +137,18 @@ class Admin::SeminarsController < OrbitAdminController
end
end
end
def get_hide_session
seminar_main = SeminarMain.find(params[:id]) rescue nil
if seminar_main.nil?
render :nothing => true
else
@seminar = seminar_main
@seminar_sessions = @seminar.seminar_sessions
@hide_session_ids = (0...seminar_main.summary_chioices.count).to_a - Array(seminar_main.session_show_ids)
@hide_sessions = @hide_session_ids.zip(seminar_main.summary_chioices[Range.new(@hide_session_ids[0],@hide_session_ids[-1])]).to_h
render :layout => false
end
end
def get_hide_reviewer
seminar_main = SeminarMain.find(params[:id]) rescue nil
if seminar_main.nil?
@@ -137,9 +156,18 @@ class Admin::SeminarsController < OrbitAdminController
else
@hide_reviewer_ids = Array(seminar_main.reviewer_ids) - Array(seminar_main.reviewer_show_ids)
@hide_reviewers = MemberProfile.where(:id.in=>@hide_reviewer_ids)
@reviewers = seminar_main.seminar_reviews.where(:reviewer_id.in=>@hide_reviewer_ids).to_a
render :layout => false
end
end
def get_session_block
@session_id = params[:session_id].to_i
unless (@seminar.session_show_ids.include?(@session_id) rescue false)
@seminar.session_show_ids << @session_id
@seminar.save
end
render :layout => false
end
def get_reviewer_block
@reviewer_id = params[:reviewer_id]
unless (@seminar.reviewer_show_ids.include?(@reviewer_id) rescue false)
@@ -148,6 +176,42 @@ class Admin::SeminarsController < OrbitAdminController
end
render :layout => false
end
def update_seminar_session
if @seminar.nil?
render :json => {:success => false}
else
seminar_main = @seminar
session_id = params[:session_id].to_i
seminar_main.save
seminar_session = @seminar.seminar_sessions.where(:key=>session_id).first
if params[:mode] == "append"
@seminar_signup.update(:final_session=>session_id)
seminar_session.seminar_signup_ids << @seminar_signup.id.to_s
@seminar_signup.update(:seminar_session_id=>seminar_session.id)
seminar_main.assign_mode = 1
seminar_session.save
seminar_main.unassigned_mode_1_seminar_signup_ids.delete(@seminar_signup.id.to_s)
elsif params[:mode] == "remove"
@seminar_signup.update(:final_session=>nil)
seminar_session.seminar_signup_ids.delete(@seminar_signup.id.to_s)
@seminar_signup.update(:seminar_session_id=>nil)
seminar_session.save
seminar_main.assign_mode = 0 if seminar_main.seminar_sessions.where(:seminar_signup_ids.ne=>[]).count == 0
seminar_main.unassigned_mode_1_seminar_signup_ids << @seminar_signup.id.to_s
elsif params[:mode] == "hide"
if seminar_main.session_show_ids.nil?
seminar_main.session_show_ids = (0...seminar_main.summary_chioices.count).to_a[0..1]
end
seminar_main.session_show_ids.delete(session_id)
elsif params[:mode] == "show"
seminar_main.session_show_ids = seminar_main.session_show_ids.to_a + Array(session_id)
else
render :json => {:success => false} and return
end
seminar_main.save
render :json => {:success => true}
end
end
def update_seminar_review
if @seminar_review.nil?
render :json => {:success => false}
@@ -157,10 +221,12 @@ class Admin::SeminarsController < OrbitAdminController
@seminar_review.seminar_signup_ids << params[:signup_id]
@seminar_review.remove_seminar_signup_ids.delete(params[:signup_id])
seminar_main.unassigned_seminar_signup_ids.delete(params[:signup_id])
seminar_main.unassigned_mode_1_seminar_signup_ids.delete(params[:signup_id])
elsif params[:mode] == "remove"
@seminar_review.seminar_signup_ids.delete(params[:signup_id])
@seminar_review.remove_seminar_signup_ids << params[:signup_id]
seminar_main.unassigned_seminar_signup_ids << params[:signup_id]
seminar_main.unassigned_mode_1_seminar_signup_ids << params[:signup_id]
elsif params[:mode] == "hide"
if seminar_main.reviewer_show_ids.nil?
seminar_main.reviewer_show_ids = seminar_main.reviewer_ids[0..1]
@@ -190,7 +256,7 @@ class Admin::SeminarsController < OrbitAdminController
sort = {params[:sort].to_sym=>params[:order]}
end
else
sort = {:signup_start_date=>"desc"}
sort = {:signup_start_date=>"desc",:created_at=>"desc"}
end
@seminars = SeminarMain.all.order_by(sort).with_categories(filters("category"))
@@ -222,8 +288,9 @@ class Admin::SeminarsController < OrbitAdminController
if can_see_seminar_signup(@seminar)
if !admin_for_seminar(@seminar)
@seminar_review = @seminar.seminar_reviews.where(:reviewer_id => current_user.member_profile_id.to_s).first
@seminar_signups = @seminar_signups.where(:id.in=>@seminar_review.all_seminar_signup_ids) rescue []
@seminar_signups = @seminar_signups.where(:id.in=>@seminar_review.get_all_seminar_signup_ids) rescue []
end
@seminar_signups = @seminar_signups.sort_ordered
respond_to do |format|
format.xlsx {
response.headers['Content-Disposition'] = 'attachment; filename="' + filename + '"'
@@ -233,7 +300,16 @@ class Admin::SeminarsController < OrbitAdminController
render :nothing => true
end
end
def copy
@seminar = SeminarMain.find(params[:id]).clone_new
@member = MemberProfile.where(:id.in=>@seminar.reviewer_ids).to_a
@email_set = @seminar.seminar_email_sets
@signup_sets = @seminar.seminar_signup_field_sets
@submission_set = @seminar.seminar_submission_field_sets
@custom_set = @seminar.seminar_signup_field_customs
@seminar_items = SeminarItem.all
@review = @seminar.seminar_reviews.first
end
def new
@member = nil
@seminar = SeminarMain.new
@@ -256,21 +332,43 @@ class Admin::SeminarsController < OrbitAdminController
seminar_signup_set_params = seminar_main_params['seminar_signup_field_sets']
seminar_submission_set_params = seminar_main_params['seminar_submission_field_sets']
seminar_email_sets_params = seminar_main_params['seminar_email_sets']
seminar_signup_field_customs_params = seminar_main_params["seminar_signup_field_customs"].to_hash
seminar_main_params["seminar_signup_field_customs"].each do |k,v|
v.delete "title"
end
seminar_main_params.delete(:seminar_signup_field_sets)
seminar_main_params.delete(:seminar_submission_field_sets)
seminar_main_params.delete(:seminar_email_sets)
seminar = SeminarMain.new(seminar_main_params)
seminar.create_user_id = current_user.id
seminar.update_user_id = current_user.id
if seminar.copy_id && params["clone_signups"].blank?
seminar.except_clone_relations = ["seminar_signups","seminar_signup_values"]
end
seminar.save
seminar_signup_set_params.each do |key,value|
seminar.seminar_signup_field_sets.create(value)
end
seminar_submission_set_params.each do |key,value|
seminar.seminar_submission_field_sets.create(value)
end
seminar_email_sets_params.each do |key,value|
seminar.seminar_email_sets.create(value)
if seminar.copy_id
seminar_signup_set_params.each do |key,value|
seminar.seminar_signup_field_sets[key.to_i].update_attributes(value) rescue nil
end
seminar_submission_set_params.each do |key,value|
seminar.seminar_submission_field_sets[key.to_i].update_attributes(value) rescue nil
end
seminar_email_sets_params.each do |key,value|
seminar.seminar_email_sets[key.to_i].update_attributes(value) rescue nil
end
seminar_signup_field_customs_params.each_with_index do |(key,value),i|
seminar.seminar_signup_field_customs[i].update(:seminar_signup_field_id => seminar.seminar_signup_fields.where(:title=>value["title"]).first.id) rescue nil
end
else
seminar_signup_set_params.each do |key,value|
seminar.seminar_signup_field_sets.create(value)
end
seminar_submission_set_params.each do |key,value|
seminar.seminar_submission_field_sets.create(value)
end
seminar_email_sets_params.each do |key,value|
seminar.seminar_email_sets.create(value)
end
end
redirect_to params['referer_url']
@@ -393,8 +491,14 @@ class Admin::SeminarsController < OrbitAdminController
else
@seminar_signups = @seminar.seminar_signups.where(:name=>/#{params[:search]}/)
end
elsif params[:type] == "session"
@seminar_signups = @seminar.seminar_signups.where(:final_session => nil, :name=>/#{params[:search]}/)
else
@seminar_signups = SeminarSignup.where(:id.in => @seminar.unassigned_seminar_signup_ids, :name=>/#{params[:search]}/)
unassigned_seminar_signup_ids = @seminar.unassigned_seminar_signup_ids
if @seminar.assign_mode == 1
unassigned_seminar_signup_ids = @seminar.unassigned_mode_1_seminar_signup_ids
end
@seminar_signups = @seminar.seminar_signups.where(:id.in => unassigned_seminar_signup_ids, :name=>/#{params[:search]}/)
end
OrbitHelper.set_params(params,current_user)
@access_level = OrbitHelper.user_access_level?
@@ -407,7 +511,7 @@ class Admin::SeminarsController < OrbitAdminController
end
unless @can_edit
@seminar_review = @seminar.seminar_reviews.where(:reviewer_id => current_user.member_profile_id.to_s).first
@seminar_signups = @seminar.seminar_signups.where(:id.in=>@seminar_review.all_seminar_signup_ids)
@seminar_signups = @seminar.seminar_signups.where(:id.in=>@seminar_review.get_all_seminar_signup_ids)
end
@seminar_signups = @seminar_signups.sort_ordered.page(params[:page]).per(10)
if request.xhr?
@@ -422,15 +526,17 @@ class Admin::SeminarsController < OrbitAdminController
def update_seminar_signup_admin_setting
@seminar_signup_admin_setting.update_attributes(params.require(:seminar_signup_admin_setting).permit!)
if params[:id] != "enquiry_for_applicants"
redirect_to seminar_signup_admin_seminar_path(params[:id])
redirect_to seminar_signup_admin_seminar_path(params[:id]) + "?type=#{params[:page]}"
else
redirect_to admin_seminar_enquiry_for_applicants_path
end
end
def set_seminar_signup_admin_setting
@seminar_signup_admin_setting = SeminarSignupAdminSetting.where(:seminar_main_id=>params[:id]).first
page = params[:type] || params[:page]
page = nil if page.blank?
@seminar_signup_admin_setting = SeminarSignupAdminSetting.where(:seminar_main_id=>params[:id],:page=>page).first
if @seminar_signup_admin_setting.nil?
@seminar_signup_admin_setting = SeminarSignupAdminSetting.create(:seminar_main_id=>params[:id])
@seminar_signup_admin_setting = SeminarSignupAdminSetting.create(:seminar_main_id=>params[:id],:page=>page)
end
end
def edit_seminar_signup
@@ -456,6 +562,8 @@ class Admin::SeminarsController < OrbitAdminController
if params[:action] == "update_seminar_review"
@seminar_review = SeminarReview.find(params[:id]) rescue nil
@seminar = @seminar_review.seminar_main
elsif params[:action] == "update_seminar_session"
@seminar_signup = SeminarSignup.find(params[:signup_id]) rescue nil
end
end
@@ -464,7 +572,7 @@ class Admin::SeminarsController < OrbitAdminController
end
def create_set (save_flag)
SeminarSignup.attribute_names.each do |attr_signup|
if !(['_id', 'created_at', 'updated_at','seminar_main_id'].include? attr_signup)
if !(['_id', 'created_at', 'updated_at','seminar_main_id','final_session','seminar_session_id'].include? attr_signup)
signup_set = @seminar.seminar_signup_field_sets.select{|v| v.field_name==attr_signup }
if signup_set.length==0
if ['status','name','tel','phone','email','password'].include? attr_signup