|
1 | 1 | class ClassroomsController < AdminController |
2 | | - before_action :set_classroom, only: %i[ edit update ] |
| 2 | + before_action :set_classroom, only: %i[edit update schedule] |
3 | 3 |
|
4 | | - # GET /classrooms/1/edit |
5 | 4 | def edit |
| 5 | + build_missing_program_enrollments |
6 | 6 | end |
7 | | - # PATCH/PUT /classrooms/1 or /classrooms/1.json |
| 7 | + |
| 8 | + def schedule |
| 9 | + @classroom_programs = @classroom.classroom_programs |
| 10 | + .includes(:program, classroom_modules: :content_module) |
| 11 | + .order("programs.name") |
| 12 | + @active_enrollment = @classroom_programs.find { |cp| cp.id.to_s == params[:classroom_program_id] } || @classroom_programs.first |
| 13 | + end |
| 14 | + |
8 | 15 | def update |
9 | 16 | respond_to do |format| |
10 | 17 | if @classroom.update(classroom_params) |
| 18 | + @classroom.classroom_programs.reload.each(&:generate_modules!) |
11 | 19 | format.html { redirect_to school_students_url(@classroom.school), notice: "Classroom was successfully updated.", status: :see_other } |
12 | 20 | format.json { render :show, status: :ok, location: @classroom } |
13 | 21 | else |
| 22 | + build_missing_program_enrollments |
14 | 23 | format.html { render :edit, status: :unprocessable_entity } |
15 | 24 | format.json { render json: @classroom.errors, status: :unprocessable_entity } |
16 | 25 | end |
17 | 26 | end |
18 | 27 | end |
19 | 28 |
|
20 | 29 | private |
21 | | - # Use callbacks to share common setup or constraints between actions. |
22 | 30 | def set_classroom |
23 | 31 | @classroom = Classroom.find(params.expect(:id)) |
24 | 32 | end |
25 | 33 |
|
26 | | - # Only allow a list of trusted parameters through. |
| 34 | + def build_missing_program_enrollments |
| 35 | + @classroom.classroom_programs.load unless @classroom.classroom_programs.loaded? |
| 36 | + enrolled_ids = @classroom.classroom_programs.target.map(&:program_id).to_set |
| 37 | + Program.order(:name).each do |program| |
| 38 | + @classroom.classroom_programs.build(program: program) unless enrolled_ids.include?(program.id) |
| 39 | + end |
| 40 | + end |
| 41 | + |
27 | 42 | def classroom_params |
28 | | - params.expect(classroom: [ :name, :teacher ]) |
| 43 | + params.expect(classroom: [ :name, :teacher, classroom_programs_attributes: [ [ :id, :program_id, :level, :_destroy ] ] ]) |
29 | 44 | end |
30 | 45 | end |
0 commit comments