Inventory/AvaloniaApplication14_Inven.../ViewModels/EmployeeEditingWindowViewMo...

66 lines
2.0 KiB
C#

using System;
using System.Collections.ObjectModel;
using AvaloniaApplication14_Inventory_300326.Models.DataBase;
using AvaloniaApplication14_Inventory_300326.Models.Models;
using AvaloniaApplication14_Inventory_300326.Views;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using Microsoft.Extensions.DependencyInjection;
namespace AvaloniaApplication14_Inventory_300326.ViewModels;
public partial class EmployeeEditingWindowViewModel : ViewModelBase
{
private EmployeeEditingWindow _currentWindow;
private IServiceProvider _serviceProvider;
private bool _isEditing;
private Employee _employee;
[ObservableProperty] private string _name;
[ObservableProperty] private ObservableCollection<Position> _positions;
[ObservableProperty] private Position _selectedPosition;
[RelayCommand]
private void Cancel()
{
_currentWindow.Close();
}
[RelayCommand]
private void Confirm()
{
_employee.FullName = Name;
_employee.PositionId = SelectedPosition.Id;
using (var repo = _serviceProvider.GetService<EmployeeRepository>())
{
if (_isEditing)
{
repo.Update(_employee);
}
else
{
repo.Add(_employee);
}
}
_currentWindow.Close();
}
public EmployeeEditingWindowViewModel(IServiceProvider serviceProvider, Employee employee)
{
_isEditing=!employee.IsNew();
_serviceProvider = serviceProvider;
_employee = employee;
using (var repo = _serviceProvider.GetService<PositionRepository>())
{
Positions = new ObservableCollection<Position>(repo.GetAll());
}
Name = employee.FullName;
}
public void SetScreen(EmployeeEditingWindow window)
{
_currentWindow = window;
_currentWindow.ConfirmButton.Content = _isEditing ? "Изменить" : "Добавить";
}
}