# Dokumentacija - Royal Transport Sistem za Upravljanje Vožnjama

## 1. Uvod

Royal Transport je web aplikacija za upravljanje vožnjama i transportnim uslugama. Sistem omogućava kompletnu kontrolu nad procesima rezervacije, raspoređivanja i završetka vožnji, sa jasno definisanim ulogama i dozvolama za različite tipove korisnika.

## 2. Tipovi Korisnika i Dozvole

Sistem podržava tri tipa korisnika sa različitim nivoima pristupa:

### 2.1. Administrator

**Opis**: Administrator ima punu kontrolu nad sistemom i svim funkcionalnostima.

**Dozvole i mogućnosti**:
- **Upravljanje korisnicima**:
  - Kreiranje novih korisnika (administrator, korisnik, vozač)
  - Izmena postojećih korisnika
  - Aktivacija/deaktivacija korisničkih naloga
  - Brisanje korisnika (osim sopstvenog naloga)
  - Pregled liste svih korisnika sa detaljima (ime, email, telefon, uloga, status, poslednja prijava)

- **Upravljanje komitentima (naručiocima)**:
  - Kreiranje novih komitenata
  - Izmena postojećih komitenata
  - Brisanje komitenata (samo ako nema povezanih vožnji ili korisnika)
  - Pregled statistike po komitentima (broj vožnji, broj korisnika)
  - Podešavanje cena za aerodrom (do/od aerodroma)

- **Upravljanje vožnjama**:
  - Kreiranje novih vožnji sa svim detaljima
  - Izmena svih vožnji bez obzira na status
  - Brisanje vožnji
  - Dodeljivanje vozača vožnjama
  - Promena statusa vožnji (Završeno, Predstoji, Nerasporedjeno, Arhivirano)
  - Upload priloga (PDF, Word, Excel, slike) za vožnje
  - Pregled svih vožnji bez ograničenja
  - Export vožnji u CSV format

- **Odobravanje vožnji**:
  - Pregled vožnji koje su na čekanju (status "NA CEKANJU")
  - Prihvatanje ili odbijanje vožnji koje su kreirane od strane korisnika
  - Automatsko slanje email obaveštenja korisnicima o statusu vožnje

- **Statistika i izveštaji**:
  - Pregled statistike po komitentima (broj vožnji, ukupna cena, troškovi, profit)
  - Pregled statistike po vozačima (broj vožnji, ukupna cena, troškovi, profit)
  - Grafikoni broja vožnji po danu u odabranom periodu
  - Filtracija izveštaja po datumu
  - Export statistike u CSV format
  - Mesečna statistika sa detaljnim prikazom svih vožnji

- **Pretraga i filtriranje**:
  - Pretraga vožnji po svim poljima (vrsta vozila, vozač, klijent, adrese)
  - Sortiranje po različitim kolonama (datum, vozilo, vozač, klijent)
  - Filtracija po statusu vožnji

- **Pregled detalja vožnje**:
  - Kompletan pregled svih informacija o vožnji
  - Linkovi za praćenje letova (FlightRadar24, FlightStats) ako je unet broj leta
  - Pregled priloga
  - Finansijske informacije (cena bez PDV-a, sa PDV-om)

### 2.2. Korisnik (Komitent)

**Opis**: Korisnik predstavlja predstavnika komitenta (naručioca) koji može da kreira vožnje koje čekaju na odobrenje administratora.

**Dozvole i mogućnosti**:
- **Kreiranje vožnji**:
  - Unos svih detalja o vožnji (datum, vreme, broj leta, adrese, klijent, vozilo, dodatci, način plaćanja, cena)
  - Automatsko dodeljivanje statusa "NA CEKANJU" prilikom kreiranja
  - Automatsko slanje email obaveštenja administratoru o novoj vožnji
  - Nemogućnost dodeljivanja vozača (vozač se dodeljuje nakon odobrenja)

- **Pregled vožnji**:
  - Pregled samo vožnji vezanih za njegovog komitenta
  - Automatsko filtriranje obrisanih vožnji (ne vide se vožnje sa statusom "OBRISANO")
  - Pregled detalja vožnje

- **Izmena vožnji**:
  - Izmena vožnji koje su na čekanju, neraspoređene ili predstojeće
  - Izmena automatski vraća status na "NA CEKANJU"
  - Nemogućnost izmene vožnji koje su završene ili arhivirane

- **Brisanje vožnji**:
  - Brisanje samo vožnji sa statusom "NA CEKANJU"

- **Statistika**:
  - Pregled mesečne statistike za svoje vožnje
  - Filtracija po godini i mesecu
  - Export statistike u CSV format
  - Prikaz ukupne cene za izabrani mesec

- **Pretraga i filtriranje**:
  - Pretraga vožnji po svim poljima
  - Sortiranje po različitim kolonama

- **Export podataka**:
  - Export vožnji u CSV format (samo za svoje vožnje)

### 2.3. Vozač

**Opis**: Vozač ima ograničen pristup sistemu i vidi samo vožnje koje su mu dodeljene.

