예제 #1
0
        public async Task <object> Reject(int id)
        {
            var workItem = await _context.WorkItems.Include(u => u.AssignedUser).FirstOrDefaultAsync(x => x.Id == id);

            if (workItem == null)
            {
                return(NotFound());
            }

            //TODO: Pulling too much data here
            var submission = await _context.Submissions
                             .Include(x => x.FileSpecification.GenerationGroup.Users)
                             .Include(r => r.Reports)
                             .FirstOrDefaultAsync(x => x.CurrentReportId == workItem.ReportId);

            if (!submission.FileSpecification.GenerationGroup.Users.Any())
            {
                return(BadRequest("No group members to assign next task. "));
            }

            var wi = submission.Reject(workItem);

            await _context.SaveChangesAsync();

            wi.Report.CurrentDocumentVersion += 1;

            WorkEmailer.Send(wi, submission);
            var dto = Mapper.Map <WorkItemViewDto>(wi);

            return(Ok(dto));
        }
        public async Task <object> Activate(int id)
        {
            var fileSpecification = await _context.FileSpecifications.FindAsync(id);

            if (fileSpecification == null)
            {
                return(NotFound());
            }


            fileSpecification.IsRetired = false;

            //Create submission record
            var submission = new Submission()
            {
                DueDate         = fileSpecification.DueDate,
                DataYear        = fileSpecification.DataYear,
                IsLEA           = fileSpecification.IsLEA,
                IsSEA           = fileSpecification.IsSEA,
                IsSCH           = fileSpecification.IsSCH,
                SubmissionState = SubmissionState.NotStarted
            };

            fileSpecification.Submissions.Add(submission);

            await _context.SaveChangesAsync();

            var dto = Mapper.Map <FileSpecificationViewDto>(fileSpecification);

            return(Ok(dto));
        }
예제 #3
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));
        }