public DataMiningReport(string assessmentName, string viewName, string baseUrl)
        {
            csv = new CsvExport();
            _db = new ReportsRepo();
            sm = new ScoringModel();

            _assessmentName = assessmentName;
            _viewName = viewName;
            _baseUrl = baseUrl ?? string.Empty;

            csv.AddRow();
            csv["1"] = col1;
            csv["2"] = col2;
            csv["3"] = col3;
            csv["4"] = col4;
            csv["5"] = col5;
            csv["6"] = col6;
            csv["7"] = col7;
            csv["8"] = col8;
            csv["9"] = col9;
            csv["10"] = col10;
            csv["11"] = col11;
            csv["12"] = col12;
            csv["13"] = col13;
            csv["14"] = col14;
            csv["15"] = col15;
            csv["16"] = col16;
            csv["17"] = col17;
        }
        public CsvReport(string assessmentName, string viewName)
        {
            csv = new CsvExport();
            _db = new ReportsRepo();
            sm = new ScoringModel();

            _assessmentName = assessmentName;
            _viewName = viewName;

            csv.AddRow();
            csv["1"] = col1;
            csv["2"] = col2;
            csv["3"] = col3;
            csv["4"] = col4;
            csv["5"] = col5;
            csv["6"] = col6;
            csv["7"] = col7;
            csv["8"] = col8;
            csv["9"] = col9;
            csv["10"] = col10;
            csv["11"] = col11;
        }
        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);
        }
        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);
        }
        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 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);
            }
        }