# 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)