public void PrepareForAnalysis() { ClearInMemoryCachedInfo(); _hub.StatusUpdate("Starting Analysis from computer " + UserSession.CurrentComputerCode); var electionGuid = TargetElection.ElectionGuid; //if (!IsFaked) //{ var resultSummaryCacher = new ResultSummaryCacher(SharedDbContext); var summaries = resultSummaryCacher.AllForThisElection; resultSummaryCacher.RemoveItemsAndSaveCache(summaries.Where(rs => rs.ResultType != ResultType.Manual)); SharedDbContext.ResultSummary.RemoveRange( SharedDbContext.ResultSummary.Where(r => r.ElectionGuid == electionGuid && r.ResultType != ResultType.Manual) ); RefreshBallotStatuses(); // attach results, but don't save yet Results.ForEach(delegate(Result result) { Savers.ResultSaver(DbAction.Attach, result); InitializeSomeProperties(result); }); PrepareResultSummaries(); FillResultSummaryCalc(); }
// public IEnumerable<Election> VisibleElections() // { // // this is first hit on the database on the home page... need special logging // try // { // var electionsWithCode = // Db.Election.Where(e => e.ElectionPasscode != null && e.ElectionPasscode != "").ToList(); // return // electionsWithCode.Where( // e => e.ListForPublic.AsBoolean() && DateTime.Now - e.ListedForPublicAsOf <= 5.minutes()); // } // catch (Exception e) // { // var logger = LogManager.GetCurrentClassLogger(); // logger.ErrorException("Reading VisibleElections", e); // // return new List<Election>(); // } // } public JsonResult SetTallyStatusJson(string status) { var Db = GetNewDbContext(); var summary = new ResultSummaryCacher(Db).AllForThisElection.SingleOrDefault(rs => rs.ResultType == ResultType.Final); var readyForReports = summary != null && summary.UseOnReports.AsBoolean(); if (status == ElectionTallyStatusEnum.Finalized && !readyForReports) { return(new { Message = "Cannot set to \"Finalized\" until Analysis is completed successfully." }.AsJsonResult()); } SetTallyStatus(status); new LogHelper().Add("Status changed to " + status, true); return(new { // QuickLinks = new MenuHelper(controller.Url).QuickLinks(), StateName = UserSession.CurrentElectionStatus }.AsJsonResult()); }
//public bool HasTies() //{ // if (_analyzer.IsResultAvailable) // { // return _analyzer.ResultTies.Count > 0; // } // return false; //} public JsonResult GetReportData(string code) { var status = "ok"; var electionStatus = CurrentElection.TallyStatus; var readyForReports = true; var html = ""; switch (code) { case "SimpleResults": var summary = new ResultSummaryCacher(Db).AllForThisElection.SingleOrDefault(rs => rs.ResultType == ResultType.Final); readyForReports = summary != null && summary.UseOnReports.AsBoolean() && electionStatus == ElectionTallyStatusEnum.Finalized; if (summary == null) { status = "Results not available. Please view 'Analyze' page first."; electionStatus = CurrentElection.TallyStatus; } else { html = MvcViewRenderer.RenderRazorViewToString("~/Reports/Main.cshtml", summary); } break; case "VotesByNum": case "VotesByName": html = MvcViewRenderer.RenderRazorViewToString("~/Reports/{0}.cshtml".FilledWith(code)); if (html.HasNoContent()) { return(new { Status = "Unknown report" }.AsJsonResult()); } summary = new ResultSummaryCacher(Db).AllForThisElection.SingleOrDefault(rs => rs.ResultType == ResultType.Final); readyForReports = summary != null && summary.UseOnReports.AsBoolean() && electionStatus == ElectionTallyStatusEnum.Finalized; break; case "": // not sure how this happens return(new { Status = "Unknown report" }.AsJsonResult()); default: html = MvcViewRenderer.RenderRazorViewToString("~/Reports/{0}.cshtml".FilledWith(code)); if (html.HasNoContent()) { return(new { Status = "Unknown report" }.AsJsonResult()); } break; } return(new { Html = html, Status = status, Ready = readyForReports, ElectionStatus = electionStatus, ElectionStatusText = ElectionTallyStatusEnum.TextFor(electionStatus) }.AsJsonResult()); }
public JsonResult SaveManualResults(ResultSummary manualResultsFromBrowser) { ResultSummary resultSummary = null; var resultSummaryCacher = new ResultSummaryCacher(Db); if (manualResultsFromBrowser.C_RowId != 0) { resultSummary = resultSummaryCacher.AllForThisElection.FirstOrDefault(rs => rs.C_RowId == manualResultsFromBrowser.C_RowId && rs.ResultType == ResultType.Manual); } if (resultSummary == null) { resultSummary = new ResultSummary { ElectionGuid = UserSession.CurrentElectionGuid, ResultType = ResultType.Manual }; Db.ResultSummary.Add(resultSummary); Db.SaveChanges(); resultSummaryCacher.UpdateItemAndSaveCache(resultSummary); } else { Db.ResultSummary.Attach(resultSummary); } var editableFields = new { resultSummary.BallotsNeedingReview, resultSummary.BallotsReceived, resultSummary.CalledInBallots, // resultSummary.OnlineBallots, // resultSummary.ImportedBallots, resultSummary.DroppedOffBallots, resultSummary.InPersonBallots, resultSummary.MailedInBallots, resultSummary.Custom1Ballots, resultSummary.Custom2Ballots, resultSummary.Custom3Ballots, resultSummary.NumEligibleToVote, resultSummary.SpoiledManualBallots, }.GetAllPropertyInfos().Select(pi => pi.Name).ToArray(); var changed = manualResultsFromBrowser.CopyPropertyValuesTo(resultSummary, editableFields); if (!changed) { return(new { Message = "No changes" }.AsJsonResult()); } Db.SaveChanges(); _analyzer.AnalyzeHub.StatusUpdate("Starting Analysis from " + UserSession.CurrentComputerCode); resultSummaryCacher.UpdateItemAndSaveCache(resultSummary); _analyzer.AnalyzeEverything(); //.PrepareResultSummaries(); //_analyzer.FinalizeSummaries(); var resultSummaries = _analyzer.ResultSummaries; return(new { Saved = true, ResultsManual = (resultSummaries.FirstOrDefault(rs => rs.ResultType == ResultType.Manual) ?? new ResultSummary()) .GetPropertiesExcept(null, new[] { "ElectionGuid" }), ResultsFinal = resultSummaries.First(rs => rs.ResultType == ResultType.Final) .GetPropertiesExcept(null, new[] { "ElectionGuid" }), }.AsJsonResult()); }