= Случај на употреба 0005 - Обработка на доделена пријава = '''Иницијатор:''' Општински работник '''Други актери:''' нема Работникот ги гледа пријавите што му се доделени и сè уште не се решени, подредени по приоритет. Откако ќе интервенира на терен, тој додава коментар за направената работа и го менува статусот на пријавата. Секоја промена на статусот се евидентира во историјата, заедно со работникот кој ја направил. Системот дозволува промена само на пријави кои се доделени на тој работник. == Сценарио == 1. Работникот се најавува со е-пошта и лозинка. 2. Системот ги вчитува податоците за работникот: {{{#!sql SELECT worker_id, full_name FROM workers WHERE email = 'dejan.jovanovski@skopje.gov.mk'; }}} 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 = 4 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; }}} 4. Работникот избира пријава. 5. Системот ги прикажува деталите за пријавата, контактот на граѓанинот и забелешката од администраторот: {{{#!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 = 4 WHERE r.report_id = 4; }}} 6. По интервенцијата на терен, работникот пишува коментар за направената работа. 7. Системот го зачувува коментарот, само ако пријавата е доделена на работникот: {{{#!sql INSERT INTO comments (content, report_id, worker_id) SELECT 'Цевката е заменета, водата е вратена во системот.', 4, 4 WHERE EXISTS (SELECT 1 FROM assignments WHERE report_id = 4 AND worker_id = 4) RETURNING comment_id, created_at; }}} 8. Работникот го избира новиот статус („resolved“) и внесува забелешка. 9. Системот го менува статусот на пријавата и ја евидентира промената во историјата во една команда. Промената се прави само ако пријавата е доделена на работникот и сè уште не е затворена: {{{#!sql WITH changed AS ( UPDATE reports r SET status = 'resolved' WHERE r.report_id = 4 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 = 4) RETURNING r.report_id, r.status ) INSERT INTO status_logs (status, note, report_id, worker_id) SELECT status, 'Дефектот е отстранет, шахтата е затворена.', report_id, 4 FROM changed RETURNING log_id, status, changed_at; }}} 10. Системот ја прикажува ажурираната историја на пријавата: {{{#!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 = 4 ORDER BY l.changed_at; }}} 11. Пријавата повеќе не се прикажува во листата на активни пријави на работникот (чекор 3).