| | 1 | = Имплементација на случај на употреба 0007 - Доделување на пријава на работник = |
| | 2 | |
| | 3 | '''Иницијатор:''' Администратор |
| | 4 | |
| | 5 | '''Други актери:''' нема |
| | 6 | |
| | 7 | Администраторот ги гледа активните пријави без доделен работник, подредени по приоритет, и секоја ја доделува на работник. При изборот го гледа бројот на активни пријави на секој работник, за рамномерна распределба на работата. |
| | 8 | |
| | 9 | == Сценарио == |
| | 10 | |
| | 11 | 1. Корисникот ја избира улогата „Администратор“. |
| | 12 | |
| | 13 | [[Image(UC0007_01_uloga.png)]] |
| | 14 | |
| | 15 | 2. Системот ги прикажува администраторите, а корисникот се најавува со избор од листата: |
| | 16 | {{{#!sql |
| | 17 | SELECT admin_id, full_name, email FROM admins ORDER BY full_name; |
| | 18 | }}} |
| | 19 | |
| | 20 | [[Image(UC0007_02_najava.png)]] |
| | 21 | |
| | 22 | 3. Системот ги прикажува недоделените активни пријави, прво најитните. Администраторот избира пријава: |
| | 23 | {{{#!sql |
| | 24 | SELECT r.report_id, c.name AS category, r.description, r.location_text, |
| | 25 | r.priority, r.created_at |
| | 26 | FROM reports r |
| | 27 | JOIN categories c ON c.category_id = r.category_id |
| | 28 | WHERE r.status NOT IN ('resolved', 'rejected') |
| | 29 | AND NOT EXISTS (SELECT 1 FROM assignments a WHERE a.report_id = r.report_id) |
| | 30 | ORDER BY CASE r.priority WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 |
| | 31 | WHEN 'medium' THEN 3 ELSE 4 END, |
| | 32 | r.created_at; |
| | 33 | }}} |
| | 34 | |
| | 35 | [[Image(UC0007_03_nedodeleni.png)]] |
| | 36 | |
| | 37 | 4. Системот ги прикажува деталите за пријавата и работниците според оптовареноста. Администраторот избира работник и внесува забелешка: |
| | 38 | {{{#!sql |
| | 39 | SELECT w.worker_id, w.full_name, |
| | 40 | COUNT(r.report_id) FILTER (WHERE r.status NOT IN ('resolved', 'rejected')) |
| | 41 | AS active_reports |
| | 42 | FROM workers w |
| | 43 | LEFT JOIN assignments a ON a.worker_id = w.worker_id |
| | 44 | LEFT JOIN reports r ON r.report_id = a.report_id |
| | 45 | GROUP BY w.worker_id, w.full_name |
| | 46 | ORDER BY active_reports, w.full_name; |
| | 47 | }}} |
| | 48 | |
| | 49 | [[Image(UC0007_04_izbor_rabotnik.png)]] |
| | 50 | |
| | 51 | 5. Системот го зачувува доделувањето и прикажува потврда. Ако работникот веќе е доделен на пријавата, базата го одбива внесот (ограничување uq_assignments_report_worker) и системот прикажува порака: |
| | 52 | {{{#!sql |
| | 53 | INSERT INTO assignments (note, admin_id, report_id, worker_id) |
| | 54 | VALUES (%s, %s, %s, %s) |
| | 55 | RETURNING assignment_id, assigned_at; |
| | 56 | |
| | 57 | SELECT a.assignment_id, r.report_id, r.description, |
| | 58 | w.full_name AS worker, ad.full_name AS admin, a.assigned_at, a.note |
| | 59 | FROM assignments a |
| | 60 | JOIN reports r ON r.report_id = a.report_id |
| | 61 | JOIN workers w ON w.worker_id = a.worker_id |
| | 62 | JOIN admins ad ON ad.admin_id = a.admin_id |
| | 63 | WHERE a.report_id = %s AND a.worker_id = %s; |
| | 64 | }}} |
| | 65 | |
| | 66 | [[Image(UC0007_05_potvrda.png)]] |
| | 67 | |
| | 68 | 6. Пријавата повеќе не се прикажува во листата на недоделени пријави. |
| | 69 | |
| | 70 | [[Image(UC0007_06_lista_posle.png)]] |