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 _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()) { 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(); _equipmentVisualFactory = _serviceProvider.GetService(); using (var repo = _serviceProvider.GetService()) { _equipment = _equipmentVisualFactory.CreateFromEquipment(equipment); _equipment.CurrentEmployee = repo.GetById(equipment.CurrentEmployeeId); } using (var repo = _serviceProvider.GetService()) { Employees = new ObservableCollection(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 ? "Изменить" : "Добавить"; } }