variant_dem_shoe_store/ChudoObuv/Pages/OrderPage.xaml.cs
2026-10-31 19:36:02 +04:00

109 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<OrderItem> items = new List<OrderItem>();
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<OrderItem>();
}
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);
}
}
}
}