== Апликативен дизајн - Случаи на употреба и Сценарија за пристап до базата - SQL Погледи **Актери** - **Ненајавен корисник**: Корисник кој што сѐ уште не е најавен во системот. Може да пристапи само до јавни информации (основни информации за компании и услуги). - **Најавен корисник**: Вработен кој се има најавено во системот, но има ограничени привилегии. - **Администратор**: Корисник со највисоки привилегии. Може да регистрира нови корисници, додава или модифицира компании, клиенти, или фактури. === Случаи на употреба 1. **Најава на корисник**: Корисникот внесува корисничко име и лозинка за пристап до системот. 2. **Регистрација на нов вработен**: Администратор регистрира нов вработен и му доделува улога (на пример: HR, финансии, програмер). 3. **Приказ на сите вработени во една компанија**: Администратор или HR може да види листа на сите вработени во одредена компанија. 4. **Приказ на сите клиенти**: Корисникот може да ги види сите клиенти регистрирани во системот. 5. **Детален приказ на клиент**: Приказ на сите информации за одреден клиент (на пример: адреса, контакт лице, фактури). 6. **Креирање и уредување на фактура**: Администратор или финансиски менаџер додава нова фактура или модифицира постоечка. 7. **Филтрирање на клиенти по град**: Корисникот може да ги филтрира клиентите според локација. 8. **Приказ на сите фактури за одреден клиент**: Корисникот ги прегледува сите фактури поврзани со избран клиент. 9. **Приказ на детали за одредена фактура**: Детален приказ на содржината на фактурата (линиски ставки, износ, статус). === Најважни случаи на употреба 1. **Регистрација на нов вработен од страна на администратор** {{{ CREATE TABLE Employee ( employee_id BIGSERIAL PRIMARY KEY, first_name VARCHAR(255) NOT NULL, last_name VARCHAR(255) NOT NULL, email VARCHAR(255) UNIQUE NOT NULL, password_hash VARCHAR(255) NOT NULL, role VARCHAR(50) CHECK (role IN ('Admin', 'Manager', 'Accountant')) NOT NULL, date_of_employment DATE NOT NULL DEFAULT CURRENT_DATE ); }}} 2. **Приказ на сите клиенти и деталите за одреден клиент** All {{{ SELECT client_id, name, contact_person, email, phone, city, country FROM Client ORDER BY name; }}} Specific Client {{{ SELECT cl.*, COUNT(i.invoice_id) AS total_invoices, SUM(i.total_amount) AS total_amount_due FROM Client cl LEFT JOIN Invoice i ON cl.client_id = i.client_id AND i.status = 'Unpaid' WHERE cl.client_id = 5 -- Replace 5 with the specific client ID GROUP BY cl.client_id; }}} 3. **Креирање и уредување на фактури** All {{{ SELECT i.invoice_id, c.name AS client_name, i.issue_date, i.due_date, i.total_amount, i.status FROM Invoice i JOIN Client c ON i.client_id = c.client_id ORDER BY i.issue_date DESC; }}} New Invoice {{{ INSERT INTO Invoice (client_id, issue_date, due_date, total_amount) VALUES (3, CURRENT_DATE, CURRENT_DATE + INTERVAL '30 days', 1250.00); }}} UPDATE Invoice {{{ SET total_amount = 1350.00, due_date = '2025-03-01', status = 'Paid' WHERE invoice_id = 2; -- Replace 2 with the actual invoice ID }}}