Merge pull request #103 from LD-Reborn/100-feature-add-the-ability-to-create-an-asset

100 feature add the ability to create an asset
This commit is contained in:
LD50
2025-10-10 11:45:00 +02:00
committed by GitHub
2 changed files with 0 additions and 268 deletions

View File

@@ -1,214 +0,0 @@
# **Pflichtenheft**
**Projekt:** Hardware-Asset-Management-Tool
**Firma:** WalhöferGbR
---
## **Deckblatt**
| **Projektname:** | Hardware-Asset-Management-Tool |
| ------------------------------- | ------------------------------ |
| **Kunde:** | Firma WalhöferGbR |
| **Auftragnehmer / Entwickler:** | KeineAhnungGmbH |
| **Version:** | 3.0 |
| **Projektlaufzeit:** | 09.10.2025 - 01.12.2025 |
| **Budget:** | 40.000 € |
**Kontaktperson Kunde:**
- Name: Jochen Walhöfer
- Abteilung: IT-Abteilung
- E-Mail: jochen.walhoefer@meinbtg.de
**Kontaktperson Entwickler:**
- Name: Andreas Stefan
- E-Mail: andreas.stefan@KeineAhnungGmbH.de
---
## **Versionshistorie**
| Version | Datum | Autor | Änderung / Kommentar |
| ------- | ---------- | -------------- | ------------------------- |
| 1.0 | 19.09.2025 | Lucretia Dietz | Erstfassung Pflichtenheft |
| 2.0 | 03.10.2025 | Lucretia Dietz | Erweiterung Hosting & Support |
| 3.0 | 03.10.2025 | Lucretia Dietz | Anpassung für agiles Vorgehen |
---
## **Inhaltsverzeichnis**
1. Einleitung / Zielbestimmung
2. Produkteinsatz
3. Produktfunktionen
4. Produktdaten
5. Benutzerrollen & Rechtekonzept
6. Systemarchitektur & Technologien
7. Schnittstellen
8. Sicherheitsanforderungen
9. Qualitätsanforderungen
10. Setup, Support & Lizenz
11. Abgrenzungskriterien (Nicht-Ziele)
12. Budget- und Zeitplanung
13. Glossar
14. Unterschriften
---
## 1. Einleitung / Zielbestimmung
Ziel dieses Projekts ist die Entwicklung eines webbasierten Hardware-Asset-Management-Tools für die IT-Abteilung der Firma WalhöferGbR.
Das System soll firmeneigene Hardware zentral verwalten, LDAP-Daten integrieren und relevante Informationen erfassen und pflegen.
Die Entwicklung erfolgt inkrementell und iterativ nach agilen Prinzipien.
Das Projektteam liefert funktionsfähige Zwischenversionen (Increment) in kurzen Sprints (23 Wochen) aus.
Änderungswünsche und Prioritäten werden gemeinsam mit dem Product Owner abgestimmt.
---
## 2. Produkteinsatz
- **Zielgruppe / Nutzer:** IT-Abteilung der Firma Walhöfer
- **Einsatzort:** Innerbetrieblich, Zugriff über Webbrowser
- **Hauptnutzen:** Übersicht über Hardwarebestand, Zuordnung zu Nutzern, Verwaltung zentraler Informationen
---
## 3. Produktfunktionen
Epic 1:
- Schreibender und lesender Zugriff auf LDAP, inklusive Schemaerweiterung
- Einfache Übersichtsseiten („alle Geräte pro Nutzer“)
Epic 2:
- Assets anlegen, bearbeiten und löschen
- Assets zu Nutzern zuordnen
Epic 3:
- Suchen und Filtern von Assets
Epic 4:
- Inventarisierung von Geräten (durch Inventarisierer)
- Rollenverwaltung über LDAP-Gruppen
---
## 4. Produktdaten
| Attribut | Beschreibung |
| ------------------- | ----------------------------- |
| Seriennummer | Eindeutige Gerätekennung |
| Standort | Physischer Ort des Geräts |
| Zugeordneter Nutzer | Benutzer aus LDAP |
| Garantieende | Datum |
| Marke / Modell | Herstellerinformationen |
| Inventarstatus | Datum und Inventurist*in |
Erweiterungen am LDAP-Schema werden nach Sprintplanung umgesetzt.
---
## 5. Benutzerrollen & Rechtekonzept
| Rolle | Rechte |
| --------------- | ------------------------------------- |
| Admin | Vollzugriff, Rollenverwaltung |
| Inventaristen | Geräte inventarisieren und bearbeiten |
| Nur-Lesen | Nur Ansicht |
Rollen werden über LDAP-Gruppen abgebildet.
Änderungen oder zusätzliche Rollen können sprintweise implementiert werden.
---
## 6. Systemarchitektur & Technologien
- Webanwendung auf .NET (C#)
- Browserbasiert
- Zentrale Datenhaltung über LDAP
- SSL-verschlüsselte Verbindungen
- Erweiterbares LDAP-Schema für Geräteinformationen
- Hosting auf Kundenhardware (on-premise)
- Ubuntu Server mit
- 2 CPU Kernen
- 2 GB RAM
- 50 GB SSD
- Windows Server mit
- 4 CPU Kernen
- 4 GB RAM
- 100 GB SSD
---
## 7. Schnittstellen
- LDAP (Lesend und Schreibend)
- Authentifizierung über Benutzername/Passwort
- Rollensteuerung über Gruppenobjekte
- Schemaerweiterung für Geräteobjekte
---
## 8. Sicherheitsanforderungen
- LDAP-Authentifizierung
- Rollenbasiertes Berechtigungsmodell
- SSL für alle Verbindungen
- Logging von Zugriffen und Änderungen
- Schreibrechte nur für berechtigte Benutzer
---
## 9. Qualitätsanforderungen
- Performance: System unterstützt ca. 100 Nutzer
- Erweiterbare Architektur: Attribute müssen hinzugefügt werden können
- Stabile, wartbare Software
- Datensicherung erfolgt extern durch den Kunden
- Codequalität wird durch Code Reviews und CI/CD sichergestellt
- Abnahme durch Product Owner nach jedem Sprint-Inkrement
---
## 10. Setup, Support & Lizenz
- Installation und Abnahme erfolgen gemeinsam mit dem Product Owner (max. 4 Stunden).
- Nach Projektabschluss erfolgt keine dauerhafte Betreuung (siehe MIT-Lizenz).
- Die Software wird mit der MIT Lizenz geliefert.
- Support während der Projektlaufzeit im Rahmen des Sprints.
- Alle Rechte der Firma WalhöferGbR hinsichtlich der Verwendung, Weiterentwicklung und Weitergabe werden durch die MIT Lizenz definiert.
---
## 11. Abgrenzungskriterien (Nicht-Ziele)
- Keine automatischen Benachrichtigungen
- Keine Workflows
- Kein Datenexport (CSV, PDF, Excel)
- Keine Mehrsprachigkeit
- Keine speziellen UI/Design-Vorgaben
---
## 12. Budget- und Zeitplanung
- **Gesamtbudget:** 40.000 €
- **Sprintdauer:** 2 Wochen
- **Geplante Laufzeit:** 4 Sprints
- **Review-Meetings:** Nach jedem Sprint
- **Zieltermin:** 01.12.2025
- Entwicklungsaufwand in enger Abstimmung mit der IT-Abteilung
---
## 13. Glossar
- **Epic:** Agile Beschreibung von Anforderungen aus Nutzersicht
- **Sprint:** Kurzer Entwicklungszyklus (2-3 Wochen)
- **Product Owner:** Verantwortlicher des Kunden für Priorisierung
- **Increment** Funktional lauffähige Softwareversion nach einem Sprint
- **Asset:** Hardwaregerät (PC, Laptop, Monitor, Drucker, Smartphone)
- **LDAP:** Lightweight Directory Access Protocol, zentrale Datenhaltung für Nutzer und Geräte
- **Inventarisierung:** Kennzeichnung eines Gerätes als inventarisiert
---
## 14. Unterschriften
| Name | Funktion | Unterschrift | Datum |
| --------------- | ------------- | ------------ | ----- |
| Jochen Walhöfer | Auftraggeber | | |
| Lucretia Dietz | Projektleiterin | | |

View File

@@ -263,62 +263,8 @@
</div> </div>
</div> </div>
<script>
document.addEventListener('DOMContentLoaded', () => {
const createForm = document.getElementById('createAssetForm');
const createModalEl = document.getElementById('createAssetModal');
createForm.addEventListener('submit', async (e) => {
e.preventDefault();
const formData = new FormData(createForm);
const jsonData = {};
// Convert form data into nested JSON for AssetsCreateRequestModel
for (const [key, value] of formData.entries()) {
if (!value) continue;
const keys = key.split('.');
let target = jsonData;
for (let i = 0; i < keys.length - 1; i++) {
target[keys[i]] = target[keys[i]] || {};
target = target[keys[i]];
}
target[keys[keys.length - 1]] = value;
}
try {
const response = await fetch('/Assets/Create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json'
},
body: JSON.stringify(jsonData)
});
const result = await response.json();
if (result.success) {
const modal = bootstrap.Modal.getInstance(createModalEl);
modal.hide();
createForm.reset();
showToast('✅ Asset created successfully', 'success');
// Optional: reload page or dynamically add new row
// location.reload();
} else {
showToast(`❌ ${result.reason || 'Error creating asset'}`, 'danger');
}
} catch (error) {
console.error(error);
showToast('Error contacting server', 'danger');
}
});
});
</script>
<script> <script>
/* Handle the attributes list for asset creation*/
document.addEventListener('DOMContentLoaded', () => { document.addEventListener('DOMContentLoaded', () => {
const attributesContainer = document.getElementById('attributesContainer'); const attributesContainer = document.getElementById('attributesContainer');
const addAttributeBtn = document.getElementById('addAttributeBtn'); const addAttributeBtn = document.getElementById('addAttributeBtn');