Files
Masterarbeit/Ergebnisse/Ergebnisse 03/USE_CASES_NEW_GUI_MAPPING.md

33 KiB

c-entron.NET - WPF GUI Mapping für Asset Management & Scheduling

Generiert: 2025-11-11 Status: GUI-Mapping für neue Use Cases Basis: USE_CASES_NEW.md Dokumentation Ziel: Mapping auf WPF ViewModels, Views, Controller


📋 Inhaltsverzeichnis

  1. Asset Management GUI-Struktur

  2. Scheduling GUI-Struktur

  3. Module-Registrierung

  4. Ribbon-Integration

  5. Implementierungs-Roadmap


ASSET MANAGEMENT GUI-STRUKTUR

16.1 Geräte-Inventarverwaltung UI

WPF Modul-Struktur

src/centron/Centron.WPF.UI/Modules/Administration/
├── AssetManagement/
│   ├── AssetManagementAppModuleController.cs
│   ├── AssetManagementView.xaml
│   ├── ViewModels/
│   │   ├── AssetInventoryViewModel.cs           [Hauptview]
│   │   ├── AssetDetailsViewModel.cs             [Detail-Edit]
│   │   ├── AssetLifecycleViewModel.cs           [Lebenszyklusmanagement]
│   │   ├── AssetBatchImportViewModel.cs         [Batch-Import Wizard]
│   │   ├── AssetDepartmentViewModel.cs          [Abteilungs-Übersicht]
│   │   └── WizardPages/
│   │       ├── AssetImportSourceWizardPageViewModel.cs
│   │       ├── AssetImportMappingWizardPageViewModel.cs
│   │       ├── AssetImportValidationWizardPageViewModel.cs
│   │       └── AssetImportResultWizardPageViewModel.cs
│   └── Views/
│       ├── AssetInventoryView.xaml
│       ├── AssetDetailsView.xaml
│       ├── AssetLifecycleView.xaml
│       └── Wizard/
│           ├── AssetBatchImportWizardView.xaml

ViewModel-Eigenschaften Mapping

UC 1.1: Neue IT-Geräte erfassen

// AssetInventoryViewModel.cs
public class AssetInventoryViewModel : BindableBase
{
    // UC 1.1 Properties
    public string DeviceName { get; set; }                              // TextEdit
    public AssetDeviceType SelectedDeviceType { get; set; }            // ComboBoxEdit
    public string Manufacturer { get; set; }                            // TextEdit
    public string ModelNumber { get; set; }                             // TextEdit
    public string SerialNumber { get; set; }                            // TextEdit (unique!)
    public string AssetTag { get; set; }                                // TextEdit (auto-generated)
    public int SelectedDepartmentI3D { get; set; }                       // ComboBoxEdit
    public int SelectedLocationI3D { get; set; }                         // ComboBoxEdit
    public AssetStatus SelectedStatus { get; set; }                     // ComboBoxEdit (Active/Inactive)

    // Commands
    public ICommand CreateNewAssetCommand { get; }              // Neues Gerät erstellen
    public ICommand SaveAssetCommand { get; }                  // Speichern
    public ICommand ImportBatchCommand { get; }                // Batch-Import starten
    public ICommand GenerateAssetTagCommand { get; }           // Asset-Tag generieren

    // List Properties
    public ObservableCollection<AssetItemViewModel> Assets { get; set; }
    public ObservableCollection<DepartmentViewModel> Departments { get; set; }
    public ObservableCollection<LocationViewModel> Locations { get; set; }
}

// UI-Bindungen:
// TextEdit "DeviceName" → DeviceName
// ComboBoxEdit "Gerättyp" → SelectedDeviceType
// TextEdit "Seriennummer" → SerialNumber (mit Validierung)
// Button "Asset-Tag generieren" → GenerateAssetTagCommand
// Button "Speichern" → SaveAssetCommand

UI-Elemente:

UI-Element Typ ViewModel Property Validierung Status
Gerätname TextEdit DeviceName Required 📋 UI Design
Gerättyp ComboBoxEdit SelectedDeviceType Enum 📋 UI Design
Hersteller TextEdit Manufacturer Optional 📋 UI Design
Modell TextEdit ModelNumber Required 📋 UI Design
Seriennummer TextEdit SerialNumber Required + Unique 📋 UI Design
Asset-Tag TextEdit AssetTag Auto-generated 📋 UI Design
Abteilung ComboBoxEdit SelectedDepartmentI3D Required 📋 UI Design
Standort ComboBoxEdit SelectedLocationI3D Required 📋 UI Design
Status ComboBoxEdit SelectedStatus Active/Inactive 📋 UI Design
[Neu] Button Button CreateNewAssetCommand - 📋 UI Design
[Asset-Tag] Button Button GenerateAssetTagCommand - 📋 UI Design
[Speichern] Button Button SaveAssetCommand - 📋 UI Design

