PageRenderTime 1642ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/app/controllers/faculties/pupils_controller.rb

https://gitlab.com/cd2/developingexperts
Ruby | 104 lines | 86 code | 18 blank | 0 comment | 3 complexity | b59c3c95f4718010f389c74605d2cddd MD5 | raw file
  1. class Faculties::PupilsController < FacultyController
  2. before_action :verify_administrator, only: [:new, :create, :edit, :update, :destroy, :add_to_class, :leave_class]
  3. before_action :set_pupil, only: [:show, :update, :edit, :add_to_class, :leave_class, :destroy, :graph_json]
  4. def show
  5. end
  6. def edit
  7. end
  8. def index
  9. pupil_driver = signed_in_as_administrator? ? @school : current_user
  10. @q = pupil_driver.pupils.ransack(params[:q])
  11. @pupils = @q.result(distinct: true)
  12. end
  13. def new
  14. @pupil = @school.pupils.build
  15. end
  16. def create
  17. @pupil = @school.pupils.build(pupil_params)
  18. if @pupil.save
  19. unless params[:user_pupil][:klass].blank?
  20. @pupil.enroll_in Klass.find(params[:user_pupil][:klass])
  21. end
  22. flash[:notice] = 'Pupil created'
  23. @school.notify("#{view_context.link_to(@pupil.name, faculty_pupil_path(@pupil))} has been added as a new #{view_context.link_to('pupil', faculty_pupils_path)}")
  24. redirect_to faculty_pupil_path(@pupil)
  25. else
  26. render :new
  27. end
  28. end
  29. def update
  30. if @pupil.update(pupil_params)
  31. unless params[:user_pupil][:klass].blank?
  32. @pupil.enroll_in Klass.find(params[:user_pupil][:klass])
  33. end
  34. flash[:notice] = 'Pupil updated'
  35. @school.notify("#{view_context.link_to(@pupil.name, faculty_pupil_path(@pupil))} has been updated")
  36. redirect_to faculty_pupil_path(@pupil)
  37. else
  38. render :edit
  39. end
  40. end
  41. def add_to_class
  42. klass = Klass.find(params[:klass_id])
  43. @pupil.enroll_in(klass)
  44. redirect_to edit_faculty_klass_path(klass, tab: 'manage')
  45. end
  46. def leave_class
  47. klass = Klass.find(params[:klass_id])
  48. @pupil.leave(klass)
  49. redirect_to edit_faculty_klass_path(klass, tab: 'manage')
  50. end
  51. def import
  52. file = params[:csv_file]
  53. unless File.extname(file.original_filename) == ".csv"
  54. flash[:error] = "File format is not supported"
  55. return redirect_to faculty_pupils_url
  56. end
  57. begin
  58. User::Pupil.import_csv(@school, file)
  59. rescue => e
  60. flash[:error] = e.message
  61. else
  62. flash[:success] = "Pupils Imported"
  63. ensure
  64. redirect_to faculty_pupils_url
  65. end
  66. end
  67. def destroy
  68. @pupil.destroy
  69. redirect_to faculty_pupils_path
  70. end
  71. def graph_json
  72. respond_to do |format|
  73. format.json {render "faculty/pupils/graphs/#{params[:chart_type]}"}
  74. end
  75. end
  76. private
  77. def set_pupil
  78. @pupil = User.friendly.find(params[:id])
  79. end
  80. def pupil_params
  81. params.require(:user_pupil).permit(:name, :email, :age, :gender, :pupil_identifier, :dob, :study_year_id, :klass, :specified_class)
  82. end
  83. def verify_administrator
  84. redirect_to faculty_root_path unless signed_in_as_administrator?
  85. end
  86. end