# Vinařství

Autoři
  Roman Nečas xnecasr00@stud.fit.vutbr.cz -
  - ERD: Tabuľky pre sklizeň, variáciu odrody, vinohradnícky riadok, odrodu a víno
  - Implementácia prípadov použitia:
    - Vinár - Kalendár, úprava plánovaných úloh a zberu, vedenie záznamov o zozbieraných hroznách, zaraďovanie vína do predaja
    - Zákazník - Nakupovanie vína, história nákupov
    - Návštevník - Prezeranie katalógu vín, prezeranie základných informácií o vinárstve
  Tomáš Foltyn xfolty21@stud.fit.vutbr.cz -
  - ERD: Tabuľky pre plánovanie, ošetrenie, zalievanie, hnojenie, rez, postrek
  - Implementácia prípadov použitia:
    - Vinár - správa vinohradníckych riadkov (mapa), plánovanie ošetrení, plánovanie zavlažovania, rezu vinice, sklizne
  - Inštalácia aplikácie na server
  Kristián Pribila xpribik00@stud.fit.vutbr.cz -
  - ERD: Tabuľky pre nákup, užívateľa, vinára, pracovníka a zákazníka
  - Implementácia prípadov použitia:
    - Administrátor - správa uživateľov a ich rolí, správa plánovaných akcií
    - Pracovník vinárstva - zaznamenávanie prevedených činností vo vinici, vykonanie zberu hrozna
  - Prihlasovanie a registrácia
URL aplikace
  http://www.stud.fit.vutbr.cz/~xnecasr00/IIS

## Uživatelé systému pro testování

Login | Heslo | Role
--- | --- | ---
admin | password | Administrátor
winemaker | password | Vinař
employee | password | Pracovník vinařství
customer | password | Zákazník
|  | Návštevník

### Video

https://nextcloud.fit.vutbr.cz/s/g3ycQrXQwwFmpPX

## Implementace

### Administrátor

- Správa užívateľov a ich rolí - `app/Http/Controllers/Admin/UserController.php`
  Views: `resources/views/admin/users/` (index, create, edit)
- Správa plánovaných akcií/udalostí - `app/Http/Controllers/Admin/EventController.php`
  Views: `resources/views/admin/events/` (index, create, edit)

### Vinár (Winemaker)

- Dashboard a kalendár - `app/Http/Controllers/WinemakerController.php`
  Views: `resources/views/winemaker/dashboard/` (index, planned-tasks, completed-activities)
- Správa vinohradníckych riadkov - `app/Http/Controllers/VineyardRowController.php`, `app/Http/Controllers/VineyardMapController.php`
  Views: `resources/views/vineyard-rows/`, `resources/views/vineyard/map/`
- Plánovanie ošetrení (postreky, hnojenie, zavlažovanie, rez) - `app/Http/Controllers/PlannedTaskController.php`
  Views: `resources/views/planned-tasks/` (watering, pruning, fertilisation, pesticide, harvest, edit)
- Plánovanie a správa zberu - `app/Http/Controllers/HarvestController.php`
  Views: `resources/views/winemaker/harvests/` (index, bottle)
- Pivnica - vedenie záznamov o víne - `app/Http/Controllers/WineController.php` (metódy cellarIndex, createBlendForm, storeBlend)
  Views: `resources/views/winemaker/cellar/` (index, create-blend)
- Zaraďovanie vína do predaja - `app/Http/Controllers/WineController.php` (metódy salesIndex, addToSales, removeFromSales)
  Views: `resources/views/winemaker/sales/index.blade.php`

### Pracovník vinárstva (Employee)

- Zaznamenávanie prevedených činností (ošetrenia) - `app/Http/Controllers/Employee/TaskController.php` (metóda completeTreatment)
  Views: `resources/views/employee/tasks/index.blade.php`
- Vykonanie zberu hrozna - `app/Http/Controllers/Employee/TaskController.php` (metóda completeHarvest)

### Zákazník (Customer)

- Nakupovanie vína - `app/Http/Controllers/CartController.php`, `app/Http/Controllers/PurchaseController.php`
  Views: `resources/views/cart/index.blade.php`, `resources/views/catalog/`
- História nákupov - `app/Http/Controllers/PurchaseController.php` (metóda myPurchases)
  Views: `resources/views/purchases/my.blade.php`
