diff --git a/app/assets/stylesheets/admin/olympiamanagement.scss b/app/assets/stylesheets/admin/olympiamanagement.scss index 8242242..79cdc7d 100644 --- a/app/assets/stylesheets/admin/olympiamanagement.scss +++ b/app/assets/stylesheets/admin/olympiamanagement.scss @@ -123,6 +123,9 @@ ol { .lleft{ float: left; } +.red_text{ + color: red; +} li{ display: block; } \ No newline at end of file diff --git a/app/controllers/admin/olympiamanagements_controller.rb b/app/controllers/admin/olympiamanagements_controller.rb index 13ca7ba..6784ad5 100644 --- a/app/controllers/admin/olympiamanagements_controller.rb +++ b/app/controllers/admin/olympiamanagements_controller.rb @@ -7,6 +7,9 @@ class Admin::OlympiamanagementsController < OrbitAdminController helper Admin::OlympiamanagementsHelper load File.expand_path(__dir__)+'/zipgenerator.rb' def index + page_num = params[:page] || 1 + @sign_up_settings = SignUpSetting.all.desc(:id) + @sign_up_settings = @sign_up_settings.page(page_num).per(10) end def add_school_data SchoolDataFields.create if SchoolDataFields.all.count == 0 @@ -15,9 +18,34 @@ class Admin::OlympiamanagementsController < OrbitAdminController end def update_sign_up_data if params[:type] == "delete_old_data" - + @students = OlympiaStudentDataField.where(:sign_up_setting_id=>@sign_up_setting.id) + @error_msg = [] + if @students.length !=0 + @students.destroy_all + @error_msg << ((I18n.locale.to_s == "zh_tw") ? "已刪除#{@students.length}筆學生資料" : "Already delete #{@students.length} student data.") + else + @error_msg << ((I18n.locale.to_s == "zh_tw") ? "尚無學生資料" : "There is no student data yet.") + end + render 'error_message' + elsif params[:type] == "active" + @sign_up_setting = SignUpSetting.find(params[:id]) rescue nil + if !@sign_up_setting.nil? + @sign_up_setting.active = true + @sign_up_setting.save + end + redirect_to :back + elsif params[:type] == "view" + @sign_up_setting = SignUpSetting.find(params[:id]) rescue nil + if !@sign_up_setting.nil? + session[:sign_up_setting_id] = params[:id] + redirect_to admin_olympiamanagements_school_data_list_path + else + @error_msg = [] + @error_msg << ((I18n.locale.to_s == "zh_tw") ? "查無資料" : "Not found.") + render 'error_message' + end else - render :html => params and return + render :html => '404' and return end end def update_school_data @@ -77,15 +105,19 @@ class Admin::OlympiamanagementsController < OrbitAdminController redirect_to :back end elsif params[:type] == 'sign_up_setting' - @sign_up_setting = SignUpSetting.find(params[:id]) rescue SignUpSetting.where(:active=>true).last - if @sign_up_setting.nil? - render_404_html - else - params["sign_up_setting"].each do |key,value| - @sign_up_setting[key] = value - end - @sign_up_setting.save + @sign_up_params = params.require(:sign_up_setting).permit! + if params[:new_sign_up] == "true" + #render :html => @sign_up_params and return + SignUpSetting.create(@sign_up_params) redirect_to :back + else + @sign_up_setting = SignUpSetting.find(params[:id]) rescue SignUpSetting.where(:active=>true).last + if @sign_up_setting.nil? + render_404_html + else + @sign_up_setting.update_attributes(@sign_up_params) + redirect_to :back + end end else render :html => params and return @@ -98,7 +130,7 @@ class Admin::OlympiamanagementsController < OrbitAdminController @SchoolDataField = SchoolDataFields.first @SchoolDataname = @SchoolDataField.school_data_fields.map{|field| field.keys[0]} page_num = params[:page] || 1 - @OlympiaSchoolDataFields = OlympiaSchoolDataFields.all.asc(:id) + @OlympiaSchoolDataFields = OlympiaSchoolDataFields.where(:sign_up_setting_id=>@sign_up_setting.id).asc(:id) @OlympiaSchoolDataFields = @OlympiaSchoolDataFields.where("school_name" => /#{params[:school_name]}/) if !params[:school_name].to_s.blank? @OlympiaSchoolDataFields = @OlympiaSchoolDataFields.where("school_code" => /#{params[:school_code]}/) if !params[:school_code].to_s.blank? @OlympiaSchoolDataFields = @OlympiaSchoolDataFields.page(page_num).per(10) @@ -127,17 +159,14 @@ class Admin::OlympiamanagementsController < OrbitAdminController @filename = filename.nil? ? tempfile.path : filename workbook = RubyXL::Parser.parse(tempfile) sheet = workbook[0].sheet_data.rows - first_index = 0 + flag = 1 sheet.each_with_index do |raw_row,index| - row = raw_row.cells.map{ |cell| cell.value rescue nil} - if row.nil? && first_index != -1 - first_index += 1 - next - elsif row.nil? + row = raw_row.cells.map{ |cell| (cell.nil?) ? '' : cell.value } rescue nil + if row.nil? next end - if index == first_index || first_index != -1 - first_index = -1 + if flag == 1 + flag = 0 else #@error_msg << @row_index_hash and return false @olympia_school_data_field = OlympiaSchoolDataFields.where(:school_code=> row[@row_index_hash["school_code"]]).first @@ -163,20 +192,18 @@ class Admin::OlympiamanagementsController < OrbitAdminController return @error_msg end sheet = workbook[0].sheet_data.rows - first_index = 0 + flag = 1 sheet.each_with_index do |raw_row,index| begin - row = raw_row.cells.map{ |cell| cell.value rescue nil} + row = raw_row.cells.map{ |cell| (cell.nil?) ? '' : cell.value } rescue nil rescue @error_msg << filename+'格式錯誤' return @error_msg end - if row.nil? && first_index != -1 - next - elsif row.nil? + if row.nil? next end - if index == first_index || first_index != -1 + if flag == 1 @field_data = row delete_array = [] @profile_data_row.each do |row_key| @@ -187,11 +214,16 @@ class Admin::OlympiamanagementsController < OrbitAdminController end end delete_array.each{|element| @profile_data_row.delete(element)} - first_index = -1 + flag = 0 else #@error_msg << @row_index_hash and return - if row[@row_index_hash["school_code"]] == "" - @error_msg << @filename+"中#{make_alpha_from_numbers(@row_index_hash['school_code'])}#{index+1}欄位學校代碼不符(該欄位值不可為空)。" + if(row[@row_index_hash["school_code"]] == "" rescue true) + begin + @error_msg << @filename+"中#{make_alpha_from_numbers(@row_index_hash['school_code'])}#{index+1}欄位學校代碼不符(該欄位值不可為空)。" + rescue + @error_msg << "#{@filename}檔案格式錯誤" + return + end end end end @@ -227,7 +259,7 @@ class Admin::OlympiamanagementsController < OrbitAdminController def sign_up_student_data_list page_num = params[:page] || 1 @field_infos = StudentDataField.first.student_data_fields - @sign_up_setting_id = SignUpSetting.id + @sign_up_setting_id = @sign_up_setting.id @student_fields = OlympiaStudentDataField.where(:olympia_school_data_fields_id=>params[:olympia_school_id],:sign_up_setting_id=>@sign_up_setting_id).asc(:id).page(page_num).per(10) end def export_sign_up_student_data @@ -262,14 +294,20 @@ class Admin::OlympiamanagementsController < OrbitAdminController @student_data_list << @tmp_student_data end #render :html => @student_data_list and return - @filename = 'student_export.xlsx' - Dir.chdir(dir_path) do - File.open(@filename, 'w') do |f| - f.write render_to_string( :handlers=> [:axlsx], :formats=> [:xlsx] ,:partial=> 'student_export.xlsx',:locals=> {:@student_data_list=>@student_data_list,:@fields=>@fields} ) + if @student_data_list.empty? + @error_msg = [] + @error_msg << ((I18n.locale.to_s == "zh_tw") ? "尚無學生資料" : "There is no student data yet.") + render 'error_message' + else + @filename = 'student_export.xlsx' + Dir.chdir(dir_path) do + File.open(@filename, 'w') do |f| + f.write render_to_string( :handlers=> [:axlsx], :formats=> [:xlsx] ,:partial=> 'student_export.xlsx',:locals=> {:@student_data_list=>@student_data_list,:@fields=>@fields} ) + end end + tmp_filename_data = File.read(dir_path +@filename) + send_data(tmp_filename_data, type: 'application/xlsx', disposition: 'attachment', filename: @filename) end - tmp_filename_data = File.read(dir_path +@filename) - send_data(tmp_filename_data, type: 'application/xlsx', disposition: 'attachment', filename: @filename) end def download_scan_file_of_certificate @sign_up_setting_id = @sign_up_setting.id @@ -299,20 +337,25 @@ class Admin::OlympiamanagementsController < OrbitAdminController @new_pathname = Pathname.new(@new_pathname.to_s.insert(@new_pathname.to_s.rindex('.'),"-#{@index}")) @index += 1 end - #a[0...b].concat('-1').concat(a[b..-1]) FileUtils.cp(@original_filename,@new_pathname) end end - @filename = Pathname.new(zip_path).parent.to_s+"/#{Time.now.strftime('%Y_%m_%d')}_student_images.zip" - zip_file= ZipFileGenerator.new(zip_path,@filename) - begin - zip_file.write - rescue - File.delete(@filename) - zip_file.write + if !@student_data_image_path_arr.empty? + @filename = Pathname.new(zip_path).parent.to_s+"/#{Time.now.strftime('%Y_%m_%d')}_student_images.zip" + zip_file= ZipFileGenerator.new(zip_path,@filename) + begin + zip_file.write + rescue + File.delete(@filename) + zip_file.write + end + tmp_filename_data = File.read(@filename) + send_data(tmp_filename_data, type: 'application/zip', disposition: 'attachment', filename: Pathname.new(@filename).basename.to_s) + else + @error_msg = [] + @error_msg << ((I18n.locale.to_s == "zh_tw") ? "尚無學生獎狀掃描檔案。" : 'There is no scan file of certificate yet.' ) + render 'error_message' end - tmp_filename_data = File.read(@filename) - send_data(tmp_filename_data, type: 'application/zip', disposition: 'attachment', filename: Pathname.new(@filename).basename.to_s) end end def add_sign_up_student_data @@ -329,7 +372,7 @@ class Admin::OlympiamanagementsController < OrbitAdminController if !@flag I18n.t('olympiamanagement.please_set_school_connect_data') @error_msg << "
#{I18n.t('olympiamanagement.please_set_school_connect_data')}
" - render 'import_error_msg' + render 'error_message' else @student_data_field = StudentDataField.first @olympia_student_data = (OlympiaStudentDataField.find(params[:id]) rescue OlympiaStudentDataField.new) @@ -372,7 +415,7 @@ class Admin::OlympiamanagementsController < OrbitAdminController end redirect_to admin_olympiamanagements_sign_up_student_data_list_path+"?olympia_school_id=#{params[:school_id]}" else - render 'import_error_msg' + render 'error_message' end elsif params[:type] == 'delete_student_data' @olympia_student_data = OlympiaStudentDataField.find(params[:id]) rescue nil @@ -389,7 +432,13 @@ class Admin::OlympiamanagementsController < OrbitAdminController StudentDataField.create if StudentDataField.all.length == 0 SchoolDataFields.create if SchoolDataFields.all.length == 0 SignUpSetting.create if SignUpSetting.all.length == 0 - @sign_up_setting = SignUpSetting.where(:active=>true).last + @sign_up_setting + if session[:sign_up_setting_id].blank? + @sign_up_setting = SignUpSetting.where(:active=>true).last + else + @sign_up_setting = SignUpSetting.find(session[:sign_up_setting_id]) rescue nil + @sign_up_setting = SignUpSetting.where(:active=>true).last if @sign_up_setting.nil? + end end def download_import_file @OlympiaSchoolDataFields = OlympiaSchoolDataFields.all.asc(:id) diff --git a/app/controllers/olympiamanagements_controller.rb b/app/controllers/olympiamanagements_controller.rb index 871856c..db83f44 100644 --- a/app/controllers/olympiamanagements_controller.rb +++ b/app/controllers/olympiamanagements_controller.rb @@ -11,6 +11,9 @@ class OlympiamanagementsController < ApplicationController end def create_first_fields StudentDataField.create if StudentDataField.all.length == 0 + SchoolDataFields.create if SchoolDataFields.all.length == 0 + SignUpSetting.create if SignUpSetting.all.length == 0 + @sign_up_setting = SignUpSetting.where(:active=>true).last end def check_login begin @@ -72,7 +75,7 @@ class OlympiamanagementsController < ApplicationController @instructions_pages = Page.where(:parent_page_id=>@page.id).select{|page| page.name_translations==@instructions_name} case OrbitHelper.params[:layout_type] when "olympia_managements_instructions_index" - if !(time_now_str <= end_time_str && time_now_str >= start_time_str) + if (time_now_str <= end_time_str && time_now_str >= start_time_str) @olympiamanagement_instruction = @sign_up_setting.registration_instructions[I18n.locale.to_s].to_s @sign_up_setting.attributes.to_h.each do |key,value| @olympiamanagement_instruction = @olympiamanagement_instruction.gsub("{{#{key}}}",value.to_s) @@ -110,7 +113,7 @@ class OlympiamanagementsController < ApplicationController end @error = @@error rescue nil @page_content - if !(time_now_str <= end_time_str && time_now_str >= start_time_str) + if (time_now_str <= end_time_str && time_now_str >= start_time_str) if @instructions_pages.empty? @newpage = Page.create(:layout=> "olympia_managements_instructions_index",:data_count=>@page.data_count,:parent_page_id=>@page.id,:url=>"/olympia_instructions", :menu_enabled_for=>@page.menu_enabled_for,:enabled_for_sitemap=>@page.enabled_for_sitemap,:enabled_for=>@page.enabled_for,:module=>@page[:module],:page_id=>'olympia_instructions') @@ -119,18 +122,8 @@ class OlympiamanagementsController < ApplicationController elsif @instructions_pages.length != 1 @instructions_pages.slice(1,@instructions_pages.length).each{|page| page.destroy} end - if !(OrbitHelper.params || params)[:login_id].to_s.blank? && @@session[:olympia_login_id].to_s.blank? - if OlympiaSchoolDataFields.where(:account_number=>(OrbitHelper.params || params)[:login_id]).length == 0 - @error = "no_account" - else - if OlympiaSchoolDataFields.where(:account_number=>(OrbitHelper.params || params)[:login_id]).first.password != (OrbitHelper.params || params)[:login_pw] - @error = "password_error" - else - @@session[:olympia_login_id] = (OrbitHelper.params || params)[:login_id] - end - end - end - if @@session[:olympia_login_id].to_s.blank? + @school = OlympiaSchoolDataFields.where(:account_number=>@@session[:olympia_login_id],:approved=>true).first rescue nil + if @school.nil? @page_content = render_to_string(:formats=> [:html] ,:partial=>'login',:locals=>{:@error=>@error}) else @@error = nil @@ -156,7 +149,7 @@ class OlympiamanagementsController < ApplicationController end data_arr = @page.child_page.map{|page| {:url=>"/#{I18n.locale}#{page.url}",:name=>page.name}} @breadcumb = render_to_string(:formats=> [:html] ,:partial=>'breadcumb',:locals=>{:data_arr=>data_arr,:@title=>I18n.t('olympiamanagement.sign_up_title')}) - @page_content = @breadcumb+'報名日期:{{start_year}}/{{start_month}}/{{start_day}}~{{end_year}}/{{end_month}}/{{end_day}}
+
1. 線上報名系統之各校登入帳號為學校代碼,密碼隨公文發至各校。(學校代碼查詢)
+
+
+ (1)學生姓名
+ (2)性別
+ (3) 身份證字號
+ (4) 出生年月日
+ (5) 班級
+ (6) 聯絡電話
+ (7) 郵遞區號
+ (8) 地址
+ (9) 身份(一般身份、科展得獎者) : 科展得獎者需要上傳獎狀掃描檔
+ (10) 考區
+
4. 列印報名表,由校長及教務主任核章後,以掛號郵寄至【11677台北市文山區汀州路4段88號科教中心,收件人:IJSO選訓委員會】。
| <%=t('olympiamanagement.'+th_name) %> | + <% end %> +||||
|---|---|---|---|---|
| <%= time.map{|td| sign_up_setting["start_#{td}"]}.join('-') %> | +<%= time.map{|td| sign_up_setting["end_#{td}"]}.join('-') %> | +<%= @student_number = OlympiaStudentDataField.where(:sign_up_setting_id=>sign_up_setting.id).length %> | +
+ <% if sign_up_setting.active%>
+
+
+ <%=t('olympiamanagement.active')%>
+
+ <% else %>
+
+
+ <%=t('olympiamanagement.inactive')%>
+
+ <% end %>
+ |
+ + <% if !sign_up_setting.active%> + <%=t('olympiamanagement.active')%> + <% end %> + <%=t('olympiamanagement.view')%> + | +