Example #1
0
        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();
        }
Example #2
0
        //    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());
        }
Example #3
0
        //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());
        }
Example #4
0
        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());
        }