diff --git a/app/controllers/admin/seminars_controller.rb b/app/controllers/admin/seminars_controller.rb index 096c632..a9c3dee 100644 --- a/app/controllers/admin/seminars_controller.rb +++ b/app/controllers/admin/seminars_controller.rb @@ -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 diff --git a/app/helpers/admin/seminars_field_helper.rb b/app/helpers/admin/seminars_field_helper.rb index 8e53536..3ac3c1e 100644 --- a/app/helpers/admin/seminars_field_helper.rb +++ b/app/helpers/admin/seminars_field_helper.rb @@ -39,12 +39,12 @@ module Admin::SeminarsFieldHelper add_ext= @attribute_value.address_key[key] rescue {} - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][county]",add_ext["county"],:class=>"county_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][street_address]",add_ext["street_address"],:class=>"street_address_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][city]",add_ext["city"],:class=>"city_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][zip]",add_ext["zip"],:class=>"zip_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][country]",add_ext["country"],:class=>"country_#{key}") - result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][indicator]",add_ext["indicator"],:class=>"indicator_#{key}") + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][county]",add_ext["county"],:class=>"county_#{key}", :id=>nil) + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][street_address]",add_ext["street_address"],:class=>"street_address_#{key}", :id=>nil) + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][city]",add_ext["city"],:class=>"city_#{key}", :id=>nil) + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][zip]",add_ext["zip"],:class=>"zip_#{key}", :id=>nil) + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][country]",add_ext["country"],:class=>"country_#{key}", :id=>nil) + result << hidden_field_tag(get_basic_field_name_base+"[address_key][#{key}][indicator]",add_ext["indicator"],:class=>"indicator_#{key}", :id=>nil) end end @@ -195,7 +195,7 @@ protected if self.markup=='text_area' #or self.markup=='address' tmp1 = valid_locales.collect do |key| if !@prefiled_value.nil? - value = @prefiled_value[key] rescue nil + value = @prefiled_value[key] || @prefiled_value[key.to_s] rescue nil else value = nil end @@ -203,7 +203,6 @@ protected div_class_ary = ["tab-pane" ,"fade"] if @show_set_field && @markup=='text_area' div_id = "ckeditor_#{get_pairing_tab_class({})}_#{key}" - puts 'ckeditor_' else div_id = "#{get_pairing_tab_class({})}_#{key}" end @@ -245,7 +244,7 @@ protected content_tag :div,:class=> "tab-content" do buff = valid_locales.collect do |key| - value = @prefiled_value[key] rescue nil + value = @prefiled_value[key] || @prefiled_value[key.to_s] rescue nil # div_class_ary = ["tab-pane" ,"fade","#{get_pairing_tab_class({})}_#{key}"] div_class_ary = ["tab-pane" ,"fade"] @@ -380,8 +379,8 @@ protected temp_field_name = get_basic_field_name_base + '[temp]' add_more = content_tag :p,:class=> 'add-btn' do content = link_to (content_tag :i,I18n.t(:add),:class=>"icon-plus"),"#","data-roles"=>"role_a",:class=>"trigger #{can_muti_lang_input? ? 'textLengInput' : 'textInput' } btn btn-small btn-primary" - content << hidden_field_tag("#{temp_field_name}[count]",@attribute_value.add_more_counter ,:class=>"list_count") - content << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name") + content << hidden_field_tag("#{temp_field_name}[count]",@attribute_value.add_more_counter ,:class=>"list_count", :id=>nil) + content << hidden_field_tag("#{temp_field_name}[count]",get_basic_field_name_base,:class=>"field_name", :id=>nil) content end # of div # add_more = content_tag :div,:class=> 'controls' do @@ -396,9 +395,9 @@ protected def end_block if @new_attribute - hidden_field_tag(get_basic_field_name_base+"[#{get_basic_field_name}_id]",id,:for=>"field_#{@index}") + hidden_field_tag(get_basic_field_name_base+"[#{get_basic_field_name}_id]",id,:for=>"field_#{@index}", :id=>nil) else - hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}") + hidden_field_tag(get_basic_field_name_base+"[id]",@attribute_value.id,:for=>"field_#{@index}", :id=>nil) end end @@ -495,8 +494,12 @@ protected '' end def self.end_block - hidden_field_tag("seminar_main[#{@key_field}][#{@key_index}]"+"[id]", - @attribute_value.id,:for=>"field_#{@key_index}") + unless @attribute_value.new_record? + hidden_field_tag("seminar_main[#{@key_field}][#{@key_index}]"+"[id]", + @attribute_value.id,:for=>"field_#{@key_index}", :id=>nil) + else + "" + end end @key_field = key_field @field = field diff --git a/app/models/seminar_main.rb b/app/models/seminar_main.rb index b1488c6..15f451b 100644 --- a/app/models/seminar_main.rb +++ b/app/models/seminar_main.rb @@ -1,4 +1,5 @@ class SeminarMain + require 'fileutils' include Mongoid::Document include Mongoid::Timestamps @@ -7,6 +8,8 @@ class SeminarMain include OrbitCategory::Categorizable include Slug ChoiceTypes = ["checkbox","radio","select"] + field :copy_id + field :except_clone_relations, :type=>Array, :default => [] field :signup_note, localize: true field :title, as: :slug_title, type: String, localize: true field :speaker, localize: true @@ -36,12 +39,16 @@ class SeminarMain field :update_user_id field :reviewer_ids field :reviewer_show_ids + field :session_show_ids field :unassigned_seminar_signup_ids + field :unassigned_mode_1_seminar_signup_ids field :review_start_date, :type => Date field :review_end_date, :type => Date field :last_serial_number, :type => Integer, :default => 0 + field :assign_mode, :type => Integer, :default => 0 # 0 => 用default signup ids來分配 ,1 => 用final_session來分配 belongs_to :seminar_item belongs_to :organizer , :class_name=>"MemberProfile", :foreign_key => :organizer_id + has_many :seminar_sessions, :autosave => true, :dependent => :destroy 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 +60,7 @@ class SeminarMain 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_sessions, :allow_destroy => true 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 @@ -68,7 +76,7 @@ class SeminarMain module_app_key = "seminar" add_module_app_member_ids = [] remove_module_app_member_ids = [] - if self.reviewer_ids_changed? + if self.reviewer_ids_changed? && (self.copy_id.nil? || !self.new_record?) 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| @@ -81,9 +89,12 @@ class SeminarMain end unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s} seminar_reviews = self.seminar_reviews + unassigned_mode_1_seminar_signup_ids = unassigned_seminar_signup_ids.dup 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 + self.unassigned_mode_1_seminar_signup_ids = unassigned_mode_1_seminar_signup_ids self.unassigned_seminar_signup_ids = unassigned_seminar_signup_ids end if self.organizer_id_changed? @@ -114,9 +125,50 @@ class SeminarMain next end end + if self.enable_summary_choice + (0...self.summary_chioices.count).to_a.each do |i| + seminar_session = self.seminar_sessions.where(:key=>i).first + if seminar_session.nil? + self.seminar_sessions << SeminarSession.new(:key=>i) + end + end + (self.summary_chioices.count...self.summary_chioices_was.to_a.count).to_a.each do |i| + self.seminar_sessions.where(:key=>i).destroy + end + end end before_create do self.unassigned_seminar_signup_ids = [] + self.unassigned_mode_1_seminar_signup_ids = [] + if self.copy_id.present? + clone_new(true) + self.created_at = DateTime.now + self.updated_at = DateTime.now + end + end + after_create do + if self.copy_id.present? + self.seminar_signup_fields.each do |seminar_signup_field| + seminar_signup_field.seminar_signup_values.update_all(:key=>seminar_signup_field.key) + end + self.seminar_submission_fields.each do |seminar_submission_field| + seminar_submission_field.seminar_submission_values.update_all(:key=>seminar_submission_field.key) + end + current_reviewer_ids = self.reviewer_ids.to_a + self.seminar_reviews.where(:reviewer_id.nin=>current_reviewer_ids).destroy + module_app_key = "seminar" + current_reviewer_ids.each do |reviewer_id| + seminar_review = self.seminar_reviews.select{|sr| sr.reviewer_id == reviewer_id}.first + if seminar_review.nil? + self.seminar_reviews << SeminarReview.create(:reviewer_id=>reviewer_id,:seminar_main=>self) + user = User.where(:member_profile_id=>reviewer_id).first + if user.present? + user.extra_link_module_app_keys << module_app_key + user.save + end + end + end + end end after_initialize do unless self.new_record? @@ -128,10 +180,11 @@ class SeminarMain 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?) + review_start_date = seminar_reviews.pluck(:review_start_date).select{|t| t.present?}.first.to_datetime rescue nil + review_end_date = seminar_reviews.pluck(:review_end_date).select{|t| t.present?}.first.to_datetime rescue nil + self.review_start_date = review_start_date + self.review_end_date = review_end_date + if (self.review_start_date_changed? || self.review_end_date_changed?) save_flag = true end end @@ -140,6 +193,10 @@ class SeminarMain self.unassigned_seminar_signup_ids = self.seminar_signup_ids.map{|s| s.to_s} save_flag = true end + if self.unassigned_mode_1_seminar_signup_ids.nil? + self.unassigned_mode_1_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? @@ -150,7 +207,7 @@ class SeminarMain end end end - self.save if save_flag + self.save(:validate=>false) if save_flag end end def self.time_range(date1 = null, date2 = null) @@ -184,5 +241,208 @@ class SeminarMain value = values.detect {|value| value.seminar_signup_field_id == field_id} rescue nil value ? value : nil end + def clone_new(clone_mode=false) + @records_all = {} + if clone_mode + clone_target = self.class.find(object.copy_id) rescue nil + else + clone_target = self + end + seminar,clone_target = clone_new_for_object(self,clone_target,clone_mode) + if clone_mode + copy_settings = SeminarSignupAdminSetting.where(:seminar_main_id=>clone_target.id.to_s).to_a + copy_settings.each do |setting| + new_setting = setting.dup + new_setting.seminar_main_id = seminar.id.to_s + new_setting.save + end + count_array = (0...self.seminar_sessions.to_a.count).to_a + count_array.each do |i| + seminar_session = self.seminar_sessions[i] + seminar_session.seminar_signup_ids = map_seminar_signup_ids(seminar_session.seminar_signup_ids) + end + self.unassigned_seminar_signup_ids = map_seminar_signup_ids(clone_target.unassigned_seminar_signup_ids) + self.unassigned_mode_1_seminar_signup_ids = map_seminar_signup_ids(clone_target.unassigned_mode_1_seminar_signup_ids) + need_change_seminar_signups = self.seminar_signups.where(:seminar_session_id.ne=>nil).to_a + count_array = (0...need_change_seminar_signups.count).to_a + count_array.each do |i| + seminar_signup = need_change_seminar_signups[i] + if seminar_signup.seminar_session_id.present? + seminar_signup.seminar_session_id = @records_all["seminar_session_ids"][seminar_signup.seminar_session_id] rescue nil + end + end + count_array = (0...self.seminar_reviews.to_a.count).to_a + change_fields = [:seminar_signup_ids, :remove_seminar_signup_ids, :default_seminar_signup_ids] + count_array.each do |i| + seminar_review = self.seminar_reviews[i] + change_fields.each do |f| + seminar_review.send("#{f}=",map_seminar_signup_ids( seminar_review.send(f))) + end + seminar_review.seminar_session_ids = seminar_review.seminar_session_ids.map{|seminar_session_id| @records_all["seminar_session_ids"][seminar_session_id] rescue nil}.select{|id| !id.nil?} + seminar_review.default_topics = seminar_review.default_topics.map do |default_topic| + fn,id = default_topic.split(".") + if fn == "seminar_signup_fields" + id = @records_all["seminar_signup_field_ids"][BSON::ObjectId(id)].to_s rescue nil + elsif fn == "seminar_submission_fields" + id = @records_all["seminar_submission_field_ids"][BSON::ObjectId(id)].to_s rescue nil + end + "#{fn}.#{id}" + end + end + end + seminar + end end +def map_seminar_signup_ids(old_seminar_signup_ids) + if @records_all["seminar_signup_ids"].present? + old_seminar_signup_ids.map{|seminar_signup_id| @records_all["seminar_signup_ids"][BSON::ObjectId(seminar_signup_id)]} + else + [] + end +end +def clone_new_for_object(object,clone_target=nil,clone_mode=false) + if clone_mode + new_object = object + clone_target = object.class.find(object.copy_id) rescue nil if clone_target.nil? + else + clone_target = object if clone_target.nil? + new_object = object.dup + end + @records_all["#{new_object.class.to_s.underscore.singularize}_ids"] = {} if @records_all["#{new_object.class.to_s.underscore.singularize}_ids"].nil? + begin + @records_all["#{new_object.class.to_s.underscore.singularize}_ids"][clone_target.id] = object.id + rescue + nil + end + if !clone_target.nil? && !new_object.nil? + initialize_fields = ["uid","created_at","updated_at"] + initialize_fields.each do |f| + new_object.send("#{f}=",nil) if new_object.fields.keys.include?(f) + end + relations_fields = clone_target.relations.except("impressions").keys + all_fields = clone_target.fields.keys - relations_fields + all_fields = all_fields - relations_fields.map{|k| "#{k}_id"} + all_fields = all_fields - relations_fields.map{|k| "#{k.singularize}_ids"} + new_object_class_name = new_object.class.to_s.underscore + relations_fields = clone_target.relations.except("impressions").keys + unsort_relation_keys = clone_target.relations.keys + unless @parent_level + fields_to_delete = [new_object_class_name] + tmp_relations_fields = [new_object_class_name] + while relations_fields.count > 0 + tmp_singularize_relations_fields = tmp_relations_fields.map{|f| f.singularize} + approve_append = nil + relations_fields.each do |k| + belongs_to_class = clone_target.relations[k].class_name.constantize.relations.select{|k,v| v.macro == :belongs_to}.keys + has_many_class = clone_target.relations[k].class_name.constantize.relations.select{|k,v| v.macro == :has_many}.keys + if (belongs_to_class - tmp_singularize_relations_fields).count == 0 + other_has_many_class = (has_many_class - unsort_relation_keys) + if other_has_many_class.count == 0 + tmp_relations_fields << k + else + result = other_has_many_class.map do |k| + belongs_to_class = k.classify.constantize.relations.select{|kk,v| v.macro == :belongs_to}.keys + has_many_class = k.classify.constantize.relations.select{|kk,v| v.macro == :has_many}.keys + if (belongs_to_class - tmp_singularize_relations_fields).count == 0 + true + else + fields_to_delete = fields_to_delete.concat(belongs_to_class) + tmp_relations_fields.concat(belongs_to_class) + false + end + end + if result.select{|t| !t}.count == 0 + if (fields_to_delete.map{|f| f.pluralize} - tmp_relations_fields).count == 0 + tmp_relations_fields << k + elsif clone_target.relations[k].class_name.constantize.fields.keys.include?("key") + tmp_relations_fields << k + elsif (clone_target.relations[k].class_name.constantize.relations.keys.map{|f| f.singularize} & fields_to_delete).count != 0 + approve_append = k + end + end + end + elsif !unsort_relation_keys.include?(clone_target.relations[k].class_name.underscore) && !unsort_relation_keys.include?(clone_target.relations[k].class_name.underscore.pluralize) + tmp_relations_fields << k + end + end + tmp_relations_fields << approve_append if approve_append.present? + approve_append = nil + relations_fields = relations_fields - tmp_relations_fields + end + relations_fields = tmp_relations_fields + fields_to_delete.each{|f| relations_fields.delete(f)} + end + @parent_level = true + if clone_mode + all_fields.each do |f| + next if f == "uid" + unless new_object.send("#{f}_changed?") && new_object.send("#{f}_changed_from_default?") + new_object.send("#{f}=",clone_target.send(f)) + end + end + end + relations_fields.each do |f| + no_dup_flag = false + if clone_target.relations[f].macro == :belongs_to + no_dup_flag = new_object.send(f).present? + elsif clone_target.relations[f].macro == :has_many + no_dup_flag = new_object.send(f).to_a.count != 0 + end + if clone_target.relations[f].macro == :belongs_to || clone_target.relations[f].class_name == "MemberProfile" + if @records_all["#{f}_ids"].nil? + new_object.send("#{f}_id=",clone_target.send("#{f}_id")) + else + new_object.send("#{f}_id=",(@records_all["#{f}_ids"][clone_target.send("#{f}_id")])) + end + elsif clone_target.relations[f].macro == :has_many + next if self.except_clone_relations.include?(f) + clone_relations = [] + need_clone_relations = clone_target.send(f).asc(:_id).to_a + file_flag = false + need_clone_relations.each_with_index do |r,i| + clone_relation = new_object.send(f)[i] + clone_relation = r.dup if clone_relation.nil? + initialize_fields.each do |f| + clone_relation.send("#{f}=",nil) if clone_relation.fields.keys.include?(f) + end + check_fields = clone_relation.fields.except(initialize_fields) + check_fields.keys.each do |f| + if (clone_relation.send(f).class.to_s.match(/uploader/i) rescue false) + if clone_relation[f].blank? + clone_relation[f] = r[f] + source_filepath = r.send(f).file.file + if clone_mode + dest_filepath = clone_relation.send(f).file.file + FileUtils.mkdir_p(File.dirname(dest_filepath)) + FileUtils.cp(source_filepath,dest_filepath) + end + end + file_flag = true + end + end + clone_relations << clone_relation + end + if !no_dup_flag || (no_dup_flag && file_flag) + new_object_relations = new_object.send(f).to_a + if new_object_relations.count != 0 + if clone_relations.count > new_object_relations.count + clone_relations = clone_relations[0...new_object_relations.count] + else + clone_relations = clone_relations.concat(new_object.send(f)[clone_relations.count...new_object_relations.count]) + end + new_object.send("#{f}=",clone_relations) + else + new_object.send("#{f}=",clone_relations) + end + end + count_array = (0...new_object.send(f).to_a.count).to_a + count_array.each do |i| + clone_new_for_object(new_object.send(f)[i],need_clone_relations[i],true) + end + end + end + new_object.copy_id = clone_target.id if new_object.fields.keys.include?("copy_id") + return new_object, clone_target + end +end \ No newline at end of file diff --git a/app/models/seminar_review.rb b/app/models/seminar_review.rb index 5557d40..ec4e9e1 100644 --- a/app/models/seminar_review.rb +++ b/app/models/seminar_review.rb @@ -13,21 +13,41 @@ class SeminarReview 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? - 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 + 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? @@ -37,9 +57,13 @@ class SeminarReview 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" - default_seminar_signup_ids += SeminarSignupContribute.where(:description.in=>self.default_topics_values[i].to_a).pluck(:seminar_signup_id) + 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 @@ -47,8 +71,16 @@ class SeminarReview 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 rescue [] + self.seminar_signup_ids - self.remove_seminar_signup_ids + final_assign_signup_ids + else + all_seminar_signup_ids + end + end def all_seminar_signup_ids - seminar_signup_ids - remove_seminar_signup_ids + default_seminar_signup_ids + self.seminar_signup_ids - self.remove_seminar_signup_ids + self.default_seminar_signup_ids end def append_default_signup_id(signup_id) sid = signup_id.to_s diff --git a/app/models/seminar_session.rb b/app/models/seminar_session.rb new file mode 100644 index 0000000..c31521e --- /dev/null +++ b/app/models/seminar_session.rb @@ -0,0 +1,13 @@ +# encoding: utf-8 +class SeminarSession + + include Mongoid::Document + include Mongoid::Timestamps + + field :key + belongs_to :seminar_main + field :seminar_signup_ids, :type => Array, :default => [] + def seminar_signups + SeminarSignup.where(:id.in=>seminar_signup_ids) + end +end diff --git a/app/models/seminar_signup.rb b/app/models/seminar_signup.rb index fd91db6..5bfa754 100644 --- a/app/models/seminar_signup.rb +++ b/app/models/seminar_signup.rb @@ -15,11 +15,11 @@ class SeminarSignup field :password field :note, localize: true field :serial_number - + field :final_session belongs_to :seminar_main - - has_many :seminar_signup_values - has_many :seminar_signup_contributes + field :seminar_session_id + has_many :seminar_signup_values, :autosave => true, :dependent => :destroy + has_many :seminar_signup_contributes, :autosave => true, :dependent => :destroy accepts_nested_attributes_for :seminar_signup_values, allow_destroy: true accepts_nested_attributes_for :seminar_signup_contributes, allow_destroy: true @@ -28,25 +28,34 @@ class SeminarSignup before_create do unit = self.unit_translations.values.select{|v| v.present?}.first self.unit_translations = I18n.available_locales.map{|l| [l.to_s,unit]}.to_h - s = SeminarMain.find(self.seminar_main) - s.last_serial_number += 1 - self.serial_number = s.last_serial_number - s.save(:validate=>false) + if self.serial_number.nil? + s = SeminarMain.find(self.seminar_main) + s.last_serial_number += 1 + self.serial_number = s.last_serial_number + s.save(:validate=>false) + end end 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 + if seminar_main.present? + 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 - if seminar_main.unassigned_seminar_signup_ids.delete(id) - seminar_main.save + seminar_session = SeminarSession.where(:id=>self.seminar_session_id).first + if seminar_session + seminar_session.seminar_signup_ids.delete(self.id.to_s) + seminar_session.save end end def display_serial_number diff --git a/app/models/seminar_signup_admin_setting.rb b/app/models/seminar_signup_admin_setting.rb index 94b0864..1d54992 100644 --- a/app/models/seminar_signup_admin_setting.rb +++ b/app/models/seminar_signup_admin_setting.rb @@ -4,4 +4,5 @@ class SeminarSignupAdminSetting include Mongoid::Timestamps field :display_field , type: Array , default: [] field :seminar_main_id + field :page end \ No newline at end of file diff --git a/app/models/seminar_signup_field_custom.rb b/app/models/seminar_signup_field_custom.rb index ac322db..658cc5e 100644 --- a/app/models/seminar_signup_field_custom.rb +++ b/app/models/seminar_signup_field_custom.rb @@ -5,4 +5,7 @@ class SeminarSignupFieldCustom field :seminar_signup_field_id field :hidden, type: Boolean, default: true belongs_to :seminar_main + def seminar_signup_field + SeminarSignupField.find(self.seminar_signup_field_id) rescue nil + end end diff --git a/app/models/seminar_signup_value.rb b/app/models/seminar_signup_value.rb index 85b9da3..bc36467 100644 --- a/app/models/seminar_signup_value.rb +++ b/app/models/seminar_signup_value.rb @@ -209,7 +209,14 @@ def unset_all_lang_values end #of data_proc def check_key - self.key = self.seminar_signup_field.key + if self.seminar_signup_field_id.present? && self.seminar_signup_field.nil? + begin + self.seminar_signup_field = SeminarSignupField.find(self.seminar_signup_field_id) + rescue + nil + end + end + self.key = self.seminar_signup_field.key rescue nil end def method_missing(*field) diff --git a/app/models/seminar_submission_value.rb b/app/models/seminar_submission_value.rb index 73accec..5119fce 100644 --- a/app/models/seminar_submission_value.rb +++ b/app/models/seminar_submission_value.rb @@ -206,7 +206,14 @@ end end #of data_proc def check_key - self.key = self.seminar_submission_field.key + if self.seminar_submission_field_id.present? && self.seminar_submission_field.nil? + begin + self.seminar_submission_field = SeminarSubmissionField.find(self.seminar_submission_field_id) + rescue + nil + end + end + self.key = self.seminar_submission_field.key rescue nil end def method_missing(*field) diff --git a/app/views/admin/seminars/_form.html.erb b/app/views/admin/seminars/_form.html.erb index cb294d0..dcf6be6 100644 --- a/app/views/admin/seminars/_form.html.erb +++ b/app/views/admin/seminars/_form.html.erb @@ -1,5 +1,6 @@ <% multi_helper = Admin::SeminarsHelper::MultiLang + new_record = @seminar.new_record? && @seminar.copy_id.nil? %> <% content_for :page_specific_css do %> <%= stylesheet_link_tag "lib/main-forms" %> @@ -54,14 +55,14 @@
- <%= f.datetime_picker :seminar_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :seminar_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
- <%= f.datetime_picker :seminar_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :seminar_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
@@ -70,6 +71,14 @@ <%= render partial: 'admin/member_selects/email_selection_box', locals: {field: 'seminar_main[organizer_id]', email_members:Array(f.object.organizer), index: "1", select_name: 'organizer_id'} %>
+ <% if params[:action] == "copy" %> +
+ +
+ <%= check_box_tag("clone_signups",true) %> +
+
+ <% end %> @@ -92,14 +101,14 @@
- <%= f.datetime_picker :signup_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :signup_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
- <%= f.datetime_picker :signup_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :signup_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
@@ -107,14 +116,14 @@
- <%= f.datetime_picker :contribute_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :contribute_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
- <%= f.datetime_picker :contribute_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :contribute_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
@@ -149,13 +158,13 @@
- <%= f.datetime_picker :review_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :review_start_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
- <%= f.datetime_picker :review_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => @seminar.new_record? %> + <%= f.datetime_picker :review_end_date, :no_label => true, :format=>"yyyy/MM/dd", :new_record => new_record %>
@@ -272,7 +281,11 @@ <%= check_box_tag("seminar_main[seminar_signup_field_customs][#{custom_index}][hidden]", true ,attr_custom.hidden) %> - + <% if !attr_custom.new_record? %> + + <% elsif f.object.copy_id.present? %> + + <% end %> <% end %> @@ -457,7 +470,7 @@

