forked from spen/seminar
189 lines
7.6 KiB
Ruby
189 lines
7.6 KiB
Ruby
class SeminarMain
|
|
include Mongoid::Document
|
|
include Mongoid::Timestamps
|
|
|
|
include OrbitModel::Impression
|
|
# encoding: utf-8
|
|
include OrbitCategory::Categorizable
|
|
include Slug
|
|
ChoiceTypes = ["checkbox","radio","select"]
|
|
field :signup_note, localize: true
|
|
field :title, as: :slug_title, type: String, localize: true
|
|
field :speaker, localize: true
|
|
field :content, localize: true
|
|
field :act_place, localize: true
|
|
field :enable_summary_choice, :type => Boolean, :default => false
|
|
field :summary_chioice_type, :type => String, :default => "checkbox"
|
|
field :summary_chioices, :type => Array, :default => ["A. Energy Conversion","B. Biocatalysis","C. Electrocatalysis",
|
|
"D. Photocatalysis","E. Catalytic and Porous Materials",
|
|
"F. Environmental and Reaction Engineering","G. Industrial Applications",
|
|
"H. Student Oral Presentation Contest (in English)","I. Student Poster Competition"
|
|
]
|
|
field :seminar_start_date, :type => Date, :default => Time.now
|
|
field :seminar_end_date, :type => Date, :default => Time.now
|
|
|
|
field :signup_start_date, :type => Date, :default => Time.now
|
|
field :signup_end_date, :type => Date, :default => Time.now
|
|
|
|
field :contribute_start_date, :type => Date
|
|
field :contribute_end_date, :type => Date
|
|
|
|
field :contribute_file_count, type: String
|
|
|
|
field :registration_status , :type => Array #C: 投稿者 G:一般
|
|
|
|
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
|
|
field :last_serial_number, :type => Integer, :default => 0
|
|
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
|
|
has_many :seminar_signups, :autosave => true, :dependent => :destroy
|
|
has_many :seminar_submission_fields, :autosave => true, :dependent => :destroy
|
|
has_many :seminar_signup_fields, :autosave => true, :dependent => :destroy
|
|
has_many :seminar_reviews, :autosave => true, :dependent => :destroy
|
|
has_many :seminar_signup_field_sets, autosave: true, dependent: :destroy
|
|
has_many :seminar_submission_field_sets, autosave: true, dependent: :destroy
|
|
has_many :seminar_email_sets, autosave: true, dependent: :destroy
|
|
has_many :seminar_signup_field_customs, :autosave => true, :dependent => :destroy
|
|
accepts_nested_attributes_for :seminar_links, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_files, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_item_contents, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_signups, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_submission_fields, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_signup_fields, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_reviews, :allow_destroy => true
|
|
accepts_nested_attributes_for :seminar_signup_field_sets, :allow_destroy => true
|
|
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)} rescue nil
|
|
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
|
|
unless self.last_serial_number_changed_from_default?
|
|
self.seminar_signups.sort_ordered.each do |ss|
|
|
if ss.serial_number.nil?
|
|
self.last_serial_number += 1
|
|
ss.serial_number = self.last_serial_number
|
|
ss.save(:validate=>false)
|
|
save_flag = true
|
|
end
|
|
end
|
|
end
|
|
self.save if save_flag
|
|
end
|
|
end
|
|
def self.time_range(date1 = null, date2 = null)
|
|
|
|
if !date1.blank?
|
|
|
|
r = "#{date1.strftime('%Y-%m-%d')}"
|
|
|
|
if date2
|
|
r += " - #{date2.strftime('%Y-%m-%d')}"
|
|
else
|
|
r += " - #{I18n.t(:no_deadline)}"
|
|
end
|
|
|
|
r
|
|
|
|
end
|
|
|
|
end
|
|
|
|
def get_attribute_value(attribute_field, signup_id)
|
|
SeminarSignupValue.find_by(seminar_signup_field_id: attribute_field.id, seminar_signup_id: signup_id)
|
|
end
|
|
|
|
def get_attribute_values(attribute_type=nil)
|
|
@attribute_values = attribute_type.seminar_signup_values rescue nil
|
|
end
|
|
|
|
def get_value_from_field_id(field_id,attribute_type=nil)
|
|
values = get_attribute_values(attribute_type)
|
|
value = values.detect {|value| value.seminar_signup_field_id == field_id} rescue nil
|
|
value ? value : nil
|
|
end
|
|
|
|
end
|