UC 1.2: Geräte-Details anzeigen & bearbeiten

// AssetDetailsViewModel.cs
public class AssetDetailsViewModel : BindableBase
{
    // UC 1.2 Properties
    public string Hostname { get; set; }                                 // TextEdit
    public string IPAddress { get; set; }                                // TextEdit
    public string MacAddress { get; set; }                               // TextEdit (read-only)
    public int RAMInGB { get; set; }                                     // SpinEdit
    public int StorageSizeInGB { get; set; }                             // SpinEdit
    public string CPUName { get; set; }                                  // TextEdit (read-only)
    public string OperatingSystem { get; set; }                          // ComboBoxEdit
    public DateTime AcquisitionDate { get; set; }                        // DateEdit
    public int DepartmentI3D { get; set; }                               // ComboBoxEdit

    // Commands
    public ICommand SaveDetailsCommand { get; }
    public ICommand RefreshDetailsCommand { get; }           // Von Scanner abrufen

    // Binding Collections
    public List<string> OperatingSystems { get; set; }
}

// UI-Bindungen:
// Grid mit Tabs:
// [Allgemein] [Hardware] [Software] [Service-Historie]
//
// Tab "Allgemein":
//   - Hostname (TextEdit)
//   - IP-Adresse (TextEdit)
//   - Abteilung (ComboBoxEdit)
//   - Status (ComboBoxEdit)
//
// Tab "Hardware":
//   - CPU (read-only)
//   - RAM (SpinEdit)
//   - Storage (SpinEdit)
//   - Netzwerk-Interfaces (Grid)
//
// Tab "Software":
//   - Betriebssystem (ComboBoxEdit)
//   - Installierte Apps (Grid, read-only)
//   - Services (Grid, read-only)

UC 1.3: Geräte-Bestände nach Abteilung

// AssetDepartmentViewModel.cs
public class AssetDepartmentViewModel : BindableBase
{
    // Filter
    public int SelectedDepartmentI3D { get; set; }                      // ComboBoxEdit
    public AssetStatus? FilterStatus { get; set; }                      // ComboBoxEdit

    // Data
    public ObservableCollection<AssetListItemViewModel> Assets { get; set; }  // GridControl

    // Commands
    public ICommand FilterCommand { get; }
    public ICommand ExportToExcelCommand { get; }

    // Status-Anzeige
    public int TotalAssetCount { get; set; }
    public int ActiveAssetCount { get; set; }
    public int InactiveAssetCount { get; set; }
}

// UI-Bindungen:
// GroupBox "Filter"
//   - ComboBoxEdit "Abteilung" → SelectedDepartmentI3D
//   - ComboBoxEdit "Status" → FilterStatus
//   - Button [Filter] → FilterCommand
//
// StatusBar (unten):
//   - "Gesamt: 150 Geräte | Aktiv: 145 | Inaktiv: 5"
//
// GridControl (Geräte-Liste):
//   Columns:
//   - Asset-Tag
//   - Gerätname
//   - Typ
//   - Benutzer
//   - Standort
//   - Status
//   - Ablauf-Datum

UC 1.4: Geräte-Lebenszyklusmanagement

// AssetLifecycleViewModel.cs
public class AssetLifecycleViewModel : BindableBase
{
    // Filterierung
    public AssetLifecycleStage FilterStage { get; set; }                 // ComboBoxEdit

    // List
    public ObservableCollection<AssetLifecycleItemViewModel> Assets { get; set; }

    // Bulk Operations
    public ICommand MoveToInactiveCommand { get; }
    public ICommand MoveToDisposalCommand { get; }
    public ICommand UpdateDepreciationCommand { get; }

    // Reporting
    public decimal TotalDepreciation { get; set; }                       // TextBlock (read-only)
    public decimal TotalResidualValue { get; set; }                      // TextBlock (read-only)
}

// Lifecycle Stages:
// [Beschaffung] → [Aktiv] → [Wartung] → [Ruhestand] → [Entsorgung]
//
// GridControl Columns:
// - Asset-Tag
// - Gerätname
// - Aktueller Stage
// - Erwerbs-Datum
// - Geplante Entsorgung
// - Restwert
// - [Move to Stage] Button

UC 1.5: Batch-Import von Geräten

