using Avalonia; using Avalonia.Controls; using Avalonia.Markup.Xaml; using Avalonia.Media; using AvaloniaAppApplication.Context; using AvaloniaAppApplication.DTO; using AvaloniaAppApplication.Models; using Microsoft.EntityFrameworkCore; using MsBox.Avalonia; using System; using System.Drawing; using System.Globalization; using System.IO; using System.Linq; using System.Text; namespace AvaloniaAppApplication; public partial class ClientServiceWindow : Window { string time = ""; string date = ""; ServiceDTO currentService; User19Context dbContext = new User19Context(); public ClientServiceWindow(ServiceDTO service) { InitializeComponent(); currentService = service; DataContext = currentService; ComboClients.ItemsSource = dbContext.Clients.Select(c => c.Firstname + " " + c.Lastname + " " + c.Patronymic); } private void TextBox_TextChanged(object? sender, Avalonia.Controls.TextChangedEventArgs e) { try { DateTime parsedStartTime; string characters = "0123456789.:"; string processedText = ServiceStartTimeTX.Text ?? string.Empty; string[] timeFormats = { "HH.mm", "H.mm", "HH:mm", "H:mm" }; if (DateTime.TryParseExact(processedText, timeFormats, CultureInfo.InvariantCulture, DateTimeStyles.None, out parsedStartTime)) { ServiceStartTimeBorder.BorderBrush = new SolidColorBrush(Colors.Green); time = parsedStartTime.ToString("HH:mm"); ManageEndDateTime(); } else { ServiceStartTimeBorder.BorderBrush = new SolidColorBrush(Colors.Red); } } catch { return; } } string startDateTimeString; public void ManageEndDateTime() { try { if (!string.IsNullOrEmpty(date) && !string.IsNullOrEmpty(time) && int.TryParse(DurationInMinutesTN.Text, out int minutes)) { startDateTimeString = date + " " + time; string[] formats = { "dd.MM.yy HH:mm", "d.M.yyyy H:mm" }; if (DateTime.TryParseExact(startDateTimeString, formats, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime startDateTime)) { DateTime endDateTime = startDateTime.AddMinutes(minutes); string endDateTimeString = endDateTime.ToString("dd.MM.yyyy HH.mm", CultureInfo.InvariantCulture); // Используем CultureInfo ServiceEndTimeTB.Text = endDateTimeString; } else { ServiceEndTimeTB.Text = string.Empty; // Очистка поля при ошибке } } } catch (Exception ex) { return; } } private void Calendar_SelectedDatesChanged(object? sender, Avalonia.Controls.SelectionChangedEventArgs e) { var selectedDate = (DateTime)((Avalonia.Controls.Calendar)sender).SelectedDate; date = selectedDate.ToString("dd.MM.yy"); ManageEndDateTime(); } // добавляем запись клиента на услугу (сохраняем) private async void Button_Click(object? sender, Avalonia.Interactivity.RoutedEventArgs e) { try { StringBuilder errors = new StringBuilder(); IBrush red = new SolidColorBrush(Colors.Red); bool isBorderBrushRed = ServiceStartTimeBorder.BorderBrush is SolidColorBrush solidBrush && solidBrush.Color == Colors.Red; if (ComboClients.SelectedIndex == -1) errors.AppendLine("Клиент не указан!"); if (isBorderBrushRed || ServiceStartTimeTX.Text == null || CalendarControl.SelectedDate == null) errors.AppendLine("Дата и время оказания услуги выбраны некорректно!"); if (errors != null && errors.Length > 0) { var msBox = MessageBoxManager.GetMessageBoxStandard("Ошибка!", errors.ToString()); var rs = msBox.ShowWindowDialogAsync(this); return; } Clientservice newClientService = new Clientservice() { Clientid = ComboClients.SelectedIndex + 1, Starttime = startDateTimeString, Serviceid = currentService.Id }; dbContext.Clientservices.Add(newClientService); dbContext.SaveChanges(); var msbox = MessageBoxManager.GetMessageBoxStandard("OK!", "Запись об услуге для клиента была успешно оформлена!"); var res = await msbox.ShowWindowDialogAsync(this); Close(); } catch { return; } } }