= Имплементација на случај на употреба 0007 - Доделување на пријава на работник = '''Иницијатор:''' Администратор '''Други актери:''' нема Администраторот ги гледа активните пријави без доделен работник, подредени по приоритет, и секоја ја доделува на работник. При изборот го гледа бројот на активни пријави на секој работник, за рамномерна распределба на работата. == Сценарио == 1. Корисникот ја избира улогата „Администратор“. [[Image(UC0007_01_uloga.png)]] 2. Системот ги прикажува администраторите, а корисникот се најавува со избор од листата: {{{#!sql SELECT admin_id, full_name, email FROM admins ORDER BY full_name; }}} [[Image(UC0007_02_najava.png)]] 3. Системот ги прикажува недоделените активни пријави, прво најитните. Администраторот избира пријава: {{{#!sql 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; }}} [[Image(UC0007_03_nedodeleni.png)]] 4. Системот ги прикажува деталите за пријавата и работниците според оптовареноста. Администраторот избира работник и внесува забелешка: {{{#!sql 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; }}} [[Image(UC0007_04_izbor_rabotnik.png)]] 5. Системот го зачувува доделувањето и прикажува потврда. Ако работникот веќе е доделен на пријавата, базата го одбива внесот (ограничување uq_assignments_report_worker) и системот прикажува порака: {{{#!sql 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; }}} [[Image(UC0007_05_potvrda.png)]] 6. Пријавата повеќе не се прикажува во листата на недоделени пријави. [[Image(UC0007_06_lista_posle.png)]]