== Апликативен дизајн - Случаи на употреба и Сценарија за пристап до базата - SQL Погледи **Актери** - **Ненајавен корисник**: Корисник кој што сѐ уште не е најавен во системот. Може да пристапи само до јавни информации (основни информации за компании и услуги). - **Најавен корисник**: Вработен кој се има најавено во системот, но има ограничени привилегии. === Случаи на употреба 1. **Најава на корисник**: Корисникот внесува корисничко име и лозинка за пристап до системот. 2. **Креирање и уредување на фактура**: Администратор или финансиски менаџер додава нова фактура или модифицира постоечка. 3. **Приказ на детали за одредена фактура**: Детален приказ на содржината на фактурата (линиски ставки, износ, статус). === Најважни случаи на употреба 1. **Најава на корисник** **Чекори:** 1. Корисникот се најавува во системот. 2. Системот го проверува внесот:. {{{ SELECT * FROM "User" WHERE email = 'user@email.com' }}} 2. **Регистрација на нов клинет/компанија** **Чекори:** 1. Корисникот се најавува 2. Од менито избира Customer List" 3. Избира "New Customer" 4. Ги пополнува полињата: Name, Email, Representative, Phone, Country, State, City, Street, Zip, VAT, Company Number 5. Притиска "Create Customer" {{{ INSERT INTO Client ( client_id, client_name, client_representative, client_email, client_street, client_city, client_state, client_zip, client_vat, client_logo_url, company_id, created_at, updated_at ) VALUES ( 1, 'Acme Corporation', 'John Doe', 'john.doe@acme.com', '123 Main Street', 'Skopje', 'Skopje', '1000', 'MK12345678', '/logos/acme.png', 1, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP ); }}} 3. **Преглед на сите клиенти** **Чекори:** 1. Корисникот избира "Customers" од менито 2. Се прикажуваат сите клиенти {{{ SELECT client_id, name, email, phone, city, country FROM Client ORDER BY name; }}} 4. **Преглед на деталите за конкретен клиент** **Чекори:** 1. Корисникот кликнува на одреден клиент 2. Се прикажуваат детали {{{ 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. **Креирање на нова фактура** **Чекори:** 1. Корисникот избира клиент. 2. Внесува деталите за фактурата и линиски ставки. 3. Системот креира фактура: {{{ 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); }}} **Чекори за додавање ставки:** {{{ INSERT INTO "LineItem" ( description, quantity, unit_price, currency, total, invoice_id ) VALUES ( 'Software Development', 100, 50.00, 'USD', 5000.00, 1 ); }}} **Чекори за додавање уредување:** {{{ UPDATE "Invoice" SET due_date = '2025-03-01', status = 'Paid' WHERE invoice_id = 1; }}} 6. **Преглед на фактури за клиент** **Чекори:** 1. Корисникот кликнува на клиент. 2. Системот ги прикажува сите фактури: {{{ 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; }}} 7. **Преглед на детали за фактура** **Чекори:** 1. Корисникот кликнува на фактура. 2. Системот ја вчитува: {{{ 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; }}}