// AssetBatchImportViewModel.cs
public class AssetBatchImportViewModel : BindableBase
{
    // Wizard Page 1: Source
    public string ImportFileSourcePath { get; set; }                    // TextEdit
    public AssetImportFormat SelectedFormat { get; set; }               // ComboBoxEdit (CSV/JSON/XML)
    public ICommand BrowseFileCommand { get; }

    // Wizard Page 2: Mapping
    public ObservableCollection<AssetColumnMappingViewModel> ColumnMappings { get; set; }

    // Wizard Page 3: Validation
    public ObservableCollection<AssetImportValidationResultViewModel> ValidationResults { get; set; }
    public int DuplicatesDetected { get; set; }
    public bool ProceedWithImport { get; set; }

    // Wizard Page 4: Result
    public ObservableCollection<AssetImportResultViewModel> ImportedAssets { get; set; }
    public int SuccessCount { get; set; }
    public int ErrorCount { get; set; }
}

// Wizard-Seiten:
// Page 1: "Datei auswählen"
//   - TextEdit mit BrowseButton
//   - ComboBoxEdit "Format"
//   - Preview der ersten Zeilen
//
// Page 2: "Spalten-Zuordnung"
//   - Grid: CSV-Spalte → Asset-Feld
//   - Dropdown für Zuordnung
//
// Page 3: "Validierung"
//   - Anzahl Duplikate
//   - Fehler-Summary
//   - Checkbox "Mit Duplikaten fortfahren?"
//
// Page 4: "Ergebnis"
//   - "150 Geräte erfolgreich importiert"
//   - Grid mit importierten Geräten

BL-Integration:

// Service-Layer (WebServiceBL oder BL)
public class AssetManagementLogic : IAssetManagementLogic
{
    private readonly AssetBL _assetBL;
    private readonly DAOSession _session;

    // UC 1.1
    public Result<AssetDTO> CreateNewAsset(CreateAssetRequest request, AppUser currentUser)

    // UC 1.2
    public Result<AssetDetailsDTO> GetAssetDetails(int assetI3D)
    public Result UpdateAssetDetails(int assetI3D, UpdateAssetRequest request, AppUser currentUser)

    // UC 1.3
    public Result<List<AssetDTO>> GetInventoryByDepartment(int departmentI3D, AssetStatus? status)

    // UC 1.4
    public Result UpdateAssetLifecycleStage(int assetI3D, AssetLifecycleStage newStage)

    // UC 1.5
    public Result<BatchImportResult> ImportAssetsBatch(Stream fileStream, AssetImportFormat format)
}

// REST API Endpoints
POST /AssetManagement/CreateAsset
POST /AssetManagement/GetAssetDetails
POST /AssetManagement/UpdateAsset
POST /AssetManagement/GetInventoryByDepartment
POST /AssetManagement/ImportBatch

16.2 Patch- & Update-Management UI

WPF Modul-Struktur

src/centron/Centron.WPF.UI/Modules/Administration/
├── AssetManagement/PatchManagement/
│   ├── PatchManagementViewModel.cs
│   ├── PatchManagementView.xaml
│   └── ViewModels/
│       ├── PendingPatchesViewModel.cs
│       ├── PatchDeploymentViewModel.cs          [Wizard]
│       ├── PatchCampaignViewModel.cs
│       └── PatchHistoryViewModel.cs

ViewModel-Eigenschaften

public class PendingPatchesViewModel : BindableBase
{
    // Filter
    public int? SelectedDeviceI3D { get; set; }
    public PatchKind? FilterPatchKind { get; set; }              // ComboBoxEdit (Security/Critical/Standard)
    public DateTime? FilterFromDate { get; set; }
    public DateTime? FilterToDate { get; set; }

    // Data
    public ObservableCollection<PatchListItemViewModel> PendingPatches { get; set; }

    // Commands
    public ICommand FilterCommand { get; }
    public ICommand ApprovePatchCommand { get; }
    public ICommand RejectPatchCommand { get; }
    public ICommand ScheduleDeploymentCommand { get; }

    // Statistics
    public int CriticalPatchCount { get; set; }
    public int SecurityPatchCount { get; set; }
    public int StandardPatchCount { get; set; }
}

// UI-Bindungen:
// TreeView (links):
//   - Alle Geräte
//   - Nach Patch-Status gruppiert
//
// Main Grid (rechts):
//   Columns:
//   - Patch-Name
//   - Typ (Security/Critical/Standard)
//   - Status (Pending/Approved/Deployed)
//   - Betroffene Geräte (Anzahl)
//   - Größe
//   - [Genehmigen] Button
//   - [Ablehnen] Button
//   - [Deploy] Button

16.3 SNMP-Monitoring UI

