# ScanStation — Instrukcja wdrożenia na nowym serwerze

## Wymagania

- PHP 7.4+ / 8.x
- MySQL 5.7+ / MariaDB 10.3+
- Dolibarr 17+
- Moduł `workstation` aktywny w Dolibarr
- Moduł `mrp` (Manufacturing) aktywny w Dolibarr

---

## 1. Skopiowanie plików modułu

Skopiuj katalog `scanstation/` do folderu `custom/` w Dolibarr:

```
htdocs/custom/scanstation/
```

Struktura musi wyglądać tak:

```
custom/scanstation/
    scan_station.php
    ajax/scan_action.php
    admin/setup.php
    core/modules/modScanStation.class.php
    css/scanstation.css
    js/scanstation.js
    js/jsqr.min.js
    js/html5-qrcode.min.js
    sql/llx_scanstation_log.sql
    sql/llx_scanstation_job_tracking.sql
    sql/migrate_add_indexes.sql
    img/favicon.svg
```

> **Git:** najłatwiej przez `git clone`:
> ```bash
> cd htdocs/custom
> git clone https://github.com/ciachoo/scanstation.git scanstation
> ```

---

## 2. Tworzenie tabel w bazie danych

### Nowa instalacja (tabele nie istnieją)

W phpMyAdmin wykonaj kolejno:

**Krok 1** — tabela logów:
```sql
-- treść pliku: sql/llx_scanstation_log.sql
```
Wklej zawartość pliku `sql/llx_scanstation_log.sql`.

**Krok 2** — tabela śledzenia sztuk:
```sql
-- treść pliku: sql/llx_scanstation_job_tracking.sql
```
Wklej zawartość pliku `sql/llx_scanstation_job_tracking.sql`.

### Istniejąca instalacja (aktualizacja indeksów)

Wykonaj plik migracji `sql/migrate_add_indexes.sql` w phpMyAdmin:

```sql
ALTER TABLE llx_scanstation_job_tracking
    ADD INDEX IF NOT EXISTS idx_ss_jt_mo_type      (fk_mo, scan_type),
    ADD INDEX IF NOT EXISTS idx_ss_jt_mo_user_date (fk_mo, fk_user, date_stamp);

ALTER TABLE llx_scanstation_log
    ADD INDEX IF NOT EXISTS idx_ss_log_mo_user (fk_mo, fk_user);
```

> `IF NOT EXISTS` — bezpieczne, można uruchomić wielokrotnie.

---

## 3. Aktywacja modułu w Dolibarr

1. Zaloguj się jako Administrator
2. Idź do **Setup → Modules/Applications**
3. Wyszukaj **ScanStation** (kategoria: Development)
4. Kliknij przycisk aktywacji ✅

---

## 4. Konfiguracja modułu

Po aktywacji wejdź w **Setup → ScanStation**:

| Parametr | Opis | Domyślnie |
|---|---|---|
| `SCANSTATION_DEFAULT_QTY` | Domyślna ilość przy potwierdzeniu | `1` |
| `SCANSTATION_SHOW_LAST_N` | Liczba ostatnich skanów w tabeli | `5` |

---

## 5. Uprawnienia użytkowników

W karcie użytkownika (lub grupy) przyznaj uprawnienia modułu **ScanStation**:

| Uprawnienie | Opis |
|---|---|
| `scanstation.use` | Dostęp do kiosku skanowania |
| `scanstation.override` | Możliwość overridowania batch qty i reversu cudzych sztuk |

---

## 6. Extrafield — shift dla użytkowników (opcjonalnie)

Jeśli korzystasz z funkcji shift badge, dodaj extrafield do użytkowników:

W phpMyAdmin:
```sql
INSERT INTO llx_extrafields
  (name, label, type, elementtype, entity, pos, alwayseditable)
VALUES
  ('shift', 'Shift', 'varchar', 'user', 1, 100, 1);
```

Lub przez Dolibarr: **Setup → Other setup → Extra attributes → Users → Add attribute**
- Name: `shift`
- Type: Text

---

## 7. Dostęp do kiosku

URL kiosku:
```
https://[twoj-serwer]/dolibarr/custom/scanstation/scan_station.php
```

Zalecane: ustaw tę stronę jako zakładkę na urządzeniu (tablet/terminal) w trybie pełnoekranowym (PWA / kiosk mode).

---

## 8. Weryfikacja po wdrożeniu

Sprawdź w phpMyAdmin że tabele istnieją i mają właściwe indeksy:

```sql
SHOW INDEX FROM llx_scanstation_job_tracking;
SHOW INDEX FROM llx_scanstation_log;
```

Oczekiwane indeksy na `llx_scanstation_job_tracking`:

| Key_name | Columns |
|---|---|
| PRIMARY | rowid |
| idx_ss_jt_fk_mo | fk_mo |
| idx_ss_jt_fk_log | fk_log |
| idx_ss_jt_entity | entity |
| idx_ss_jt_mo_type | fk_mo, scan_type |
| idx_ss_jt_mo_user_date | fk_mo, fk_user, date_stamp |

---

## Notatki dotyczące wydajności

- Tabela `llx_scanstation_job_tracking` rośnie w tempie ~1 wiersz na potwierdzenie (przy qty>1 — 1 wiersz z qty w polu) + 1 wiersz na reverse per sztuka
- InnoDB bez problemu obsługuje do ~100M wierszy
- Przy bardzo dużej produkcji (>10k szt/dzień) rozważ archiwizację starych logów raz na rok
- Indeksy kompozytowe dodane w migracji eliminują full-scan przy zapytaniach per-MO/per-user

---

*Ostatnia aktualizacja: 2026-04-08*
