Добавил обраотку полей для добавление физ.лица, осталось куча всего этого перекинуть на остольные поля.

This commit is contained in:
maksim 2024-12-03 01:30:30 +04:00
parent 206ffc4c76
commit 7b0a8dd3d6
3 changed files with 176 additions and 37 deletions

View File

@ -88,26 +88,25 @@
</Setter> </Setter>
</Style> </Style>
<!-- Стиль для закругленного TextBox с подсветкой --> <!-- Стиль для закругленного TextBox -->
<Style x:Key="RoundedTextBoxStyle" TargetType="TextBox"> <Style x:Key="RoundedTextBoxStyle" TargetType="TextBox">
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Template"> <Setter Property="Template">
<Setter.Value> <Setter.Value>
<ControlTemplate TargetType="TextBox"> <ControlTemplate TargetType="TextBox">
<Border Background="White" <Border Background="White"
CornerRadius="15" CornerRadius="15"
BorderBrush="Gray" BorderBrush="Black">
BorderThickness="1">
<ScrollViewer Margin="5" x:Name="PART_ContentHost"/> <ScrollViewer Margin="5" x:Name="PART_ContentHost"/>
</Border> </Border>
</ControlTemplate> </ControlTemplate>
</Setter.Value> </Setter.Value>
</Setter> </Setter>
<Style.Triggers> <Style.Triggers>
<!-- Подсветка рамки при фокусе --> <!-- Подсветка рамки при фокусе -->
<Trigger Property="IsFocused" Value="True"> <Trigger Property="IsFocused" Value="True">
<Setter Property="BorderBrush" Value="#004890"/> <Setter Property="BorderBrush" Value="#004890"/>
<Setter Property="BorderThickness" Value="2"/>
</Trigger> </Trigger>
</Style.Triggers> </Style.Triggers>
</Style> </Style>

View File