src/centron/Centron.WPF.UI/Modules/Administration/
├── AssetManagement/SnmpMonitoring/
│   ├── SnmpMonitoringViewModel.cs
│   ├── SnmpMonitoringView.xaml
│   └── ViewModels/
│       ├── SnmpDeviceListViewModel.cs
│       ├── SnmpDeviceDetailsViewModel.cs
│       ├── SnmpThresholdViewModel.cs
│       ├── NetworkHealthDashboardViewModel.cs

Dashboard-Komponenten

public class NetworkHealthDashboardViewModel : BindableBase
{
    // Real-Time Metrics
    public ObservableCollection<DeviceHealthItemViewModel> DevicesStatus { get; set; }

    // Gauges
    public double AverageCpuUsage { get; set; }                        // Gauge Control
    public double AverageMemoryUsage { get; set; }                     // Gauge Control
    public double AverageDiskUsage { get; set; }                       // Gauge Control

    // Color-coded Status
    public DeviceStatus OverallStatus { get; set; }                    // Green/Yellow/Red

    // Commands
    public ICommand RefreshCommand { get; }
    public ICommand DrillDownCommand { get; }
}

// UI-Bindungen:
// [Gauge Control] Durchschnittliche CPU: 65%
// [Gauge Control] Durchschnittlicher RAM: 72%
// [Gauge Control] Durchschnittlicher Disk: 58%
//
// [Heatmap oder Icon-Grid]
// Alle Geräte als farbige Quadrate
// 🟢 Online & Gut
// 🟡 Online aber langsam
// 🔴 Offline oder Critical

16.4 Lizenz-Verwaltung UI

src/centron/Centron.WPF.UI/Modules/Administration/
├── AssetManagement/LicenseManagement/
│   ├── LicenseManagementViewModel.cs
│   ├── LicenseManagementView.xaml
│   └── ViewModels/
│       ├── LicenseInventoryViewModel.cs
│       ├── LicenseComplianceViewModel.cs
│       ├── LicenseAuditViewModel.cs

ViewModel-Eigenschaften

public class LicenseInventoryViewModel : BindableBase
{
    // Master Table
    public ObservableCollection<SoftwareLicenseViewModel> InstalledLicenses { get; set; }

    // For each License:
    // - Product Name
    // - License Type (Home/Pro/Enterprise)
    // - Purchase Date
    // - Expiration Date
    // - Licensed Seats
    // - Installed Count
    // - Status (OK/Over-Licensed/Under-Licensed)

    public ICommand RegisterNewLicenseCommand { get; }
    public ICommand RenewLicenseCommand { get; }
}

// UI-Bindungen:
// GridControl "Lizenzen"
// Columns:
// - Produkt-Name
// - Lizenz-Typ
// - Ablauf-Datum
// - Lizenziert (Anzahl)
// - Installiert (Anzahl)
// - Status (🔴 Over / 🟡 Warning / 🟢 OK)
// - [Erneuern] Button
// - [Details] Button

16.5 Compliance & Depreciation UI

src/centron/Centron.WPF.UI/Modules/Administration/
├── AssetManagement/ComplianceReporting/
│   ├── ComplianceReportingViewModel.cs
│   ├── ComplianceReportingView.xaml
│   └── ViewModels/
│       ├── DepreciationScheduleViewModel.cs
│       ├── ComplianceAuditViewModel.cs
│       ├── AssetAuditReportViewModel.cs

Report-Komponenten

public class DepreciationScheduleViewModel : BindableBase
{
    // Calculate Depreciation
    public decimal AcquisitionCost { get; set; }
    public int UsefulLifeMonths { get; set; }
    public DepreciationMethod Method { get; set; }                     // Linear/Accelerated

    // Results
    public decimal MonthlyDepreciation { get; set; }
    public decimal CurrentBookValue { get; set; }
    public decimal ResidualValue { get; set; }

    // Chart
    public ChartData DepreciationCurve { get; set; }                   // Line Chart

    public ICommand CalculateCommand { get; }
}

// UI-Bindungen:
// [SpinEdit] Anschaffungswert: 1000 €
// [SpinEdit] Nutzungsdauer: 36 Monate
// [ComboBox] Methode: Linear / Accelerated
// [Button] Berechnen
//
// [TextBlock] Monatliche Abschreibung: 27.78 €
// [TextBlock] Aktueller Wert: 500 €
// [TextBlock] Restwert: 100 €
//
// [Chart] Abschreibungs-Kurve (über Zeit)


SCHEDULING GUI-STRUKTUR

17.1 Termine & Buchungen UI

WPF Modul-Struktur

