2 using System.Collections.Generic;
4 using System.Threading.Tasks;
5 using Microsoft.AspNetCore.Authorization;
6 using Microsoft.AspNetCore.Identity;
7 using Microsoft.AspNetCore.Mvc;
21 private readonly UserManager<UserProfile> _userManager;
31 UserManager<UserProfile> userManager
34 _userManager = userManager;
35 _departmentService = departmentService;
36 _userProfileService = userProfileService;
37 _scientificWorkService = scientificWorkService;
44 if (PageHelpers.IsAdmin(User))
46 model.
Departments = _departmentService.Filter(model);
47 model.
Count = _departmentService.GetCount();
51 var department = _departmentService.Get(
52 d => d.Staff.Contains(_userProfileService.Get(User))
55 if (department == null)
60 return RedirectToAction(
"Details",
new {
id = department.Id });
72 var department = _departmentService.GetById(
id.Value);
73 if (department == null)
78 if (!PageHelpers.IsAdmin(User) && !department.Staff.Contains(_userProfileService.Get(User)))
83 return View(department);
89 public async Task<IActionResult>
Create()
91 var allUsers = _userProfileService.GetAll();
92 var allDepartments = _departmentService.GetAll();
94 var usersToCheck = allUsers.Where(user => allDepartments.All(d => d.Head.Id != user.Id && !d.Staff.Contains(user))).ToList();
95 var availableUsers =
new List<UserProfile>();
96 foreach (var user
in usersToCheck)
98 if (await _userProfileService.IsTeacherOnlyAsync(user, _userManager))
100 availableUsers.Add(user);
106 UserSelection = availableUsers
115 if (!ModelState.IsValid)
120 if (_departmentService.Get(d => d.Title == model.
Title) != null)
122 return RedirectToAction(
"Index");
138 Staff =
new List<UserProfile> {head}
140 head.Position =
"HeadOfDepartment";
141 _userProfileService.UpdateItem(head);
154 return RedirectToAction(
"Index");
160 public IActionResult
Edit(Guid?
id)
167 var department = _departmentService.GetById(
id.Value);
168 if (department == null)
170 return RedirectToAction(
"Index");
173 if (!IsValidCurrentUser(department))
178 var departments = _departmentService.GetAllWhere(d => d.Id != department.Id).ToList();
179 var allUsers = _userProfileService.GetAll();
181 var availableUsers = allUsers.Where(user => departments.All(d => !d.Staff.Contains(user)));
183 var availableScientificWorks = _scientificWorkService.GetAllWhere(sw => departments.All(d => !d.ScientificWorks.Contains(sw)));
188 DepartmentId = department.
Id,
189 Title = department.Title,
190 UserSelection = availableUsers,
191 Head = department.Head,
192 SelectedHeadId = department.Head.Id,
193 Staff = department.Staff,
194 AvailableScientificWork = availableScientificWorks,
195 ScientificWorks = department.ScientificWorks,
196 IsEditingByHead = department.Head.Id == _userProfileService.Get(u => u.UserName == User.Identity.Name).Id
205 if (!ModelState.IsValid)
215 var department = _departmentService.GetById(
id.Value);
216 if (department == null)
221 if (!IsValidCurrentUser(department))
226 department.Title = model.
Title;
228 var departments = _departmentService.GetAllWhere(d => !d.Id.Equals(department.Id));
229 if (newHead != null && departments.All(d => !d.Staff.Contains(newHead)))
231 var oldHead = department.Head;
232 oldHead.Position =
"Teacher";
233 _userProfileService.UpdateItem(oldHead);
237 department.Head = newHead;
239 newHead.Position =
"HeadOfDepartment";
240 _userProfileService.UpdateItem(newHead);
243 if (!department.Staff.Contains(newHead))
245 department.Staff.Add(newHead);
246 _departmentService.UpdateItem(department);
250 _departmentService.UpdateItem(department);
252 return RedirectToAction(
"Index");
265 var department = _departmentService.GetById(
id.Value);
266 if (department == null)
271 if (!IsValidCurrentUser(department))
276 var user = _userProfileService.GetById(request.UserId);
279 if (user == null || _departmentService.UserIsHired(user) || isNotAvailable)
284 department.Staff.Add(user);
285 _departmentService.UpdateItem(department);
300 var department = _departmentService.GetById(
id.Value);
301 if (department == null)
306 if (!IsValidCurrentUser(department))
311 var user = _userProfileService.GetById(request.UserId);
312 if (user == null || !department.Staff.Contains(user) || department.Head.Id.Equals(user.Id))
317 department.Staff.Remove(user);
318 _departmentService.UpdateItem(department);
326 public async Task<IActionResult>
Delete(Guid?
id)
328 if (
id == null || !_departmentService.Exists(
id.Value))
333 var departmentToDelete = _departmentService.GetById(
id.Value);
334 if (!IsValidCurrentUser(departmentToDelete))
339 if (departmentToDelete.Staff.Count == 1)
343 _userProfileService.UpdateItem(departmentToDelete.Head);
344 _departmentService.DeleteById(
id.Value);
347 return RedirectToAction(
"Index");
350 private bool IsValidCurrentUser(
Department department)
352 var currentUser = _userProfileService.Get(User);
353 if (!PageHelpers.IsAdmin(User))
355 return currentUser.Id == department.
Head.Id;
const string Administrator
IActionResult Details(Guid?id)
async Task< IActionResult > AddUserToStaff(Guid?id, [FromBody] UpdateUserRequest request)
virtual UserProfile.UserProfile Head
IActionResult Index(DepartmentIndexModel model)
DepartmentController(IDepartmentService departmentService, IUserProfileService userProfileService, IScientificWorkService scientificWorkService, UserManager< UserProfile > userManager)
async Task< IActionResult > Create(DepartmentCreateModel model)
const string HeadOfDepartment
IActionResult RemoveUserFromStaff(Guid?id, [FromBody] UpdateUserRequest request)
async Task< IActionResult > Edit(Guid?id, [Bind("Title,SelectedHeadId")] DepartmentEditModel model)
async Task< IActionResult > Delete(Guid?id)
const string HeadOfDepartmentOrAdmin
IEnumerable< ScientificReport.DAL.Entities.Department > Departments
IActionResult Edit(Guid?id)
async Task< IActionResult > Create()