mirror of
https://github.com/LD-Reborn/Berufsschule_HAM.git
synced 2025-12-20 06:51:55 +00:00
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:
@@ -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 (2–3 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 | | |
|
|
||||||
@@ -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');
|
||||||
|
|||||||
Reference in New Issue
Block a user