= Имплементација на случај на употреба 0005 - Обработка на доделена пријава = '''Иницијатор:''' Општински работник '''Други актери:''' нема Работникот ги гледа своите доделени активни пријави, подредени по приоритет. За избрана пријава додава коментари, го менува статусот (само во дозволениот следен статус) и може да го промени приоритетот. Секоја промена на статусот се евидентира во историјата. Промени се дозволени само на пријави доделени на тој работник. == Сценарио == 1. Корисникот ја избира улогата „Општински работник“. [[Image(UC0005_01_uloga.png)]] 2. Системот ги прикажува работниците, а корисникот се најавува со избор од листата: {{{#!sql SELECT worker_id, full_name, email FROM workers ORDER BY full_name; }}} [[Image(UC0005_02_najava.png)]] 3. Системот ги прикажува доделените активни пријави, прво најитните. Работникот избира пријава: {{{#!sql SELECT r.report_id, c.name AS category, r.description, r.location_text, r.status, r.priority, r.created_at FROM assignments a JOIN reports r ON r.report_id = a.report_id JOIN categories c ON c.category_id = r.category_id WHERE a.worker_id = %s AND r.status NOT IN ('resolved', 'rejected') ORDER BY CASE r.priority WHEN 'urgent' THEN 1 WHEN 'high' THEN 2 WHEN 'medium' THEN 3 ELSE 4 END, r.created_at; }}} [[Image(UC0005_03_dodeleni.png)]] 4. Системот ги прикажува деталите за пријавата. Работникот избира „Додај коментар“ и го внесува коментарот, а системот го зачувува: {{{#!sql SELECT r.report_id, r.description, r.location_text, r.latitude, r.longitude, r.status, r.priority, ci.full_name AS citizen, ci.phone, a.assigned_at, a.note AS admin_note FROM reports r JOIN citizens ci ON ci.citizen_id = r.citizen_id JOIN assignments a ON a.report_id = r.report_id AND a.worker_id = %s WHERE r.report_id = %s; INSERT INTO comments (content, report_id, worker_id) SELECT %s, %s, %s WHERE EXISTS (SELECT 1 FROM assignments WHERE report_id = %s AND worker_id = %s) RETURNING comment_id, created_at; }}} [[Image(UC0005_04_detali_komentar.png)]] 5. Работникот избира „Промени статус“. Системот ги нуди само дозволените следни статуси. Работникот избира „Решена“ и внесува забелешка, а системот го менува статусот и ја евидентира промената: {{{#!sql WITH changed AS ( UPDATE reports r SET status = %s WHERE r.report_id = %s AND r.status NOT IN ('resolved', 'rejected') AND EXISTS (SELECT 1 FROM assignments a WHERE a.report_id = r.report_id AND a.worker_id = %s) RETURNING r.report_id, r.status ) INSERT INTO status_logs (status, note, report_id, worker_id) SELECT status, %s, report_id, %s FROM changed RETURNING log_id, status, changed_at; }}} [[Image(UC0005_05_status.png)]] 6. Системот прикажува дека пријавата е затворена, заедно со целата историја на статусот: {{{#!sql SELECT l.status, l.changed_at, l.note, w.full_name FROM status_logs l LEFT JOIN workers w ON w.worker_id = l.worker_id WHERE l.report_id = %s ORDER BY l.changed_at; }}} [[Image(UC0005_06_zatvorena.png)]] 7. Решената пријава повеќе не се прикажува во листата на активни пријави на работникот. [[Image(UC0005_07_lista_posle.png)]]