| | 1 | == UC013 - Отворање на активен семестар |
| | 2 | |
| | 3 | '''Иницијален актер:''' Администратор |
| | 4 | |
| | 5 | '''Други актери:''' - |
| | 6 | |
| | 7 | Администраторот отвора нов активен семестар, со што на студентите им се |
| | 8 | овозможува да се запишат во него преку [wiki:UseCase007 UC007]. |
| | 9 | |
| | 10 | === Сценарио |
| | 11 | |
| | 12 | 1. Администраторот избира '''Семестри''' и потоа '''Нов семестар'''. |
| | 13 | |
| | 14 | 2. Системот ги прикажува веќе отворените семестри, за да се избегне дупликат. |
| | 15 | {{{#!sql |
| | 16 | SELECT id, year, type |
| | 17 | FROM project.active_semesters |
| | 18 | ORDER BY year DESC, (type = 'summer') DESC; |
| | 19 | }}} |
| | 20 | |
| | 21 | 3. Администраторот внесува година и тип на семестар (зимски или летен) и потврдува. |
| | 22 | |
| | 23 | 4. Системот го отвора семестарот. Ограничувањето UNIQUE (year, type) спречува ист семестар да се отвори двапати. |
| | 24 | {{{#!sql |
| | 25 | INSERT INTO project.active_semesters (year, type) |
| | 26 | VALUES (2027, 'summer') |
| | 27 | RETURNING id, year, type; |
| | 28 | }}} |
| | 29 | |
| | 30 | 5. Системот проверува дали секој предмет има професор во новиот семестар, бидејќи без тоа студентите не можат да го запишат предметот. |
| | 31 | {{{#!sql |
| | 32 | SELECT s.id, s.code, s.name |
| | 33 | FROM project.subjects s |
| | 34 | WHERE NOT EXISTS ( |
| | 35 | SELECT 1 FROM project.professour_subjects ps |
| | 36 | WHERE ps.subject_id = s.id |
| | 37 | AND ps.active_semester_id = (SELECT id FROM project.active_semesters |
| | 38 | WHERE year = 2027 AND type = 'summer') |
| | 39 | ) |
| | 40 | ORDER BY s.code; |
| | 41 | }}} |
| | 42 | |
| | 43 | 6. Ако листата не е празна, администраторот преминува на [wiki:UseCase014 UC014] за да ги распореди професорите. |
| | 44 | |
| | 45 | === Алтернативни текови |
| | 46 | |
| | 47 | * '''4а.''' Семестарот веќе е отворен - ограничувањето UNIQUE (year, type) го одбива записот. |
| | 48 | |
| | 49 | === Забелешки |
| | 50 | |
| | 51 | * Типот на семестар е набројувачки тип semester_type со вредности 'summer' и 'winter'. |