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