コード例 #1
0
    public static ReportData<Row> build(Guid orgId, Guid projId, Guid? locId, string field, DateTime? startDate, DateTime? endDate) {
      var repo = new ReportsRepository();
      var riskMap = repo.projectRiskMap(orgId, projId);
      var projectQs = repo.projectQuestions(projId);

      var classifier = howToClassify(projectQs, field);
      var rows = new List<Row>();
      var clientCount = 0;

      const int pageSize = 100;
      int page = 0;
      while (true) {
        var clients = repo.findClients(projId, locId).
                          OrderBy(c => c.Id).
                          Skip(page*pageSize).
                          Take(pageSize).
                          Include(c => c.Demographics).
                          Include(c => c.Address).
                          Include(c => c.ProjectAnswers).
                          ToList();

        if (clients.Count == 0)
          break;

        clients = clients.Where(c => Reports.activeBetweenDates(c, startDate, endDate)).ToList();

        foreach (var clientData in clients) {
          var client = new Client(clientData, riskMap, projectQs, null);

          ++clientCount;
          var classifications = classifier.classify(client, clientData.Notes);
          foreach (var classification in classifications) {
            var row = rows.SingleOrDefault(r => r.Label.ToLower() == classification.ToLower());
            if (row == null) {
              row = new Row(classification);
              rows.Add(row);
              rows.Sort((l, r) => l.Label.CompareTo(r.Label));
            } // if ...

            row.bump();
            foreach (var theme in client.CurrentRiskAssessment.ThemeAssessments) {
              var high = theme.HighScore;
              var current = theme.Score;

              bool improvedScore = high != null && !high.Equals(current);
              bool reducedRiskCount = theme.RiskCount < theme.HighRiskCount;

              row.bump(theme.Title, improvedScore, reducedRiskCount);
            } // foreach
          } // foreach
        } // foreach 
        ++page;
      } // page

      ReportData<Row> reportData = new ReportData<Row>(rows);
      reportData.Put("field", classifier.Label);
      reportData.Put("project", repo.projectName(projId));
      reportData.Put("location", repo.locationName(locId));
      reportData.Put("clientCount", clientCount.ToString());
      reportData.Put("csvurl", Reports.csvUrl("adhoc", orgId, projId, locId, startDate, endDate) + "&field=" + field);
      return reportData;
    } // build
コード例 #2
0
    } // howToClassify

    public static List<Classifier> Classifiers(Guid orgId, Guid projId) {
      var repo = new ReportsRepository();
      var projectQs = repo.projectQuestions(projId);

      return Classifiers(projectQs);
    } // Classifiers
コード例 #3
0
        public static void buildCSV(StreamWriter csv, Guid orgId, Guid projId, Guid?locId, DateTime?startDate, DateTime?endDate)
        {
            var repo      = new ReportsRepository();
            var riskMap   = repo.projectRiskMap(orgId, projId);
            var projectQs = repo.projectQuestions(projId);

            csv.WriteLine("Project," + repo.projectName(projId));
            csv.WriteLine("Location," + repo.locationName(locId));
            csv.WriteLine("Start Date," + Reports.formatDate(startDate));
            csv.WriteLine("End Date," + Reports.formatDate(endDate));


            csv.Write("Name,");
            csv.Write("Ref Id,");
            csv.Write("Post Code,");
            csv.Write("In area of deprivation,");
            csv.Write("Referred by,");
            csv.Write("Project,");
            csv.Write("Location,");
            csv.Write("Date of birth,");
            csv.Write("Disability,");
            csv.Write("Disability Type,");
            csv.Write("Employment Status,");
            csv.Write("Ethnic Origin,");
            csv.Write("Gender,");
            csv.Write("Household Income,");
            csv.Write("Household Type,");
            csv.Write("Housing Type,");
            csv.Write("Marital Status,");
            csv.Write("Registration Date,");
            foreach (var q in projectQs)
            {
                csv.Write(q.Question + ",");
            }
            foreach (var t in riskMap.AllThemes())
            {
                csv.Write("Initial " + t + " score,");
            }
            foreach (var t in riskMap.AllThemes())
            {
                csv.Write("Highest " + t + " score,");
            }
            foreach (var t in riskMap.AllThemes())
            {
                csv.Write("Current " + t + " score,");
            }
            csv.Write("Discharge Date");
            csv.WriteLine();

            const int pageSize = 200;
            int       page     = 0;

            while (true)
            {
                var clientDatas = repo.findClients(projId, locId).
                                  OrderBy(c => c.Id).
                                  Skip(page * pageSize).
                                  Take(pageSize).
                                  Include(c => c.Address).
                                  Include(c => c.Demographics).
                                  Include(c => c.ProjectAnswers).ToList();
                if (clientDatas.Count == 0)
                {
                    break;
                }

                var clients = new List <Client>();
                foreach (var cd in clientDatas)
                {
                    if (!Reports.activeBetweenDates(cd, startDate, endDate))
                    {
                        continue;
                    }
                    clients.Add(new Client(cd, riskMap, projectQs, null));
                } // foreach

                foreach (var client in clients)
                {
                    try {
                        var riskAssessment = client.CurrentRiskAssessment;

                        csv.Write(client.Name + ",");
                        csv.Write(client.ReferenceId + ",");
                        csv.Write(client.Address.PostCode + ",");
                        csv.Write(client.Address.IsInDeprivedArea + ",");
                        csv.Write(referredBy(client.referredBy()) + ",");
                        csv.Write(repo.projectName(client.ProjectId) + ",");
                        csv.Write(repo.locationName(client.LocationId) + ",");

                        var demographics = client.Demographics;
                        if (demographics == null)
                        {
                            demographics = new DemographicData();
                        }

                        csv.Write(Reports.formatDate(demographics.Dob) + ",");
                        csv.Write(demographics.Disability + ",");
                        csv.Write(demographics.DisabilityType + ",");
                        csv.Write(demographics.EmploymentStatus + ",");
                        csv.Write(demographics.EthnicOrigin + ",");
                        csv.Write(demographics.Gender + ",");
                        csv.Write(demographics.HouseholdIncome + ",");
                        csv.Write(demographics.HouseholdType + ",");
                        csv.Write(demographics.HousingType + ",");
                        csv.Write(demographics.MaritalStatus + ",");
                        csv.Write(Reports.formatDate(client.registeredOn()) + ",");
                        foreach (var pq in client.Questions)
                        {
                            csv.Write(pq.Answer + ",");
                        }

                        var ra = client.CurrentRiskAssessment;
                        // Initial scores
                        foreach (var t in ra.ThemeAssessments)
                        {
                            csv.Write(t.InitialScore + ",");
                        }
                        // High scores
                        foreach (var t in ra.ThemeAssessments)
                        {
                            csv.Write(t.HighScore + ",");
                        }
                        // Current scores
                        foreach (var t in ra.ThemeAssessments)
                        {
                            csv.Write(t.Score + ",");
                        }

                        // Discharge Date
                        csv.Write(Reports.formatDate(client.Discharged));
                    } catch (Exception e) {
                        csv.Write("Error exporting - " + e.Message);
                    }
                    csv.WriteLine();
                    csv.Flush();
                } // foreach Client
                ++page;
            }     // while(true)

            csv.Close();
        }