- Rezervácie udalostí - `app/Http/Controllers/EventController.php` (metódy reserve, cancelReservation, myReservations)
  Views: `resources/views/events/my-reservations.blade.php`

### Návštevník (Guest)

- Prezeranie katalógu vín - `app/Http/Controllers/WineController.php` (metóda catalog)
  Views: `resources/views/catalog/` (index, show)
- Prezeranie udalostí - `app/Http/Controllers/EventController.php` (metóda index)
  Views: `resources/views/events/index.blade.php`
- Základné informácie o vinárstve - `routes/web.php` (closure routes)
  Views: `resources/views/about.blade.php`, `resources/views/contact.blade.php`
- Prihlásenie a registrácia - `app/Http/Controllers/Auth/LoginController.php`, `app/Http/Controllers/Auth/RegisterController.php`
  Views: `resources/views/auth/` (login, register)

### Dátové modely

Všetky modely sa nachádzajú v `app/Models/`:

- Užívatelia - `User.php` (s rolami definovanými v `app/Enums/UserRole.php`)
- Vinica - `VineyardRow.php`, `GrapeVariety.php`, `VarietyVariation.php`
- Ošetrenia - `Treatment.php` (abstraktný), `Spraying.php`, `Watering.php`, `Fertilization.php`, `Pruning.php`
- Zber a výroba - `Harvest.php`, `Wine.php`, `WineProduction.php`
- Plánovanie - `PlannedTask.php`
- Nákupy - `Purchase.php`, `PurchaseItem.php`
- Udalosti - `Event.php`, `EventReservation.php`

### Rozšírenia

- Integrovaný kalendár - `WinemakerController::dashboard()` - vinár vidí všetky plánované úkony
- Degustácie a akcie - `EventController`, `Admin\EventController` - organizácia akcií s rezerváciami

### Databáze

## Instalace

### Lokální běh (bez Dockeru)

Postup pro lokální vývoj nebo instalaci na klasický server:

1. Softwarové požadavky - PHP 8.2+ s rozšířeními OpenSSL, PDO, Mbstring, Tokenizer, Ctype, JSON, BCMath a Fileinfo; Composer 2; Node.js 18+ (dop. 20 LTS) a npm; MySQL 8 / MariaDB 10.5+; webserver Apache nebo Nginx s PHP-FPM.
2. Stažení a rozbalení - projekt umístěte na server například pomocí `git clone` nebo rozbalením archivu do `/var/www/laravel-winary`; složky `storage` a `bootstrap/cache` musí mít zápis pro uživatele webserveru.
3. Konfigurace prostředí - v kořeni zkopírujte `.env.example` na `.env`; vyplňte `APP_URL`, `APP_ENV=production`, DB přístupy, případně SMTP; vygenerujte klíč `php artisan key:generate`.
4. Instalace závislostí - spusťte `composer install --no-dev --optimize-autoloader`; poté `npm install` a `npm run build` pro sestavení statických assetů (Vite).
5. Inicializace databáze - založte prázdnou databázi a uživatele; spusťte `php artisan migrate --force --seed` pro vytvoření schématu a naplnění základními daty/uživateli; pokud je třeba práce se soubory, vytvořte symlink `php artisan storage:link`.
6. Spuštění aplikace - nasměrujte webserver na složku `public/`; pro produkci doporučeno `php artisan config:cache` a `php artisan route:cache`; případně spusťte frontu `php artisan queue:work` (např. jako systemd službu).

### Produkční běh (Docker Compose)

Pro nasazení pomocí Dockeru lze použít skript `./script/up.sh`:

1. Příprava konfigurace - upravte `.env.prod` (APP_URL, hesla DB, APP_KEY, port 8741 apod.); soubor se připojuje do kontejneru jako `.env`.
2. Start kontejneru - spusťte `./script/up.sh`, což zavolá `docker compose -f docker-compose.prod.yml up --build -d` pro aplikaci a MySQL (data v volume `mysql_data`).
3. První inicializace - entrypoint kontejneru čeká na databázi, instaluje Composer a NPM závislosti, provádí `php artisan migrate:fresh --seed --force`, vytvoří symlink storage a přebuduje assety. Další spuštění použije stávající dependencies.
4. Přístup k aplikaci - webserver/reverse proxy směřujte na port `APP_PORT` (default 8741) a cílte na kontejner `app`; veřejné soubory jsou ve složce `public/` uvnitř kontejneru.