ScientificReport
DepartmentService.cs
Go to the documentation of this file.
1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
11 
12 namespace ScientificReport.BLL.Services
13 {
15  {
16  private readonly DepartmentRepository _departmentRepository;
17  private readonly UserProfileRepository _userProfileRepository;
18 
20  {
21  _departmentRepository = new DepartmentRepository(context);
22  _userProfileRepository = new UserProfileRepository(context);
23  }
24 
25  public virtual int GetCount()
26  {
27  return _departmentRepository.All().Count();
28  }
29 
30  public virtual IEnumerable<Department> GetPage(int page, int count)
31  {
32  return _departmentRepository.All().Skip((page - 1) * count).Take(count).ToList();
33  }
34 
35  public virtual IEnumerable<Department> GetAll()
36  {
37  return _departmentRepository.All();
38  }
39 
40  public virtual IEnumerable<Department> Filter(DepartmentIndexModel model)
41  {
42  IEnumerable<Department> departments;
43  if (model.TitleFilter != null)
44  {
45  departments = GetPage(model.CurrentPage, model.PageSize).Where(d => d.Title.ToLower().Contains(model.TitleFilter.Trim().ToLower()));
46  }
47  else if (model.SortBy != null)
48  {
49  departments = SortDepartmentsBy(model.SortBy.Value, model.CurrentPage, model.PageSize);
50  }
51  else
52  {
53  departments = GetPage(model.CurrentPage, model.PageSize);
54  }
55 
56  return departments;
57  }
58 
59  public virtual IEnumerable<Department> GetAllWhere(Func<Department, bool> predicate)
60  {
61  return GetAll().Where(predicate);
62  }
63 
64  public virtual Department GetById(Guid id)
65  {
66  return _departmentRepository.Get(id);
67  }
68 
69  public virtual Department Get(Func<Department, bool> predicate)
70  {
71  return _departmentRepository.Get(predicate);
72  }
73 
74  public virtual void CreateItem(Department department)
75  {
76  _departmentRepository.Create(department);
77  }
78 
79  public virtual void UpdateItem(Department department)
80  {
81  _departmentRepository.Update(department);
82  }
83 
84  public virtual void DeleteById(Guid id)
85  {
86  _departmentRepository.Delete(id);
87  }
88 
89  public virtual bool Exists(Guid id)
90  {
91  return _departmentRepository.Get(id) != null;
92  }
93 
94  public virtual void AddScientificWork(Guid id, ScientificWork scientificWork)
95  {
96  var department = _departmentRepository.Get(id);
97  if (department.ScientificWorks.Any(sw => sw.Id == scientificWork.Id))
98  {
99  return;
100  }
101 
102  department.ScientificWorks.Add(scientificWork);
103  _departmentRepository.Update(department);
104  }
105 
106  public virtual void RemoveScientificWork(Guid id, ScientificWork scientificWork)
107  {
108  var department = _departmentRepository.Get(id);
109  if (department.ScientificWorks.All(sw => sw.Id != scientificWork.Id))
110  {
111  return;
112  }
113 
114  department.ScientificWorks.Remove(scientificWork);
115  _departmentRepository.Update(department);
116  }
117 
118  public virtual void AddUser(Guid id, UserProfile user)
119  {
120  var department = _departmentRepository.Get(id);
121  if (department.Staff.Any(u => u.Id == user.Id))
122  {
123  return;
124  }
125 
126  department.Staff.Add(user);
127  _departmentRepository.Update(department);
128  }
129 
130  public virtual void RemoveUser(Guid id, UserProfile user)
131  {
132  var department = _departmentRepository.Get(id);
133  if (department.Staff.All(u => u.Id != user.Id))
134  {
135  return;
136  }
137 
138  department.Staff.Remove(user);
139  _departmentRepository.Update(department);
140  }
141 
142  public virtual bool UserIsHired(UserProfile user)
143  {
144  return _departmentRepository.All().Any(d => d.Staff.Contains(user));
145  }
146 
147  public virtual bool UserWorksInDepartment(UserProfile headOfDepartment, Guid userId)
148  {
149  var userDepartment = _departmentRepository.Get(d => d.Head.Id == headOfDepartment.Id);
150  return userDepartment.Staff.Contains(_userProfileRepository.Get(userId));
151  }
152 
153  public virtual IEnumerable<Department> SortDepartmentsBy(Department.SortByOption option, int page, int count)
154  {
155  var departments = GetPage(page, count);
156  switch (option)
157  {
158  case Department.SortByOption.Title:
159  departments = departments.OrderByDescending(d => d.Title);
160  break;
161  case Department.SortByOption.StaffCount:
162  departments = departments.OrderByDescending(d => d.Staff.Count);
163  break;
164  case Department.SortByOption.TotalScientificWorksCount:
165  departments = departments.OrderByDescending(d => d.ScientificWorks.Count);
166  break;
167  default:
168  return new List<Department>();
169  }
170 
171  return departments;
172  }
173  }
174 }
virtual void RemoveUser(Guid id, UserProfile user)
virtual void UpdateItem(Department department)
DepartmentService(ScientificReportDbContext context)
virtual IEnumerable< Department > GetAll()
virtual IEnumerable< Department > Filter(DepartmentIndexModel model)
virtual void CreateItem(Department department)
virtual bool UserWorksInDepartment(UserProfile headOfDepartment, Guid userId)
virtual Department Get(Func< Department, bool > predicate)
virtual IEnumerable< Department > SortDepartmentsBy(Department.SortByOption option, int page, int count)
virtual void RemoveScientificWork(Guid id, ScientificWork scientificWork)
virtual IEnumerable< Department > GetPage(int page, int count)
virtual void AddScientificWork(Guid id, ScientificWork scientificWork)
virtual IEnumerable< Department > GetAllWhere(Func< Department, bool > predicate)
virtual void AddUser(Guid id, UserProfile user)