- <%= hidden_field_tag 'seminar_file_field_count', @seminar.seminar_files.count %> + <%= hidden_field_tag 'seminar_file_field_count', @seminar.seminar_files.to_a.count %> <%= t(:add) %>

diff --git a/app/views/admin/seminars/_form_file.html.erb b/app/views/admin/seminars/_form_file.html.erb index a1ab19a..6d21d14 100644 --- a/app/views/admin/seminars/_form_file.html.erb +++ b/app/views/admin/seminars/_form_file.html.erb @@ -1,11 +1,24 @@ -<% if form_file.new_record? %> +<% new_record = form_file.new_record? && form_file["file"].blank? %> +<% if new_record %>
<% else %>
- <% if form_file.file.blank? %> + <% if form_file.file.blank? && form_file["file"].blank? %> <%= t(:no_file) %> <% else %> - <%= link_to content_tag(:i) + form_file.file_identifier, form_file.file.url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %> + <% belongs_to_record = form_file.relations.select{|k,v| v.macro == :belongs_to}.first[0] rescue nil %> + <% url = form_file.file.url %> + <% if belongs_to_record.present? && (form_file.send(belongs_to_record).copy_id.present? rescue false) %> + <% begin + belongs_to_record = belongs_to_record.classify.constantize.find(form_file.send(belongs_to_record).copy_id) + target_form_files = belongs_to_record.send(form_file.class.to_s.underscore+"s") + target_form_file = target_form_files.select{|ff| ff["file"] == form_file["file"]}.first + url = target_form_file.file.url + rescue + nil + end %> + <% end %> + <%= link_to content_tag(:i) + form_file.file_identifier, url, {:class => 'file-link file-type', :target => '_blank', :title => form_file.file_identifier} %> <% end %> <% end %>
@@ -16,7 +29,7 @@
- <%= (form_file.new_record? || form_file.file.blank?) ? t(:select_file) : t(:change_file) %> + <%= (new_record) ? t(:select_file) : t(:change_file) %>
@@ -40,13 +53,13 @@ <% end %> - <% if form_file.new_record? %> + <% if new_record %> <% else %> - <%= f.hidden_field :id %> + <%= f.hidden_field :id unless form_file.new_record?%> <%= f.hidden_field :_destroy, :value => nil, :class => 'should_destroy' %> diff --git a/app/views/admin/seminars/_index.html.erb b/app/views/admin/seminars/_index.html.erb index 68b2f3f..4d46839 100644 --- a/app/views/admin/seminars/_index.html.erb +++ b/app/views/admin/seminars/_index.html.erb @@ -24,6 +24,7 @@