/
WorkerTime
/
WorkerTimeDiplom
Обзор
Документация
Войти
/
WorkerTime
/
WorkerTimeDiplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
ViewModels/EmployeesViewModel.cs
157 строк
5 KB
nikit
Логирование, автосохранение, восстановление пароля
05 июн 2026, 19:24
05 июн 2026, 19:24
715eb3d
Код
Авторство
О чём код?
using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using System.Windows; using System.Windows.Input; using WorkerTime.Services; using WorkerTime.Views; namespace WorkerTime.ViewModels { public class EmployeesViewModel : BaseViewModel { private readonly EmployeeService _employeeService; public ObservableCollection<Employee> Employees { get; set; } public ObservableCollection<Department> Departments { get; set; } private Department _selectedDepartment; public Department SelectedDepartment { get { return _selectedDepartment; } set { _selectedDepartment = value; OnPropertyChanged(); FilterEmployees(); } } private Employee _selectedEmployee; public Employee SelectedEmployee { get { return _selectedEmployee; } set { _selectedEmployee = value; OnPropertyChanged(); } } public ICommand AddEmployeeCommand { get; set; } public ICommand EditEmployeeCommand { get; set; } public ICommand DeleteCommand { get; set; } public ICommand ManageDepartmentsCommand { get; set; } public EmployeesViewModel() { _employeeService = new EmployeeService(App.DbContext); AddEmployeeCommand = new RelayCommand(_ => AddEmployee()); EditEmployeeCommand = new RelayCommand(_ => EditEmployee()); DeleteCommand = new RelayCommand(_ => DeleteEmployee()); ManageDepartmentsCommand = new RelayCommand(_ => OpenDepartments()); LoadData(); } private void LoadData() { List<Department> deptList = new List<Department>(); foreach (Department d in App.DbContext.Departments.OrderBy(d => d.Name)) { deptList.Add(d); } Departments = new ObservableCollection<Department>(deptList); OnPropertyChanged(nameof(Departments)); FilterEmployees(); } private void FilterEmployees() { List<Employee> allEmployees = _employeeService.GetAll(); //Фильтр если выбрано подразделение if (SelectedDepartment != null) { List<Employee> filtered = new List<Employee>(); foreach (Employee e in allEmployees) { if (e.DepartmentId == SelectedDepartment.Id) { filtered.Add(e); } } allEmployees = filtered; } Employees = new ObservableCollection<Employee>(allEmployees); OnPropertyChanged(nameof(Employees)); } private void AddEmployee() { EmployeeEditWindow window = new EmployeeEditWindow(_employeeService); if (Application.Current.MainWindow != null && Application.Current.MainWindow != window) { window.Owner = Application.Current.MainWindow; } if (window.ShowDialog() == true) { FilterEmployees(); } } private void EditEmployee() { if (SelectedEmployee == null) { MessageBox.Show("Выберите сотрудника.", "Подсказка", MessageBoxButton.OK, MessageBoxImage.Information); return; } EmployeeEditWindow window = new EmployeeEditWindow(_employeeService, SelectedEmployee); if (Application.Current.MainWindow != null && Application.Current.MainWindow != window) { window.Owner = Application.Current.MainWindow; } if (window.ShowDialog() == true) { FilterEmployees(); } } private void DeleteEmployee() { if (SelectedEmployee == null) { MessageBox.Show("Выберите сотрудника.", "Подсказка", MessageBoxButton.OK, MessageBoxImage.Information); return; } string message = "Удалить сотрудника " + SelectedEmployee.LastName + " " + SelectedEmployee.FirstName + "?"; MessageBoxResult result = MessageBox.Show(message, "Подтверждение", MessageBoxButton.YesNo, MessageBoxImage.Warning); if (result == MessageBoxResult.Yes) { _employeeService.Delete(SelectedEmployee.Id); FilterEmployees(); } } private void OpenDepartments() { DepartmentWindow window = new DepartmentWindow(); if (Application.Current.MainWindow != null && Application.Current.MainWindow != window) { window.Owner = Application.Current.MainWindow; } window.ShowDialog(); LoadData(); } } }