Inventory/AvaloniaApplication14_Inven.../ViewModels/EquipmentEditingWindowViewM...

100 lines
3.4 KiB
C#

using System;
using System.Collections.ObjectModel;
using System.Linq;
using AvaloniaApplication14_Inventory_300326.Models.DataBase;
using AvaloniaApplication14_Inventory_300326.Models.Factoryes;
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 EquipmentEditingWindowViewModel : ViewModelBase
{
private EquipmentEditingWindow _currentWindow;
private bool _isEditing;
private EquipmentVisual _equipment;
private IServiceProvider _serviceProvider;
private EquipmentFactory _equipmentFactory;
private EquipmentVisualFactory _equipmentVisualFactory;
[ObservableProperty] private string _name;
[ObservableProperty] private string _invNumber;
[ObservableProperty] private DateTimeOffset? _date;
[ObservableProperty] private decimal _cost;
[ObservableProperty] private bool _isWrittenOff;
[ObservableProperty] private Employee _currentEmployee;
[ObservableProperty] private ObservableCollection<Employee> _employees;
[RelayCommand]
private void Confrm()
{
_equipment.InvNumber = InvNumber;
_equipment.Date = Date;
_equipment.Cost = Cost;
_equipment.IsWrittenOff = IsWrittenOff;
_equipment.CurrentEmployee = CurrentEmployee;
_equipment.Name = Name;
using (var repo = _serviceProvider.GetService<EquipmentRepository>())
{
if (_isEditing)
{
repo.Update(_equipmentFactory.CreateFromVisual(_equipment));
}
else
{
repo.Add(_equipmentFactory.CreateFromVisual(_equipment));
}
}
_currentWindow.Close();
}
[RelayCommand]
private void Close()
{
_currentWindow.Close();
}
public EquipmentEditingWindowViewModel(IServiceProvider serviceProvider, Equipment equipment)
{
_serviceProvider = serviceProvider;
_isEditing = !equipment.IsNew();
_equipmentFactory = _serviceProvider.GetService<EquipmentFactory>();
_equipmentVisualFactory = _serviceProvider.GetService<EquipmentVisualFactory>();
using (var repo = _serviceProvider.GetService<EmployeeRepository>())
{
_equipment = _equipmentVisualFactory.CreateFromEquipment(equipment);
_equipment.CurrentEmployee = repo.GetById(equipment.CurrentEmployeeId);
}
using (var repo = _serviceProvider.GetService<EmployeeRepository>())
{
Employees = new ObservableCollection<Employee>(repo.GetAll());
}
if (_isEditing)
{
Name = _equipment.Name;
InvNumber = _equipment.InvNumber;
Date = _equipment.Date;
Cost = _equipment.Cost;
IsWrittenOff = _equipment.IsWrittenOff;
CurrentEmployee = Employees.FirstOrDefault(o => o.Id == equipment.CurrentEmployeeId);
}
else
{
CurrentEmployee = Employees[0];
Date = DateTimeOffset.Now;
}
}
public void SetWindow(EquipmentEditingWindow window)
{
_currentWindow = window;
_currentWindow.OkButton.Content = _isEditing ? "Изменить" : "Добавить";
}
}