Guest User

Untitled

a guest
Dec 11th, 2018
47
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. class Students::ImporterController < ApplicationController
  2. include SheetHelper
  3. require 'spreadsheet'
  4. require 'roo'
  5.  
  6. def index
  7. @importer_types = ["GAKU Engine", "SchoolStation"]
  8. render "students/importer/index"
  9. end
  10.  
  11. def get_csv_template
  12. filename = "StudentRegistration.csv"
  13. registration_fields = ["surname", "name", "surname_reading", "name_reading", "gender", "phone", "email", "birth_date", "admitted"]
  14. content = CSV.generate do |csv|
  15. csv << registration_fields
  16. csv << translate_fields(registration_fields)
  17. end
  18. send_data content, :filename => filename
  19. end
  20.  
  21. def get_sheet_template
  22. end
  23.  
  24.  
  25. def import_student_list
  26. # import_sheet_student_list
  27.  
  28. if params[:importer][:data_file].nil?
  29. render :text => "no file or bad file"
  30. return
  31. end
  32.  
  33. if params[:importer][:data_file].content_type == 'application/vnd.ms-excel'
  34. case params[:importer][:importer_type]
  35. when "GAKU Engine"
  36. import_sheet_student_list()
  37.  
  38. when "SchoolStation"
  39. import_school_station_student_list()
  40. end
  41.  
  42. elsif params[:importer][:data_file].content_type == "text/csv"
  43. import_csv_student_list()
  44. end
  45. end
  46.  
  47. def import_csv_student_list
  48. @rowcount = 0
  49. @csv_data = nil
  50. @status = "OPENING_FILE"
  51. @csv_data = params[:importer][:data_file].read.force_encoding("UTF-8")
  52. CSV.parse(@csv_data) do |row|
  53. case @rowcount
  54. when 0 #field index
  55. #get mapping
  56. #TODO
  57. when 1 #titles
  58. #ignore
  59. else #process record
  60. Student.create!(:surname => row[0], :name => row[1], :surname_reading => row[2], :name_reading => row[3])
  61. end
  62. @rowcount += 1
  63. end
  64. render :student_import_preview
  65. end
  66.  
  67. def import_sheet_student_list
  68.  
  69. file_data = params[:importer][:data_file]
  70.  
  71. #read from saved file
  72. importer = ImportFile.new(params[:importer])
  73. importer.context = 'students'
  74. importer.save
  75. book = Spreadsheet.open(importer.data_file.path)
  76.  
  77. #read from not saved file. just read file
  78. # book = Spreadsheet.open(file_data.path)
  79.  
  80. sheet = book.worksheet(0)
  81.  
  82. #Giorgio:put in transaction for fast importing
  83. sheet.each do |row|
  84. unless book.worksheet('Sheet1').first == row
  85. student = Student.create!(:surname => row[0],
  86. :name => row[1],
  87. :surname_reading => row[2],
  88. :name_reading => row[3])
  89. end
  90. end
  91.  
  92. render :text => 'sheet uploaded'
  93. end
  94.  
  95. #import XLS list exported from SchoolStation
  96. #在校生リストを先にインポートする必要がある
  97. def import_school_station_student_list
  98. #import ZAIKOU list from SchoolStation
  99. @rowcount = nil
  100. @sheet_data = nil
  101.  
  102. @status = "OPENING_FILE"
  103. @sheet_data = params[:import_student_list][:data_file].read
  104. @workbook = Spreadsheet::ParseExcel.parse(@sheet_data)
  105. #@worksheet = @workbook.work
  106.  
  107. #collect fields
  108.  
  109. #在校テーブルか生徒情報テーブルの情報を区別する
  110.  
  111.  
  112. render :importer_school_station_preview
  113. end
  114.  
  115. end
Add Comment
Please, Sign In to add comment