projektAutoHandlung/WpfApp4/MainWindow.xaml.cs
2025-08-31 17:11:58 +02:00

283 lines
11 KiB
C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using Microsoft.Win32;
namespace FahrzeugVerwaltung
{
public partial class MainWindow : Window
{
private DatabaseService _databaseService;
private PdfService _pdfService;
private List<Fahrzeug> _aktuelleFahrzeuge;
private Fahrzeug _ausgewaehltesFahrzeug;
private Dictionary<string, List<string>> _markenModelle;
public MainWindow()
{
InitializeComponent();
InitializeServices();
InitializeMarken();
LadeFahrzeuge();
}
// legt die Dienste an
private void InitializeServices()
{
_databaseService = new DatabaseService();
_pdfService = new PdfService();
_aktuelleFahrzeuge = new List<Fahrzeug>();
}
// füllt die Listen für Marken und Modelle
private void InitializeMarken()
{
_markenModelle = new Dictionary<string, List<string>>
{
{"Audi", new List<string>{"A3","A4","A6","Q3","Q5","Q7"}},
{"BMW", new List<string>{"1er","3er","5er","X1","X3","X5"}},
{"Mercedes", new List<string>{"A-Klasse","C-Klasse","E-Klasse","GLA","GLC","GLE"}},
{"Volkswagen", new List<string>{"Golf","Passat","Polo","Tiguan","T-Roc","Arteon"}},
{"Opel", new List<string>{"Corsa","Astra","Insignia","Mokka","Crossland","Grandland"}},
{"Ford", new List<string>{"Fiesta","Focus","Mondeo","Kuga","Puma","S-MAX"}},
{"Toyota", new List<string>{"Yaris","Corolla","Camry","RAV4","C-HR","Auris"}},
{"Honda", new List<string>{"Civic","Accord","Jazz","CR-V","HR-V","NSX"}},
{"Hyundai", new List<string>{"i20","i30","i40","Tucson","Santa Fe","Kona"}},
{"Nissan", new List<string>{"Micra","Juke","Qashqai","X-Trail","Leaf","Navara"}}
};
cmbMarke.ItemsSource = _markenModelle.Keys;
}
// lädt alle Fahrzeuge
private void LadeFahrzeuge()
{
_aktuelleFahrzeuge = _databaseService.LadeAlleFahrzeuge();
dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge;
UpdateStatusText();
}
// zeigt Anzahl der Fahrzeuge an
private void UpdateStatusText()
{
if (_aktuelleFahrzeuge.Count == 0)
txtDetails.Text = "Keine Fahrzeuge vorhanden";
else
txtDetails.Text = $"{_aktuelleFahrzeuge.Count} Fahrzeug(e) gefunden";
}
// fügt ein neues Fahrzeug hinzu
private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e)
{
if (!PruefeEingaben())
return;
var fahrzeug = new Fahrzeug
{
Marke = cmbMarke.SelectedItem.ToString(),
Modell = cmbModell.SelectedItem.ToString(),
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()
};
fahrzeug.Id = _databaseService.SpeichereFahrzeug(fahrzeug);
MessageBox.Show("Fahrzeug gespeichert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
ClearInputFields();
LadeFahrzeuge();
}
// bearbeitet das ausgewählte Fahrzeug
private void BtnBearbeiten_Click(object sender, RoutedEventArgs e)
{
if (_ausgewaehltesFahrzeug == null || !PruefeEingaben())
return;
_ausgewaehltesFahrzeug.Marke = cmbMarke.SelectedItem.ToString();
_ausgewaehltesFahrzeug.Modell = cmbModell.SelectedItem.ToString();
_ausgewaehltesFahrzeug.Baujahr = int.Parse(txtBaujahr.Text.Trim());
_ausgewaehltesFahrzeug.Leistung = int.Parse(txtLeistung.Text.Trim());
_ausgewaehltesFahrzeug.Kilometerstand = int.Parse(txtKilometer.Text.Trim());
_ausgewaehltesFahrzeug.Kaufpreis = decimal.Parse(txtKaufpreis.Text.Trim());
_ausgewaehltesFahrzeug.Farbe = txtFarbe.Text.Trim();
if (_databaseService.AktualisiereFahrzeug(_ausgewaehltesFahrzeug))
MessageBox.Show("Fahrzeug aktualisiert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
LadeFahrzeuge();
}
// löscht das ausgewählte Fahrzeug
private void BtnLoeschen_Click(object sender, RoutedEventArgs e)
{
if (_ausgewaehltesFahrzeug == null)
return;
if (MessageBox.Show("Fahrzeug wirklich löschen?", "Bestätigung", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes)
{
if (_databaseService.LoescheFahrzeug(_ausgewaehltesFahrzeug.Id))
{
MessageBox.Show("Fahrzeug gelöscht.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
ClearInputFields();
LadeFahrzeuge();
}
}
}
// prüft die Eingaben
private bool PruefeEingaben()
{
var fehler = new List<string>();
if (cmbMarke.SelectedItem == null)
fehler.Add("Marke wählen");
if (cmbModell.SelectedItem == null)
fehler.Add("Modell wählen");
if (!int.TryParse(txtBaujahr.Text, out int baujahr) || baujahr < 1900 || baujahr > DateTime.Now.Year)
fehler.Add($"Baujahr zwischen 1900 und {DateTime.Now.Year}");
if (!int.TryParse(txtLeistung.Text, out int leistung) || leistung <= 0)
fehler.Add("Leistung muss positiv sein");
if (!int.TryParse(txtKilometer.Text, out int kilometer) || kilometer < 0)
fehler.Add("Kilometerstand muss 0 oder größer sein");
if (!decimal.TryParse(txtKaufpreis.Text, out decimal kaufpreis) || kaufpreis <= 0)
fehler.Add("Kaufpreis muss positiv sein");
if (string.IsNullOrWhiteSpace(txtFarbe.Text))
fehler.Add("Farbe angeben");
if (fehler.Any())
{
MessageBox.Show(string.Join("\n", fehler), "Eingabefehler", MessageBoxButton.OK, MessageBoxImage.Warning);
return false;
}
return true;
}
// leert alle Eingabefelder
private void ClearInputFields()
{
cmbMarke.SelectedIndex = -1;
cmbModell.ItemsSource = null;
txtBaujahr.Clear();
txtLeistung.Clear();
txtKilometer.Clear();
txtKaufpreis.Clear();
txtFarbe.Clear();
cmbMarke.Focus();
}
// sucht Fahrzeuge nach Begriff
private void BtnSuchen_Click(object sender, RoutedEventArgs e)
{
var suchbegriff = txtSuche.Text.Trim();
if (string.IsNullOrWhiteSpace(suchbegriff))
return;
_aktuelleFahrzeuge = _databaseService.SucheFahrzeuge(suchbegriff);
dgFahrzeuge.ItemsSource = _aktuelleFahrzeuge;
UpdateStatusText();
}
// zeigt alle Fahrzeuge
private void BtnAlle_Click(object sender, RoutedEventArgs e)
{
txtSuche.Clear();
LadeFahrzeuge();
}
// reagiert auf Auswahl in der Liste
private void DgFahrzeuge_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
_ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug;
if (_ausgewaehltesFahrzeug != null)
{
txtDetails.Text = $"Ausgewählt: {_ausgewaehltesFahrzeug.GetDetailedDescription()}";
cmbMarke.SelectedItem = _ausgewaehltesFahrzeug.Marke;
CmbMarke_SelectionChanged(null, null);
cmbModell.SelectedItem = _ausgewaehltesFahrzeug.Modell;
txtBaujahr.Text = _ausgewaehltesFahrzeug.Baujahr.ToString();
txtLeistung.Text = _ausgewaehltesFahrzeug.Leistung.ToString();
txtKilometer.Text = _ausgewaehltesFahrzeug.Kilometerstand.ToString();
txtKaufpreis.Text = _ausgewaehltesFahrzeug.Kaufpreis.ToString();
txtFarbe.Text = _ausgewaehltesFahrzeug.Farbe;
btnPdf.IsEnabled = true;
}
else
{
UpdateStatusText();
btnPdf.IsEnabled = false;
}
}
// erstellt ein PDF zum Fahrzeug
private void BtnPdf_Click(object sender, RoutedEventArgs e)
{
if (_ausgewaehltesFahrzeug == null)
return;
var dialog = new SaveFileDialog
{
Filter = "PDF-Dateien (*.pdf)|*.pdf",
FileName = $"Fahrzeug_{_ausgewaehltesFahrzeug.Marke}_{_ausgewaehltesFahrzeug.Modell}_{DateTime.Now:yyyyMMdd_HHmmss}.pdf"
};
if (dialog.ShowDialog() == true)
{
if (_pdfService.ErstelleFahrzeugPdf(_ausgewaehltesFahrzeug, dialog.FileName))
MessageBox.Show("PDF erstellt.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
}
}
// lädt die Liste neu
private void BtnAktualisieren_Click(object sender, RoutedEventArgs e)
{
LadeFahrzeuge();
}
// Tastenkürzel
protected override void OnKeyDown(System.Windows.Input.KeyEventArgs e)
{
if (e.Key == System.Windows.Input.Key.S && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control)
{
BtnHinzufuegen_Click(null, null);
e.Handled = true;
}
else if (e.Key == System.Windows.Input.Key.F && System.Windows.Input.Keyboard.Modifiers == System.Windows.Input.ModifierKeys.Control)
{
txtSuche.Focus();
e.Handled = true;
}
else if (e.Key == System.Windows.Input.Key.F5)
{
BtnAktualisieren_Click(null, null);
e.Handled = true;
}
else if (e.Key == System.Windows.Input.Key.Escape)
{
ClearInputFields();
e.Handled = true;
}
base.OnKeyDown(e);
}
// passt Modellliste an
private void CmbMarke_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (cmbMarke.SelectedItem == null)
{
cmbModell.ItemsSource = null;
return;
}
var marke = cmbMarke.SelectedItem.ToString();
cmbModell.ItemsSource = _markenModelle[marke];
}
}
}