@ -1,6 +1,7 @@
<Window x:Class="EmployeeManagmentView.PhysicalPerson.AddPhysicalPersonWindow" <Window x:Class="EmployeeManagmentView.PhysicalPerson.AddPhysicalPersonWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:xctk="http://schemas.xceed.com/wpf/xaml/toolkit"
Title="Добавление физического лица" Title="Добавление физического лица"
Height="600" Width="600" Height="600" Width="600"
ResizeMode="NoResize" ResizeMode="NoResize"
@ -37,12 +38,15 @@
<StackPanel Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"> <StackPanel Grid.Row="0" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10">
<Label Content="Имя" Foreground="White" HorizontalAlignment="Center"/> <Label Content="Имя" Foreground="White" HorizontalAlignment="Center"/>
<TextBox x:Name="NameTextBox" <TextBox x:Name="NameTextBox"
Width="250" Height="40" Width="250" Height="40"
Style="{StaticResource RoundedTextBoxStyle}" Style="{StaticResource RoundedTextBoxStyle}"
Margin="0,5" Margin="0,5"
ToolTip="Введите имя" HorizontalAlignment="Center"/> ToolTip="Введите имя" HorizontalAlignment="Center"
PreviewTextInput="NameTextBox_PreviewTextInput"
TextChanged="NameTextBox_TextChanged"/>
</StackPanel> </StackPanel>
<!-- Поле для фамилии --> <!-- Поле для фамилии -->
<StackPanel Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"> <StackPanel Grid.Row="0" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10">
<Label Content="Фамилия" Foreground="White" HorizontalAlignment="Center"/> <Label Content="Фамилия" Foreground="White" HorizontalAlignment="Center"/>
@ -50,6 +54,8 @@
Width="250" Height="40" Width="250" Height="40"
Style="{StaticResource RoundedTextBoxStyle}" Style="{StaticResource RoundedTextBoxStyle}"
Margin="0,5" Margin="0,5"
PreviewTextInput="NameTextBox_PreviewTextInput"
TextChanged="NameTextBox_TextChanged"
ToolTip="Введите фамилию" HorizontalAlignment="Center"/> ToolTip="Введите фамилию" HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
@ -60,6 +66,8 @@
Width="250" Height="40" Width="250" Height="40"
Style="{StaticResource RoundedTextBoxStyle}" Style="{StaticResource RoundedTextBoxStyle}"
Margin="0,5" Margin="0,5"
PreviewTextInput="NameTextBox_PreviewTextInput"
TextChanged="NameTextBox_TextChanged"
ToolTip="Введите отчество" HorizontalAlignment="Center"/> ToolTip="Введите отчество" HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
@ -67,19 +75,21 @@
<StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"> <StackPanel Grid.Row="1" Grid.Column="1" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10">
<Label Content="Дата рождения" Foreground="White" HorizontalAlignment="Center"/> <Label Content="Дата рождения" Foreground="White" HorizontalAlignment="Center"/>
<DatePicker x:Name="BirthdayPicker" <DatePicker x:Name="BirthdayPicker"
Width="250" Height="40" Width="250" Height="40"
Margin="0,5" Margin="0,5"
ToolTip="Выберите дату рождения" HorizontalAlignment="Center"/> ToolTip="Выберите дату рождения" HorizontalAlignment="Center"/>
</StackPanel> </StackPanel>
<!-- Поле для выбора пола --> <!-- Поле для выбора пола -->
<StackPanel Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"> <StackPanel Grid.Row="2" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10">
<Label Content="Пол" Foreground="White" HorizontalAlignment="Center"/> <Label Content="Пол" Foreground="White" HorizontalAlignment="Center"/>
<ComboBox x:Name="GenderComboBox" <ComboBox x:Name="GenderComboBox"
Width="250" Height="40" Width="250" Height="40"
Margin="0,5" Margin="0,5"
ToolTip="Выберите пол" ToolTip="Выберите пол"
Background="White" HorizontalAlignment="Center"> Background="White" HorizontalAlignment="Center">
<ComboBoxItem Content="Мужчина"/> <ComboBoxItem Content="Мужчина"/>
<ComboBoxItem Content="Женщина"/> <ComboBoxItem Content="Женщина"/>
</ComboBox> </ComboBox>
@ -99,12 +109,17 @@
<StackPanel Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10"> <StackPanel Grid.Row="3" Grid.Column="0" HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,10">
<Label Content="Телефон" Foreground="White" HorizontalAlignment="Center"/> <Label Content="Телефон" Foreground="White" HorizontalAlignment="Center"/>
<TextBox x:Name="TelephoneTextBox" <TextBox x:Name="TelephoneTextBox"
Width="250" Height="40" Width="250" Height="40"
Style="{StaticResource RoundedTextBoxStyle}" Style="{StaticResource RoundedTextBoxStyle}"
Margin="0,5" Margin="0,5"
ToolTip="Введите номер телефона" HorizontalAlignment="Center"/> ToolTip="Введите номер телефона"
HorizontalAlignment="Center"
Foreground="Black"
PreviewTextInput="TelephoneTextBox_PreviewTextInput"
TextChanged="TelephoneTextBox_TextChanged"/>
</StackPanel> </StackPanel>
<!-- Кнопка для добавления физического лица --> <!-- Кнопка для добавления физического лица -->
<Button Grid.Row="4" Grid.ColumnSpan="2" Content="Добавить физическое лицо" <Button Grid.Row="4" Grid.ColumnSpan="2" Content="Добавить физическое лицо"
Width="250" Height="40" Width="250" Height="40"

View File

