コード例 #1
0
        public async Task <object> ReportError(SubmissionErrorDto model)
        {
            //TODO: Will not work in WebApi. Convert to Webapi method /api/workitem/reporterror

            var id = model.Id;

            if (model.Files.Length == 0)
            {
                ModelState.AddModelError("", "You must include at least 1 file");
            }
            if (!ModelState.IsValid)
            {
                var errors = new List <string>();
                foreach (var state in ModelState)
                {
                    foreach (var error in state.Value.Errors)
                    {
                        errors.Add(error.ErrorMessage);
                    }
                }

                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            var workItem = await _context.WorkItems.Include(x => x.AssignedUser).Include(x => x.Report).FirstOrDefaultAsync(x => x.Id == id);

            if (workItem == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.NotFound));
            }

            var submission = _context.Submissions
                             .Include(f => f.FileSpecification.GenerationGroup.Users)
                             .FirstOrDefault(s => s.Id == workItem.Report.SubmissionId);

            var assignedUser = _membershipService.GetAssignee(submission.FileSpecification.GenerationGroup);

            var wi = submission.CompleteWork(workItem, assignedUser, generateErrorTask: true);

            wi.Description = model.Description;

            foreach (var f in model.Files)
            {
                wi.WorkItemImages.Add(new WorkItemImage()
                {
                    Image = f.ConvertToByte(),
                });
            }

            var notifiers = _membershipService.GetGroupMembers(Constants.SubmissionErrorNotifiers);

            WorkEmailer.Send(wi, submission, model.Files);

            WorkEmailer.SendErrorNotification(wi, submission, model.Files, notifiers);

            await _context.SaveChangesAsync();

            return(new HttpStatusCodeResult(HttpStatusCode.OK));
        }