public ActionResult Create(RequestContent reqContent) { var rmc = new RequestManagementController(); bool valid = ModelState.IsValid; if (reqContent.parentRequestID != null && !rmc.requestExists((long) reqContent.parentRequestID)) { ModelState.AddModelError("NonexistentParentRequest", "Parent Request ID must correspond to an existing request."); valid = false; } if (Request.Form["mark_as_complete"] != null) { foreach ( QuestionResponseContent qrContent in reqContent.questionResponseList) { if (String.IsNullOrEmpty(qrContent.question) || removeNewLinesAndTabs(qrContent.question).Equals("<br />") || String.IsNullOrEmpty(qrContent.response) || removeNewLinesAndTabs(qrContent.response).Equals("<br />") || qrContent.questionTypeID == null || qrContent.tumourGroupID == null || qrContent.timeSpent == null || qrContent.severity == null || qrContent.consequence == null || qrContent.keywords.Count < 1) { ModelState.AddModelError("IncompleteQuestion", "Questions must be completed before marking request as complete."); valid = false; break; } if (qrContent.keywords.Any(keyword => keyword.Length > 128)) { ModelState.AddModelError("KeywordTooLong", "Keywords must be less than 128 characters."); valid = false; } if (qrContent.referenceList.Any(refContent => String.IsNullOrEmpty(refContent.referenceString))) { ModelState.AddModelError("IncompleteReference", "References must be completed before marking request as complete."); valid = false; } } reqContent.timeClosed = DateTime.Now; reqContent.requestStatus = Constants.RequestStatus.Completed; } // Encode HTML in question responses // Replace null references with empty string foreach ( QuestionResponseContent qrContent in reqContent.questionResponseList) { if (!String.IsNullOrEmpty(qrContent.question)) { qrContent.question = HttpUtility.HtmlEncode( removeNewLinesAndTabs(qrContent.question)) .Replace("'", "'"); } if (!String.IsNullOrEmpty(qrContent.response)) { qrContent.response = HttpUtility.HtmlEncode( removeNewLinesAndTabs(qrContent.response)) .Replace("'", "'"); } if (!String.IsNullOrEmpty(qrContent.specialNotes)) { qrContent.specialNotes = HttpUtility.HtmlEncode( removeNewLinesAndTabs(qrContent.specialNotes)) .Replace("'", "'"); } foreach ( ReferenceContent refContent in qrContent.referenceList) { refContent.referenceString = refContent.referenceString == null ? "" : refContent.referenceString.Replace("\\", "\\\\"); } } if (!valid) { var dc = new DropdownManagementController(); ViewBag.RequestorTypes = new SelectList( dc.getEntries(Constants.DropdownTable.RequestorType), "id", "text"); ViewBag.Regions = new SelectList( dc.getEntries(Constants.DropdownTable.Region), "id", "text"); ViewBag.GenderOptions = new SelectList(Constants.genderOptions); return View(reqContent); } long reqId = rmc.create(reqContent); var uc = new UserManagementController(); UserProfile up = uc.getUserProfile(User.Identity.Name); var almc = new AuditLogManagementController(); almc.addEntry(reqId, up.UserId, Constants.AuditType.RequestCreation, reqContent.timeOpened); if (reqContent.requestStatus == Constants.RequestStatus.Completed && reqContent.timeClosed != null) { almc.addEntry(reqId, up.UserId, Constants.AuditType.RequestCompletion, (DateTime) reqContent.timeClosed); } if (Roles.IsUserInRole(Constants.Roles.VIEWER)) { return RedirectToAction("Details", "Request", new { id = reqId }); } return RedirectToAction("Index", "Home", new { status = Constants.URLStatus.SuccessfulCreate }); }