public static ReportData<Row> build(Guid orgId, Guid projId, Guid? locId, DateTime? startDate, DateTime? endDate) { var repo = new ReportsRepository(); var riskMap = repo.projectRiskMap(orgId, projId); var rows = new List<Row>(); var clients = repo.findClients(projId, locId); var clientsDischarged = 0; var clientsActive = 0; var clientsAssessed = 0; foreach (var clientData in clients) { if (!Reports.activeBetweenDates(clientData, startDate, endDate)) continue; if (clientData.Discharged == true) ++clientsDischarged; else ++clientsActive; var registeredDate = clientData.registeredOn(); if (registeredDate.HasValue && Reports.inBounds(registeredDate.Value, startDate, endDate)) ++clientsAssessed; var client = new Client(clientData, riskMap); foreach(var theme in client.CurrentRiskAssessment.ThemeAssessments) { var row = rows.SingleOrDefault(r => r.Theme == theme.Title); if (row == null) { row = new Row(theme.Title); rows.Add(row); rows.Sort((l, r) => l.Theme.CompareTo(r.Theme)); } // if ... if (client.Discharged != null) row.discharged(theme); else row.current(theme); } // foreach } // foreach if (endDate.HasValue) endDate = endDate.Value.AddDays(-1); var reportData = new ReportData<Row>(rows); reportData.Put("project", repo.projectName(projId)); reportData.Put("location", repo.locationName(locId)); reportData.Put("startDate", Reports.formatDate(startDate)); reportData.Put("endDate", Reports.formatDate(endDate)); reportData.Put("clientsActive", clientsActive.ToString()); reportData.Put("clientsDischarged", clientsDischarged.ToString()); reportData.Put("clientsAssessed", clientsAssessed.ToString()); reportData.Put("csvurl", Reports.csvUrl("commissioners", orgId, projId, locId, startDate, endDate)); return reportData; } // build
public static ReportData <Row> build(Guid orgId, Guid projId, Guid?locId, DateTime refDate) { var repo = new ReportsRepository(); var riskMap = repo.projectRiskMap(orgId, projId); var clients = repo.findClients(projId, locId); var startDate = refDate.AddDays(-30); var newClients = new List <ClientData>(); var currentClients = new List <ClientData>(); var dischargedClients = new List <ClientData>(); foreach (var client in clients) { if (isNew(client, startDate, refDate)) { newClients.Add(client); } else if (isDischarged(client, startDate, refDate)) { dischargedClients.Add(client); } else if (isCurrent(client, startDate, refDate)) { currentClients.Add(client); } } // foreach reduceTo10(newClients); reduceTo10(currentClients); reduceTo10(dischargedClients); var rows = new List <Row>(); rows.Add(new Row(newClients)); rows.Add(new Row(currentClients)); rows.Add(new Row(dischargedClients)); var reportData = new ReportData <Row>(rows); reportData.Put("project", repo.projectName(projId)); reportData.Put("location", repo.locationName(locId)); reportData.Put("startDate", Reports.formatDate(startDate)); reportData.Put("refDate", Reports.formatDate(refDate)); reportData.Put("csvurl", Reports.csvUrl("audit", orgId, projId, locId, refDate, null)); return(reportData); } // build
public static ReportData <ProgressRow> build(Guid orgId, Guid projId, Guid?locId, DateTime?startDate, DateTime?endDate) { var repo = new ReportsRepository(); var riskMap = repo.projectRiskMap(orgId, projId); var clients = repo.findClients(projId, locId); int clientCount = 0; var progress = new List <ProgressRow>(); progress.Add(new ProgressRow("A")); progress.Add(new ProgressRow("B")); progress.Add(new ProgressRow("C")); progress.Add(new ProgressRow("D")); var totals = new ProgressRow("Total"); foreach (var clientData in clients) { if (!Reports.activeBetweenDates(clientData, startDate, endDate)) { continue; } if (clientData.RiskAssessments == null || clientData.RiskAssessments.Count == 0) { continue; } var client = new Client(clientData, riskMap); var riskAssessment = client.CurrentRiskAssessment; var ta = riskAssessment.ThemeAssessments.Where(t => t.Title.ToLower().Equals("personal circumstances")).First(); string initialScore = massageScore(ta.InitialScore); string highScore = massageScore(ta.HighScore); progress[initialScore[0] - 'A'].Add(highScore); totals.Add(highScore); ++clientCount; } // foreach Client progress.Add(totals); ReportData <ProgressRow> reportData = new ReportData <ProgressRow>(progress); reportData.Put("clientCount", clientCount.ToString()); reportData.Put("csvurl", Reports.csvUrl("pcprogress", orgId, projId, locId, startDate, endDate)); return(reportData); } // buildProgressReport
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
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(); }