# Interne Artikelverwaltung (Laravel + Filament)

Professionelles internes Webprogramm zur Katalogisierung und Verwaltung physischer Artikel mit Rollenrechten, Dashboard, Filterung, Uploads, Erinnerungen, Verkaufsprozess und E-Mail-Automation.

## Stack

- Laravel 13 / PHP 8.3+
- Filament 5 (Admin-UI)
- Spatie Laravel Permission (Rollen/Rechte)
- Laravel Storage (Bild-/Dokument-Uploads)
- Laravel Mail (HTML + Text)
- Maatwebsite Excel (CSV/XLSX Export)

## Architektur

- `app/Filament/Resources`: Admin-UI für Artikel, Stammdaten, Benutzer, Rollen, Einstellungen, Erinnerungen, Verkäufe, Dokumente, Aktivitäten
- `app/Observers`: Business-Logik (Statuswechsel, Berechnungen, E-Mail-Trigger)
- `app/Mail`: Mailable für Verkaufsfreigabe
- `app/Services/ActivityLogger`: zentrale Aktivitätsprotokollierung
- `database/migrations`: normalisierte relationale Datenbank
- `database/seeders`: produktionsnahe Demo-Daten (Admin + 2 User + 15 Artikel)

## Datenbankübersicht

Kern:
- `items`
- `purchases`
- `item_sales`
- `item_images`
- `item_documents`
- `reminders`
- `activity_logs`
- `status_histories`

Stammdaten:
- `priorities`
- `categories`
- `item_statuses`
- `locations`
- `assignees`
- `merchants`
- `payment_methods`
- `sales_platforms`
- `document_types`
- `reminder_reasons`

Administration:
- `users`
- `roles`, `permissions`, `model_has_roles`, `model_has_permissions`, `role_has_permissions`
- `settings`
- `saved_filters`
- `email_templates`

## Installation

1. Abhängigkeiten installieren:
```bash
composer install
npm install
```
2. `.env` konfigurieren (MySQL/MariaDB + Mail SMTP).
3. Key erzeugen:
```bash
php artisan key:generate
```
4. Migrationen + Seeder:
```bash
php artisan migrate:fresh --seed
```
5. Storage-Link:
```bash
php artisan storage:link
```
6. Start:
```bash
php artisan serve
```
7. Login über `/admin`

## Demo-Logins

- Admin: `admin@firma.local` / `Passwort123!`
- User: `user1@firma.local` / `Passwort123!`
- User: `user2@firma.local` / `Passwort123!`

## E-Mail-Automation

Auslöser: echter Statuswechsel eines Artikels auf `zum-verkauf`.

- Empfänger wird aus `settings.key = sales_notification_email` gelesen
- Versand nur wenn Empfänger vorhanden
- HTML + Text-Mail via `ItemReadyForSaleMail`
- Versand wird in `activity_logs` protokolliert (`mail.sent`, `mail.failed`, `mail.skipped`)

## Sicherheit & Rechte

- Rollen: `admin`, `user`
- Berechtigungen via Spatie Permission
- Policy für Artikelzugriffe (`ItemPolicy`)
- Serverseitige Validierung in Filament-Formen
- Sichere Upload-Einschränkungen (Dateitypen, Storage)

## Wichtige Funktionen

- Vollständige Artikelverwaltung mit Sektionen:
  - Grunddaten
  - Kaufdaten
  - Standort/Zuordnung
  - Status
  - Verkauf
  - Bilder
  - Dokumente
  - Erinnerungen
- Dashboard Widgets:
  - Gesamtanzahl Artikel
  - Summe / Durchschnitt Einkauf
  - Anzahl nach Status
  - Offene / überfällige Erinnerungen
  - Letzte Aktivitäten
  - Zuletzt geänderte Artikel
- Export:
  - `GET /exports/items.csv`
  - `GET /exports/items.xlsx`

## Tests

```bash
php artisan test
```

Enthalten:
- `ItemStatusSaleMailTest` (Mail bei echtem Statuswechsel auf `zum-verkauf`)

## Erweiterungsideen

- Gespeicherte Filter als UI-Funktion pro Benutzer
- Druckansicht für Artikeldetail
- Mehrstufiger Freigabeprozess für Verkauf
- Queue-basierter Mailversand + Retry-Strategien
- Erinnerungs-Dispatcher als geplanter Job (Cron)