**Dozvole i mogućnosti**:
- **Pregled vožnji**:
  - Pregled samo vožnji koje su mu dodeljene
  - Kartični prikaz vožnji umesto tabele
  - Vizuelna razlika između vožnji (Završeno, Danas, Predstojeće)
  - Sortiranje po datumu (najnovije na vrhu)

- **Detalji vožnje**:
  - Kompletan pregled svih informacija o vožnji
  - Linkovi za praćenje letova (FlightRadar24, FlightStats) ako je unet broj leta
  - Pregled priloga (ako postoje)
  - Informacije o klijentu, adresama, vozilu, dodatcima

- **Završetak vožnje**:
  - Mogućnost označavanja vožnje kao završene (samo za vožnje sa statusom "Predstoji")
  - Unos napomene o dodatnim troškovima
  - Unos napomene o vožnji i putnicima
  - Automatska promena statusa na "Zavrseno" nakon završetka

- **Pregled statusa**:
  - Vidi status vožnje ali ne može ga menjati (samo pregled)

**Ograničenja**:
- Ne može kreirati nove vožnje
- Ne može menjati podatke o vožnji (osim završetka)
- Ne može dodeljivati sebe ili druge vozače
- Ne vidi vožnje drugih vozača
- Ne vidi finansijske detalje (cene)
- Ne vidi statistiku

## 3. Funkcionalnosti Sistema

### 3.1. Upravljanje Vožnjama

**Polja vožnje**:
- **Datum i vreme**: Obavezno polje za datum i vreme početka vožnje
- **Broj leta**: Opciono polje za unos broja leta (omogućava praćenje letova)
- **Polazna adresa**: Obavezno polje za adresu polaska
- **Dolazna adresa**: Obavezno polje za adresu dolaska
- **Ime klijenta**: Obavezno polje za ime putnika/klijenta
- **Vrsta vozila**: 
  - Izbor tipa vozila (Automobil ili Kombi)
  - Za automobil: Mercedes E-Class, Mercedes S-Class, Škoda, Ostalo
  - Za kombi: Mercedes V-Class sa 6 sedišta, Mercedes V-Class sa 7 sedišta, Ostalo
- **Dodaci za vozilo**: Opciono (Booster, Sedište za bebu, Dva sedišta za bebu, Nema)
- **Naručilac (Komitent)**: Obavezno polje za izbor naručioca
- **Vozač**: Opciono polje za dodelu vozača (samo administrator)
- **Način plaćanja**: Opciono (Gotovina, Kartica, Faktura, Faktura + gotovina, Faktura + kartica)
- **Cena**: 
  - Unos cene bez PDV-a ili sa PDV-om (20%)
  - Automatsko računanje jednog na osnovu drugog
- **Napomena**: Opciono polje za dodatne napomene
- **Prilog**: Upload fajlova (PDF, Word, Excel, slike) - samo administrator

**Statusi vožnje**:
- **NA CEKANJU**: Vožnja je kreirana od strane korisnika i čeka na odobrenje administratora
- **Nerasporedjeno**: Vožnja je odobrena ali nije joj dodeljen vozač
- **Predstoji**: Vožnja ima dodeljenog vozača i predstoji
- **Zavrseno**: Vožnja je završena
- **Arhivirano**: Vožnja je arhivirana
- **ODBIJENO**: Vožnja je odbijena od strane administratora
- **OBRISANO**: Vožnja je obrisana (vidljiva samo administratoru)

### 3.2. Praćenje Letova

Sistem automatski generiše linkove za praćenje letova na osnovu unetog broja leta:
- **FlightRadar24**: Direktan link za praćenje leta
- **FlightStats**: Direktan link za praćenje leta sa detaljnim informacijama

Linkovi se prikazuju samo ako je unet broj leta i ako je u validnom formatu (npr. JU123, LH456).

### 3.3. Upravljanje Komitentima

**Polja komitenta**:
- **Naziv**: Obavezno polje za naziv komitenta
- **Grad**: Obavezno polje za grad
- **Cena do aerodroma**: Opciono polje za standardnu cenu do aerodroma
- **Cena od aerodroma**: Opciono polje za standardnu cenu od aerodroma

**Funkcionalnosti**:
- Kreiranje komitenata direktno iz forme za kreiranje vožnje (bez prekida rada)
- Pregled svih komitenata sa statistikom (broj vožnji, broj korisnika)
- Brisanje samo ako nema povezanih vožnji ili korisnika

### 3.4. Email Obaveštenja

Sistem automatski šalje email obaveštenja u sledećim situacijama:
- **Kada korisnik kreira novu vožnju**: Email se šalje administratoru sa detaljima vožnje
- **Kada administrator prihvati/odbije vožnju**: Email se šalje korisniku komitenta sa informacijom o statusu

### 3.5. Statistika i Izveštaji

**Statistika po komitentima**:
- Broj vožnji u odabranom periodu
- Ukupna cena
- Ukupni troškovi
- Profit (cena - troškovi)

**Statistika po vozačima**:
- Broj vožnji u odabranom periodu
- Ukupna cena
- Ukupni troškovi
- Profit (cena - troškovi)

**Grafikoni**:
- Grafik broja vožnji po danu u odabranom periodu
- Interaktivni prikaz sa Chart.js bibliotekom

