Files
Petr_PTA25_Proj_02-10/dealer/windows/AddVehicleWindow.xaml.cs
2026-02-17 15:33:05 +01:00

239 lines
9.0 KiB
C#

using Microsoft.Win32;
using System.IO;
using System.Linq;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
using WinForms = System.Windows.Forms;
namespace dealer
{
public partial class AddVehicleWindow : Window
{
public string? SelectedPhotoPath { get; private set; }
public System.Windows.Media.Color SelectedColor { get; private set; } = Colors.White;
private DataManager dataManager;
private Owner? selectedOwner;
private bool isUpdatingOwnerComboBox = false;
public AddVehicleWindow(DataManager dataManager)
{
InitializeComponent();
this.dataManager = dataManager;
LoadOwners();
}
private void LoadOwners()
{
OwnerComboBox.ItemsSource = dataManager.GetAllOwners().ToList();
}
private void OwnerComboBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (isUpdatingOwnerComboBox) return;
var comboBox = sender as System.Windows.Controls.ComboBox;
if (comboBox == null) return;
string searchText = comboBox.Text;
var filteredOwners = dataManager.SearchOwners(searchText).ToList();
isUpdatingOwnerComboBox = true;
comboBox.ItemsSource = filteredOwners;
comboBox.IsDropDownOpen = true;
isUpdatingOwnerComboBox = false;
}
private void OwnerComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
selectedOwner = OwnerComboBox.SelectedItem as Owner;
UpdateSelectedOwnerInfo();
}
private void UpdateSelectedOwnerInfo()
{
if (selectedOwner != null)
{
var info = selectedOwner.CeleJmeno;
if (!string.IsNullOrEmpty(selectedOwner.Telefon))
info += $"\nTel: {selectedOwner.Telefon}";
if (!string.IsNullOrEmpty(selectedOwner.Email))
info += $"\nEmail: {selectedOwner.Email}";
if (!string.IsNullOrEmpty(selectedOwner.Adresa))
info += $"\nAdresa: {selectedOwner.Adresa}";
SelectedOwnerInfo.Text = info;
}
else
{
SelectedOwnerInfo.Text = "";
}
}
private void AddNewOwnerButton_Click(object sender, RoutedEventArgs e)
{
var addOwnerWindow = new AddOwnerWindow(dataManager);
addOwnerWindow.Owner = this;
if (addOwnerWindow.ShowDialog() == true && addOwnerWindow.CreatedOwner != null)
{
LoadOwners();
OwnerComboBox.SelectedItem = dataManager.GetAllOwners().FirstOrDefault(o => o.Id == addOwnerWindow.CreatedOwner.Id);
}
else
{
LoadOwners();
}
}
private void SelectPhotoButton_Click(object sender, RoutedEventArgs e)
{
Microsoft.Win32.OpenFileDialog openFileDialog = new Microsoft.Win32.OpenFileDialog
{
Title = "Vyberte fotografii vozidla",
Filter = "Obrazky|*.jpg;*.jpeg;*.png;*.bmp;*.gif|Vsechny soubory|*.*",
FilterIndex = 1
};
if (openFileDialog.ShowDialog() == true)
{
SelectedPhotoPath = openFileDialog.FileName;
PhotoPathTextBlock.Text = SelectedPhotoPath;
}
}
private void SelectColorButton_Click(object sender, RoutedEventArgs e)
{
WinForms.ColorDialog colorDialog = new WinForms.ColorDialog
{
AllowFullOpen = true,
FullOpen = true
};
if (colorDialog.ShowDialog() == WinForms.DialogResult.OK)
{
SelectedColor = System.Windows.Media.Color.FromArgb(
colorDialog.Color.A,
colorDialog.Color.R,
colorDialog.Color.G,
colorDialog.Color.B);
ColorPreviewBorder.Background = new SolidColorBrush(SelectedColor);
ColorNameTextBlock.Text = $"#{SelectedColor.R:X2}{SelectedColor.G:X2}{SelectedColor.B:X2}";
ColorNameTextBlock.FontStyle = FontStyles.Normal;
ColorNameTextBlock.Foreground = System.Windows.Media.Brushes.Black;
}
}
private void NumericOnly_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
e.Handled = !int.TryParse(e.Text, out _);
}
private void DecimalOnly_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
var textBox = sender as System.Windows.Controls.TextBox;
string newText = textBox?.Text.Insert(textBox.SelectionStart, e.Text) ?? e.Text;
e.Handled = !decimal.TryParse(newText, out _);
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(SpzTextBox.Text))
{
System.Windows.MessageBox.Show("Vyplnte SPZ.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (string.IsNullOrWhiteSpace(ZnackaTextBox.Text))
{
System.Windows.MessageBox.Show("Vyplnte znacku.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (string.IsNullOrWhiteSpace(ModelTextBox.Text))
{
System.Windows.MessageBox.Show("Vyplnte model.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (string.IsNullOrWhiteSpace(YearTextBox.Text))
{
System.Windows.MessageBox.Show("Vyplnte rok vyroby.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (PalivoComboBox.SelectedItem == null)
{
System.Windows.MessageBox.Show("Vyberte palivo.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (!string.IsNullOrWhiteSpace(MileageTextBox.Text) && (!int.TryParse(MileageTextBox.Text, out int mileageVal) || mileageVal < 0))
{
System.Windows.MessageBox.Show("Najete km musi byt nezaporne cele cislo.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (!string.IsNullOrWhiteSpace(PriceTextBox.Text) && (!decimal.TryParse(PriceTextBox.Text, out decimal priceVal) || priceVal < 0))
{
System.Windows.MessageBox.Show("Cena musi byt nezaporne cislo.", "Upozorneni", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
Image? image = null;
if (!string.IsNullOrEmpty(SelectedPhotoPath) && File.Exists(SelectedPhotoPath))
{
byte[] imageBytes = File.ReadAllBytes(SelectedPhotoPath);
image = new Image
{
Data = Convert.ToBase64String(imageBytes),
FileName = System.IO.Path.GetFileName(SelectedPhotoPath),
ContentType = GetContentType(SelectedPhotoPath)
};
this.dataManager.AddImage(image);
}
var vehicle = new Vehicle
{
Spz = SpzTextBox.Text,
Znacka = ZnackaTextBox.Text,
Model = ModelTextBox.Text,
Barva = $"#{SelectedColor.R:X2}{SelectedColor.G:X2}{SelectedColor.B:X2}",
RokVyroby = int.TryParse(YearTextBox.Text, out int rok) ? rok : (int?)null,
Palivo = (PalivoComboBox.SelectedItem as System.Windows.Controls.ComboBoxItem)?.Content?.ToString(),
NajeteKm = int.TryParse(MileageTextBox.Text, out int km) ? km : (int?)null,
Cena = decimal.TryParse(PriceTextBox.Text, out decimal cena) ? cena : (decimal?)null,
FotografieId = image?.Id,
Fotografie = image,
VlastnikId = selectedOwner?.Id,
Vlastnik = selectedOwner
};
this.dataManager.AddVehicle(vehicle);
this.dataManager.Save();
this.Close();
}
private void CancelButton_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
private static string GetContentType(string filePath)
{
var extension = System.IO.Path.GetExtension(filePath)?.ToLowerInvariant();
return extension switch
{
".jpg" or ".jpeg" => "image/jpeg",
".png" => "image/png",
".gif" => "image/gif",
".bmp" => "image/bmp",
".webp" => "image/webp",
_ => "application/octet-stream"
};
}
}
}