public async Task <IActionResult> EndPosition(int id) { try { CityAdministration cityAdministration = _repoWrapper.CityAdministration .FindByCondition(ca => ca.ID == id) .Include(ca => ca.AdminType) .Include(ca => ca.User) .First(); var userId = _userManager.GetUserId(User); if (!_userAccessManager.HasAccess(userId, cityAdministration.UserId)) { return(RedirectToAction("HandleError", "Error", new { code = 403 })); } cityAdministration.EndDate = DateTime.Today; _repoWrapper.CityAdministration.Update(cityAdministration); _repoWrapper.Save(); await _userManager.RemoveFromRoleAsync(cityAdministration.User, cityAdministration.AdminType.AdminTypeName); return(Ok("Каденцію діловодства успішно завершено!")); } catch { return(NotFound("Не вдалося завершити каденцію діловодства!")); } }
public async Task <IActionResult> DeletePosition(int id) { try { CityAdministration cityAdministration = _repoWrapper.CityAdministration .FindByCondition(ca => ca.ID == id) .Include(ca => ca.AdminType) .Include(ca => ca.User) .First(); var userId = _userManager.GetUserId(User); if (!_userAccessManager.HasAccess(userId, cityAdministration.UserId)) { return(RedirectToAction("HandleError", "Error", new { code = 403 })); } if (cityAdministration.EndDate == null) { await _userManager.RemoveFromRoleAsync(cityAdministration.User, cityAdministration.AdminType.AdminTypeName); } _repoWrapper.CityAdministration.Delete(cityAdministration); _repoWrapper.Save(); return(Ok("Діловодство успішно видалено!")); } catch { return(NotFound("Не вдалося видалити діловодство!")); } }
/// <inheritdoc /> public async Task <CityAdministrationDTO> AddAdministratorAsync(CityAdministrationDTO adminDTO) { var adminType = await _adminTypeService.GetAdminTypeByNameAsync(adminDTO.AdminType.AdminTypeName); var admin = new CityAdministration() { StartDate = adminDTO.StartDate ?? DateTime.Now, EndDate = adminDTO.EndDate, AdminTypeId = adminType.ID, CityId = adminDTO.CityId, UserId = adminDTO.UserId }; var user = await _userManager.FindByIdAsync(adminDTO.UserId); var role = adminType.AdminTypeName == "Голова Станиці" ? "Голова Станиці" : "Діловод Станиці"; await _userManager.AddToRoleAsync(user, role); _repositoryWrapper.CityAdministration.Attach(admin); await _repositoryWrapper.CityAdministration.CreateAsync(admin); await _repositoryWrapper.SaveAsync(); return(adminDTO); }
/// <inheritdoc /> public async Task <CityAdministrationDTO> AddAdministratorAsync(CityAdministrationDTO adminDTO) { var adminType = await _adminTypeService.GetAdminTypeByNameAsync(adminDTO.AdminType.AdminTypeName); adminDTO.Status = DateTime.Now < adminDTO.EndDate || adminDTO.EndDate == null; var admin = new CityAdministration() { StartDate = adminDTO.StartDate ?? DateTime.Now, EndDate = adminDTO.EndDate, AdminTypeId = adminType.ID, CityId = adminDTO.CityId, UserId = adminDTO.UserId, Status = adminDTO.Status }; var user = await _userManager.FindByIdAsync(adminDTO.UserId); string role; switch (adminType.AdminTypeName) { case Roles.CityHead: role = Roles.CityHead; break; case Roles.CityHeadDeputy: role = Roles.CityHeadDeputy; break; default: role = Roles.CitySecretary; break; } await _userManager.AddToRoleAsync(user, role); await CheckCityHasAdmin(adminDTO.CityId, adminType.AdminTypeName); await _repositoryWrapper.CityAdministration.CreateAsync(admin); await _repositoryWrapper.SaveAsync(); adminDTO.ID = admin.ID; return(adminDTO); }
public async Task<IActionResult> ConfirmAnnualReport(int id) { try { var annualReport = _repoWrapper.AnnualReports .FindByCondition(ar => ar.ID == id && ar.Status == AnnualReportStatus.Unconfirmed) .Include(ar => ar.City) .Include(ar => ar.CityManagement) .ThenInclude(cm => cm.CityAdminNew) .First(); var userId = _userManager.GetUserId(User); if (!_cityAccessManager.HasAccess(userId, annualReport.CityId)) { return RedirectToAction("HandleError", "Error", new { code = 403 }); } var annualReportOld = _repoWrapper.AnnualReports .FindByCondition(ar => ar.CityId == annualReport.CityId && ar.Status == AnnualReportStatus.Confirmed) .Include(ar => ar.City) .Include(ar => ar.CityManagement) .ThenInclude(cm => cm.CityAdminNew) .FirstOrDefault(); // update annualReport status if (annualReportOld != null) { annualReportOld.Status = AnnualReportStatus.Saved; _repoWrapper.AnnualReports.Update(annualReportOld); } annualReport.Status = AnnualReportStatus.Confirmed; _repoWrapper.AnnualReports.Update(annualReport); // update oldCityAdmin EndDate var adminType = _repoWrapper.AdminType .FindByCondition(at => at.AdminTypeName == "Голова Станиці") .First(); CityAdministration cityAdminOld = _repoWrapper.CityAdministration .FindByCondition(ca => ca.CityId == annualReport.CityId && ca.AdminTypeId == adminType.ID) .Include(ca => ca.User) .LastOrDefault(); annualReport.CityManagement.CityAdminOldId = cityAdminOld?.ID; if (cityAdminOld != null && annualReport.CityManagement.CityAdminNew != null && annualReport.CityManagement.UserId != cityAdminOld.UserId && cityAdminOld.EndDate == null) { cityAdminOld.EndDate = DateTime.Now; _repoWrapper.CityAdministration.Update(cityAdminOld); await _userManager.RemoveFromRoleAsync(cityAdminOld.User, adminType.AdminTypeName); } // create newCityAdmin if ((cityAdminOld == null || cityAdminOld?.EndDate != null) && annualReport.CityManagement.CityAdminNew != null) { CityAdministration cityAdminNew = new CityAdministration { UserId = annualReport.CityManagement.UserId, CityId = annualReport.CityId, AdminTypeId = adminType.ID, StartDate = DateTime.Now }; _repoWrapper.CityAdministration.Create(cityAdminNew); await _userManager.AddToRoleAsync(annualReport.CityManagement.CityAdminNew, adminType.AdminTypeName); } // update oldCityLegalStatus EndDate CityLegalStatus cityLegalStatusOld = _repoWrapper.CityLegalStatuses .FindByCondition(cls => cls.CityId == annualReport.CityId) .LastOrDefault(); annualReport.CityManagement.CityLegalStatusOldId = cityLegalStatusOld?.Id; if (cityLegalStatusOld != null && annualReport.CityManagement.CityLegalStatusNew != cityLegalStatusOld?.LegalStatusType && cityLegalStatusOld?.DateFinish == null) { cityLegalStatusOld.DateFinish = DateTime.Now; _repoWrapper.CityLegalStatuses.Update(cityLegalStatusOld); } // create newCityLegalStatus if (cityLegalStatusOld == null || cityLegalStatusOld.DateFinish != null) { CityLegalStatus cityLegalStatusNew = new CityLegalStatus { CityId = annualReport.CityId, LegalStatusType = annualReport.CityManagement.CityLegalStatusNew, DateStart = DateTime.Now }; _repoWrapper.CityLegalStatuses.Create(cityLegalStatusNew); } _repoWrapper.Save(); return Ok($"Звіт станиці {annualReport.City.Name} за {annualReport.Date.Year} рік підтверджено!"); } catch (Exception e) { _logger.LogError($"Exception: {e.Message}"); return NotFound("Не вдалося підтвердити річний звіт!"); } }