291 lines
12 KiB
C#
291 lines
12 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 _datenbankDienst;
|
|
private PdfService _pdfDienst;
|
|
private List<Fahrzeug> _fahrzeuge;
|
|
private Fahrzeug _ausgewaehltesFahrzeug;
|
|
private Dictionary<string, List<string>> _markenModelle;
|
|
|
|
public MainWindow()
|
|
{
|
|
InitializeComponent();
|
|
DiensteAnlegen();
|
|
MarkenVorbereiten();
|
|
FahrzeugeLaden();
|
|
}
|
|
// Erstellt Hilfsdienste
|
|
private void DiensteAnlegen()
|
|
{
|
|
_datenbankDienst = new DatabaseService();
|
|
_pdfDienst = new PdfService();
|
|
_fahrzeuge = new List<Fahrzeug>();
|
|
}
|
|
|
|
// Legt Marken und Modelle fest
|
|
private void MarkenVorbereiten()
|
|
{
|
|
_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"}},
|
|
{"Kia", new List<string>{"Rio","Ceed","Sportage","Sorento","Picanto","Stonic"}},
|
|
{"Mazda", new List<string>{"Mazda2","Mazda3","Mazda6","CX-3","CX-5","MX-5"}},
|
|
{"Peugeot", new List<string>{"208","308","508","2008","3008","5008"}},
|
|
{"Renault", new List<string>{"Clio","Megane","Talisman","Captur","Kadjar","Scenic"}},
|
|
{"Skoda", new List<string>{"Fabia","Octavia","Superb","Kodiaq","Karoq","Scala"}},
|
|
{"Seat", new List<string>{"Ibiza","Leon","Ateca","Arona","Tarraco","Toledo"}},
|
|
{"Fiat", new List<string>{"500","Panda","Tipo","Punto","Doblo","Bravo"}},
|
|
{"Volvo", new List<string>{"S60","S90","V60","V90","XC60","XC90"}},
|
|
{"Subaru", new List<string>{"Impreza","Legacy","Outback","Forester","XV","BRZ"}},
|
|
{"Tesla", new List<string>{"Model S","Model 3","Model X","Model Y","Roadster","Cybertruck"}}
|
|
};
|
|
|
|
cmbMarke.ItemsSource = _markenModelle.Keys;
|
|
}
|
|
|
|
// Lädt alle Fahrzeuge aus der Datenbank
|
|
private void FahrzeugeLaden()
|
|
{
|
|
_fahrzeuge = _datenbankDienst.LadeAlleFahrzeuge();
|
|
dgFahrzeuge.ItemsSource = _fahrzeuge;
|
|
StatusAktualisieren();
|
|
}
|
|
|
|
// Zeigt die aktuelle Anzahl der Fahrzeuge an
|
|
private void StatusAktualisieren()
|
|
{
|
|
if (_fahrzeuge.Count == 0)
|
|
txtDetails.Text = "Keine Fahrzeuge vorhanden";
|
|
else
|
|
txtDetails.Text = $"{_fahrzeuge.Count} Fahrzeug(e) gefunden";
|
|
}
|
|
|
|
// Fügt ein neues Fahrzeug hinzu
|
|
private void BtnHinzufuegen_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (!EingabenPruefen())
|
|
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 = _datenbankDienst.SpeichereFahrzeug(fahrzeug);
|
|
MessageBox.Show("Fahrzeug gespeichert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
EingabenLeeren();
|
|
FahrzeugeLaden();
|
|
}
|
|
|
|
// Aktualisiert das ausgewählte Fahrzeug
|
|
private void BtnBearbeiten_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
if (_ausgewaehltesFahrzeug == null || !EingabenPruefen())
|
|
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 (_datenbankDienst.AktualisiereFahrzeug(_ausgewaehltesFahrzeug))
|
|
MessageBox.Show("Fahrzeug aktualisiert.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
FahrzeugeLaden();
|
|
}
|
|
|
|
// Entfernt das gewä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 (_datenbankDienst.LoescheFahrzeug(_ausgewaehltesFahrzeug.Id))
|
|
{
|
|
MessageBox.Show("Fahrzeug gelöscht.", "Erfolg", MessageBoxButton.OK, MessageBoxImage.Information);
|
|
EingabenLeeren();
|
|
FahrzeugeLaden();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Prüft die Eingaben
|
|
private bool EingabenPruefen()
|
|
{
|
|
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;
|
|
}
|
|
|
|
// Setzt alle Eingaben zurück
|
|
private void EingabenLeeren()
|
|
{
|
|
cmbMarke.SelectedIndex = -1;
|
|
cmbModell.ItemsSource = null;
|
|
txtBaujahr.Clear();
|
|
txtLeistung.Clear();
|
|
txtKilometer.Clear();
|
|
txtKaufpreis.Clear();
|
|
txtFarbe.Clear();
|
|
cmbMarke.Focus();
|
|
}
|
|
|
|
// Sucht Fahrzeuge per Text
|
|
private void BtnSuchen_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
var suchbegriff = txtSuche.Text.Trim();
|
|
if (string.IsNullOrWhiteSpace(suchbegriff))
|
|
return;
|
|
|
|
_fahrzeuge = _datenbankDienst.SucheFahrzeuge(suchbegriff);
|
|
dgFahrzeuge.ItemsSource = _fahrzeuge;
|
|
StatusAktualisieren();
|
|
}
|
|
|
|
// Zeigt wieder alle Fahrzeuge
|
|
private void BtnAlle_Click(object sender, RoutedEventArgs e)
|
|
{
|
|
txtSuche.Clear();
|
|
FahrzeugeLaden();
|
|
}
|
|
|
|
// Reagiert auf Auswahl in der Tabelle
|
|
private void Liste_AuswahlGeaendert(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
_ausgewaehltesFahrzeug = dgFahrzeuge.SelectedItem as Fahrzeug;
|
|
|
|
if (_ausgewaehltesFahrzeug != null)
|
|
{
|
|
txtDetails.Text = $"Ausgewählt: {_ausgewaehltesFahrzeug.HoleBeschreibung()}";
|
|
cmbMarke.SelectedItem = _ausgewaehltesFahrzeug.Marke;
|
|
CmbMarke_AuswahlGeaendert(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
|
|
{
|
|
StatusAktualisieren();
|
|
btnPdf.IsEnabled = false;
|
|
}
|
|
}
|
|
|
|
// Speichert das Fahrzeug als PDF
|
|
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 (_pdfDienst.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)
|
|
{
|
|
FahrzeugeLaden();
|
|
}
|
|
|
|
// Unterstützt einfache 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)
|
|
{
|
|
EingabenLeeren();
|
|
e.Handled = true;
|
|
}
|
|
|
|
base.OnKeyDown(e);
|
|
}
|
|
|
|
// Aktualisiert die Modelle zur Marke
|
|
private void CmbMarke_AuswahlGeaendert(object sender, SelectionChangedEventArgs e)
|
|
{
|
|
if (cmbMarke.SelectedItem == null)
|
|
{
|
|
cmbModell.ItemsSource = null;
|
|
return;
|
|
}
|
|
|
|
var marke = cmbMarke.SelectedItem.ToString();
|
|
cmbModell.ItemsSource = _markenModelle[marke];
|
|
}
|
|
}
|
|
}
|