wiki:UseCase0005Implementation

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

--

Имплементација на случај на употреба 0005 - Обработка на доделена пријава

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

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

Работникот ги гледа своите доделени активни пријави, подредени по приоритет. За избрана пријава додава коментари, го менува статусот (само во дозволениот следен статус) и може да го промени приоритетот. Секоја промена на статусот се евидентира во историјата. Промени се дозволени само на пријави доделени на тој работник.

Сценарио

  1. Корисникот ја избира улогата „Општински работник“.

  1. Системот ги прикажува работниците, а корисникот се најавува со избор од листата:
    SELECT worker_id, full_name, email FROM workers ORDER BY full_name;
    

  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 = %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;
    

  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 = %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;
    

  1. Работникот избира „Промени статус“. Системот ги нуди само дозволените следни статуси. Работникот избира „Решена“ и внесува забелешка, а системот го менува статусот и ја евидентира промената:
    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;
    

  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 = %s
    ORDER BY l.changed_at;
    

  1. Решената пријава повеќе не се прикажува во листата на активни пријави на работникот.

Attachments (7)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.