src/centron/Centron.WPF.UI/Modules/Calendar/
├── AppointmentScheduling/
│   ├── AppointmentSchedulingAppModuleController.cs
│   ├── AppointmentSchedulingView.xaml
│   ├── ViewModels/
│   │   ├── AppointmentRequestViewModel.cs         [Hauptview]
│   │   ├── AppointmentProposalViewModel.cs        [Slot-Auswahl]
│   │   ├── AppointmentConfirmationViewModel.cs    [Bestätigung]
│   │   ├── AppointmentRescheduleViewModel.cs      [Umbuchen]
│   │   ├── TechnicianAvailabilityViewModel.cs     [Verfügbarkeit]
│   │   └── WizardPages/
│   │       ├── AppointmentRequestWizardPageViewModel.cs
│   │       ├── AppointmentProposalWizardPageViewModel.cs
│   │       ├── AppointmentConfirmationWizardPageViewModel.cs
│   └── Views/
│       ├── AppointmentRequestView.xaml
│       ├── AppointmentSlotSelectionView.xaml
│       └── Wizard/
│           ├── AppointmentBookingWizardView.xaml

ViewModel-Eigenschaften

public class AppointmentRequestViewModel : BindableBase
{
    // UC 17.1.1: Termine-Anfrage
    public int TicketI3D { get; set; }                                 // Hidden (aus Ticket context)
    public int CustomerI3D { get; set; }                               // Hidden
    public ServiceType RequestedServiceType { get; set; }               // ComboBoxEdit
    public DateTime PreferredDateFrom { get; set; }                    // DateEdit
    public DateTime PreferredDateTo { get; set; }                      // DateEdit
    public int EstimatedDurationInHours { get; set; }                  // SpinEdit
    public string LocationAddress { get; set; }                        // TextEdit
    public string CustomerNotes { get; set; }                          // MemoEdit

    // Available Slots
    public ObservableCollection<AppointmentSlotViewModel> ProposedSlots { get; set; }

    // Commands
    public ICommand RequestAppointmentCommand { get; }                 // Anfrage einreichen
    public ICommand SelectSlotCommand { get; }                         // Slot auswählen
    public ICommand ConfirmAppointmentCommand { get; }                 // Bestätigen

    // Status
    public string AppointmentStatus { get; set; }                      // "Anfrage eingereicht", "Slots verfügbar", "Gebucht"
}

// UI-Bindungen (Wizard, Seite 1):
// [ComboBox] Service-Typ: Installation / Wartung / Reparatur
// [DateEdit] Gewünschter Zeitraum von: ___
// [DateEdit] bis: ___
// [SpinEdit] Geschätzte Dauer: ___ Stunden
// [TextEdit] Adresse: ___
// [MemoEdit] Anmerkungen: ___
// [Button] Anfrage absenden
//
// Wizard Seite 2 (wenn Slots verfügbar):
// [Tabelle] Verfügbare Termine:
// | Datum | Zeit | Techniker | Fahrtzeit | [Wählen] |
// | Do 10. | 09:00-10:30 | Hans M. | 15 Min | ✓ |
// | Do 10. | 14:00-15:30 | Max B. | 25 Min | ✓ |
//
// Wizard Seite 3 (Bestätigung):
// "Termin bestätigt: Donnerstag 10. Juli, 09:00-10:30 bei Anna K."
// [Button] Termin speichern

17.2 Route-Optimierung UI

src/centron/Centron.WPF.UI/Modules/Calendar/
├── RouteOptimization/
│   ├── RouteOptimizationViewModel.cs
│   ├── RouteOptimizationView.xaml
│   └── ViewModels/
│       ├── TechnicianRoutePlannerViewModel.cs     [Tages-Route]
│       ├── ZoneManagementViewModel.cs             [Zone-Verwaltung]
│       ├── RouteMapViewModel.cs                   [Karten-Anzeige]

ViewModel-Eigenschaften

public class TechnicianRoutePlannerViewModel : BindableBase
{
    // Inputs
    public int SelectedTechnicianI3D { get; set; }                     // ComboBoxEdit
    public DateTime SelectedDate { get; set; }                         // DateEdit

    // Computed Route
    public ObservableCollection<RouteStopViewModel> OptimizedRoute { get; set; }

    // Metrics
    public double TotalDrivingTimeInMinutes { get; set; }              // TextBlock
    public double TotalDrivingDistanceInKm { get; set; }               // TextBlock
    public decimal TotalTravelCosts { get; set; }                      // TextBlock

    // Visualization
    public MapData RouteMapData { get; set; }                          // Map Control

    // Commands
    public ICommand OptimizeRouteCommand { get; }
    public ICommand PrintRouteCommand { get; }
    public ICommand ExportRouteCommand { get; }
}

