wiki:UseCase0007Implementation

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

Иницијатор: Администратор

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

Администраторот ги гледа активните пријави без доделен работник, подредени по приоритет, и секоја ја доделува на работник. При изборот го гледа бројот на активни пријави на секој работник, за рамномерна распределба на работата.

Сценарио

  1. Корисникот ја избира улогата „Администратор“.

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

  1. Системот ги прикажува недоделените активни пријави, прво најитните. Администраторот избира пријава:
    SELECT r.report_id, c.name AS category, r.description, r.location_text,
           r.priority, r.created_at
    FROM reports r
    JOIN categories c ON c.category_id = r.category_id
    WHERE r.status NOT IN ('resolved', 'rejected')
      AND NOT EXISTS (SELECT 1 FROM assignments a WHERE a.report_id = r.report_id)
    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 w.worker_id, w.full_name,
           COUNT(r.report_id) FILTER (WHERE r.status NOT IN ('resolved', 'rejected'))
               AS active_reports
    FROM workers w
    LEFT JOIN assignments a ON a.worker_id = w.worker_id
    LEFT JOIN reports r     ON r.report_id = a.report_id
    GROUP BY w.worker_id, w.full_name
    ORDER BY active_reports, w.full_name;
    

  1. Системот го зачувува доделувањето и прикажува потврда. Ако работникот веќе е доделен на пријавата, базата го одбива внесот (ограничување uq_assignments_report_worker) и системот прикажува порака:
    INSERT INTO assignments (note, admin_id, report_id, worker_id)
    VALUES (%s, %s, %s, %s)
    RETURNING assignment_id, assigned_at;
    
    SELECT a.assignment_id, r.report_id, r.description,
           w.full_name AS worker, ad.full_name AS admin, a.assigned_at, a.note
    FROM assignments a
    JOIN reports r ON r.report_id = a.report_id
    JOIN workers w ON w.worker_id = a.worker_id
    JOIN admins ad ON ad.admin_id = a.admin_id
    WHERE a.report_id = %s AND a.worker_id = %s;
    

  1. Пријавата повеќе не се прикажува во листата на недоделени пријави.

Last modified 12 days ago Last modified on 09/19/26 00:23:03

Attachments (6)

Download all attachments as: .zip

Note: See TracWiki for help on using the wiki.