**Mesečna statistika**:
- Detaljan prikaz svih vožnji za izabrani mesec i godinu
- Filtracija po komitentu (samo za administratora)
- Export u CSV format

### 3.6. Export Podataka

**CSV Export**:
- Export svih vožnji u CSV format
- Podrška za UTF-8 encoding (srpski karakteri)
- Filtracija po korisnikovim pravima (korisnik vidi samo svoje vožnje)

**Export iz statistike**:
- Export vožnji za odabrani mesec/godinu
- Ukupan broj vožnji i cena u footeru tabele

### 3.7. Pretraga i Filtriranje

**Pretraga**:
- Pretraga po svim tekstualnim poljima (vrsta vozila, vozač, klijent, adrese)
- Real-time pretraga bez potrebe za osvežavanjem stranice

**Filtriranje**:
- Sortiranje po različitim kolonama (datum, vozilo, vozač, klijent)
- Opadajući ili rastući redosled

### 3.8. Tematski Prikaz

Sistem podržava dark/light temu:
- Automatsko čuvanje izabrane teme u browser storage
- Prebacivanje između tema jednim klikom
- Responsive dizajn za sve uređaje

## 4. Bezbednost

- **Autentifikacija**: Svi korisnici moraju biti prijavljeni da bi pristupili sistemu
- **Autorizacija**: Različiti nivoi pristupa za različite uloge
- **Zaštita podataka**: Korisnici vide samo podatke za koje imaju dozvolu
- **Validacija**: Validacija svih ulaza na serveru
- **SQL Injection zaštita**: Korišćenje prepared statements
- **XSS zaštita**: Escaping svih korisničkih inputa

## 5. Tehnički Detalji

**Tehnologije**:
- PHP (backend)
- MySQL (baza podataka)
- Bootstrap 5 (frontend framework)
- jQuery (JavaScript biblioteka)
- Chart.js (grafikoni)
- Bootstrap Icons (ikone)

**Baza podataka**:
- Tabele: `users`, `komitenti`, `voznje`
- Relacije između tabela (foreign keys)
- Automatsko logovanje vremena kreiranja i ažuriranja

**Upload fajlova**:
- Direktorijum: `uploads/`
- Dozvoljeni formati: PDF, Word (.doc, .docx), Excel (.xls, .xlsx), slike (.jpg, .jpeg, .png, .gif)
- Automatsko generisanje jedinstvenih imena fajlova

## 6. Pristupni Putovi (User Flows)

### 6.1. Kreiranje Vožnje (Korisnik)

1. Korisnik se prijavljuje na sistem
2. Odabere "Nova vožnja"
3. Popunjava sva obavezna polja
4. Klikne "Kreiraj vožnju"
5. Vožnja dobija status "NA CEKANJU"
6. Administrator dobija email obaveštenje
7. Korisnik vidi poruku o uspešnom kreiranju

### 6.2. Odobravanje Vožnje (Administrator)

1. Administrator se prijavljuje na sistem
2. Odabere "Vožnje na čekanju"
3. Vidi listu vožnji sa statusom "NA CEKANJU"
4. Pregleda detalje vožnje
5. Odabere "Prihvati" ili "Odbij"
6. Vožnja dobija status "Nerasporedjeno" (ako je prihvaćena) ili "ODBIJENO" (ako je odbijena)
7. Korisnik dobija email obaveštenje
8. Ako je prihvaćena, administrator može dodeliti vozača

### 6.3. Dodeljivanje Vozača (Administrator)

1. Administrator pregleda vožnju sa statusom "Nerasporedjeno"
2. Odabere "Izmeni"
3. Odabere vozača iz padajuće liste
4. Sačuva izmene
5. Vožnja automatski dobija status "Predstoji"
6. Vozač vidi vožnju u svojoj listi

### 6.4. Završetak Vožnje (Vozač)

1. Vozač se prijavljuje na sistem
2. Vidi svoje vožnje u kartičnom prikazu
3. Klikne na "Pregled" za vožnju koja predstoji
4. Pregleda detalje vožnje
5. Vraća se na listu i klikne "Završi"
6. Unosi napomenu o dodatnim troškovima (opciono)
7. Unosi napomenu o vožnji i putnicima (opciono)
8. Klikne "Završi vožnju"
9. Vožnja dobija status "Zavrseno"

## 7. Zaključak

Royal Transport sistem pruža kompletnu soluciju za upravljanje vožnjama sa jasno definisanim ulogama i dozvolama. Sistem omogućava:

- **Efikasno upravljanje**: Svi procesi su automatizovani gde je to moguće
- **Transparentnost**: Svaki korisnik vidi samo relevantne podatke
- **Fleksibilnost**: Različiti nivoi pristupa za različite uloge
- **Praćenje**: Kompletan audit trail svih promena
- **Izveštavanje**: Detaljna statistika i izveštaji
- **Korisnost**: Intuitivno korisničko iskustvo

Sistem je dizajniran da podrži svakodnevne operacije transportne kompanije sa fokusom na jednostavnost korišćenja i sigurnost podataka.


