# 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 :seminar_signup_contribute_ids, :type => Array, :default => [] field :remove_seminar_signup_contribute_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? || @triggered_initialize @triggered_initialize = true save_flag = false destroy_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_id=>self.seminar_main_id) end self.reviewer_id = self.reviewer_id.first save_flag = true elsif self[:reviewer_id].nil? self.destroy destroy_flag = true end if !destroy_flag 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 = SeminarSession.where(:seminar_main_id=>self.seminar_main_id,:key.in=>self.session_ids).pluck(:id) rescue nil save_flag = true end self.save(:validate=>false) if save_flag end 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 & (SeminarSignup.where(:seminar_main_id=>self.seminar_main_id).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 = SeminarSession.where(:seminar_main_id=>self.seminar_main_id,: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 != 0) || mode != 0 final_assign_signup_ids = SeminarSession.where(:id.in=>self.seminar_session_ids).pluck(:seminar_signup_ids).flatten.map{|id| id.to_s} rescue [] default_seminar_signup_ids = SeminarSession.where(:id.in=>self.seminar_session_ids).pluck(:default_seminar_signup_ids).flatten default_seminar_signup_ids = SeminarSignup.where(:seminar_session_id=>nil,:id.in=>default_seminar_signup_ids).pluck(:id).map{|id| id.to_s} rescue [] result = final_assign_signup_ids + default_seminar_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 def fix_assign seminar_signups = SeminarSignup.where(:id.in=>self.seminar_signup_ids) self.seminar_signup_ids = seminar_signups.pluck(:id).map{|id| id.to_s} seminar_signups = seminar_signups.to_a self.seminar_signup_contribute_ids = seminar_signups.map{|ss| ss.seminar_signup_contribute_ids}.flatten.map{|id| id.to_s} remove_seminar_signups = SeminarSignup.where(:id.in=>self.remove_seminar_signup_ids) self.remove_seminar_signup_ids = remove_seminar_signups.pluck(:id).map{|id| id.to_s} remove_seminar_signups = remove_seminar_signups.to_a self.remove_seminar_signup_contribute_ids = remove_seminar_signups.map{|ss| ss.seminar_signup_contribute_ids}.flatten.map{|id| id.to_s} self.save end def clear_all_assign self.seminar_signup_ids = [] self.remove_seminar_signup_ids = [] self.seminar_signup_contribute_ids = [] self.remove_seminar_signup_contribute_ids = [] self.save end end