283 lines
11 KiB
C#
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];
|
|
}
|
|
}
|
|
}
|