Files
Inventory/README.md

335 lines
9.7 KiB
Markdown

# Asset Management System
Ein vollwertiges Inventar- und Asset-Management-System entwickelt mit PHP, MySQL und Docker.
## Features
### 🔐 Benutzer & Rollen
- **Benutzerverwaltung**: Anlegen, Bearbeiten, Deaktivieren von Benutzern
- **Rollen**: Admin, Auditor, Mitarbeiter mit unterschiedlichen Berechtigungen
- **Authentifizierung**: Sichere Login/Logout mit Passwort-Hashing (Argon2id)
- **Passwort-Reset**: E-Mail-basierter Passwort-Reset mit Token
- **Sitzungsmanagement**: Sichere Cookies mit HttpOnly und SameSite=Strict
### 📦 Assets / Inventar
- **Vollständiges CRUD**: Erstellen, Lesen, Aktualisieren, Löschen von Assets
- **Detaillierte Felder**: Inventarnummer, Bezeichnung, Kategorie, Standort, Abteilung, Lieferant, Anschaffungsdatum, Preis, Zustand, Seriennummer, Garantie, Kostenstelle, Status, Notizen
- **Lebenszyklus**: Zuweisung an Benutzer, Check-in/Check-out, Historie
- **Dateianhänge**: Upload und Download von Dokumenten pro Asset
- **Etikettendruck**: PDF-Labels mit QR/Barcode für Inventarnummer + Bezeichnung
- **Erweiterte Suche**: Nach Standort, Kategorie, Zustand, Status, Volltext
### 🏢 Stammdaten
- **Kategorien**: Verwaltung von Asset-Kategorien
- **Standorte**: Verwaltung von Standorten mit Adressen
- **Abteilungen**: Verwaltung von Abteilungen mit Kostenstellen
### 📊 Inventur & Zählungen
- **Inventurdurchläufe**: Starten, Offene Positionen, Abgleich Ist/Soll
- **Erfassung**: Per Eingabe Inventarnummer/QR-Code
- **Abschlussbericht**: PDF mit Differenzen und Statistiken
### 📈 Berichte & Export
- **Verschiedene Reports**: Aktive Assets, nach Standort, nach Kategorie, ausgemusterte Geräte, Garantie läuft ab
- **Export-Formate**: CSV (Pflicht), XLSX (optional), PDF
- **CSV-Import**: Mit Validierung, Vorschau, Duplikat-Erkennung, transaktionale Übernahme
### 🔍 Protokollierung & Nachvollziehbarkeit
- **Audit-Log**: Vollständige Protokollierung aller CRUD-Aktionen
- **Historie**: Wer/was/wann geändert wurde
- **Nachverfolgung**: Komplette Änderungshistorie pro Asset
### 🌍 Internationalisierung
- **Mehrsprachig**: Deutsch (Standard), Englisch
- **Benutzer-spezifisch**: Umschaltbar pro Benutzer
- **PHP-Array-basiert**: Einfache Übersetzungsstruktur
### 🎨 UI/UX
- **Responsive Design**: Optimiert für Desktop, Tablet und Mobile
- **Barrierefrei**: Basis-WCAG-Konformität
- **Klare Navigation**: Dashboard, Assets, Inventur, Berichte, Stammdaten, Benutzer, Einstellungen
- **Tabellen**: Mit Paginierung, Sortierung (serverseitig), Filterfeldern
- **Druckfreundlich**: Optimierte Styles für Berichte und Etiketten
## Technische Architektur
### 🏗️ MVC-ähnliche Struktur
- **Front-Controller**: `public/index.php`
- **Router**: Einfaches URL-Routing mit Parameter-Extraktion
- **Controller**: Geschäftslogik und Request-Handling
- **Models**: Datenzugriff mit PDO und Prepared Statements
- **Views**: PHP-Templates mit Layout-System
### 🔒 Sicherheit
- **CSRF-Schutz**: Token-basiert für alle POST-Formulare
- **XSS-Schutz**: HTML-Escaping bei Ausgabe
- **SQL-Injection-Schutz**: Prepared Statements überall
- **Upload-Validierung**: Whitelist-MIME, Größenlimit, sichere Speicherung
- **Rate-Limiting**: IP-basiert für Login-Versuche
- **Rollenbasierte Zugriffskontrolle**: Middleware auf Controller-Ebene
### 🚀 Leistung
- **Indizes**: Optimierte Datenbank-Indizes
- **Pagination**: Serverseitige Paginierung
- **Caching**: File-basiertes Caching für Stammdaten
- **OPcache**: PHP-Bytecode-Caching aktiviert
## Installation & Setup
### Voraussetzungen
- Docker und Docker Compose
- Mindestens 4GB RAM
- 2GB freier Speicherplatz
### Schnellstart
1. **Repository klonen**
```bash
git clone https://git.send.nrw/MrSphay/Inventory.git
cd Inventory
```
2. **Umgebungsvariablen konfigurieren**
```bash
cp env.example .env
# Bearbeiten Sie .env nach Ihren Bedürfnissen
```
3. **Anwendung starten**
```bash
docker compose up -d --build
```
4. **Auf Anwendung zugreifen**
- **Hauptanwendung**: http://localhost:8080
- **phpMyAdmin**: http://localhost:8081
### Standard-Anmeldedaten
- **E-Mail**: admin@example.com
- **Passwort**: Admin!234
- **⚠️ Wichtig**: Ändern Sie das Passwort beim ersten Login!
## Konfiguration
### Umgebungsvariablen (.env)
```env
# Application Settings
APP_ENV=production
APP_URL=http://localhost:8080
APP_DEBUG=false
APP_KEY=base64:your-secret-key-here
# Database Settings
DB_HOST=db
DB_PORT=3306
DB_NAME=inventory
DB_USER=inventory
DB_PASS=changeMe
DB_ROOT_PASS=rootPassword123
# Session Settings
SESSION_SECURE=false
SESSION_LIFETIME=3600
# File Upload Settings
UPLOAD_MAX_SIZE=50M
ALLOWED_FILE_TYPES=pdf,jpg,jpeg,png,gif,doc,docx,xls,xlsx
# Security Settings
CSRF_TOKEN_LIFETIME=3600
PASSWORD_MIN_LENGTH=8
LOGIN_MAX_ATTEMPTS=5
LOGIN_LOCKOUT_TIME=900
```
### Docker Services
- **nginx**: Web-Server (Port 8080)
- **php**: PHP-FPM 8.2 mit allen Extensions
- **mysql**: MySQL 8.0 Datenbank (Port 3306)
- **phpmyadmin**: Datenbank-Verwaltung (Port 8081)
## Verwendung
### Dashboard
Das Dashboard zeigt eine Übersicht über:
- Gesamtzahl der Assets
- Aktive vs. ausgemusterte Assets
- Gesamtwert des Inventars
- Letzte Aktivitäten
- Assets mit ablaufender Garantie
- Offene Inventuren
### Asset-Verwaltung
1. **Asset erstellen**: Klicken Sie auf "Neues Asset" und füllen Sie alle Felder aus
2. **Asset bearbeiten**: Klicken Sie auf das Bearbeiten-Symbol bei einem Asset
3. **Asset zuweisen**: Verwenden Sie die Zuweisungs-Funktion für Benutzer
4. **Dateien anhängen**: Laden Sie Dokumente, Bilder oder andere Dateien hoch
5. **Etiketten drucken**: Generieren Sie QR/Barcode-Etiketten für Assets
### Inventur
1. **Inventur starten**: Erstellen Sie einen neuen Inventurdurchlauf
2. **Assets scannen**: Verwenden Sie die Scan-Funktion mit Inventarnummer oder QR-Code
3. **Status erfassen**: Markieren Sie Assets als gefunden, nicht gefunden, defekt oder verschoben
4. **Inventur abschließen**: Generieren Sie einen Abschlussbericht mit Differenzen
### Berichte
- **Asset-Berichte**: Nach verschiedenen Kriterien gefiltert
- **Garantie-Berichte**: Assets mit ablaufender Garantie
- **Standort-Berichte**: Assets nach Standort gruppiert
- **Export-Funktionen**: CSV, Excel, PDF-Export
## Backup & Restore
### Datenbank-Backup
```bash
# Backup erstellen
docker compose exec db mysqldump -u root -p inventory > backup_$(date +%Y%m%d_%H%M%S).sql
# Backup wiederherstellen
docker compose exec -T db mysql -u root -p inventory < backup_file.sql
```
### Uploads-Backup
```bash
# Uploads-Ordner sichern
tar -czf uploads_backup_$(date +%Y%m%d_%H%M%S).tar.gz storage/uploads/
# Uploads wiederherstellen
tar -xzf uploads_backup_file.tar.gz
```
## Wartung
### Logs anzeigen
```bash
# Alle Services
docker compose logs
# Spezifischer Service
docker compose logs php
docker compose logs nginx
docker compose logs db
```
### Datenbank-Migrationen
```bash
# Migrationen manuell ausführen
docker compose exec php php scripts/migrate.php
# Seeder manuell ausführen
docker compose exec php php scripts/seed.php
```
### Cache leeren
```bash
# Storage-Cache leeren
docker compose exec php rm -rf storage/cache/*
```
## Entwicklung
### Projektstruktur
```
asset-management/
├── app/
│ ├── Controllers/ # Controller-Klassen
│ ├── Models/ # Datenmodelle
│ ├── Views/ # PHP-Templates
│ ├── Services/ # Geschäftslogik
│ ├── Middleware/ # HTTP-Middleware
│ ├── Helpers/ # Hilfsfunktionen
│ └── Core/ # Framework-Core
├── config/ # Konfigurationsdateien
├── database/
│ ├── migrations/ # Datenbank-Migrationen
│ └── seeds/ # Testdaten
├── public/ # Web-Root
│ ├── assets/ # CSS, JS, Bilder
│ └── index.php # Front-Controller
├── storage/ # Uploads, Logs, Cache
├── lang/ # Übersetzungsdateien
├── scripts/ # CLI-Skripte
├── docker-compose.yml # Docker-Konfiguration
└── README.md # Diese Datei
```
### Neue Features hinzufügen
1. **Controller erstellen**: Erben Sie von `BaseController`
2. **Model erstellen**: Verwenden Sie PDO mit Prepared Statements
3. **View erstellen**: PHP-Template mit Layout-System
4. **Route hinzufügen**: In `config/routes.php` definieren
5. **Migration erstellen**: Für Datenbankänderungen
### Code-Standards
- **PSR-4**: Autoloading-Standard
- **PSR-12**: Coding Style
- **Prepared Statements**: Für alle Datenbankabfragen
- **CSRF-Schutz**: Für alle POST-Requests
- **Audit-Logging**: Für alle CRUD-Operationen
## Troubleshooting
### Häufige Probleme
**Anwendung nicht erreichbar**
```bash
# Services Status prüfen
docker compose ps
# Logs prüfen
docker compose logs nginx
docker compose logs php
```
**Datenbank-Verbindung fehlgeschlagen**
```bash
# Datenbank-Container Status
docker compose logs db
# Datenbank-Verbindung testen
docker compose exec db mysql -u inventory -p
```
**Upload-Fehler**
```bash
# Berechtigungen prüfen
docker compose exec php ls -la storage/uploads/
# Berechtigungen korrigieren
docker compose exec php chown -R www-data:www-data storage/
```
**Performance-Probleme**
```bash
# OPcache Status prüfen
docker compose exec php php -m | grep opcache
# Cache leeren
docker compose exec php php -r "opcache_reset();"
```
## Support
Bei Problemen oder Fragen:
1. **Logs prüfen**: `docker compose logs`
2. **Dokumentation**: Diese README-Datei
3. **Issues**: GitHub Issues verwenden
## Lizenz
Dieses Projekt steht unter der MIT-Lizenz. Siehe LICENSE-Datei für Details.
## Changelog
### Version 1.0.0
- Initiale Version
- Vollständige Asset-Verwaltung
- Inventur-System
- Benutzer- und Rollenverwaltung
- Berichte und Export-Funktionen
- Docker-Integration
- Mehrsprachigkeit (DE/EN)