| | 1 | = Случај на употреба 0005 - Обработка на доделена пријава = |
| | 2 | |
| | 3 | '''Иницијатор:''' Општински работник |
| | 4 | |
| | 5 | '''Други актери:''' нема |
| | 6 | |
| | 7 | Работникот ги гледа пријавите што му се доделени и сè уште не се решени, подредени по приоритет. Откако ќе интервенира на терен, тој додава коментар за направената работа и го менува статусот на пријавата. Секоја промена на статусот се евидентира во историјата, заедно со работникот кој ја направил. Системот дозволува промена само на пријави кои се доделени на тој работник. |
| | 8 | |
| | 9 | == Сценарио == |
| | 10 | |
| | 11 | 1. Работникот се најавува со е-пошта и лозинка. |
| | 12 | |
| | 13 | 2. Системот ги вчитува податоците за работникот: |
| | 14 | {{{#!sql |
| | 15 | SELECT worker_id, full_name |
| | 16 | FROM workers |
| | 17 | WHERE email = 'dejan.jovanovski@skopje.gov.mk'; |
| | 18 | }}} |
| | 19 | |
| | 20 | 3. Системот ги прикажува доделените активни пријави, прво најитните: |
| | 21 | {{{#!sql |
| | 22 | SELECT r.report_id, c.name AS category, r.description, r.location_text, |
| | 23 | r.status, r.priority, r.created_at |
| | 24 | FROM assignments a |
| | 25 | JOIN reports r ON r.report_id = a.report_id |
| | 26 | JOIN categories c ON c.category_id = r.category_id |
| | 27 | WHERE a.worker_id = 4 |
| | 28 | AND r.status NOT IN ('resolved', 'rejected') |
| | 29 | ORDER BY CASE r.priority |
| | 30 | WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 |
| | 31 | WHEN 'medium' THEN 3 ELSE 4 |
| | 32 | END, |
| | 33 | r.created_at; |
| | 34 | }}} |
| | 35 | |
| | 36 | 4. Работникот избира пријава. |
| | 37 | |
| | 38 | 5. Системот ги прикажува деталите за пријавата, контактот на граѓанинот и забелешката од администраторот: |
| | 39 | {{{#!sql |
| | 40 | SELECT r.report_id, r.description, r.location_text, r.latitude, r.longitude, |
| | 41 | r.status, r.priority, ci.full_name AS citizen, ci.phone, |
| | 42 | a.assigned_at, a.note AS admin_note |
| | 43 | FROM reports r |
| | 44 | JOIN citizens ci ON ci.citizen_id = r.citizen_id |
| | 45 | JOIN assignments a ON a.report_id = r.report_id AND a.worker_id = 4 |
| | 46 | WHERE r.report_id = 4; |
| | 47 | }}} |
| | 48 | |
| | 49 | 6. По интервенцијата на терен, работникот пишува коментар за направената работа. |
| | 50 | |
| | 51 | 7. Системот го зачувува коментарот, само ако пријавата е доделена на работникот: |
| | 52 | {{{#!sql |
| | 53 | INSERT INTO comments (content, report_id, worker_id) |
| | 54 | SELECT 'Цевката е заменета, водата е вратена во системот.', 4, 4 |
| | 55 | WHERE EXISTS (SELECT 1 FROM assignments WHERE report_id = 4 AND worker_id = 4) |
| | 56 | RETURNING comment_id, created_at; |
| | 57 | }}} |
| | 58 | |
| | 59 | 8. Работникот го избира новиот статус („resolved“) и внесува забелешка. |
| | 60 | |
| | 61 | 9. Системот го менува статусот на пријавата и ја евидентира промената во историјата во една команда. Промената се прави само ако пријавата е доделена на работникот и сè уште не е затворена: |
| | 62 | {{{#!sql |
| | 63 | WITH changed AS ( |
| | 64 | UPDATE reports r |
| | 65 | SET status = 'resolved' |
| | 66 | WHERE r.report_id = 4 |
| | 67 | AND r.status NOT IN ('resolved', 'rejected') |
| | 68 | AND EXISTS (SELECT 1 FROM assignments a |
| | 69 | WHERE a.report_id = r.report_id AND a.worker_id = 4) |
| | 70 | RETURNING r.report_id, r.status |
| | 71 | ) |
| | 72 | INSERT INTO status_logs (status, note, report_id, worker_id) |
| | 73 | SELECT status, 'Дефектот е отстранет, шахтата е затворена.', report_id, 4 |
| | 74 | FROM changed |
| | 75 | RETURNING log_id, status, changed_at; |
| | 76 | }}} |
| | 77 | |
| | 78 | 10. Системот ја прикажува ажурираната историја на пријавата: |
| | 79 | {{{#!sql |
| | 80 | SELECT l.status, l.changed_at, l.note, w.full_name |
| | 81 | FROM status_logs l |
| | 82 | LEFT JOIN workers w ON w.worker_id = l.worker_id |
| | 83 | WHERE l.report_id = 4 |
| | 84 | ORDER BY l.changed_at; |
| | 85 | }}} |
| | 86 | |
| | 87 | 11. Пријавата повеќе не се прикажува во листата на активни пријави на работникот (чекор 3). |