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