-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAddEditClientWindow.xaml.cs
More file actions
127 lines (113 loc) · 5.63 KB
/
Copy pathAddEditClientWindow.xaml.cs
File metadata and controls
127 lines (113 loc) · 5.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
using MyPanelCarWashing.Models;
using MyPanelCarWashing.Services;
using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Media;
namespace MyPanelCarWashing
{
public partial class AddEditClientWindow : Window
{
private SqliteDataService _SqliteDataService;
public Client CurrentClient { get; set; }
public string WindowTitle { get; set; }
public AddEditClientWindow(SqliteDataService SqliteDataService, Client client)
{
InitializeComponent();
_SqliteDataService = SqliteDataService;
if (client == null)
{
CurrentClient = new Client();
WindowTitle = "➕ Добавление клиента";
}
else
{
CurrentClient = new Client
{
Id = client.Id,
FullName = client.FullName,
Phone = client.Phone,
CarModel = client.CarModel,
CarNumber = client.CarNumber,
Notes = client.Notes,
RegistrationDate = client.RegistrationDate,
TotalSpent = client.TotalSpent,
VisitsCount = client.VisitsCount,
LastVisitDate = client.LastVisitDate,
DefaultDiscountPercent = client.DefaultDiscountPercent
};
WindowTitle = "✏ Редактирование клиента";
}
DataContext = this;
// Подписка на изменение скидки для валидации
if (CurrentClient != null)
{
// Можно добавить PropertyChanged, но для простоты валидируем при сохранении
}
}
private void DiscountPercentTextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
{
// Разрешаем только цифры
e.Handled = !int.TryParse(e.Text, out _);
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
try
{
if (string.IsNullOrWhiteSpace(CurrentClient.FullName))
{
MessageBox.Show("Введите ФИО клиента", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (string.IsNullOrWhiteSpace(CurrentClient.Phone))
{
MessageBox.Show("Введите телефон клиента", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (CurrentClient.DefaultDiscountPercent < 0 || CurrentClient.DefaultDiscountPercent > 100)
{
MessageBox.Show("Скидка должна быть в диапазоне 0-100%", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning);
return;
}
if (CurrentClient.Id == 0)
{
_SqliteDataService.AddClient(CurrentClient);
Logger.Info($"Клиент ДОБАВЛЕН | ФИО: {CurrentClient.FullName} | Тел: {CurrentClient.Phone} | Авто: {CurrentClient.CarNumber}", "CLIENT_AUDIT");
MessageBox.Show("Клиент добавлен", "Успешно", MessageBoxButton.OK, MessageBoxImage.Information);
}
else
{
// Получаем старые данные для сравнения
var oldClient = _SqliteDataService.GetClientById(CurrentClient.Id);
string changes = "";
if (oldClient != null)
{
if (oldClient.FullName != CurrentClient.FullName) changes += $"ФИО: '{oldClient.FullName}'→'{CurrentClient.FullName}'; ";
if (oldClient.Phone != CurrentClient.Phone) changes += $"Тел: '{oldClient.Phone}'→'{CurrentClient.Phone}'; ";
if (oldClient.CarNumber != CurrentClient.CarNumber) changes += $"Авто: '{oldClient.CarNumber}'→'{CurrentClient.CarNumber}'; ";
if (oldClient.DefaultDiscountPercent != CurrentClient.DefaultDiscountPercent) changes += $"Скидка: {oldClient.DefaultDiscountPercent}%→{CurrentClient.DefaultDiscountPercent}%; ";
}
_SqliteDataService.UpdateClient(CurrentClient);
// Логируем только если что-то реально изменилось
if (!string.IsNullOrEmpty(changes))
{
Logger.Info($"Клиент ИЗМЕНЁН | ID: {CurrentClient.Id} | {changes.TrimEnd(';', ' ')}", "CLIENT_AUDIT");
}
MessageBox.Show("Данные клиента обновлены", "Успешно", MessageBoxButton.OK, MessageBoxImage.Information);
}
DialogResult = true;
Close();
}
catch (Exception ex)
{
Logger.Error("Ошибка при сохранении клиента", ex, "CLIENT");
MessageBox.Show($"Ошибка при сохранении: {ex.Message}", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Error);
}
}
private void CloseButton_Click(object sender, RoutedEventArgs e)
{
DialogResult = false;
Close();
}
}
}