// UI-Bindungen:
// [ComboBox] Techniker: Hans M.
// [DateEdit] Datum: Montag, 10. Juli 2025
// [Button] Route optimieren
//
// [Route-Tabelle]
// | Uhrzeit | Adresse | Kunde | Dauer | Fahrtzeit | Nächster Stop |
// | 09:00 | HQ Start | - | - | 15 Min | Kunde A |
// | 09:15 | Seestr. 15 | Müller GmbH | 1.5h | 30 Min | Kunde C |
// | 10:45 | Hauptstr. 42 | Schmidt KG | 0.5h | 15 Min | Kunde B |
// | 13:00 | Mittagspause | - | 1h | - | - |
// | 14:00 | Gewerbepark 10 | Reisebüro | 1h | 15 Min | Rückfahrt |
// | 15:15 | Marienplatz 5 | Bauuntern. | 1h | - | HQ |
// | 16:15 | HQ | - | - | - | - |
//
// [Info-Zeile unten]
// Fahrtzeit gesamt: 2h 45 Min | Fahrstrecke: 85 km | Kosten: €42,50
//
// [Map View] (rechts, optional)
// Karte mit markierten Kunden-Positionen und Fahrt-Route

17.3 Ressourcen-Kapazitätsplanung UI

src/centron/Centron.WPF.UI/Modules/Calendar/
├── CapacityPlanning/
│   ├── CapacityPlanningViewModel.cs
│   ├── CapacityPlanningView.xaml
│   └── ViewModels/
│       ├── DemandForecastViewModel.cs
│       ├── ResourceNeedsAnalysisViewModel.cs
│       ├── CapacityUtilizationViewModel.cs

ViewModel-Eigenschaften

public class CapacityUtilizationViewModel : BindableBase
{
    // Filter
    public DateTime ForecastStartDate { get; set; }                    // DateEdit
    public DateTime ForecastEndDate { get; set; }                      // DateEdit

    // Weekly Breakdown
    public ObservableCollection<CapacityWeekViewModel> WeeklyCapacity { get; set; }

    // For each week:
    // - Week number
    // - Predicted demand (hours)
    // - Available capacity (hours)
    // - Utilization % (0-100)
    // - Status (🟢 OK / 🟡 Warning / 🔴 Overbooked)

    // Metrics
    public double AverageUtilizationPercent { get; set; }              // TextBlock
    public double PeakUtilizationPercent { get; set; }                 // TextBlock
    public int BottleneckWeekCount { get; set; }                       // TextBlock

    // Commands
    public ICommand ForecastCommand { get; }
}

// UI-Bindungen:
// [DateEdit] Von: _________
// [DateEdit] Bis: _________
// [Button] Prognose berechnen
//
// [Heatmap oder Tabelle]
// Woche | Nachfrage | Verfügbar | Auslastung | Status
// 40    | 150h     | 160h      | 94%       | 🟢 OK
// 41    | 200h     | 160h      | 125%      | 🔴 PROBLEM!
// 42    | 130h     | 160h      | 81%       | 🟢 OK
// 43    | 180h     | 160h      | 113%      | 🟡 Warning
// 44    | 100h     | 160h      | 63%       | 🟢 OK
//
// [Info]
// Durchschnittliche Auslastung: 95%
// Peak: Woche 41 (125%) - Externe Ressourcen empfohlen!
//
// [Recommendations Panel]
// ⚠️ Woche 41: 40h Mehrarbeit nötig
// → Externe Techniker hinzubuchen ODER
// → Wartungen auf Woche 40/42 verschieben

17.4 SLA-Management UI

src/centron/Centron.WPF.UI/Modules/Helpdesk/
├── SLAManagement/
│   ├── SLAManagementViewModel.cs
│   ├── SLAManagementView.xaml
│   └── ViewModels/
│       ├── SLAConfigurationViewModel.cs
│       ├── SLAMonitoringDashboardViewModel.cs
│       ├── SLAReportingViewModel.cs

Dashboard-Komponenten

public class SLAMonitoringDashboardViewModel : BindableBase
{
    // Real-Time Status
    public int OKTicketCount { get; set; }                             // Badge (Green)
    public int WarningTicketCount { get; set; }                        // Badge (Yellow)
    public int BreachTicketCount { get; set; }                         // Badge (Red)

    // SLA Status Grid
    public ObservableCollection<TicketSLAStatusViewModel> TicketSLAStatuses { get; set; }

    // For each ticket:
    // - Ticket ID
    // - Priority
    // - Created
    // - SLA Response Deadline
    // - SLA Resolution Deadline
    // - Time Remaining (%)
    // - Status (🟢 OK / 🟡 Warning / 🔴 Breach)

