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)); }