diff --git a/app/Http/Controllers/User/UserClassesController.php b/app/Http/Controllers/User/UserClassesController.php index 6e83abc..f20e4f4 100644 --- a/app/Http/Controllers/User/UserClassesController.php +++ b/app/Http/Controllers/User/UserClassesController.php @@ -123,43 +123,63 @@ class UserClassesController extends Controller $student_name = $request->input('student_name'); $student_surname = $request->input('student_surname'); $classes = Classes::find($request->get('classes_id')); + $subject = Subject::find($classes->subject_id); + $room_capacity = Room::find($subject->room_id)->capacity; + $attendances = Attendance::where('classes_id', $classes->id)->get(); + $student_ids = $attendances->pluck('student_id_number')->toArray(); + $seat_numbers = $attendances->pluck('seat_number')->toArray(); - if($classes->mode == 'quick') { - Attendance::create([ - 'classes_id' => $classes->id, - 'student_id_number' => $student_id_number, - 'student_name' => $student_name, - 'student_surname' => $student_surname, - 'seat_number' => null - ]); - return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => null, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'mode' => $classes->mode]); - + if(in_array($student_id_number, $student_ids)) { // if student attendance record already exists + $student_seat_number = Attendance::where('student_id_number', $student_id_number)->first()->seat_number; + $warning = 'Ten numer indeksu został już wcześniej zapisany na te zajęcia.'; + return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => $student_seat_number, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'mode' => $classes->mode, 'warning' => $warning]); } else { - $attendances = Attendance::where('classes_id', $classes->id)->get(); - $seat_numbers = $attendances->pluck('seat_number')->toArray(); - $subject = Subject::find($classes->subject_id); - $room_arrangement = Room::find($subject->room_id)->arrangement; - if(!$room_arrangement) { - $room_arrangement = Room::where('name', 'Inna sala')->first()->arrangement; - } - $room_rows = count(explode("++", $room_arrangement)); - if($room_rows > 4) { //max 4 rows on one page - $multi_parts = true; - $parts_number = ceil($room_rows/4); + if (count($seat_numbers) >= $room_capacity) { // if there are no more free seats in room, add student without assigning seat number (regardless of the classes mode) + Attendance::create([ + 'classes_id' => $classes->id, + 'student_id_number' => $student_id_number, + 'student_name' => $student_name, + 'student_surname' => $student_surname, + 'seat_number' => null + ]); + $warning = "Zostałeś zapisany na listę obecności, ale bez przyznanego miejsca."; + return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => null, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'mode' => $classes->mode, 'warning' => $warning]); } else { - $multi_parts = false; - $parts_number = 1; - } + if ($classes->mode == 'quick') { + Attendance::create([ + 'classes_id' => $classes->id, + 'student_id_number' => $student_id_number, + 'student_name' => $student_name, + 'student_surname' => $student_surname, + 'seat_number' => null + ]); + return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => null, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'mode' => $classes->mode, 'warning' => null]); + } else { + // prepare seat map + $room_arrangement = Room::find($subject->room_id)->arrangement; + if (!$room_arrangement) { + $room_arrangement = Room::where('name', 'Inna sala')->first()->arrangement; + } + $room_rows = count(explode("++", $room_arrangement)); + if ($room_rows > 4) { //max 4 rows on one page + $multi_parts = true; + $parts_number = ceil($room_rows / 4); + } else { + $multi_parts = false; + $parts_number = 1; + } - if($classes->mode == 'test') { - $room_capacity = Room::find($subject->room_id)->capacity; - $random_seat = rand(1, $room_capacity); - while(in_array($random_seat, $seat_numbers)) { - $random_seat = rand(1, $room_capacity); + if ($classes->mode == 'test') { + $random_seat = rand(1, $room_capacity); + while (in_array($random_seat, $seat_numbers)) { + $random_seat = rand(1, $room_capacity); + } + return view('map.seat_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => $random_seat, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'seat_numbers' => $seat_numbers, 'room_arrangement' => $room_arrangement, 'multi_parts' => $multi_parts, 'parts_number' => $parts_number, 'mode' => 'test', 'random_seat' => $random_seat]); + } else { + return view('map.seat_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'seat_numbers' => $seat_numbers, 'room_arrangement' => $room_arrangement, 'multi_parts' => $multi_parts, 'parts_number' => $parts_number, 'mode' => null]); + } } - return view('map.seat_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => $random_seat, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'seat_numbers' => $seat_numbers, 'room_arrangement' => $room_arrangement, 'multi_parts' => $multi_parts, 'parts_number' =>$parts_number, 'mode' => 'test', 'random_seat' => $random_seat]); } - return view('map.seat_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'student_id_number' => $student_id_number, 'classes_id' => $classes->id, 'seat_numbers' => $seat_numbers, 'room_arrangement' => $room_arrangement, 'multi_parts' => $multi_parts, 'parts_number' =>$parts_number, 'mode' => null]); } } @@ -177,7 +197,7 @@ class UserClassesController extends Controller 'student_surname' => $student_surname, 'seat_number' => $seat_number ]); - return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => $seat_number, 'student_id_number' => $student_id_number, 'classes_id' => $classes_id, 'mode' => null]); + return view('map.summary_map', ['student_name' => $student_name, 'student_surname' => $student_surname, 'seat_number' => $seat_number, 'student_id_number' => $student_id_number, 'classes_id' => $classes_id, 'mode' => null, 'warning' => null]); } public function preview_classes($classes_id, $orderBy='student_surname', $orderDirection='ASC') diff --git a/public/js/map/seatchart-preview.js b/public/js/map/seatchart-preview.js index 1ab22cb..2274265 100644 --- a/public/js/map/seatchart-preview.js +++ b/public/js/map/seatchart-preview.js @@ -5,34 +5,37 @@ function assignPlaces() { const seat_number = $(this).attr('id').split('++')[0]; const name = $(this).attr('id').split('++')[1]; const surname = $(this).attr('id').split('++')[2]; - let map_seat = ''; - if(!multi_parts) { - map_seat = $('#seat-map').find(`#${seat_number}`); - } else { - const parts_number = $('#multi_parts_number').val(); - let index = 0; - map_seat = $('#seat-map-0').find(`#${seat_number}`); - while (!map_seat.length && index < parts_number) { - index++; - map_seat = $(`#seat-map-${index}`).find(`#${seat_number}`); + if(seat_number) { + let map_seat = ''; + if(!multi_parts) { + map_seat = $('#seat-map').find(`#${seat_number}`); + } else { + const parts_number = $('#multi_parts_number').val(); + let index = 0; + map_seat = $('#seat-map-0').find(`#${seat_number}`); + while (!map_seat.length && index < parts_number) { + index++; + map_seat = $(`#seat-map-${index}`).find(`#${seat_number}`); + } + } + if(map_seat.length) { + map_seat.html(`${seat_number}
${name} ${surname}`); + map_seat.on('mouseover', () => { + map_seat.css('backgroundColor', 'lightgrey'); + $(this).css('backgroundColor', 'lightgrey'); + }).on('mouseleave', () => { + map_seat.css('backgroundColor', '#649a24'); + $(this).css('backgroundColor', 'unset'); + }); + $(this).on('mouseover', () => { + map_seat.css('backgroundColor', 'lightgrey'); + $(this).css('backgroundColor', 'lightgrey'); + }).on('mouseleave', () => { + map_seat.css('backgroundColor', '#649a24'); + $(this).css('backgroundColor', 'unset'); + }) } } - console.log(map_seat); - map_seat.html(`${seat_number}
${name} ${surname}`); - map_seat.on('mouseover', () => { - map_seat.css('backgroundColor', 'lightgrey'); - $(this).css('backgroundColor', 'lightgrey'); - }).on('mouseleave', () => { - map_seat.css('backgroundColor', '#649a24'); - $(this).css('backgroundColor', 'unset'); - }); - $(this).on('mouseover', () => { - map_seat.css('backgroundColor', 'lightgrey'); - $(this).css('backgroundColor', 'lightgrey'); - }).on('mouseleave', () => { - map_seat.css('backgroundColor', '#649a24'); - $(this).css('backgroundColor', 'unset'); - }) }) } diff --git a/resources/views/map/start_map.blade.php b/resources/views/map/start_map.blade.php index 3041638..4a9f8e2 100644 --- a/resources/views/map/start_map.blade.php +++ b/resources/views/map/start_map.blade.php @@ -34,6 +34,27 @@ + + +