wiki:UseCase0005

Version 1 (modified by 183164, 12 days ago) ( diff )

--

Случај на употреба 0005 - Обработка на доделена пријава

Иницијатор: Општински работник

Други актери: нема

Работникот ги гледа пријавите што му се доделени и сè уште не се решени, подредени по приоритет. Откако ќе интервенира на терен, тој додава коментар за направената работа и го менува статусот на пријавата. Секоја промена на статусот се евидентира во историјата, заедно со работникот кој ја направил. Системот дозволува промена само на пријави кои се доделени на тој работник.

Сценарио

  1. Работникот се најавува со е-пошта и лозинка.
  1. Системот ги вчитува податоците за работникот:
    SELECT worker_id, full_name
    FROM workers
    WHERE email = 'dejan.jovanovski@skopje.gov.mk';
    
  1. Системот ги прикажува доделените активни пријави, прво најитните:
    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;
    
  1. Работникот избира пријава.
  1. Системот ги прикажува деталите за пријавата, контактот на граѓанинот и забелешката од администраторот:
    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;
    
  1. По интервенцијата на терен, работникот пишува коментар за направената работа.
  1. Системот го зачувува коментарот, само ако пријавата е доделена на работникот:
    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;
    
  1. Работникот го избира новиот статус („resolved“) и внесува забелешка.
  1. Системот го менува статусот на пријавата и ја евидентира промената во историјата во една команда. Промената се прави само ако пријавата е доделена на работникот и сè уште не е затворена:
    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;
    
  1. Системот ја прикажува ажурираната историја на пријавата:
    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;
    
  1. Пријавата повеќе не се прикажува во листата на активни пријави на работникот (чекор 3).
Note: See TracWiki for help on using the wiki.