using System; using System.Collections.Generic; using System.Linq; using System.Windows; using System.Windows.Controls; using Microsoft.Win32; using System.IO; using System.Text; namespace FahrzeugVerwaltung { public partial class MainWindow : Window { private DatabaseService _databaseService; private PdfService _pdfService; private List _aktuelleFahrzeuge; private Fahrzeug _ausgewaehltesFahrzeug; public MainWindow() { InitializeComponent(); InitializeServices(); LadeFahrzeuge(); } /// /// Initialisiert die Services /// private void InitializeServices() { try { _databaseService = new DatabaseService(); _pdfService = new PdfService(); _aktuelleFahrzeuge = new List(); } catch (Exception ex) { MessageBox.Show($"Fehler beim Initialisieren der Anwendung: {ex.Message}", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } /// /// Lädt alle Fahrzeuge aus der Datenbank /// private void LadeFahrzeuge() { try { _aktuelleFahrzeuge = _databaseService.LadeAlleFahrzeuge(); dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge; UpdateStatusText(); } catch (Exception ex) { MessageBox.Show($"Fehler beim Laden der Fahrzeuge: {ex.Message}", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } /// /// Aktualisiert den Status-Text /// private void UpdateStatusText() { if (_aktuelleFahrzeuge.Count == 0) { txtDetails.Text = "Keine Fahrzeuge vorhanden"; } else { txtDetails.Text = $"{_aktuelleFahrzeuge.Count} Fahrzeug(e) gefunden"; } } /// /// Speichert ein neues Fahrzeug /// private void BtnSpeichern_Click(object sender, RoutedEventArgs e) { try { if (!ValidateInput()) return; var fahrzeug = new Fahrzeug { Marke = txtMarke.Text.Trim(), Modell = txtModell.Text.Trim(), Baujahr = int.Parse(txtBaujahr.Text.Trim()), Leistung = int.Parse(txtLeistung.Text.Trim()), Kilometerstand = int.Parse(txtKilometer.Text.Trim()), Kaufpreis = decimal.Parse(txtKaufpreis.Text.Trim()), Farbe = txtFarbe.Text.Trim() }; int neueId = _databaseService.SpeichereFahrzeug(fahrzeug); fahrzeug.Id = neueId; MessageBox.Show($"Fahrzeug '{fahrzeug.Marke} {fahrzeug.Modell}' wurde erfolgreich gespeichert!", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); // Eingabefelder leeren ClearInputFields(); // Fahrzeugliste aktualisieren LadeFahrzeuge(); } catch (Exception ex) { MessageBox.Show($"Fehler beim Speichern des Fahrzeugs: {ex.Message}", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } /// /// Validiert die Eingaben /// private bool ValidateInput() { var errors = new List(); if (string.IsNullOrWhiteSpace(txtMarke.Text)) errors.Add("Marke ist erforderlich"); if (string.IsNullOrWhiteSpace(txtModell.Text)) errors.Add("Modell ist erforderlich"); if (!int.TryParse(txtBaujahr.Text, out int baujahr) || baujahr < 1900 || baujahr > DateTime.Now.Year) errors.Add($"Baujahr muss zwischen 1900 und {DateTime.Now.Year} liegen"); if (!int.TryParse(txtLeistung.Text, out int leistung) || leistung <= 0) errors.Add("Leistung muss eine positive Zahl sein"); if (!int.TryParse(txtKilometer.Text, out int kilometer) || kilometer < 0) errors.Add("Kilometerstand muss 0 oder größer sein"); if (!decimal.TryParse(txtKaufpreis.Text, out decimal kaufpreis) || kaufpreis <= 0) errors.Add("Kaufpreis muss eine positive Zahl sein"); if (string.IsNullOrWhiteSpace(txtFarbe.Text)) errors.Add("Farbe ist erforderlich"); if (errors.Any()) { MessageBox.Show($"Bitte korrigieren Sie folgende Fehler:\n\n{string.Join("\n", errors)}", "Eingabefehler", MessageBoxButton.OK, MessageBoxImage.Warning); return false; } return true; } /// /// Leert alle Eingabefelder /// private void ClearInputFields() { txtMarke.Clear(); txtModell.Clear(); txtBaujahr.Clear(); txtLeistung.Clear(); txtKilometer.Clear(); txtKaufpreis.Clear(); txtFarbe.Clear(); txtMarke.Focus(); } /// /// Sucht nach Fahrzeugen /// private void BtnSuchen_Click(object sender, RoutedEventArgs e) { try { string suchbegriff = txtSuche.Text.Trim(); if (string.IsNullOrWhiteSpace(suchbegriff)) { MessageBox.Show("Bitte geben Sie einen Suchbegriff ein.", "Hinweis", MessageBoxButton.OK, MessageBoxImage.Information); return; } _aktuelleFahrzeuge = _databaseService.SucheFahrzeuge(suchbegriff); dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge; UpdateStatusText(); if (_aktuelleFahrzeuge.Count == 0) { MessageBox.Show($"Keine Fahrzeuge mit dem Suchbegriff '{suchbegriff}' gefunden.", "Suchergebnis", MessageBoxButton.OK, MessageBoxImage.Information); } } catch (Exception ex) { MessageBox.Show($"Fehler bei der Suche: {ex.Message}", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } /// /// Zeigt alle Fahrzeuge an /// private void BtnAlle_Click(object sender, RoutedEventArgs e) { txtSuche.Clear(); LadeFahrzeuge(); } /// /// Wird aufgerufen wenn ein Fahrzeug ausgewählt wird /// private void DgFahrzeuge_SelectionChanged(object sender, SelectionChangedEventArgs e) { _ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug; if (_ausgewaehltesFahrzeug != null) { txtDetails.Text = $"Ausgewählt: {_ausgewaehltesFahrzeug.GetDetailedDescription()} | " + $"Aktueller Wert: {_ausgewaehltesFahrzeug.AktuellerWertFormatiert} | " + $"Wertverlust: {((_ausgewaehltesFahrzeug.Kaufpreis - _ausgewaehltesFahrzeug.AktuellerWert) / _ausgewaehltesFahrzeug.Kaufpreis * 100):F1}%"; btnPdf.IsEnabled = true; } else { UpdateStatusText(); btnPdf.IsEnabled = false; } } /// /// Erstellt ein PDF für das ausgewählte Fahrzeug /// private void BtnPdf_Click(object sender, RoutedEventArgs e) { if (_ausgewaehltesFahrzeug == null) { MessageBox.Show("Bitte wählen Sie erst ein Fahrzeug aus.", "Hinweis", MessageBoxButton.OK, MessageBoxImage.Information); return; } try { var saveFileDialog = new SaveFileDialog { Filter = "PDF-Dateien (*.pdf)|*.pdf", FileName = $"Fahrzeug_{_ausgewaehltesFahrzeug.Marke}_{_ausgewaehltesFahrzeug.Modell}_{DateTime.Now:yyyyMMdd_HHmmss}.pdf", Title = "PDF speichern" }; if (saveFileDialog.ShowDialog() == true) { bool erfolg = _pdfService.ErstelleFahrzeugPdf(_ausgewaehltesFahrzeug, saveFileDialog.FileName); if (erfolg) { MessageBox.Show($"PDF wurde erfolgreich erstellt:\n{saveFileDialog.FileName}", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information); // Fragen ob PDF geöffnet werden soll var result = MessageBox.Show("Möchten Sie das PDF jetzt öffnen?", "PDF öffnen", MessageBoxButton.YesNo, MessageBoxImage.Question); if (result == MessageBoxResult.Yes) { System.Diagnostics.Process.Start(saveFileDialog.FileName); } } } } catch (Exception ex) { MessageBox.Show($"Fehler beim Erstellen des PDFs: {ex.Message}", "Fehler", MessageBoxButton.OK, MessageBoxImage.Error); } } /// /// Aktualisiert die Fahrzeugliste /// private void BtnAktualisieren_Click(object sender, RoutedEventArgs e) { LadeFahrzeuge(); MessageBox.Show("Fahrzeugliste wurde aktualisiert.", "Information", MessageBoxButton.OK, MessageBoxImage.Information); } /// /// Behandelt das Schließen des Fensters /// protected override void OnClosed(EventArgs e) { base.OnClosed(e); } /// /// Behandelt Tastatureingaben für Shortcuts /// protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e) { // Strg+S zum Speichern if (e.Key == System.Windows.Input.Key.S && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control) { BtnSpeichern_Click(null, null); e.Handled = true; } // Strg+F zum Suchen else if (e.Key == System.Windows.Input.Key.F && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control) { txtSuche.Focus(); e.Handled = true; } // F5 zum Aktualisieren else if (e.Key == System.Windows.Input.Key.F5) { BtnAktualisieren_Click(null, null); e.Handled = true; } // Escape zum Leeren der Eingabefelder else if (e.Key == System.Windows.Input.Key.Escape) { ClearInputFields(); e.Handled = true; } base.OnKeyDown(e); } } }