@ -1,6 +1,8 @@
using EmployeeManagmentContracts.BusinessLogicContracts; using EmployeeManagmentContracts.BusinessLogicContracts;
using EmployeeManagmentContracts.ViewModels; using EmployeeManagmentContracts.ViewModels;
using System.Windows; using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
namespace EmployeeManagmentView.PhysicalPerson namespace EmployeeManagmentView.PhysicalPerson
{ {
@ -14,29 +16,152 @@ namespace EmployeeManagmentView.PhysicalPerson
InitializeComponent(); InitializeComponent();
} }
private void SaveButton_Click(object sender, RoutedEventArgs e) private void NameTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{ {
try // Разрешаем только буквы
e.Handled = !char.IsLetter(e.Text, 0);
}
private void NameTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
// Получаем текущий текст
string currentText = textBox.Text;
// Если текст не пустой, преобразуем первую букву в заглавную, а остальные в строчные
if (!string.IsNullOrEmpty(currentText))
{ {
var model = new PhisicalPersonViewModel // Разбиваем строку по пробелам, чтобы обрабатывать каждое слово отдельно
var words = currentText.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < words.Length; i++)
{ {
Name = NameTextBox.Text, // Преобразуем первую букву в заглавную, а остальные в строчные
Surname = SurnameTextBox.Text, words[i] = char.ToUpper(words[i][0]) + words[i].Substring(1).ToLower();
Patronymic = PatronomicTextBox.Text, }
Birthday = BirthdayPicker.SelectedDate.Value.ToUniversalTime(),
Gender = GenderComboBox.Text,
Address = AddressTextBox.Text,
Telephone = TelephoneTextBox.Text
};
_phisicalPersonLogic.Insert(model); // Объединяем слова обратно в строку и обновляем текст
textBox.Text = string.Join(" ", words);
MessageBox.Show("Данные успешно сохранены!"); // Устанавливаем курсор в конец текста
} textBox.SelectionStart = textBox.Text.Length;
catch (Exception ex)
{
MessageBox.Show($"Ошибка: {ex.Message}");
} }
} }
private void TelephoneTextBox_PreviewTextInput(object sender, System.Windows.Input.TextCompositionEventArgs e)
{
e.Handled = !char.IsDigit(e.Text, 0);
}
private void TelephoneTextBox_TextChanged(object sender, TextChangedEventArgs e)
{
var textBox = sender as TextBox;
if (textBox == null) return;
// Удаляем все символы, кроме цифр
string rawInput = new string(textBox.Text.Where(char.IsDigit).ToArray());
// Добавляем "7" по умолчанию
if (!rawInput.StartsWith("7"))
rawInput = "7" + rawInput;
if (rawInput.Length > 11) rawInput = rawInput.Substring(0, 11);
// Форматируем как +7 (XXX) XXX-XX-XX
if (rawInput.Length <= 1)
textBox.Text = "+7 ";
else if (rawInput.Length <= 4)
textBox.Text = $"+7 ({rawInput.Substring(1)}";
else if (rawInput.Length <= 7)
textBox.Text = $"+7 ({rawInput.Substring(1, 3)}) {rawInput.Substring(4)}";
else if (rawInput.Length <= 9)
textBox.Text = $"+7 ({rawInput.Substring(1, 3)}) {rawInput.Substring(4, 3)}-{rawInput.Substring(7)}";
else
textBox.Text = $"+7 ({rawInput.Substring(1, 3)}) {rawInput.Substring(4, 3)}-{rawInput.Substring(7, 2)}-{rawInput.Substring(9)}";
// Устанавливаем курсор в конец
textBox.SelectionStart = textBox.Text.Length;
}
private void SaveButton_Click(object sender, RoutedEventArgs e)
{
bool isValid = true;
// Проверка обязательных полей
if (string.IsNullOrWhiteSpace(NameTextBox.Text))
{
isValid = false;
MessageBox.Show("Поле 'Имя' не заполнено.");
}
if (string.IsNullOrWhiteSpace(SurnameTextBox.Text))
{
isValid = false;
MessageBox.Show("Поле 'Фамилия' не заполнено.");
}
if (string.IsNullOrWhiteSpace(PatronomicTextBox.Text))
{
isValid = false;
MessageBox.Show("Поле 'Отчество' не заполнено.");
}
if (!BirthdayPicker.SelectedDate.HasValue)
{
isValid = false;
MessageBox.Show("Поле 'Дата рождения' не выбрано.");
}
if (GenderComboBox.SelectedItem == null)
{
isValid = false;
MessageBox.Show("Поле 'Пол' не выбрано.");
}
if (string.IsNullOrWhiteSpace(AddressTextBox.Text))
{
isValid = false;
MessageBox.Show("Поле 'Адрес' не заполнено.");
}
if (string.IsNullOrWhiteSpace(TelephoneTextBox.Text))
{
isValid = false;
MessageBox.Show("Поле 'Телефон' не заполнено.");
}
// Если все поля заполнены, продолжаем выполнение
if (isValid)
{
try
{
var model = new PhisicalPersonViewModel
{
Name = NameTextBox.Text,
Surname = SurnameTextBox.Text,
Patronymic = PatronomicTextBox.Text,
Birthday = BirthdayPicker.SelectedDate.Value.ToUniversalTime(),
Gender = GenderComboBox.Text,
Address = AddressTextBox.Text,
Telephone = TelephoneTextBox.Text
};
_phisicalPersonLogic.Insert(model);
MessageBox.Show("Данные успешно сохранены!");
}
catch (Exception ex)
{
MessageBox.Show($"Ошибка: {ex.Message}");
}
}
}
} }
} }