= UseCase0005 - Затворање на смена = '''Актер иницијатор:''' Менаџер '''Други актери:''' нема == Опис == Менаџерот ја затвора тековната смена. Системот ги собира сите нарачки со статус „платена" во тековната смена, го пресметува вкупниот износ и бројот на нарачки, го внесува затворањето на смената и ја означува смената како завршена. == Сценарио == 1. Менаџерот отвора екранот за затворање на смена. 2. Системот ја прикажува активната смена: {{{ SELECT shift_id, user_id, start_time FROM project.shift WHERE end_time IS NULL; }}} 3. Системот ги собира сите платени нарачки во таа смена: {{{ SELECT o.order_id, o.created_at, p.amount, p.method FROM project.orders o JOIN project.payment p ON p.order_id = o.order_id WHERE o.status = 'платена' AND o.created_at >= (SELECT start_time FROM project.shift WHERE end_time IS NULL); }}} 4. Системот го пресметува вкупниот износ и бројот на нарачки: {{{ SELECT COUNT(*) AS order_count, COALESCE(SUM(p.amount), 0) AS total FROM project.orders o JOIN project.payment p ON p.order_id = o.order_id WHERE o.status = 'платена' AND o.created_at >= (SELECT start_time FROM project.shift WHERE end_time IS NULL); }}} 5. Системот го прикажува извештајот на менаџерот за потврда. 6. Менаџерот потврдува. 7. Системот го внесува затворањето на смената: {{{ INSERT INTO project.shift_close (closed_by, total, order_count) VALUES (2, 3500.00, 12) RETURNING shift_id, closed_at; }}} 8. Системот ја означува смената како завршена: {{{ UPDATE project.shift SET end_time = now() WHERE end_time IS NULL; }}} 9. Системот го запишува настанот: {{{ INSERT INTO project.audit_log (user_id, action, entity_name) VALUES (2, 'CLOSE_SHIFT', 'shift_close'); }}} 10. Системот прикажува потврда.