seminar/app/models/seminar_review.rb

95 lines
4.3 KiB
Ruby

# encoding: utf-8
require "orbit_form_helper"
class SeminarReview
include Mongoid::Document
include Mongoid::Timestamps
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 => []
field :final_session
field :session_ids
field :seminar_session_ids
belongs_to :seminar_main
after_initialize do
unless self.new_record?
save_flag = false
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
save_flag = true
end
if (self.session_ids.nil? rescue true)
session_ids = []
self.default_topics.each_with_index do |t,i|
next if t != "seminar_signup_contributes.description"
session_ids << self.default_topics_values[i]
end
session_ids = session_ids.flatten.map{|i| i.to_i}
self.session_ids = session_ids
save_flag = true
end
if self.seminar_session_ids.nil? && self.session_ids.class == Array
self.seminar_session_ids = self.seminar_main.seminar_sessions.where(:key.in=>self.session_ids).pluck(:id) rescue nil
save_flag = true
end
self.save(:validate=>false) if save_flag
end
end
before_save do
default_seminar_signup_ids = []
self.session_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 fn == "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)
elsif fn == "seminar_signup_contributes"
seminar_signup_ids_from_contribute = SeminarSignupContribute.where(:description.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_id)
seminar_signup_ids_from_contribute = seminar_signup_ids_from_contribute & (self.seminar_main.seminar_signups.pluck(:id) rescue [])
default_seminar_signup_ids += seminar_signup_ids_from_contribute
self.session_ids = self.session_ids.concat(self.default_topics_values[i].map{|v| v.to_i})
end
end
self.seminar_session_ids = self.seminar_main.seminar_sessions.where(:key.in=>self.session_ids.to_a).pluck(:id) rescue []
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 get_all_seminar_signup_ids(mode = nil)
if (self.default_topics.include?("seminar_signup_contributes.description") && self.seminar_main.assign_mode == 1) || mode == 1
final_assign_signup_ids = SeminarSession.where(:id.in=>self.seminar_session_ids).pluck(:seminar_signup_ids).flatten.map{|id| id.to_s} rescue []
result = final_assign_signup_ids + self.seminar_signup_ids - self.remove_seminar_signup_ids
result = result.uniq
else
result = all_seminar_signup_ids
end
result
end
def all_seminar_signup_ids
result = self.seminar_signup_ids - self.remove_seminar_signup_ids + self.default_seminar_signup_ids
result.uniq
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