    // Commands
    public ICommand RefreshCommand { get; }
    public ICommand SendEscalationCommand { get; }
}

// UI-Bindungen:
// [Status-Header]
// 🟢 OK: 95 Tickets | 🟡 Warning: 12 Tickets | 🔴 Breach: 2 Tickets
//
// [Filter]
// [ComboBox] Priorität: Alle / P1 / P2 / P3 / P4
// [ComboBox] Status: Alle / OK / Warning / Breach
// [Button] Filtern
//
// [Ticket-Grid]
// | ID | Titel | Prio | Erstellt | Response SLA | Lösung SLA | Verbl. Zeit | Status |
// |---|---|---|---|---|---|---|---|
// | #1001 | Mail-Server down | P1 | 09:30 | 10:30 | 13:30 | 67% | 🟢 OK |
// | #1002 | Drucker Problem | P3 | 14:15 | 22:15 | 5 Tage | 12% | 🔴 Breach! |
//
// [Alerts Panel] (unten)
// ⚠️ 2 Tickets mit SLA-Verletzung!
// → Ticket #1002 (67h überfällig) - Eskalation zu Manager erforderlich
// [Button] Eskalation senden

MODULE-REGISTRIERUNG

Ribbon-Integration

Asset Management Ribbon Tab

<!-- Modules/Administration/AssetManagement/Ribbon/AssetManagementRibbonDefinition.xml -->
<ribbon>
  <tab name="Asset Management">
    <group name="Geräte">
      <button name="Neue Gerät" icon="add.png" command="CreateNewAsset" rights="ASSET_MANAGEMENT" />
      <button name="Geräte importieren" icon="import.png" command="OpenBatchImportWizard" rights="ASSET_MANAGEMENT" />
      <button name="Export zu Excel" icon="excel.png" command="ExportAssets" rights="ASSET_VIEW" />
    </group>

    <group name="Wartung">
      <button name="Patch-Verwaltung" icon="patch.png" command="OpenPatchManagement" rights="ASSET_MANAGEMENT" />
      <button name="SNMP-Monitoring" icon="monitor.png" command="OpenSnmpMonitoring" rights="ASSET_VIEW" />
    </group>

    <group name="Compliance">
      <button name="Lizenz-Audit" icon="license.png" command="OpenLicenseAudit" rights="ASSET_VIEW" />
      <button name="Compliance-Report" icon="report.png" command="GenerateComplianceReport" rights="ASSET_VIEW" />
    </group>
  </tab>
</ribbon>

Scheduling Ribbon Tab

<!-- Modules/Calendar/AppointmentScheduling/Ribbon/SchedulingRibbonDefinition.xml -->
<ribbon>
  <tab name="Terminplanung">
    <group name="Termine">
      <button name="Neuer Termin" icon="appointment.png" command="CreateAppointment" rights="MANAGE_APPOINTMENTS" />
      <button name="Meine Termine" icon="calendar.png" command="ShowMyAppointments" rights="VIEW_SCHEDULE" />
    </group>

    <group name="Planung">
      <button name="Route optimieren" icon="route.png" command="OptimizeRoute" rights="MANAGE_APPOINTMENTS" />
      <button name="Kapazitätsplanung" icon="capacity.png" command="OpenCapacityPlanning" rights="VIEW_SCHEDULE" />
    </group>

    <group name="Überwachung">
      <button name="SLA-Dashboard" icon="sla.png" command="OpenSLADashboard" rights="MANAGE_TICKETS" />
      <button name="Reports" icon="report.png" command="OpenSchedulingReports" rights="VIEW_SCHEDULE" />
    </group>
  </tab>
</ribbon>

ModuleRegistration.cs Einträge

// In src/centron/Centron.WPF.UI/Common/ModuleRegistration.cs

// Asset Management Module
ModuleRegistry.Register(
    moduleId: new Guid("{F1C2D3E4-5678-90AB-CDEF-1234567890AB}"),
    moduleName: "Asset Management",
    moduleType: ModuleType.Configuration,
    requiresLicense: new[] { LicenseGuids.AssetManagement, LicenseGuids.Centron },
    requiredRights: new[] { UserRightsConst.Administration.ASSET_MANAGEMENT },
    path: "src/centron/Centron.WPF.UI/Modules/Administration/AssetManagement/",
    controllerType: typeof(AssetManagementAppModuleController),
    viewType: typeof(AssetManagementView)
);

