Add signup search feature.

Add assign organizer to seminar events and assign signups to reviewers feature.
This commit is contained in:
bohung committed 2021-03-17 15:33:31 +08:00
1 parent a605fc0df7
commit 2f076ab2cf
29 files changed
+1474 -349

No files matched your search

+85 -2
View File
@@ -28,9 +28,13 @@ class SeminarMain
field :create_user_id
field :update_user_id
field :reviewer_ids
field :reviewer_show_ids
field :unassigned_seminar_signup_ids
field :review_start_date, :type => Date
field :review_end_date, :type => Date
belongs_to :seminar_item
belongs_to :organizer , :class_name=>"MemberProfile", :foreign_key => :organizer_id
has_many :seminar_links, :autosave => true, :dependent => :destroy
has_many :seminar_files, :autosave => true, :dependent => :destroy
has_many :seminar_item_contents, :autosave => true, :dependent => :destroy
@@ -53,6 +57,85 @@ class SeminarMain
accepts_nested_attributes_for :seminar_submission_field_sets, :allow_destroy => true
accepts_nested_attributes_for :seminar_email_sets, :allow_destroy => true
accepts_nested_attributes_for :seminar_signup_field_customs, :allow_destroy => true
before_save do
module_app_key = "seminar"
add_module_app_member_ids = []
remove_module_app_member_ids = []
if self.reviewer_ids_changed?
new_reviewer_ids = self.reviewer_ids.to_a - self.reviewer_ids_was.to_a
remove_reviewer_ids = self.reviewer_ids_was.to_a - self.reviewer_ids.to_a
new_reviewer_ids.each do |reviewer_id|
SeminarReview.create(:reviewer_id=>reviewer_id,:seminar_main=>self)
add_module_app_member_ids << reviewer_id
end
remove_reviewer_ids.each do |reviewer_id|
SeminarReview.where(:reviewer_id=>reviewer_id,:seminar_main=>self).destroy
remove_module_app_member_ids << reviewer_id
end
unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s}
seminar_reviews = self.seminar_reviews
seminar_reviews.each do |sr|
unassigned_seminar_signup_ids = unassigned_seminar_signup_ids - sr.all_seminar_signup_ids
end
self.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids
end
if self.organizer_id_changed?
if self.organizer_id_was.present?
remove_module_app_member_ids << self.organizer_id_was
end
if self.organizer_id.present?
add_module_app_member_ids << self.organizer_id
end
end
remove_module_app_member_ids.delete(self.organizer_id)
self.reviewer_ids.each{|r| remove_module_app_member_ids.delete(r)}
remove_module_app_member_ids.each do |m_id|
user = User.where(:member_profile_id=>m_id).first
begin
user.extra_link_module_app_keys.delete(module_app_key)
user.save
rescue
next
end
end
add_module_app_member_ids.each do |m_id|
user = User.where(:member_profile_id=>m_id).first
begin
user.extra_link_module_app_keys << module_app_key
user.save
rescue
next
end
end
end
before_create do
self.unassigned_seminar_signup_ids = []
end
after_initialize do
unless self.new_record?
save_flag = false
seminar_reviews = self.seminar_reviews
if seminar_reviews.present?
if self["reviewer_ids"].nil?
self["reviewer_ids"] = seminar_reviews.pluck(:reviewer_id).flatten.select{|s| !s.nil?}.to_a
save_flag = true
end
if seminar_reviews.count != 0 && self.review_start_date.nil? && self.review_end_date.nil?
seminar_review = seminar_reviews.first
self.review_start_date = seminar_review.review_start_date rescue nil
self.review_end_date = seminar_review.review_end_date rescue nil
unless (self.review_start_date.nil? && self.review_end_date.nil?)
save_flag = true
end
end
end
if self.unassigned_seminar_signup_ids.nil?
self.unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s}
save_flag = true
end
self.save if save_flag
end
end
def self.time_range(date1 = null, date2 = null)
if !date1.blank?
+47 -2
View File
@@ -5,8 +5,53 @@ class SeminarReview
include Mongoid::Document
include Mongoid::Timestamps
field :review_start_date, :type => Date, :default => Time.now
field :review_end_date, :type => Date, :default => Time.now
field :review_start_date, :type => Date, :default => Time.now #Already move to seminar_main
field :review_end_date, :type => Date, :default => Time.now #Already move to seminar_main
field :reviewer_id
field :seminar_signup_ids, :type => Array, :default => []
field :remove_seminar_signup_ids, :type => Array, :default => []
field :default_seminar_signup_ids, :type => Array, :default => []
field :default_topics, :type => Array, :default => []
field :default_topics_values, :type => Array, :default => []
belongs_to :seminar_main
after_initialize do
unless self.new_record?
if (self.reviewer_id.class == Array rescue false)
reviewer_ids = self.reviewer_id[1..-1]
reviewer_ids.each do |reviewer_id|
self.class.create(:reviewer_id=>reviewer_id,:seminar_main=>self.seminar_main)
end
self.reviewer_id = self.reviewer_id.first
self.save
end
end
end
before_save do
default_seminar_signup_ids = []
self.default_topics.each_with_index do |topic,i|
fn,id = (topic.split(".") rescue [])
next if fn.nil?
if fn == "seminar_signup_fields"
default_seminar_signup_ids += SeminarSignupValue.where(:seminar_signup_field_id=>id,:val.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_id)
elsif "seminar_submission_fields"
seminar_signup_contribute_ids = SeminarSubmissionValue.where(:seminar_submission_field_id=>id,:val.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_contribute)
default_seminar_signup_ids += SeminarSignupContribute.where(:id.in=>seminar_signup_contribute_ids).pluck(:seminar_signup_id)
end
end
default_seminar_signup_ids.uniq!
default_seminar_signup_ids = default_seminar_signup_ids.map{|s| s.to_s}
self.default_seminar_signup_ids = default_seminar_signup_ids
end
def review
MemberProfile.find(self.reviewer_id) rescue nil
end
def all_seminar_signup_ids
seminar_signup_ids - remove_seminar_signup_ids + default_seminar_signup_ids
end
def append_default_signup_id(signup_id)
sid = signup_id.to_s
unless self.default_seminar_signup_ids.include?(sid)
self.default_seminar_signup_ids << sid
end
end
end
+16 -1
View File
@@ -22,6 +22,21 @@ class SeminarSignup
accepts_nested_attributes_for :seminar_signup_values, allow_destroy: true
accepts_nested_attributes_for :seminar_signup_contributes, allow_destroy: true
after_destroy do
seminar_main = self.seminar_main
seminar_reviews = seminar_main.seminar_reviews
id = self.id.to_s
seminar_reviews.each do |sr|
if sr.all_seminar_signup_ids.include?(id)
sr.seminar_signup_ids.delete(id)
sr.remove_seminar_signup_ids.delete(id)
sr.default_seminar_signup_ids.delete(id)
sr.save
end
end
if seminar_main.unassigned_seminar_signup_ids.delete(id)
seminar_main.save
end
end
end
@@ -0,0 +1,7 @@
# encoding: utf-8
class SeminarSignupAdminSetting
include Mongoid::Document
include Mongoid::Timestamps
field :display_field , type: Array , default: []
field :seminar_main_id
end
+50 -43
View File
@@ -46,25 +46,30 @@ class SeminarSignupValue
end
def get_field_value
if (self.seminar_signup_field.markup.eql?("text_field") || self.seminar_signup_field.markup.eql?("text_area"))
seminar_signup_field = self.seminar_signup_field
if (seminar_signup_field.markup.eql?("text_field") || seminar_signup_field.markup.eql?("text_area"))
if self.value.class == String
field_value = self.value
else
field_value = self.value[I18n.locale]
elsif (self.seminar_signup_field.markup.eql?("select") || self.seminar_signup_field.markup.eql?("radio_button"))
field_value = self.seminar_signup_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif self.seminar_signup_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif self.seminar_signup_field.markup.eql?("date")
case self.seminar_signup_field.typeC['format']
when 'format1'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format2'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format3'
field_value = self.value.to_date.strftime("%Y/%m")
when 'format4'
field_value = self.value.to_date.strftime("%Y")
end
elsif self.seminar_signup_field.markup.eql?("checkbox")
field_value = self.value.map {|v| self.seminar_signup_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
elsif (seminar_signup_field.markup.eql?("select") || seminar_signup_field.markup.eql?("radio_button"))
field_value = seminar_signup_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif seminar_signup_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif seminar_signup_field.markup.eql?("date")
case seminar_signup_field.typeC['format']
when 'format1'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format2'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format3'
field_value = self.value.to_date.strftime("%Y/%m")
when 'format4'
field_value = self.value.to_date.strftime("%Y")
end
elsif seminar_signup_field.markup.eql?("checkbox")
field_value = self.value.map {|v| seminar_signup_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "<a href='#{field_value}' target='blank'>#{field_value}</a>" : field_value
@@ -72,15 +77,15 @@ class SeminarSignupValue
if !field_value.blank?
{
"key" => self.seminar_signup_field.key,
"title" => self.seminar_signup_field.title,
"key" => seminar_signup_field.key,
"title" => seminar_signup_field.title,
"value" => field_value,
"val" => field_value = self.value
}
else
{
"key" => self.seminar_signup_field.key,
"title" => self.seminar_signup_field.title,
"key" => seminar_signup_field.key,
"title" => seminar_signup_field.title,
"value" => "",
"val" => field_value = self.value
}
@@ -88,29 +93,30 @@ class SeminarSignupValue
end
def get_value_by_locale(locale,add_more_index=nil)
case self.seminar_signup_field.markup
seminar_signup_field = self.seminar_signup_field
case seminar_signup_field.markup
when "text_field"
case self.seminar_signup_field.add_more
when true
if self.seminar_signup_field.locale
add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale]
else
add_more_index.nil? ? self.value.join(",") : self.value(add_more_index)
end
when false
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
case seminar_signup_field.add_more
when true
if seminar_signup_field.locale
add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale]
else
add_more_index.nil? ? self.value.join(",") : self.value(add_more_index)
end
when false
seminar_signup_field.locale ? self[locale.to_s] : self.value
end
when "select"
markup_values = self.seminar_signup_field.self_defined_markup_options? ? self.seminar_signup_field.markup_value : self.seminar_signup_field.markup_value
markup_values = seminar_signup_field.self_defined_markup_options? ? seminar_signup_field.markup_value : self.seminar_signup_field.markup_value
markup_values[self.value][locale.to_s] rescue 'NoData'
when "text_area"
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
seminar_signup_field.locale ? self[locale.to_s] : self.value
when "date"
if self.seminar_signup_field.date_is_range?
if seminar_signup_field.date_is_range?
get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to)
# self.value["from"] + ' ~ ' + self.value["to"]
else
@@ -122,17 +128,17 @@ class SeminarSignupValue
self.value[locale.to_s]
when "radio_button"
markup_values = self.seminar_signup_field.markup_value
markup_values = seminar_signup_field.markup_value
markup_values[self.value][locale.to_s]
when "checkbox"
markup_values = self.seminar_signup_field.markup_value
markup_values = seminar_signup_field.markup_value
self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",")
when "date_durnation"
self.value
else
self.seminar_signup_field.locale ? self[locale.to_s] : self.value
seminar_signup_field.locale ? self[locale.to_s] : self.value
end
end
@@ -174,18 +180,19 @@ def unset_all_lang_values
end
def data_proc
seminar_signup_field = self.seminar_signup_field
unless self[:temp_data].nil?
case self.seminar_signup_field.markup
case seminar_signup_field.markup
when "address"
self["val"] = self["temp_data"]
when 'text_field','text_area'
if self.seminar_signup_field.add_more
if seminar_signup_field.add_more
self["val"] = self["temp_data"]
else # if not add_more
if self.seminar_signup_field.can_muti_lang_input?
if seminar_signup_field.can_muti_lang_input?
self[:temp_data].each do |key,val|
self[key] = val
end if(!self.seminar_signup_field.get_data[:cross_lang])
end if(!seminar_signup_field.get_data[:cross_lang])
else
self["val"] = self[:temp_data]
end
+52 -45
View File
@@ -45,25 +45,30 @@ class SeminarSubmissionValue
end
def get_field_value
if (self.seminar_submission_field.markup.eql?("text_field") || self.seminar_submission_field.markup.eql?("text_area"))
seminar_submission_field = self.seminar_submission_field
if (seminar_submission_field.markup.eql?("text_field") || seminar_submission_field.markup.eql?("text_area"))
if self.value.class == String
field_value = self.value
else
field_value = self.value[I18n.locale]
elsif (self.seminar_submission_field.markup.eql?("select") || self.seminar_submission_field.markup.eql?("radio_button"))
field_value = self.seminar_submission_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif self.seminar_submission_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif self.seminar_submission_field.markup.eql?("date")
case self.seminar_submission_field.typeC['format']
when 'format1'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format2'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format3'
field_value = self.value.to_date.strftime("%Y/%m")
when 'format4'
field_value = self.value.to_date.strftime("%Y")
end
elsif self.seminar_submission_field.markup.eql?("checkbox")
field_value = self.value.map {|v| self.seminar_submission_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
elsif (seminar_submission_field.markup.eql?("select") || seminar_submission_field.markup.eql?("radio_button"))
field_value = seminar_submission_field.markup_value["#{self.value}"][I18n.locale] rescue nil
elsif seminar_submission_field.markup.eql?("address")
field_value = rf[:address_key][I18n.locale].map{|k,v| v}.delete_if(&:blank?).join(', ')
elsif seminar_submission_field.markup.eql?("date")
case seminar_submission_field.typeC['format']
when 'format1'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format2'
field_value = self.value.to_date.strftime("%Y/%m/%d")
when 'format3'
field_value = self.value.to_date.strftime("%Y/%m")
when 'format4'
field_value = self.value.to_date.strftime("%Y")
end
elsif seminar_submission_field.markup.eql?("checkbox")
field_value = self.value.map {|v| seminar_submission_field.markup_value["#{v}"][I18n.locale]}.join(', ') rescue nil
end
field_value = (field_value =~ /\A#{URI::regexp(['http', 'https'])}\z/) ? "<a href='#{field_value}' target='blank'>#{field_value}</a>" : field_value
@@ -71,15 +76,15 @@ class SeminarSubmissionValue
if !field_value.blank?
{
"key" => self.seminar_submission_field.key,
"title" => self.seminar_submission_field.title,
"key" => seminar_submission_field.key,
"title" => seminar_submission_field.title,
"value" => field_value,
"val" => field_value = self.value
}
else
{
"key" => self.seminar_submission_field.key,
"title" => self.seminar_submission_field.title,
"key" => seminar_submission_field.key,
"title" => seminar_submission_field.title,
"value" => "",
"val" => field_value = self.value
}
@@ -87,29 +92,30 @@ class SeminarSubmissionValue
end
def get_value_by_locale(locale,add_more_index=nil)
case self.seminar_submission_field.markup
seminar_submission_field = self.seminar_submission_field
case seminar_submission_field.markup
when "text_field"
case self.seminar_submission_field.add_more
when true
if self.seminar_submission_field.locale
add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale]
else
add_more_index.nil? ? self.value.join(",") : self.value(add_more_index)
end
when false
self.seminar_submission_field.locale ? self[locale.to_s] : self.value
case seminar_submission_field.add_more
when true
if seminar_submission_field.locale
add_more_index.nil? ? self.value.collect{|t| t[locale.to_s]}.join(",") : self.value(add_more_index)[locale]
else
add_more_index.nil? ? self.value.join(",") : self.value(add_more_index)
end
when false
seminar_submission_field.locale ? self[locale.to_s] : self.value
end
when "select"
markup_values = self.seminar_submission_field.self_defined_markup_options? ? self.seminar_submission_field.markup_value : self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.self_defined_markup_options? ? seminar_submission_field.markup_value : self.seminar_submission_field.markup_value
markup_values[self.value][locale.to_s] rescue 'NoData'
when "text_area"
self.seminar_submission_field.locale ? self[locale.to_s] : self.value
seminar_submission_field.locale ? self[locale.to_s] : self.value
when "date"
if self.seminar_submission_field.date_is_range?
if seminar_submission_field.date_is_range?
get_date_by_format(:from) + ' ~ ' + get_date_by_format(:to)
# self.value["from"] + ' ~ ' + self.value["to"]
else
@@ -121,17 +127,17 @@ class SeminarSubmissionValue
self.value[locale.to_s]
when "radio_button"
markup_values = self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.markup_value
markup_values[self.value][locale.to_s]
when "checkbox"
markup_values = self.seminar_submission_field.markup_value
markup_values = seminar_submission_field.markup_value
self.value.collect{|key| markup_values["#{key}"][I18n.locale]}.join(",")
when "date_durnation"
self.value
else
self.seminar_submission_field.locale ? self[locale.to_s] : self.value
seminar_submission_field.locale ? self[locale.to_s] : self.value
end
end
@@ -167,22 +173,23 @@ class SeminarSubmissionValue
protected
def unset_all_lang_values
VALID_LOCALES.each{|t| self.unset t}
end
VALID_LOCALES.each{|t| self.unset t}
end
def data_proc
seminar_submission_field = self.seminar_submission_field
unless self[:temp_data].nil?
case self.seminar_submission_field.markup
case seminar_submission_field.markup
when "address"
self["val"] = self["temp_data"]
when 'text_field','text_area'
if self.seminar_submission_field.add_more
if seminar_submission_field.add_more
self["val"] = self["temp_data"]
else # if not add_more
if self.seminar_submission_field.can_muti_lang_input?
if seminar_submission_field.can_muti_lang_input?
self[:temp_data].each do |key,val|
self[key] = val
end if(!self.seminar_submission_field.get_data[:cross_lang])
end if(!seminar_submission_field.get_data[:cross_lang])
else
self["val"] = self[:temp_data]
end
+13
View File
@@ -0,0 +1,13 @@
class SeminarUser
include Mongoid::Document
include Mongoid::Timestamps
field :user_name
field :password
belongs_to :seminar_main
# belongs_to :user
# before_save do
# if self.new_record?
# self.user = User.find()
# end
# end
end