public async Task <IActionResult> CreateManagerReport(short id) { var report = _reportData.Get(id); var manager = await _userManager.FindByNameAsync(User.Identity.Name); var managerReport = _managerReportData.GetManagerReportByUserReportId(id, manager.Id); if (report == null) { return(NotFound()); } if (!report.ProjectManagers.Any(pm => pm.ManagerId == manager.Id)) //If current user is not manager of loaded report { return(RedirectToAction("AccessDenied", "Home")); } var reportModel = new ReportViewModel { Id = report.Id, Title = report.Title, Author = report.Author, ProjectName = report.Project.Title, ActvivityName = report.Activity.Name, SubActivityName = report.SubActivity != null ? report.SubActivity.Name : null, Text = report.Text, TaskStartTime = report.TaskStartTime, TaskEndTime = report.TaskEndTime, Date = report.Date.ToHijri(), AttachmentName = report.AttachmentName != null ? report.AttachmentName : null }; var managerReportViewModel = new ManagerReportViewModel { UserReport = reportModel }; if (managerReport != null) { managerReportViewModel.Id = managerReport.Id; managerReportViewModel.Text = managerReport.Text; managerReportViewModel.IsAcceptable = managerReport.IsUserReportAcceptable; managerReportViewModel.IsViewableByUser = managerReport.IsCommentViewableByUser; } return(View(managerReportViewModel)); }
public async Task <IActionResult> CreateManagerReport(ManagerReportViewModel model) { var manager = await _userManager.FindByNameAsync(User.Identity.Name); var managerReport = _managerReportData.GetManagerReportByUserReportId(model.UserReport.Id, manager.Id); ManagerReport savedManagerReport; if (ModelState.IsValid) { if (managerReport == null) //means that user creating a new manager report { managerReport = new ManagerReport { Date = DateTime.Now, Author = manager, Text = model.Text, IsUserReportAcceptable = model.IsAcceptable, IsCommentViewableByUser = model.IsViewableByUser, ReportId = model.UserReport.Id }; savedManagerReport = _managerReportData.Add(managerReport); if (savedManagerReport == null) { ModelState.AddModelError("", "مشکل در ثبت گزارش!"); return(View(model)); } //Change the report status to viewed var result = _reportData.SetViewed(model.UserReport.Id, manager.Id); if (!result) { ModelState.AddModelError("", "مشکل در ثبت گزارش!"); return(View(model)); } } else //means user updating manager report { savedManagerReport = managerReport; managerReport.Text = model.Text; managerReport.IsUserReportAcceptable = model.IsAcceptable; managerReport.IsCommentViewableByUser = model.IsViewableByUser; var result = _managerReportData.Update(managerReport); if (result == false) { ModelState.AddModelError("", "مشکل در بروزرسانی!"); return(View(model)); } //Change the report status to viewed var setViewedResult = _reportData.SetViewed(model.UserReport.Id, manager.Id); if (!setViewedResult) { ModelState.AddModelError("", "مشکل در ثبت گزارش!"); return(View(model)); } } //Notify user if manager report is viewable by user if (model.IsViewableByUser) { var message = new Message { Title = "گزارش مدیر :: " + model.UserReport.Title, Text = model.Text, Sender = manager, Type = MessageType.Manager_Review_Notification, Time = DateTime.Now, }; _messageService.AddManagerReviewMessage(message, savedManagerReport.Id, model.UserReport.Author.Id); } else { _messageService.DeleteManagerReviewMessage(savedManagerReport.Id); } return(RedirectToAction("ManageReports", "Manager")); } return(View(model)); }