using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using System.Windows.Controls; using System.Windows.Data; using System.Windows.Documents; using System.Windows.Input; using System.Windows.Media; using System.Windows.Media.Imaging; using System.Windows.Navigation; using System.Windows.Shapes; using System.Globalization; using ChudoObuv.Data; using ChudoObuv.Logic; using ChudoObuv.Models; namespace ChudoObuv.Pages { public partial class OrderPage : Page { private readonly Order order; private List items = new List(); public OrderPage(Order order) { InitializeComponent(); this.order = order; Title = $"Состав заказа No {order.Id}"; } private void Page_Loaded(object sender, RoutedEventArgs e) { bool isAdmin = Session.CurrentUser.IsAdmin; OrderDateText.Visibility = isAdmin ? Visibility.Collapsed : Visibility.Visible; OrderDatePicker.Visibility = isAdmin ? Visibility.Visible : Visibility.Collapsed; SaveDateButton.Visibility = isAdmin ? Visibility.Visible : Visibility.Collapsed; DeleteColumn.Visibility = isAdmin ? Visibility.Visible : Visibility.Collapsed; HeaderText.Text = $"Заказ No {order.Id}. Клиент: {order.ClientFullName}"; OrderDateText.Text = order.OrderDate.ToString("dd.MM.yyyy"); OrderDatePicker.SelectedDate = order.OrderDate; LoadItems(); } private void LoadItems() { try { items = DataService.GetOrderItems(order.Id); } catch (Exception ex) { Messages.ShowDatabaseError(ex); items = new List(); } ItemsDataGrid.ItemsSource = items; TotalText.Text = $"Итоговая сумма по заказу: {items.Sum(item => item.Sum):N2} ₽"; } private void SaveDateButton_Click(object sender, RoutedEventArgs e) { // Дату, введенную с клавиатуры, разбираем сами: DatePicker применяет ее только при потере фокуса if (!DateTime.TryParseExact(OrderDatePicker.Text.Trim(), "dd.MM.yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime newDate)) { Messages.ShowWarning("Дата заказа указана неверно. Выберите ее в календаре или введите в формате ДД.ММ.ГГГГ, например 15.04.2026."); OrderDatePicker.Focus(); return; } if (newDate.Date > DateTime.Today) { Messages.ShowWarning("Дата заказа не может быть позже сегодняшней. Выберите другую дату."); return; } try { DataService.UpdateOrderDate(order.Id, newDate); order.OrderDate = newDate; Messages.ShowInfo($"Дата заказа No {order.Id} изменена на {newDate:dd.MM.yyyy}."); } catch (Exception ex) { Messages.ShowDatabaseError(ex); } } private void DeleteItemButton_Click(object sender, RoutedEventArgs e) { if (((Button)sender).DataContext is not OrderItem item) { return; } if (items.Count == 1) { Messages.ShowWarning("Это последняя позиция заказа. Пустой заказ хранить нельзя — удалите весь заказ на странице «Список заказов»."); return; } if (!Messages.Confirm($"Удалить позицию «{item.Position}» из заказа No {order.Id}?\nТовар вернется на склад.Действие нельзя отменить.")) { return; } try { DataService.DeleteOrderItem(item.Id); LoadItems(); } catch (Exception ex) { Messages.ShowDatabaseError(ex); } } } }