// Appointment Scheduling Module
ModuleRegistry.Register(
    moduleId: new Guid("{A1B2C3D4-E5F6-0910-1112-1314151617AB}"),
    moduleName: "Terminverwaltung & Planung",
    moduleType: ModuleType.Operations,
    requiresLicense: new[] { LicenseGuids.Helpdesk, LicenseGuids.Centron },
    requiredRights: new[] { UserRightsConst.Helpdesk.MANAGE_APPOINTMENTS },
    path: "src/centron/Centron.WPF.UI/Modules/Calendar/AppointmentScheduling/",
    controllerType: typeof(AppointmentSchedulingAppModuleController),
    viewType: typeof(AppointmentSchedulingView)
);

IMPLEMENTIERUNGS-ROADMAP

Phase 1: Grundstruktur (Wochen 1-2)

Asset Management - MVP

  • Modul-Verzeichnis erstellen
  • AssetManagementAppModuleController.cs implementieren
  • AssetInventoryView.xaml und ViewModel erstellen
  • UC 1.1 (Neue Geräte erfassen) implementieren
  • UC 1.2 (Details anzeigen) implementieren
  • Datenbank-Mapping zu bestehenden Tabellen

Scheduling - MVP

  • Modul-Verzeichnis analysieren (teilweise vorhanden)
  • AppointmentSchedulingAppModuleController erweitern
  • UC 17.1 (Termine anfragen) UI implementieren
  • UC 17.1 (Slot-Auswahl) UI implementieren
  • Integation mit bestehender Appointment BL

Deliverables:

  • Asset Management Modul mit UC 1.1 & 1.2
  • Scheduling Modul mit UC 17.1.1 & 17.1.2
  • Ribbon-Integration
  • Unit Tests für ViewModels

Phase 2: Erweiterung (Wochen 3-4)

Asset Management - Erweiterte Features

  • UC 1.3 (Bestände nach Abteilung)
  • UC 1.4 (Lebenszyklusmanagement)
  • UC 1.5 (Batch-Import)
  • Patch Management (UC 16.2)
  • SNMP Monitoring (UC 16.3)

Scheduling - Erweiterte Features

  • UC 17.2 (Route-Optimierung)
  • UC 17.3 (Kapazitätsplanung)
  • UC 17.4 (SLA-Management)
  • Mobile-App Support

Deliverables:

  • Alle UC für Asset Management & Scheduling
  • API-Integration
  • Reporting-Module

Phase 3: Optimierung & Testing (Woche 5)

  • Performance-Optimierung
  • E2E-Testing
  • User Acceptance Testing (UAT)
  • Dokumentation finalisieren
  • Release-Vorbereitung

Technologie-Stack

Komponente Technologie Version
UI Framework WPF + DevExpress 24.2
ViewModel Pattern MVVM + Prism -
Data Binding WPF Binding -
Charts DevExpress Charts 24.2
Maps (Optional) Google Maps API
Business Logic C# .NET 8 8.0
ORM NHibernate 5.x
Testing NUnit + Moq -

Mapping Summary

Asset Management Use Cases → WPF UI

UC ViewModel View Status
1.1 AssetInventoryViewModel AssetDetailsView 📋 Design
1.2 AssetDetailsViewModel AssetDetailsView (Tab) 📋 Design
1.3 AssetDepartmentViewModel AssetInventoryView (Filter) 📋 Design
1.4 AssetLifecycleViewModel AssetLifecycleView 📋 Design
1.5 AssetBatchImportViewModel AssetBatchImportWizardView 📋 Design
2.1 PendingPatchesViewModel PatchManagementView 📋 Design
2.2 PatchDeploymentViewModel PatchDeploymentWizardView 📋 Design
3.1 SnmpDeviceListViewModel SnmpMonitoringView 📋 Design
3.2 NetworkHealthDashboardViewModel NetworkHealthDashboardView 📋 Design
4.1 LicenseInventoryViewModel LicenseManagementView 📋 Design
4.2 LicenseComplianceViewModel LicenseComplianceView 📋 Design
5.1 DepreciationScheduleViewModel ComplianceReportingView 📋 Design

Scheduling Use Cases → WPF UI

UC ViewModel View Status
17.1.1 AppointmentRequestViewModel AppointmentBookingWizardView (Page 1) 📋 Design
17.1.2 AppointmentProposalViewModel AppointmentBookingWizardView (Page 2) 📋 Design
17.1.3 AppointmentConfirmationViewModel AppointmentBookingWizardView (Page 3) 📋 Design
17.2.1 TechnicianRoutePlannerViewModel RouteOptimizationView 📋 Design
17.3.1 CapacityUtilizationViewModel CapacityPlanningView 📋 Design
17.4.1 SLAMonitoringDashboardViewModel SLAMonitoringView 📋 Design

Status: GUI-Mapping abgeschlossen | WPF-Struktur definiert | Implementation roadmap erstellt