public ActionResult Assessment(FormCollection form) { string result = "success"; string targetUrl = "/"; int targetPage = 1; long responseId = 0; if (Session["ResponseId"] != null) long.TryParse(Session["ResponseId"].ToString(), out responseId); if (Session["TargetPage"] != null) int.TryParse(Session["TargetPage"].ToString(), out targetPage); try { if (responseId > 0) { Logger.Log(LogLevel.Trace, "Assessment request: ResponseId = " + responseId); var model = ProcessFormData(form); model.ResponseId = responseId; _db.SaveAnswers(model); if (model.CurrentPageNo > targetPage) { targetPage = model.CurrentPageNo; Session["TargetPage"] = targetPage.ToString(); } if (model.CurrentPageNo == 1) { targetUrl = Url.Action("OrgProfile", "Home"); if (targetPage < 2) targetPage = 2; Session["TargetPage"] = targetPage.ToString(); Logger.Log(LogLevel.Trace, "Assessment processed [page = " + model.CurrentPageNo + "]: ResponseId = " + responseId); } else if (model.CurrentPageNo == 2) { model = _db.GetAnswers(QuestionCache.AssessmentName, _culture, responseId); var scoringModel = new ScoringModel(); var report = scoringModel.GetReport(model); _db.SaveScore(report); targetUrl = Url.Action("Result", "Home"); if (targetPage < 3) targetPage = 3; Session["TargetPage"] = targetPage.ToString(); TempData["Report"] = report; Logger.Log(LogLevel.Trace, "Assessment processed [page = " + model.CurrentPageNo + "]: ResponseId = " + responseId); } else if (model.CurrentPageNo == 3) { _db.FinalizeResponse(model); targetUrl = "#"; // not used on result page Logger.Log(LogLevel.Info, "Assessment finished: ResponseId = " + responseId); if (EmailDocument(responseId)) { _db.FinalizeReport(model); Session["ResponseId"] = 0; Session["TargetPage"] = null; Session.Abandon(); } else { result = "error"; _db.SetErrorFlag(responseId); } } // reset stale values in the UI QuestionCache.GetQuestions(model.CurrentPageNo).ForEach(x => ModelState.Remove(x.Name)); } else { result = "error"; _db.SetErrorFlag(responseId); Logger.Log(LogLevel.Error, "Request not processed: ResponseId = " + responseId); } } catch (Exception e) { result = "error"; Logger.Log(LogLevel.Error, "Assessment processing error [ResponseId = " + responseId + "]: " + e.Message); } return Json(new { result = result, targetUrl = targetUrl, targetPage = targetPage.ToString() }, JsonRequestBehavior.AllowGet); }
public ActionResult Result() { var model = TempData["Report"] as LeadCapture.Models.Scoring; if (model == null) { if (Session["ResponseId"] == null) return View(); long responseId = 0; long.TryParse(Session["ResponseId"].ToString(), out responseId); var answers = _db.GetAnswers(QuestionCache.AssessmentName, _culture, responseId); var scoringModel = new ScoringModel(); model = scoringModel.GetReport(answers); } return View(model); }
private bool EmailDocument(long responseId) { var model = _db.GetAnswers(QuestionCache.AssessmentName, _culture, responseId); var scoringModel = new ScoringModel(); var report = scoringModel.GetReport(model); var smtpMail = new SmtpMail(); return smtpMail.SendReport(report); }
private void DownloadPdfReport(int responseId) { try { var db = new AssessmentRepo(); var model = db.GetAnswers(QuestionCache.AssessmentName, _cultureName, responseId); var scoringModel = new ScoringModel(); var report = scoringModel.GetReport(model); using (var ms = new System.IO.MemoryStream()) { // create report var pdf = new PdfReport(); pdf.GenerateReport(report, ms, null); // Send response to browser Response.Clear(); Response.Cache.SetCacheability(HttpCacheability.NoCache); //HttpContext.Current.Response.ContentType = "pdf/application"; // Causes the pdf file to download rather than display in browser Response.ContentType = "application/pdf"; // Causes the pdf file to display directly in browser Response.AddHeader("content-disposition", "inline;filename=\"" + SmtpMail.ReportFilename + "\""); // Filename is required if downloading rather than displaying pdf Response.OutputStream.Write(ms.GetBuffer(), 0, ms.GetBuffer().Length); Response.Flush(); Response.End(); Response.Close(); } } catch (Exception e) { Logger.Log(LogLevel.Error, e.Message); } }