| | 1 | = Имплементација на случај на употреба 0005 - Обработка на доделена пријава = |
| | 2 | |
| | 3 | '''Иницијатор:''' Општински работник |
| | 4 | |
| | 5 | '''Други актери:''' нема |
| | 6 | |
| | 7 | Работникот ги гледа своите доделени активни пријави, подредени по приоритет. За избрана пријава додава коментари, го менува статусот (само во дозволениот следен статус) и може да го промени приоритетот. Секоја промена на статусот се евидентира во историјата. Промени се дозволени само на пријави доделени на тој работник. |
| | 8 | |
| | 9 | == Сценарио == |
| | 10 | |
| | 11 | 1. Корисникот ја избира улогата „Општински работник“. |
| | 12 | |
| | 13 | [[Image(UC0005_01_uloga.png)]] |
| | 14 | |
| | 15 | 2. Системот ги прикажува работниците, а корисникот се најавува со избор од листата: |
| | 16 | {{{#!sql |
| | 17 | SELECT worker_id, full_name, email FROM workers ORDER BY full_name; |
| | 18 | }}} |
| | 19 | |
| | 20 | [[Image(UC0005_02_najava.png)]] |
| | 21 | |
| | 22 | 3. Системот ги прикажува доделените активни пријави, прво најитните. Работникот избира пријава: |
| | 23 | {{{#!sql |
| | 24 | SELECT r.report_id, c.name AS category, r.description, r.location_text, |
| | 25 | r.status, r.priority, r.created_at |
| | 26 | FROM assignments a |
| | 27 | JOIN reports r ON r.report_id = a.report_id |
| | 28 | JOIN categories c ON c.category_id = r.category_id |
| | 29 | WHERE a.worker_id = %s |
| | 30 | AND r.status NOT IN ('resolved', 'rejected') |
| | 31 | ORDER BY CASE r.priority WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 |
| | 32 | WHEN 'medium' THEN 3 ELSE 4 END, |
| | 33 | r.created_at; |
| | 34 | }}} |
| | 35 | |
| | 36 | [[Image(UC0005_03_dodeleni.png)]] |
| | 37 | |
| | 38 | 4. Системот ги прикажува деталите за пријавата. Работникот избира „Додај коментар“ и го внесува коментарот, а системот го зачувува: |
| | 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 = %s |
| | 46 | WHERE r.report_id = %s; |
| | 47 | |
| | 48 | INSERT INTO comments (content, report_id, worker_id) |
| | 49 | SELECT %s, %s, %s |
| | 50 | WHERE EXISTS (SELECT 1 FROM assignments WHERE report_id = %s AND worker_id = %s) |
| | 51 | RETURNING comment_id, created_at; |
| | 52 | }}} |
| | 53 | |
| | 54 | [[Image(UC0005_04_detali_komentar.png)]] |
| | 55 | |
| | 56 | 5. Работникот избира „Промени статус“. Системот ги нуди само дозволените следни статуси. Работникот избира „Решена“ и внесува забелешка, а системот го менува статусот и ја евидентира промената: |
| | 57 | {{{#!sql |
| | 58 | WITH changed AS ( |
| | 59 | UPDATE reports r |
| | 60 | SET status = %s |
| | 61 | WHERE r.report_id = %s |
| | 62 | AND r.status NOT IN ('resolved', 'rejected') |
| | 63 | AND EXISTS (SELECT 1 FROM assignments a |
| | 64 | WHERE a.report_id = r.report_id AND a.worker_id = %s) |
| | 65 | RETURNING r.report_id, r.status |
| | 66 | ) |
| | 67 | INSERT INTO status_logs (status, note, report_id, worker_id) |
| | 68 | SELECT status, %s, report_id, %s |
| | 69 | FROM changed |
| | 70 | RETURNING log_id, status, changed_at; |
| | 71 | }}} |
| | 72 | |
| | 73 | [[Image(UC0005_05_status.png)]] |
| | 74 | |
| | 75 | 6. Системот прикажува дека пријавата е затворена, заедно со целата историја на статусот: |
| | 76 | {{{#!sql |
| | 77 | SELECT l.status, l.changed_at, l.note, w.full_name |
| | 78 | FROM status_logs l |
| | 79 | LEFT JOIN workers w ON w.worker_id = l.worker_id |
| | 80 | WHERE l.report_id = %s |
| | 81 | ORDER BY l.changed_at; |
| | 82 | }}} |
| | 83 | |
| | 84 | [[Image(UC0005_06_zatvorena.png)]] |
| | 85 | |
| | 86 | 7. Решената пријава повеќе не се прикажува во листата на активни пријави на работникот. |
| | 87 | |
| | 88 | [[Image(UC0005_07_lista_posle.png)]] |