== Апликативен дизајн - Случаи на употреба и Сценарија за пристап до базата - SQL Погледи **Актери** - **Ненајавен корисник**: Корисник кој што сѐ уште не е најавен во системот. Може да пристапи само до јавни информации (основни информации за компании и услуги). - **Најавен корисник**: Вработен кој се има најавено во системот, но има ограничени привилегии. - **Администратор**: Корисник со највисоки привилегии. Може да регистрира нови корисници, додава или модифицира компании, клиенти, или фактури. === Случаи на употреба 1. **Најава на корисник**: Корисникот внесува корисничко име и лозинка за пристап до системот. 2. **Регистрација на нов вработен**: Администратор регистрира нов вработен и му доделува улога (на пример: HR, финансии, програмер). 3. **Приказ на сите вработени во една компанија**: Администратор или HR може да види листа на сите вработени во одредена компанија. 4. **Приказ на сите клиенти**: Корисникот може да ги види сите клиенти регистрирани во системот. 5. **Детален приказ на клиент**: Приказ на сите информации за одреден клиент (на пример: адреса, контакт лице, фактури). 6. **Креирање и уредување на фактура**: Администратор или финансиски менаџер додава нова фактура или модифицира постоечка. 7. **Филтрирање на клиенти по град**: Корисникот може да ги филтрира клиентите според локација. 8. **Приказ на сите фактури за одреден клиент**: Корисникот ги прегледува сите фактури поврзани со избран клиент. 9. **Приказ на детали за одредена фактура**: Детален приказ на содржината на фактурата (линиски ставки, износ, статус). === Најважни случаи на употреба 1. **Регистрација на нов вработен (само Админ)** **Чекори:** 1. Администраторот пополнува форма со податоци за нов вработен. 2. Системот ги запишува податоците во `Employee`. {{{ INSERT INTO Employee (first_name, last_name, email, status, iban, cv, photo, notes, company_id, created_at, updated_at) VALUES ('Alice', 'Johnson', 'alice.johnson@agencyos.com', 'Active', 'MK121212121212', '/cvs/alice_johnson.pdf', '/photos/alice.jpg', 'Great with clients', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); }}} 2. **Преглед на сите вработени во компанија** **Чекори:** 1. HR или Админ избира компанија. 2. Системот враќа листа од сите вработени за таа компанија. {{{ SELECT employee_id, first_name, last_name, email, status FROM Employee WHERE company_id = 1; }}} 3. **Преглед на сите клиенти** {{{ SELECT client_id, name, email, phone, city, country FROM Client ORDER BY name; }}} 4. **Преглед на деталите за конкретен клиент** {{{ SELECT cl.*, COUNT(i.invoice_id) AS total_invoices, SUM(li.total) AS total_billed FROM Client cl LEFT JOIN Invoice i ON i.client_id = cl.client_id LEFT JOIN LineItem li ON li.invoice_id = i.invoice_id WHERE cl.client_id = 1 GROUP BY cl.client_id; }}} 5. **Креирање на нова фактура** {{{ INSERT INTO Invoice ("from", "to", issue_date, due_date, notes, status, company_id, client_id, created_at, updated_at) VALUES ('AgencyOS Inc.', 'Global Enterprises', CURRENT_DATE, CURRENT_DATE + INTERVAL '30 days', 'Project Alpha delivery', 'Pending', 1, 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP); }}} 6. **Уредување на постоечка фактура** {{{ UPDATE Invoice SET status = 'Paid', updated_at = CURRENT_TIMESTAMP WHERE invoice_id = 1; }}} 7. **Преглед на фактури за клиент** {{{ SELECT i.invoice_id, i.issue_date, i.due_date, i.status, SUM(li.total) AS total FROM Invoice i LEFT JOIN LineItem li ON li.invoice_id = i.invoice_id WHERE i.client_id = 1 GROUP BY i.invoice_id; }}} 8. **Преглед на детали за фактура** {{{ SELECT i.*, li.description, li.quantity, li.unit_price, li.total FROM Invoice i JOIN LineItem li ON li.invoice_id = i.invoice_id WHERE i.invoice_id = 1; }}}