public static qHtl_AbsenteeAnalysisVariable GetAbsenteeAnalysisVariablesBySchoolDistrict(int school_district_id) { qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(); variables.container.Select(new DbQuery { Top = "Top(1)", Where = string.Format("SchoolDistrictID = " + school_district_id), OrderBy = "AbsenteeAnalysisVariableID DESC" }); if (variables.AbsenteeAnalysisVariableID > 0) { return(variables); } else { return(null); } }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (school_district_id == 0) school_district_id = 1; qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(school_district_id); string analysis_html = string.Empty; analysis_html += "<strong>ABSENTEE RATE MULTIPLIERS (x) </strong><br>"; analysis_html += "Green Absentee Rate STD Multiplier = <strong>" + variables.GreenRateSTDMultiplier + "</strong><br>"; analysis_html += "Yellow Absentee Rate STD Multiplier = <strong>" + variables.YellowRateSTDMultiplier + "</strong><br>"; analysis_html += "Red Absentee Rate STD Multiplier = <strong>" + variables.RedRateSTDMultiplier + "</strong><br>"; analysis_html += "<br>"; analysis_html += "<strong>ILLNESS CALCULATIONS (p)</strong><br>"; analysis_html += "Green Status => p < <strong>" + variables.GreenIllnessBoundary + "%</strong> of school's current enrollment<br>"; analysis_html += "Yellow Status => p >= <strong>" + variables.GreenIllnessBoundary + "%</strong> AND p <= <strong>" + variables.RedIllnessBoundary +"%</strong> of school's current enrollment<br>"; analysis_html += "Red Status => p > <strong>" + variables.RedIllnessBoundary + "%</strong> of school's current enrollment<br>"; analysis_html += "<br>"; analysis_html += "<strong>SYMPTOM CALCUATIONS (s)</strong><br>"; analysis_html += "<strong>Gastrointestinal:</strong> Green Status: s < <strong>" + variables.GreenGastrointestinalBoundary + "%</strong>"; analysis_html += " | Yellow Status: <strong>" + variables.GreenGastrointestinalBoundary + "%</strong> <= s <= <strong>" + variables.RedGastrointestinalBoundary + "%</strong>"; analysis_html += " | Red Status: s > <strong>" + variables.RedGastrointestinalBoundary + "%</strong><br>"; analysis_html += "<strong>Respiratory:</strong> Green Status: s < <strong>" + variables.GreenRespiratoryBoundary + "%</strong>"; analysis_html += " | Yellow Status: <strong>" + variables.GreenRespiratoryBoundary + "%</strong> <= s <= <strong>" + variables.RedRespiratoryBoundary + "%</strong>"; analysis_html += " | Red Status: s > <strong>" + variables.RedRespiratoryBoundary + "%</strong><br>"; analysis_html += "<strong>Rash:</strong> Green Status: s < <strong>" + variables.GreenRashBoundary + "%</strong>"; analysis_html += " | Yellow Status: <strong>" + variables.GreenRashBoundary + "%</strong> <= s <= <strong>" + variables.RedRashBoundary + "%</strong>"; analysis_html += " | Red Status: s > <strong>" + variables.RedRashBoundary + "%</strong><br>"; analysis_html += "<strong>Other Illness:</strong> Green Status: s < <strong>" + variables.GreenOtherIllnessBoundary + "%</strong>"; analysis_html += " | Yellow Status: <strong>" + variables.GreenOtherIllnessBoundary + "%</strong> <= s <= <strong>" + variables.RedOtherIllnessBoundary + "%</strong>"; analysis_html += " | Red Status: s > <strong>" + variables.RedOtherIllnessBoundary + "%</strong><br>"; analysis_html += "<strong>Unknown Illness:</strong> Green Status: s < <strong>" + variables.GreenUnknownIllnessBoundary + "%</strong>"; analysis_html += " | Yellow Status: <strong>" + variables.GreenUnknownIllnessBoundary + "%</strong> <= s <= <strong>" + variables.RedUnknownIllnessBoundary + "%</strong>"; analysis_html += " | Red Status: s > <strong>" + variables.RedUnknownIllnessBoundary + "%</strong><br>"; litAnalysisVariables.Text = analysis_html; } }
protected void ProcessAbsenteeData(string[] to_pass) { int school_district_id = 0; if (school_district_id == 0) school_district_id = 1; qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(school_district_id); string mode = to_pass[0]; string f_name = to_pass[1]; lblFileName.Text = fileFullName; string fileName = string.Format("{0}{1}", Server.MapPath(Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["Resources_AbsenteeFolder"])), f_name); string message = string.Empty; string str_solution_start_date = Convert.ToString(System.Configuration.ConfigurationManager.AppSettings["Solution_StartDate"]); if (File.Exists(fileName)) { List<string[]> data = parseCSV(fileName); message = "RESULTS<br>"; string eval_date = string.Empty; int curr_school_id = 0; int curr_school_district_id = 0; string curr_school_name = string.Empty; string curr_school_level = string.Empty; int curr_school_total_absent = 0; int curr_school_total_unknown = 0; int curr_school_total_other = 0; int curr_school_total_sick = 0; int curr_school_gastrointestinal = 0; int curr_school_respiratory = 0; int curr_school_rash = 0; int curr_school_other_illness = 0; int curr_school_unknown_illness = 0; int curr_school_total_enrolled = 0; decimal curr_school_rate = 0; int num_school_saves = 0; bool overall_success = false; int total_elementary_schools = 0; int total_elementary_students_enrolled = 0; int total_elementary_students_absent = 0; decimal total_elementary_absentee_rate = 0; int total_junior_high_schools = 0; int total_junior_high_students_enrolled = 0; int total_junior_high_students_absent = 0; decimal total_junior_high_absentee_rate = 0; int total_high_schools = 0; int total_high_school_students_enrolled = 0; int total_high_school_students_absent = 0; decimal total_high_school_absentee_rate = 0; int total_students_enrolled = 0; decimal total_absentee_rate = 0; int summary_total_absent = 0; int summary_total_sick = 0; int summary_total_gastrointestinal = 0; int summary_total_respiratory = 0; int summary_total_rash = 0; int summary_total_other_illness = 0; int summary_total_unknown_illness = 0; int summary_total_enrolled = 0; List<double> summary_sch_rates = new List<double>(); List<double> sch_rates = new List<double>(); List<double> elem_rates = new List<double>(); List<double> jr_rates = new List<double>(); List<double> high_rates = new List<double>(); List<double> illness_rates = new List<double>(); List<double> gast_rates = new List<double>(); List<double> resp_rates = new List<double>(); List<double> rash_rates = new List<double>(); List<double> othr_rates = new List<double>(); List<double> unkn_rates = new List<double>(); List<ClassroomAbsenteeData> a_data = new List<ClassroomAbsenteeData>(); string curr_descriptor = string.Empty; int prior_school_id = 0; string absent_date = string.Empty; string school_name = string.Empty; string school_type = string.Empty; string grade_level = string.Empty; string grade_number = string.Empty; string class_name = string.Empty; string teacher_name = string.Empty; int days_in_session = 0; int total_enrolled = 0; int total_absent = 0; int total_unknown = 0; int total_other = 0; int total_sick = 0; int gastrointestinal = 0; int respiratory = 0; int rash = 0; int other_illness = 0; int unknown_illness = 0; bool success = false; string reason = string.Empty; int i = 0; int s = 0; foreach (string[] c in data) { if (i > 0) { absent_date = c[0]; school_name = c[1]; school_name = school_name.Trim(); school_type = c[2]; school_type = school_type.Trim(); grade_level = c[3]; grade_level = grade_level.Trim(); class_name = c[4]; class_name = class_name.Trim(); teacher_name = c[5]; teacher_name = teacher_name.Trim(); days_in_session = Convert.ToInt32(c[6]); total_enrolled = Convert.ToInt32(c[7]); total_absent = Convert.ToInt32(c[8]); total_unknown = Convert.ToInt32(c[9]); total_other = Convert.ToInt32(c[10]); total_sick = Convert.ToInt32(c[11]); gastrointestinal = Convert.ToInt32(c[12]); respiratory = Convert.ToInt32(c[13]); rash = Convert.ToInt32(c[14]); other_illness = Convert.ToInt32(c[15]); unknown_illness = Convert.ToInt32(c[16]); if (school_type.ToLower().Contains("elem")) { int curr_grade_number = 0; if (grade_level.ToLower().Contains("kinder")) curr_grade_number = 0; else if (grade_level.ToLower().Contains("pre")) curr_grade_number = -1; else { try { curr_grade_number = Convert.ToInt32(grade_level); } catch { curr_grade_number = -2; } } string extra_sort_val = string.Empty; if (curr_grade_number == -1 || curr_grade_number == 0) extra_sort_val = "a"; // add to list a_data.Add(new ClassroomAbsenteeData() { sort_by = absent_date + " " + school_name + " " + extra_sort_val + "" + curr_grade_number, absent_date = absent_date, school_name = school_name, school_type = school_type, grade_level = grade_level, grade_number = curr_grade_number, class_name = class_name, teacher_name = teacher_name, days_in_session = days_in_session, total_enrolled = total_enrolled, total_absent = total_absent, total_unknown = total_unknown, total_other = total_other, total_sick = total_sick, gastrointestinal = gastrointestinal, respiratory = respiratory, rash = rash, other_illness = other_illness, unknown_illness = unknown_illness }); } } i++; } // sort array to insure that it is ordered by school a_data.Sort((a, b) => a.sort_by.CompareTo(b.sort_by)); // clear initial list data.Clear(); int class_count = 0; List<double> curr_school_rates = new List<double>(); List<double> curr_school_all_prior_rates = new List<double>(); List<double> curr_district_all_prior_rates = new List<double>(); foreach (var a in a_data) { class_count ++; absent_date = a.absent_date; school_name = a.school_name; school_type = a.school_type; grade_level = a.grade_level; grade_number = Convert.ToString(a.grade_number); class_name = a.class_name; teacher_name = a.teacher_name; days_in_session = a.days_in_session; total_enrolled = a.total_enrolled; total_absent = a.total_absent; total_unknown = a.total_unknown; total_other = a.total_other; total_sick = a.total_sick; gastrointestinal = a.gastrointestinal; respiratory = a.respiratory; rash = a.rash; other_illness = a.other_illness; unknown_illness = a.unknown_illness; curr_descriptor = teacher_name + ", Grade: " + grade_level + " at " + school_name; DateTime curr_date = new DateTime(); curr_date = Convert.ToDateTime(absent_date); if (mode == "process") { if (String.IsNullOrEmpty(eval_date)) { eval_date = absent_date; DateTime curr_eval_date = new DateTime(); curr_eval_date = Convert.ToDateTime(eval_date); string final_eval_date = curr_eval_date.ToShortDateString(); qHtl_DailyClassroomAbsenteeData.DeleteClassroomAbsenteeDataByDate(final_eval_date); qHtl_DailySchoolAbsenteeData.DeleteSchoolAbsenteeDataByDate(final_eval_date); qHtl_DailySchoolDistrictAbsenteeSummary.DeleteSchoolDistrictAbsenteeSummaryByDate(final_eval_date); } // match the current school and get the school and district_id // first make sure no apostrophes string name_check = school_name.Replace("'", ""); var curr_school = qOrg_School.GetSchoolBySelector(name_check); if (curr_school.SchoolID > 0) { // evalute if new school and run appropriate elements curr_school_id = curr_school.SchoolID; if (prior_school_id == 0) { prior_school_id = curr_school_id; curr_school_district_id = curr_school.SchoolDistrictID; curr_school_name = curr_school.School; curr_school_level = curr_school.SchoolLevel; } else if (prior_school_id != curr_school_id || class_count == a_data.Count) { // save values qHtl_DailySchoolAbsenteeData s_data = new qHtl_DailySchoolAbsenteeData(); s_data.Created = DateTime.Now; s_data.MarkAsDelete = 0; s_data.SchoolDistrictID = curr_school_district_id; s_data.SchoolID = prior_school_id; s_data.DataDate = Convert.ToDateTime(eval_date).Date; s_data.School = curr_school_name; s_data.SchoolLevel = curr_school_level; s_data.DaysInSession = 1; decimal eval_school_total_absent = Convert.ToDecimal(curr_school_total_absent); decimal eval_school_total_enrolled = Convert.ToDecimal(curr_school_total_enrolled); decimal eval_school_rate = 0; if (num_school_saves > 0) { curr_school_total_absent += total_absent; curr_school_total_unknown += total_unknown; curr_school_total_other += total_other; curr_school_total_sick += total_sick; curr_school_gastrointestinal += gastrointestinal; curr_school_respiratory += respiratory; curr_school_rash += rash; curr_school_other_illness += other_illness; curr_school_unknown_illness += unknown_illness; curr_school_total_enrolled += total_enrolled; } s_data.TotalAbsent = curr_school_total_absent; s_data.TotalUnknown = curr_school_total_unknown; s_data.TotalOther = curr_school_total_other; s_data.TotalSick = curr_school_total_sick; s_data.Gastrointestinal = curr_school_gastrointestinal; s_data.Respiratory = curr_school_respiratory; s_data.Rash = curr_school_rash; s_data.OtherIllness = curr_school_other_illness; s_data.UnknownIllness = curr_school_unknown_illness; s_data.TotalEnrolled = curr_school_total_enrolled; eval_school_rate = Decimal.Divide(curr_school_total_absent, s_data.TotalEnrolled) * 100; s_data.Rate = eval_school_rate; // school rate warning level -- need to get all prior day rates for this school // curr_school_all_prior_rates --> load all prior rates into this list double eval_rate = 0; curr_school_all_prior_rates = qHtl_DailySchoolAbsenteeData.GetAllPriorDailyRatesforSpecificSchool(str_solution_start_date, Convert.ToString(DateTime.Now), prior_school_id, Convert.ToDouble(eval_school_rate)); if (variables.SDFormulaType == "population") eval_rate = CalculateSTDPopulationFromList(curr_school_all_prior_rates); // used to be curr_school_rates when was based on individual classrooms else eval_rate = CalculateSTDFromList(curr_school_all_prior_rates); decimal overal_std = Convert.ToDecimal(eval_rate); s_data.RateSTD = overal_std; // school daily status evaluations int school_illness_absences = (curr_school_gastrointestinal + curr_school_respiratory + curr_school_rash + curr_school_other_illness + curr_school_unknown_illness); decimal school_gast_sym = CalculateSymptomRate(curr_school_gastrointestinal, school_illness_absences); s_data.GastrointestinalRate = school_gast_sym; decimal school_resp_sym = CalculateSymptomRate(curr_school_respiratory, school_illness_absences); s_data.RespiratoryRate = school_resp_sym; decimal school_rash_sym = CalculateSymptomRate(curr_school_rash, school_illness_absences); s_data.RashRate = school_rash_sym; decimal school_othr_sym = CalculateSymptomRate(curr_school_other_illness, school_illness_absences); s_data.OtherRate = school_othr_sym; decimal school_unkn_sym = CalculateSymptomRate(curr_school_unknown_illness, school_illness_absences); s_data.UnknownRate = school_unkn_sym; s_data.Insert(); num_school_saves++; summary_sch_rates.Add(Convert.ToDouble(eval_school_rate)); // CALCULATE PRIOR SCHOOL RATE AVERAGES - 2 week average rate, prior year average, historic average DateTime solution_start_date = new DateTime(); solution_start_date = Convert.ToDateTime(variables.SolutionStartDate); DateTime end_date = new DateTime(); end_date = Convert.ToDateTime(s_data.DataDate); DateTime two_weeks_prior = new DateTime(); two_weeks_prior = end_date.AddDays(-14); decimal two_week_prior_rate = qHtl_DailySchoolAbsenteeData.CalculateSchoolValuesForRange(Convert.ToString(two_weeks_prior), Convert.ToString(end_date), s_data.Rate, s_data.SchoolID, "rate"); decimal historic_rate = qHtl_DailySchoolAbsenteeData.CalculateSchoolValuesForRange(Convert.ToString(solution_start_date), Convert.ToString(end_date), s_data.Rate, s_data.SchoolID, "rate"); decimal historic_rate_std = qHtl_DailySchoolAbsenteeData.CalculateSchoolValuesForRange(Convert.ToString(solution_start_date), Convert.ToString(end_date), s_data.RateSTD, s_data.SchoolID, "std"); s_data.TwoWeekRate = two_week_prior_rate; s_data.HistoricRate = historic_rate; s_data.HistoricRateSTD = historic_rate_std; s_data.Update(); // reset values curr_school_id = curr_school.SchoolID; prior_school_id = curr_school_id; curr_school_district_id = curr_school.SchoolDistrictID; curr_school_name = curr_school.School; curr_school_level = curr_school.SchoolLevel; curr_school_total_absent = 0; curr_school_total_unknown = 0; curr_school_total_other = 0; curr_school_total_sick = 0; curr_school_gastrointestinal = 0; curr_school_respiratory = 0; curr_school_rash = 0; curr_school_other_illness = 0; curr_school_unknown_illness = 0; curr_school_total_enrolled = 0; curr_school_rate = 0; s = 0; curr_school_rates.Clear(); if (curr_school.SchoolLevel.ToLower().Contains("elem")) { total_elementary_schools++; } else if (curr_school.SchoolLevel.ToLower().Contains("jr") || curr_school.SchoolLevel.ToLower().Contains("middle")) { total_junior_high_schools++; } else if (curr_school.SchoolLevel.ToLower().Contains("high")) { total_high_schools++; } } // run rate calculation decimal eval_total_absent = Convert.ToDecimal(total_absent); decimal eval_total_enrolled = Convert.ToDecimal(total_enrolled); decimal curr_rate = 0; if (eval_total_enrolled > 0) curr_rate = (eval_total_absent / eval_total_enrolled) * 100; // create daily absentee data qHtl_DailyClassroomAbsenteeData c_data = new qHtl_DailyClassroomAbsenteeData(); c_data.Created = DateTime.Now; c_data.MarkAsDelete = 0; c_data.SchoolDistrictID = curr_school.SchoolDistrictID; c_data.SchoolID = curr_school.SchoolID; c_data.DataDate = Convert.ToDateTime(eval_date).Date; c_data.School = curr_school.School; c_data.SchoolLevel = curr_school.SchoolLevel; c_data.GradeLevel = grade_level; c_data.ClassRoom = class_name; c_data.GradeNumber = Convert.ToInt32(grade_number); c_data.Instructor = teacher_name; c_data.DaysInSession = days_in_session; c_data.Rate = curr_rate; c_data.TotalAbsent = total_absent; c_data.TotalUnknown = total_unknown; c_data.TotalOther = total_other; c_data.TotalSick = total_sick; c_data.Gastrointestinal = gastrointestinal; c_data.Respiratory = respiratory; c_data.Rash = rash; c_data.OtherIllness = other_illness; c_data.UnknownIllness = unknown_illness; c_data.TotalEnrolled = total_enrolled; c_data.Insert(); // add values to overall school values curr_school_total_absent += total_absent; curr_school_total_unknown += total_unknown; curr_school_total_other += total_other; curr_school_total_sick += total_sick; curr_school_gastrointestinal += gastrointestinal; curr_school_respiratory += respiratory; curr_school_rash += rash; curr_school_other_illness += other_illness; curr_school_unknown_illness += unknown_illness; curr_school_total_enrolled += total_enrolled; curr_school_rate += curr_rate; s++; // add values to daily summary values if (c_data.SchoolLevel.ToLower().Contains("elem")) { total_elementary_students_enrolled += total_enrolled; total_elementary_students_absent += total_absent; total_elementary_absentee_rate += curr_rate; elem_rates.Add(Convert.ToDouble(curr_rate)); } else if (c_data.SchoolLevel.ToLower().Contains("jr") || c_data.SchoolLevel.ToLower().Contains("middle")) { total_junior_high_students_enrolled += total_enrolled; total_junior_high_students_absent += total_absent; total_junior_high_absentee_rate += curr_rate; jr_rates.Add(Convert.ToDouble(curr_rate)); } else if (c_data.SchoolLevel.ToLower().Contains("high")) { total_high_school_students_enrolled += total_enrolled; total_high_school_students_absent += total_absent; total_high_school_absentee_rate += curr_rate; high_rates.Add(Convert.ToDouble(curr_rate)); } total_students_enrolled += total_enrolled; total_absentee_rate += curr_rate; // add to overall list sch_rates.Add(Convert.ToDouble(curr_rate)); // add to curr school list curr_school_rates.Add(Convert.ToDouble(curr_rate)); // add to other lists illness_rates.Add(Convert.ToDouble(gastrointestinal + respiratory + rash + other_illness + unknown_illness)); gast_rates.Add(Convert.ToDouble(gastrointestinal)); resp_rates.Add(Convert.ToDouble(respiratory)); rash_rates.Add(Convert.ToDouble(rash)); othr_rates.Add(Convert.ToDouble(other_illness)); unkn_rates.Add(Convert.ToDouble(unknown_illness)); // add values to summary list summary_total_absent += total_absent; summary_total_sick += total_sick; summary_total_gastrointestinal += gastrointestinal; summary_total_respiratory += respiratory; summary_total_rash += rash; summary_total_other_illness += other_illness; summary_total_unknown_illness += unknown_illness; summary_total_enrolled += total_enrolled; success = true; overall_success = true; } } else if (mode == "test") { success = true; } i++; if (mode == "process" && success == true) { message += "Line " + i + " SUCCESS - " + curr_descriptor + " successfully added to absentee data<br>"; } else if (mode == "test" && success == true) { message += "Line " + i + " SUCCESS - " + curr_descriptor + " will be processed<br>"; } else if (i > 1) { message += "Line " + i + " FAILURE - could not be added for the following reason: " + reason + "<br>"; } else { message += "Line " + i + " LINE NOT PROCESSED - header line in the file<br>"; } } // write summary data if (overall_success == true) { qHtl_DailySchoolDistrictAbsenteeSummary d_data = new qHtl_DailySchoolDistrictAbsenteeSummary(); d_data.Created = DateTime.Now; d_data.DataDate = Convert.ToDateTime(eval_date).Date; d_data.SchoolDistrictID = curr_school_district_id; if (total_elementary_schools > 0) { d_data.NumElementarySchools = total_elementary_schools; d_data.TotalElementaryStudents = total_elementary_students_enrolled; d_data.TotalElementaryStudentsAbsent = total_elementary_students_absent; decimal eval_num_elementary_students_enrolled = Convert.ToDecimal(total_elementary_students_enrolled); decimal eval_elem_rate = Convert.ToDecimal(total_elementary_students_absent / eval_num_elementary_students_enrolled) * 100; d_data.ElementarySchoolAbsenteeRate = eval_elem_rate; } if (total_junior_high_schools > 0) { d_data.NumJuniorHighs = total_junior_high_schools; d_data.TotalJuniorHighStudents = total_junior_high_students_enrolled; d_data.TotalJuniorHighStudentsAbsent = total_junior_high_students_absent; decimal eval_num_junior_high_schools = Convert.ToDecimal(total_junior_high_schools); decimal eval_jr_rate = Convert.ToDecimal(total_junior_high_absentee_rate / eval_num_junior_high_schools) * 100; d_data.JuniorHighSchoolAbsenteeRate = eval_jr_rate; } if (total_high_schools > 0) { d_data.NumHighSchools = total_high_schools; d_data.TotalHighSchoolStudents = total_junior_high_students_enrolled; d_data.TotalHighSchoolStudentsAbsent = total_high_school_students_absent; decimal eval_num_high_schools = Convert.ToDecimal(total_high_schools); decimal eval_high_rate = Convert.ToDecimal(total_high_school_absentee_rate / eval_num_high_schools) * 100; d_data.HighSchoolAbsenteeRate = eval_high_rate; } // overall absentee rate decimal eval_total_enrolled = Convert.ToDecimal(total_elementary_students_enrolled + total_high_school_students_enrolled + total_high_school_students_enrolled); decimal eval_total_absent = Convert.ToDecimal(total_elementary_students_absent + total_junior_high_absentee_rate + total_high_school_students_absent); decimal eval_total_rate = Convert.ToDecimal(eval_total_absent / eval_total_enrolled) * 100; d_data.OverallAbsenteeRate = eval_total_rate; // calculate warning levels double elem_eval_rate = 0; if (variables.SDFormulaType == "population") elem_eval_rate = CalculateSTDPopulationFromList(elem_rates); else elem_eval_rate = CalculateSTDFromList(elem_rates); decimal elem_overal_std = Convert.ToDecimal(elem_eval_rate); d_data.ElementarySchoolAbsenteeSTD = elem_overal_std; double jr_eval_rate = 0; if (variables.SDFormulaType == "population") jr_eval_rate = CalculateSTDPopulationFromList(jr_rates); else jr_eval_rate = CalculateSTDFromList(jr_rates); decimal jr_overal_std = Convert.ToDecimal(jr_eval_rate); d_data.JuniorHighSchoolAbsenteeSTD = jr_overal_std; double high_eval_rate = 0; if (variables.SDFormulaType == "population") high_eval_rate = CalculateSTDPopulationFromList(high_rates); else high_eval_rate = CalculateSTDFromList(high_rates); decimal high_overal_std = Convert.ToDecimal(high_eval_rate); d_data.HighSchoolAbsenteeSTD = high_overal_std; double eval_rate = 0; if (variables.SDFormulaType == "population") eval_rate = CalculateSTDPopulationFromList(summary_sch_rates); else eval_rate = CalculateSTDFromList(summary_sch_rates); decimal overal_std = Convert.ToDecimal(eval_rate); d_data.OverallAbsenteeSTD = overal_std; // calculate detailed rates -- illness and symptom decimal illness_overall_rate = (summary_total_absent / summary_total_enrolled) * 100; d_data.IllnessRate = illness_overall_rate; int total_illness_absences = (summary_total_gastrointestinal + summary_total_respiratory + summary_total_rash + summary_total_other_illness + summary_total_unknown_illness); decimal gast_overall_std = CalculateSymptomRate(summary_total_gastrointestinal, total_illness_absences); d_data.GastrointestinalRate = gast_overall_std; decimal resp_overall_std = CalculateSymptomRate(summary_total_respiratory, total_illness_absences); d_data.RespiratoryRate = resp_overall_std; decimal rash_overall_std = CalculateSymptomRate(summary_total_rash, total_illness_absences); d_data.RashRate = rash_overall_std; decimal othr_overall_std = CalculateSymptomRate(summary_total_other_illness, total_illness_absences); d_data.OtherRate = othr_overall_std; decimal unkn_overall_std = CalculateSymptomRate(summary_total_unknown_illness, total_illness_absences); d_data.UnknownRate = unkn_overall_std; d_data.TotalAbsent = summary_total_absent; d_data.TotalSick = summary_total_sick; d_data.Gastrointestinal = summary_total_gastrointestinal; d_data.Respiratory = summary_total_respiratory; d_data.Rash = summary_total_rash; d_data.OtherIllness = summary_total_other_illness; d_data.UnknownIllness = summary_total_unknown_illness; d_data.TotalEnrolled = summary_total_enrolled; d_data.Insert(); // CALCULATE PRIOR SCHOOL RATE AVERAGES - 2 week average rate, prior year average, historic average DateTime solution_start_date = new DateTime(); solution_start_date = Convert.ToDateTime(variables.SolutionStartDate); DateTime end_date = new DateTime(); end_date = Convert.ToDateTime(d_data.DataDate); DateTime two_weeks_prior = new DateTime(); two_weeks_prior = end_date.AddDays(-14); // historic rate decimal two_week_prior_rate = qHtl_DailySchoolDistrictAbsenteeSummary.CalculateAbsenteeRateForRange(Convert.ToString(two_weeks_prior), Convert.ToString(end_date), d_data.OverallAbsenteeRate); decimal historic_rate = qHtl_DailySchoolDistrictAbsenteeSummary.CalculateAbsenteeRateForRange(Convert.ToString(solution_start_date), Convert.ToString(end_date), d_data.OverallAbsenteeRate); d_data.TwoWeekAbsenteeRate = two_week_prior_rate; d_data.HistoricAbsenteeRate = historic_rate; // historic std decimal historic_std = qHtl_DailySchoolDistrictAbsenteeSummary.CalculateAbsenteeRateSTDForRange(Convert.ToString(solution_start_date), Convert.ToString(end_date), d_data.OverallAbsenteeSTD); d_data.HistoricAbsenteeSTD = historic_std; // district prior rate stds double eval_historic_district_std = 0; curr_district_all_prior_rates = qHtl_DailySchoolDistrictAbsenteeSummary.GetAllPriorDailyRatesforDistrict(str_solution_start_date, Convert.ToString(DateTime.Now), 0); if (variables.SDFormulaType == "population") eval_historic_district_std = CalculateSTDPopulationFromList(curr_district_all_prior_rates); // used to be curr_school_rates when was based on individual classrooms else eval_historic_district_std = CalculateSTDFromList(curr_district_all_prior_rates); decimal overall_district_std = Convert.ToDecimal(eval_historic_district_std); d_data.HistoricDistrictAbsenteeSTD = overall_district_std; // run analysis for this date DateTime curr_date = DateTime.Now; curr_date = Convert.ToDateTime(eval_date); int num_schools = qHtl_DailySchoolAbsenteeData.AnalyzeDailySchoolDataByDate(curr_date, school_district_id); // run code to count number of daily warnings int num_a_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("A", curr_date); int num_b_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("B", curr_date); int num_c_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("C", curr_date); int num_d_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("D", curr_date); int num_e_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("E", curr_date); int num_f_warn = qHtl_DailySchoolAbsenteeData.GetNumWarningsByTypeAndDay("F", curr_date); d_data.NumAWarnings = num_a_warn; d_data.NumBWarnings = num_b_warn; d_data.NumCWarnings = num_c_warn; d_data.NumDWarnings = num_d_warn; d_data.NumEWarnings = num_e_warn; d_data.NumFWarnings = num_f_warn; d_data.Update(); } if (mode == "process") { lblMessage.Text = message; plhStep3.Visible = false; plhStep3Completed.Visible = true; } else if (mode == "test") { lblTestOutput.Text = message; plhStep3.Visible = true; plhStep2Completed.Visible = true; lblUploadFail.Text = ""; } } }
public static int AnalyzeDailySchoolDataByDate(DateTime curr_date, int school_district_id) { int schools_analyzed = 0; var schools = qHtl_DailySchoolAbsenteeData.GetDailySchoolAbsenteeDataCollectionByDate(curr_date); if (schools != null) { if (schools.Count > 0) { qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(school_district_id); foreach (var s in schools) { // delete any warnings for this school on this date qHtl_HealthWarning.DeleteWarningsBySchoolAndDate(s.SchoolID, Convert.ToString(s.DataDate)); var summary = new qHtl_DailySchoolDistrictAbsenteeSummary(); if (summary != null) { if (summary.DataDate != s.DataDate) summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryByDate(Convert.ToString(s.DataDate)); } else { summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryByDate(Convert.ToString(s.DataDate)); } bool a_warning_status = false; string a_warning_evals = string.Empty; bool b_warning_status = false; string b_warning_evals = string.Empty; bool c_warning_status = false; string c_warning_evals = string.Empty; bool d_warning_status = false; string d_warning_evals = string.Empty; bool e_warning_status = false; string e_warning_evals = string.Empty; bool f_warning_status = false; string f_warning_evals = string.Empty; string absentee_status = "green"; string absentee_status_7day = "green"; string absentee_status_school = "green"; string absentee_status_school_7day = "green"; string illness_status = "green"; string gast_status = "green"; string resp_status = "green"; string rash_status = "green"; string othr_status = "green"; string unkn_status = "green"; string warning_type = "School Daily Absentee Status Warning"; string warning_status = string.Empty; string warning_title = string.Empty; string warning_text = string.Empty; int num_warnings = 0; // perform A-E warning analysis DateTime anal_date = new DateTime(); anal_date = Convert.ToDateTime(s.DataDate); var data_days = GetDailySchoolAbsenteeDataCollectionByDateRangeAndSchool(8, anal_date.AddDays(1), s.SchoolID); int x = 0; bool run_check = true; decimal curr_rate = 0; decimal prior_rate = 0; // check A -- One point/day above 3 sigma decimal historic_avg = 0; decimal curr_std = 0; decimal a_eval = 0; foreach (var d in data_days) { x++; if (x == 1) { curr_rate = d.Rate; curr_std = d.RateSTD; historic_avg = d.HistoricRate; } } if (curr_std > 0) { a_eval = historic_avg + (3 * curr_std); a_warning_evals = Convert.ToString(Math.Round(a_eval, 2)); if (curr_rate > a_eval) a_warning_status = true; } // check F -- 1 day above 2 sigma decimal f_eval = 0; foreach (var d in data_days) { x++; if (x == 1) { curr_rate = d.Rate; curr_std = d.RateSTD; historic_avg = d.HistoricRate; } } if (curr_std > 0) { f_eval = historic_avg + (2 * curr_std); f_warning_evals = Convert.ToString(Math.Round(f_eval, 2)); if (curr_rate > f_eval) f_warning_status = true; } // check B -- 2 out of 3 days above 2 standard deviations x = 0; curr_std = 0; curr_rate = 0; historic_avg = 0; decimal b_value = 0; int b_meets = 0; foreach (var d in data_days) { if (x < 3) { curr_rate = d.Rate; curr_std = d.RateSTD; historic_avg = d.HistoricRate; if (x == 0 || x == 1 || x == 2) { b_value = historic_avg + (2 * curr_std); b_warning_evals += " " + Convert.ToString(Math.Round(b_value, 2)); if (curr_rate > b_value) b_meets++; } } x++; } if (b_meets >= 2) b_warning_status = true; // check C -- 4 out of 5 days above 1 standard deviations x = 0; curr_std = 0; curr_rate = 0; historic_avg = 0; decimal c_value = 0; int c_meets = 0; foreach (var d in data_days) { if (x < 5) { curr_rate = d.Rate; curr_std = d.RateSTD; historic_avg = d.HistoricRate; if (x == 0 || x == 1 || x == 2 || x == 3 || x == 4) { c_value = historic_avg + (1 * curr_std); c_warning_evals += " " + Convert.ToString(Math.Round(c_value, 2)); if (curr_rate > c_value) c_meets++; } } x++; } if (c_meets >= 4) c_warning_status = true; // check D -- 8 consecutive days above the moving average x = 0; int d_check_threshold = 8; run_check = true; int d_num_days = 0; decimal moving = 0; prior_rate = 0; foreach (var d in data_days) { if (x == 0) moving = d.HistoricRate; if (x < d_check_threshold) { curr_rate = d.Rate; if (run_check == true) { if (curr_rate > moving) { run_check = true; d_num_days++; } else run_check = false; } prior_rate = curr_rate; d_warning_evals += " " + Convert.ToString(Math.Round(curr_rate, 2)); x++; } } if (d_num_days == d_check_threshold) d_warning_status = true; // check E -- 6 days of increasing absentee rates x = 0; int e_check_threshold = 6; run_check = true; int e_num_days = 0; curr_rate = 0; prior_rate = 0; foreach (var d in data_days) { if (x < e_check_threshold) { curr_rate = d.Rate; if (run_check == true) { if (curr_rate < prior_rate) { run_check = true; e_num_days++; } else run_check = false; } prior_rate = curr_rate; e_warning_evals += " " + Convert.ToString(Math.Round(curr_rate, 2)); x++; } } if (e_num_days == e_check_threshold) e_warning_status = true; // perform analysis if (s.Rate < (summary.OverallAbsenteeSTD * variables.GreenRateSTDMultiplier)) absentee_status = "green"; else if (s.Rate >= (summary.OverallAbsenteeSTD * variables.YellowRateSTDMultiplier)) { absentee_status = "yellow"; warning_status += "yellow "; warning_status += "red "; warning_title = "Yellow Status | Absentee Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Absentee Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Absentee rate of " + Math.Round(s.Rate, 2) + "% is greater than " + (summary.OverallAbsenteeSTD * variables.YellowRateSTDMultiplier) + "% or less than " + (summary.OverallAbsenteeSTD * variables.RedRateSTDMultiplier) + "% of the school's enrollment.<br><br>"; num_warnings++; } else if (s.Rate >= (s.RateSTD * variables.RedRateSTDMultiplier)) { absentee_status = "red"; warning_status += "red "; warning_title = "Red Status | Absentee Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Absentee Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Absentee rate of " + Math.Round(s.Rate, 2) + "% is greater than " + (summary.OverallAbsenteeSTD * variables.RedRateSTDMultiplier) + " of the school's enrollment.<br><br>"; num_warnings++; } if (s.IllnessRate < variables.GreenIllnessBoundary) illness_status = "green"; else if (s.IllnessRate >= variables.GreenIllnessBoundary && s.IllnessRate <= variables.RedIllnessBoundary) { illness_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Illness rate of " + Math.Round(s.IllnessRate, 2) + "% is between " + variables.GreenIllnessBoundary + " and " + variables.RedIllnessBoundary + " of the school's enrollment.<br><br>"; num_warnings++; } else if (s.IllnessRate > variables.RedIllnessBoundary) { illness_status = "red"; warning_status += "red "; warning_title = "Red Status | Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Illness rate of " + Math.Round(s.IllnessRate, 2) + "% is greater than " + variables.RedIllnessBoundary + " of the school's enrollment.<br><br>"; num_warnings++; } if (s.GastrointestinalRate < variables.GreenGastrointestinalBoundary) gast_status = "green"; else if (s.GastrointestinalRate >= variables.GreenGastrointestinalBoundary && s.GastrointestinalRate <= variables.RedGastrointestinalBoundary) { gast_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Gastrintestinal Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Gastrintestinal Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Gastrintestinal symptom rate of " + Math.Round(s.GastrointestinalRate, 2) + "% is between " + variables.GreenGastrointestinalBoundary + " and " + variables.RedGastrointestinalBoundary + " of all school absences with reported symptoms.<br><br>"; num_warnings++; } else if (s.GastrointestinalRate > variables.RedGastrointestinalBoundary) { gast_status = "red"; warning_status += "red "; warning_title = "Red Status | Gastrintestinal Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Gastrintestinal Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Gastrintestinal symptom rate of " + Math.Round(s.GastrointestinalRate, 2) + "% is greater than " + variables.RedGastrointestinalBoundary + " of all school absences with reported symptoms.<br><br>"; ; num_warnings++; } if (s.RespiratoryRate < variables.GreenRespiratoryBoundary) resp_status = "green"; else if (s.RespiratoryRate >= variables.GreenRespiratoryBoundary && s.RespiratoryRate <= variables.RedRespiratoryBoundary) { resp_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Respiratory Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Respiratory Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Respiratory symptom rate of " + Math.Round(s.RespiratoryRate, 2) + "% is between " + variables.GreenRespiratoryBoundary + " and " + variables.RedRespiratoryBoundary + " of all school absences with reported symptoms.<br><br>"; num_warnings++; } else if (s.RespiratoryRate > variables.RedRespiratoryBoundary) { resp_status = "red"; warning_status += "red "; warning_title = "Red Status | Respiratory Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Respiratory Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Respiratory symptom rate of " + Math.Round(s.RespiratoryRate, 2) + "% is greater than " + variables.RedRespiratoryBoundary + "% of all school absences with reported symptoms.<br><br>"; ; num_warnings++; } if (s.RashRate < variables.GreenRashBoundary) rash_status = "green"; else if (s.RashRate >= variables.GreenRashBoundary && s.RespiratoryRate <= variables.RedRashBoundary) { rash_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Rash Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Rash Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Rash symptom rate of " +Math.Round(s.RashRate, 2) + "% is between " + variables.GreenRashBoundary + "% and " + variables.RedRashBoundary + "% of all school absences with reported symptoms.<br><br>"; num_warnings++; } else if (s.RashRate > variables.RedRashBoundary) { rash_status = "red"; warning_status += "red "; warning_title = "Red Status | Rash Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Rash Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Rash symptom rate of " + Math.Round(s.RashRate, 2) + "% is greater than " + variables.RedRashBoundary + "% of all school absences with reported symptoms.<br><br>"; ; num_warnings++; } if (s.OtherRate < variables.GreenOtherIllnessBoundary) othr_status = "green"; else if (s.OtherRate >= variables.GreenOtherIllnessBoundary && s.RespiratoryRate <= variables.RedOtherIllnessBoundary) { othr_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Other Illness Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Other Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Other illness symptom rate of " + Math.Round(s.OtherRate, 2) + "% is between " + variables.GreenOtherIllnessBoundary + "% and " + variables.RedOtherIllnessBoundary + "% of all school absences with reported symptoms.<br><br>"; num_warnings++; } else if (s.OtherRate > variables.RedOtherIllnessBoundary) { othr_status = "red"; warning_status += "yellow "; warning_title = "Red Status | Other Illness Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Other Illness Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Other illness symptom rate of " + Math.Round(s.OtherRate, 2) + "% is greater than " + variables.RedOtherIllnessBoundary + "% of all school absences with reported symptoms.<br><br>"; ; num_warnings++; } if (s.UnknownRate < variables.GreenUnknownIllnessBoundary) unkn_status = "green"; else if (s.UnknownRate >= variables.GreenUnknownIllnessBoundary && s.RespiratoryRate <= variables.RedUnknownIllnessBoundary) { unkn_status = "yellow"; warning_status += "yellow "; warning_title = "Yellow Status | Unknown Illness Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Yellow Status</strong> | Unknown Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Unknown illness symptom rate of " + Math.Round(s.UnknownRate, 2) + "% is between " + variables.GreenUnknownIllnessBoundary + "% and " + variables.RedUnknownIllnessBoundary + "% of all school absences with reported symptoms.<br><br>"; num_warnings++; } else if (s.UnknownRate > variables.RedUnknownIllnessBoundary) { unkn_status = "red"; warning_status += "red "; warning_title = "Red Status | Unknown Illness Symptom Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<strong>Red Status</strong> | Unknown Illness Rate at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); warning_text += "<br><strong>Reason</strong>: Unknown illness symptom rate of " + Math.Round(s.OtherRate, 2) + "% is greater than " + variables.RedUnknownIllnessBoundary + "% of all school absences with reported symptoms.<br><br>"; ; num_warnings++; } // update record qHtl_DailySchoolAbsenteeData curr_school = new qHtl_DailySchoolAbsenteeData(s.SchoolID, curr_date); curr_school.AbsenteeStatus = absentee_status; curr_school.AbsenteeStatus7Day = absentee_status_7day; curr_school.AbsenteeStatusSchool = absentee_status_school; curr_school.AbsenteeStatusSchool7Day = absentee_status_school_7day; curr_school.IllnessStatus = illness_status; curr_school.GastrointestinalStatus = gast_status; curr_school.RespiratoryStatus = resp_status; curr_school.RashStatus = rash_status; curr_school.OtherIllnessStatus = othr_status; curr_school.UnknownIllnessStatus = unkn_status; curr_school.A_Warning = a_warning_status; curr_school.A_WarningValues = a_warning_evals; curr_school.B_Warning = b_warning_status; curr_school.B_WarningValues = b_warning_evals; curr_school.C_Warning = c_warning_status; curr_school.C_WarningValues = c_warning_evals; curr_school.D_Warning = d_warning_status; curr_school.D_WarningValues = d_warning_evals; curr_school.E_Warning = e_warning_status; curr_school.E_WarningValues = e_warning_evals; curr_school.F_Warning = f_warning_status; curr_school.F_WarningValues = f_warning_evals; curr_school.Update(); if (num_warnings > 1) warning_title = "Multiple School Absentee Status Warnings at " + s.School + " (" + s.SchoolLevel + " School) on " + String.Format("{0:MMMM d, yyyy}", s.DataDate); if (num_warnings > 0) CreateSchoolWarning(s.SchoolID, Convert.ToDateTime(s.DataDate), warning_status, warning_type, warning_title, warning_text); } schools_analyzed = schools.Count; } } return schools_analyzed; }
protected void Page_Load(object sender, EventArgs e) { int curr_school_district_id = 0; if (school_district_id == 0) school_district_id = 1; qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(school_district_id); if (!Page.IsPostBack) { var summary = new qHtl_DailySchoolDistrictAbsenteeSummary(); if (String.IsNullOrEmpty(Request.QueryString["currDate"])) { summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetMostRecentDailySummary(); } else { string eval_curr_date = Convert.ToString(Request.QueryString["currDate"]); summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryByDate(eval_curr_date); } if (summary != null) { if (summary.DailySchoolDistrictAbsenteeSummaryID > 0) { DateTime curr_date = new DateTime(); curr_date = Convert.ToDateTime(summary.DataDate); DailySchoolAbsenteeDashboard.CurrDate = curr_date; Session["curr_date"] = curr_date; litDataDate.Text = String.Format("{0:dddd, MMMM d, yyyy}", curr_date); // possibly add daily school level details control } schooldistrictsidebar.Summary = summary; //DailySummaryCharts.Summary = summary; var prior_summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryPriorOrAfter("prior", Convert.ToString(summary.DataDate)); var after_summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryPriorOrAfter("after", Convert.ToString(summary.DataDate)); if (prior_summary != null) { if (prior_summary.DailySchoolDistrictAbsenteeSummaryID > 0) { string prior_date = String.Format("{0:M/d/yyyy}", prior_summary.DataDate); litDateBefore.Text = "<a href=\"default.aspx?currDate=" + prior_date + "\" class=\"btn btn-large\"><i class=\"glyphicon-step_backward\"></i></a>"; } } if (after_summary != null) { if (after_summary.DailySchoolDistrictAbsenteeSummaryID > 0) { string after_date = String.Format("{0:M/d/yyyy}", after_summary.DataDate); litDateAfter.Text = "<a href=\"default.aspx?currDate=" + after_date + "\" class=\"btn btn-large\"><i class=\"glyphicon-step_forward\"></i></a>"; } } } } if (!String.IsNullOrEmpty(Request.QueryString["schoolDistrictID"])) { curr_school_district_id = Convert.ToInt32(Request.QueryString["spaceID"]); } else { // get first space associated with this user var districts = qPtl_SchoolDistrictAdmin_View.GetSchoolDistrictAdminsByUser(Convert.ToInt32(Context.Items["UserID"])); int i = 0; foreach (var d in districts) { if (i == 0) { curr_school_district_id = d.SchoolDistrictID; // set session variable } i++; } } school_district_id = curr_school_district_id; loadPageInfo(curr_school_district_id); schooldistrictsidebar.SchoolDistrictID = curr_school_district_id; }
public static qHtl_AbsenteeAnalysisVariable GetAbsenteeAnalysisVariablesBySchoolDistrict(int school_district_id) { qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(); variables.container.Select(new DbQuery { Top = "Top(1)", Where = string.Format("SchoolDistrictID = " + school_district_id), OrderBy = "AbsenteeAnalysisVariableID DESC" }); if (variables.AbsenteeAnalysisVariableID > 0) return variables; else return null; }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { int school_id = 0; if (!String.IsNullOrEmpty(Request.QueryString["schoolID"])) school_id = Convert.ToInt32(Request.QueryString["schoolID"]); // get school daily summary var daily_summary = qHtl_DailySchoolAbsenteeData.GetSchoolDailySummaryByDate(school_id, Convert.ToString(curr_date)); // school qOrg_School school = new qOrg_School(school_id); litSchoolTitle.Text = school.School; string address = string.Empty; address = school.Address1; if (!String.IsNullOrEmpty(school.Address2)) address += "<br>" + school.Address2; address += "<br>" + school.City; address += ", " + school.StateProvince; address += " " + school.PostalCode; litSchoolAddress.Text = address; litSchoolPhone.Text = school.SchoolPhone; litSchoolFax.Text = school.SchoolFax; litSchoolLevel.Text = school.SchoolLevel; litDistrict.Text = school.District; // get classroom data List<ClassroomData> data = new List<ClassroomData>(); data = qHtl_DailyClassroomAbsenteeData.LoadDailyClassroomDataInfoList(curr_date, school_id); // get past data string curr_mode = string.Empty; string mode_x_axis = "4 Weeks"; if (!String.IsNullOrEmpty(Request.QueryString["mode"])) { curr_mode = Request.QueryString["mode"]; if (curr_mode == "28_day") { lit28DayTitle.Text = "4 Weeks of " + school.School + " Absentee Data"; mode_x_axis = "4 Weeks"; } else if (curr_mode == "this_year") { lit28DayTitle.Text = "Current School Year " + school.School + " Absentee Data"; mode_x_axis = "Current School Year"; } else { lit28DayTitle.Text = "4 Weeks of " + school.School + " Absentee Data"; mode_x_axis = "4 Weeks"; } } else lit28DayTitle.Text = "4 Weeks of " + school.School + " Absentee Data"; // build options string filter_options = string.Empty; string qs_options = string.Empty; if (!String.IsNullOrEmpty(Request.QueryString["currDate"])) qs_options = "currDate=" + Request.QueryString["currDate"]; filter_options += "<li><a href=\"/manage/school-districts/default.aspx?" + qs_options + "&mode=28_day\">Last 28 Days</a></li>"; filter_options += "<li><a href=\"/manage/school-districts/default.aspx?" + qs_options + "&mode=this_year\">This School Year</a></li>"; litFilterByDateOptions.Text = filter_options; // get 28 days of district data List<SchoolData> d_data = new List<SchoolData>(); d_data = qHtl_DailySchoolAbsenteeData.LoadDayDailySchoolDataInfoListByMode(curr_mode, curr_date, school_id); litDailyDashboardTitle.Text = school.School + " Absentee Data for " + String.Format("{0:dddd, MMMM d, yyyy}", curr_date); litCalendarDate.Text = String.Format("{0:dddd, MMMM d, yyyy}", curr_date); litStatusCurrentDay.Text = String.Format("{0:dddd, MMMM d, yyyy}", curr_date); litTotalEnrolled.Text = String.Format("{0:0,0}", daily_summary.TotalEnrolled); litTotalStudents.Text = String.Format("{0:0,0}", daily_summary.TotalEnrolled); litTotalAbsent.Text = String.Format("{0:0,0}", daily_summary.TotalAbsent); litTotalSick.Text = String.Format("{0:0,0}", daily_summary.TotalSick); litAbsenteeRate.Text = Convert.ToString(Math.Round(daily_summary.Rate, 2)); litHistoricAbsenteeRate.Text = Convert.ToString(Math.Round(daily_summary.HistoricRate, 2)); // ******************* google map -- school status ******************* string strJSMap = string.Empty; strJSMap += "<script>\n"; strJSMap += "function initialize() {\n"; strJSMap += "var myLatlng = new google.maps.LatLng(" + school.Latitude + ", " + school.Longitude + ");\n"; strJSMap += "var mapOptions = {\n"; strJSMap += "zoom: 10,\n"; strJSMap += "scrollwheel: false,\n"; strJSMap += "center: myLatlng\n"; strJSMap += "}\n"; strJSMap += "var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);\n\n"; strJSMap += "var marker = new google.maps.Marker({position: myLatlng, map: map, title: '" + school.School + "'});};\n\n"; strJSMap += "google.maps.event.addDomListener(window, 'load', initialize);\n"; strJSMap += "</script>\n\n"; litMap.Text = strJSMap; // ********************************************************************* if (data != null) { // create opening/closing for chart javascript string strJSLoad = string.Empty; string strJSOpening = string.Empty; strJSOpening += "<script type=\"text/javascript\">\n"; litJSOpening.Text = strJSOpening; string strJSClosing = string.Empty; strJSClosing += "</script>\n"; litJSClosing.Text = strJSClosing; string strJSChart = string.Empty; // ******************* google chart bar -- school list ******************* string school_chart_title = "Classroom Absentee Rates " + String.Format("{0:M/d/yyyy}", curr_date); strJSChart += "function drawAbsences() {\n"; strJSChart += "var dataAbsentee = google.visualization.arrayToDataTable([\n"; strJSChart += "['Classroom', 'Classroom Daily Absentee Rate', { role: 'style' }, 'School Daily Absentee Rate', 'School Moving Average Absentee Rate'],\n"; int j = 0; foreach (var s in data) { if (j < data.Count && j > 0) strJSChart += ",\n"; strJSChart += "['" + s.chart_classroom_name + "', " + Math.Round(s.rate, 2) + ", '" + s.classroom_color + "', " + Math.Round(daily_summary.Rate, 2) + ", " + Math.Round(daily_summary.HistoricRate, 2) + "]"; j++; } strJSChart += "]);\n"; strJSChart += "var options = {\n"; strJSChart += "title: '" + school_chart_title + "',\n"; strJSChart += "hAxis: {tile: \"Schools\", slantedText: true},\n"; strJSChart += "vAxis: {title: 'Absentee Rate (%)'},\n"; strJSChart += "seriesType: \"bars\",\n"; strJSChart += "series: {1: {color: 'gray', type: \"line\"}, 2: {color: 'blue', type: \"line\"}}\n"; strJSChart += "};\n\n"; strJSChart += "var chart = new google.visualization.ComboChart(document.getElementById('visualizationSchoolAbsences'))\n"; strJSChart += "chart.draw(dataAbsentee, options);\n\n"; strJSChart += "}\n"; strJSLoad += "drawAbsences();\n"; strJSChart += "var selectHandler = function(e) {\n"; strJSChart += "alert('just clicked on this item')\n"; strJSChart += "window.location = data.getValue(chart.getSelection()[0]['row'], 1 );\n"; strJSChart += "}\n"; strJSChart += "google.visualization.events.addListener(chart, 'select', selectHandler);\n"; litClassrooms.Text = "<div id=\"visualizationSchoolAbsences\" style=\"height: 600px;\"></div>"; // ********************************************************************* // ******************* google chart pie -- illnesses ******************* int total_illness = daily_summary.Gastrointestinal + daily_summary.Rash + daily_summary.Respiratory + daily_summary.Rash + daily_summary.OtherIllness; int total_unknown = daily_summary.TotalAbsent - total_illness; strJSChart += "function drawIllnesses() {\n"; strJSChart += "var data = google.visualization.arrayToDataTable([\n"; strJSChart += "['Reason', 'Nuumber of Absences'],\n"; strJSChart += "['Illness', " + total_illness + "],\n"; strJSChart += "['Unknown', " + total_unknown + "]\n"; strJSChart += "]);\n"; strJSChart += "new google.visualization.PieChart(document.getElementById('visualizationIllness')).draw(data, {title:\"Types of Absences\"});\n"; strJSChart += "}\n"; strJSLoad += "drawIllnesses();\n"; litTypesOfIllnessesChartGoogle.Text = "<div id=\"visualizationIllness\" style=\"width: 600px; height: 400px;\"></div>"; // ********************************************************************* // ******************* google chart bar -- symptoms ******************* strJSChart += "function drawSymptoms() {\n"; strJSChart += "var wrapper = new google.visualization.ChartWrapper({\n"; strJSChart += "chartType: 'ColumnChart',\n"; strJSChart += "dataTable: [['', 'Gastrointestinal', 'Respiratory', 'Rash', 'Other'],"; strJSChart += "['', " + daily_summary.Gastrointestinal + ", " + daily_summary.Respiratory + ", " + daily_summary.Rash + ", " + daily_summary.OtherIllness + "]],\n"; strJSChart += "options: {'title': 'Types of Illnesses'},\n"; strJSChart += "containerId: 'visualization'\n"; strJSChart += "});\n"; strJSChart += "wrapper.draw();\n"; strJSChart += "}\n\n"; strJSLoad += "drawSymptoms();\n"; litTypesOfSymptomsChartGoogle.Text = "<div id=\"visualization\" style=\"width: 600px; height: 400px;\"></div>"; // ********************************************************************* // ******************* google chart -- absentee rate ******************* strJSChart += "function drawAbsenteeRates() {\n"; strJSChart += "var dataAbsenteeRates = new google.visualization.DataTable();\n"; strJSChart += "dataAbsenteeRates.addColumn('string', 'Date');\n"; strJSChart += "dataAbsenteeRates.addColumn('number', 'School Daily Absentee Rate');\n"; strJSChart += "dataAbsenteeRates.addColumn({type:'string', role:'annotation'});\n"; strJSChart += "dataAbsenteeRates.addColumn({type:'string', role:'annotationText'});\n"; strJSChart += "dataAbsenteeRates.addColumn('number', 'School Moving Average Absentee Rate');\n"; strJSChart += "dataAbsenteeRates.addRows([\n"; int l = 0; string prior_status_html = string.Empty; foreach (var r in d_data) { if (l < d_data.Count && l > 0) strJSChart += ",\n"; string curr_chart_date = r.data_date.ToString("M/d/yyyy"); if (r.data_date == curr_date) { strJSChart += "['" + String.Format("{0:d}", curr_chart_date) + "', " + Math.Round(r.rate, 2) + ", 'Report Date', '" + r.data_date.ToString("M/d/yyyy") + "', " + Math.Round(r.moving_rate_std, 2) + "]"; } else { strJSChart += "['" + String.Format("{0:d}", curr_chart_date) + "', " + Math.Round(r.rate, 2) + ", null, null, " + Math.Round(r.moving_rate_std, 2) + "]"; } // build list of prior school day status indicators prior_status_html += "<tr><td>" + String.Format("{0:d}", curr_chart_date) + "</td>"; if (r.a_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-red\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"white\">3 Sigma Warning <i class=\"icon-warning-sign\"></i></font></a></td>"; } else if (r.b_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-orange\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"white\">Sustained 2-3 Sigma Watch <i class=\"icon-warning-sign\"></i></font></a></td>"; } else if (r.c_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-lime\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"black\">Consistently Above Mean Watch <i class=\"icon-warning-sign\"></i></font></a></td>"; } else if (r.d_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-blue\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"white\">Sustained Above 1 Sigma Alert <i class=\"icon-warning-sign\"></i></font></a></td>"; } else if (r.e_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-purple\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"white\">Sustained Increase Alert <i class=\"icon-warning-sign\"></i></font></a></td>"; } else if (r.f_warning == true) { prior_status_html += "<td width=\"70%\" align=\"center\"><a class=\"btn btn-green\" href=\"javascript:openSchoolWindowGeneric('/manage/school-districts/school-default.aspx?schoolID=" + r.school_id + "&currDate=" + r.data_date + "')\"><font color=\"white\">2 Sigma Alert <i class=\"icon-warning-sign\"></i></font></a></td>"; } else { prior_status_html += "<td width=\"70%\" align=\"center\">Normal <i class=\"icon-ok-sign\"></i></font></td>"; } prior_status_html += "</tr>"; l++; } litSchoolStatusPrior.Text = prior_status_html; strJSChart += "\n]);\n"; strJSChart += "var options = {\n"; strJSChart += "title: '" + school.School + " Absenteeism Trends',\n"; strJSChart += "hAxis: {title: '" + mode_x_axis + "', slantedText: true},\n"; strJSChart += "vAxis: {title: 'School Absentee Rate (%)'},\n"; strJSChart += "height: 500\n"; strJSChart += "};\n"; strJSChart += "var chart = new google.visualization.LineChart(document.getElementById('visualizationAbsenteeRate'));\n"; strJSChart += "chart.draw(dataAbsenteeRates, options);\n"; strJSChart += "}\n"; strJSLoad += "drawAbsenteeRates();\n"; lit28DaSchoolRateChart.Text = "<div id=\"visualizationAbsenteeRate\" style=\"height: 600px;\"></div>"; // ********************************************************************* // add all finalized JS string finalJSLoad = "google.load(\"visualization\", \"1.1\", {packages:[\"corechart\"]});\n"; finalJSLoad += "google.setOnLoadCallback(init);\n\n"; finalJSLoad += "function init() {\n"; finalJSLoad = finalJSLoad + strJSLoad + "\n}\n\n"; litJSChart.Text = strJSChart; // finalize load code litJSLoad.Text = "<script type=\"text/javascript\">\n" + finalJSLoad + "</script>"; int a_e_warnings = 0; string warnings_html = string.Empty; string text = string.Empty; warnings_html += "<ul>"; string warning_type = string.Empty; string warning_message = string.Empty; string tip_message = string.Empty; string warning_label = string.Empty; string warning_color = string.Empty; string warning_html_color = string.Empty; string font_color = "white"; tip_message = daily_summary.School; warning_message = daily_summary.School; if (daily_summary.A_Warning == true) { warning_type = "3 sigma warning"; warning_message += " (3 sigma warning is triggered for a school when current day absentee rate is greater than 3 sigma of the absentee rate)"; tip_message += " Data = [current day absentee rate = " + daily_summary.Rate + ", 3 sigma absentee rate = " + daily_summary.A_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; warning_label = "btn-red"; warning_color = "btn-red"; warning_html_color = "#e51400"; a_e_warnings++; } else if (daily_summary.B_Warning == true) { if (!String.IsNullOrEmpty(warning_type)) warning_type += ", Sustained 2-3 Sigma Watch"; else warning_type = "Sustained 2-3 Sigma Watch"; warning_message += " (Sustained 2-3 Sigma Watch is triggered for a school when the 2 of the prior 3 absentee rates exceed 2 sigma of the absentee rate)"; tip_message += " Data = [current day absentee rate = " + daily_summary.Rate + ", 2 sigma absentee rates = " + daily_summary.B_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; a_e_warnings++; warning_label = "btn-orange"; warning_html_color = "#f8a31f"; warning_color = "btn-orange"; } else if (daily_summary.C_Warning == true) { if (!String.IsNullOrEmpty(warning_type)) warning_type += ", Consistently Above Mean Watch"; else warning_type = "Consistently Above Mean Watch"; warning_message += " (Consistently Above Mean Watch is triggered for a school when at least 4 of the 5 prior absentee rates all exceed 1 sigma of the absentee rate)"; tip_message += " Data = [current day absentee rate = " + daily_summary.Rate + ", 1 sigma absentee rates = " + daily_summary.C_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; a_e_warnings++; warning_label = "btn-lime"; warning_html_color = "#ffff00"; font_color = "black"; } else if (daily_summary.F_Warning == true) { if (!String.IsNullOrEmpty(warning_type)) warning_type += ", 2 Sigma Alert"; else warning_type = "2 Sigma Alert"; warning_message += " (2 Sigma Alert triggered for a school when current day absentee rate is greater than 2 sigma of the absentee rate)"; tip_message += " Data = [current day absentee rate = " + daily_summary.Rate + ", 2 sigma absentee rate = " + daily_summary.F_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; a_e_warnings++; warning_html_color = "#393"; warning_label = "btn-green"; } else if (daily_summary.D_Warning == true) { if (!String.IsNullOrEmpty(warning_type)) warning_type += ", Sustained Above 1 Sigma Alert"; else warning_type = "Sustained Above 1 Sigma Alert"; warning_message += " (Sustained Above 1 Sigma Alert is triggered for a school when the 8 prior absentee rates are greater than the historic absentee rate)"; tip_message += " Data = [historic absentee rate = " + daily_summary.HistoricRate + ", 8 days prior absentee rates = " + daily_summary.D_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; a_e_warnings++; warning_html_color = "#368ee0"; warning_label = "btn-blue"; } else if (daily_summary.E_Warning == true) { if (!String.IsNullOrEmpty(warning_type)) warning_type += ", Sustained Increase Alert"; else warning_type = "Sustained Increase Alert"; warning_message += " (Sustained Increase Alert is triggered for a school when the 6 prior absentee rates are all increasing)"; tip_message += " Data = [current day absentee rate = " + daily_summary.Rate + ", 8 days prior absentee rates = " + daily_summary.E_WarningValues + "]"; //warnings_html += "<li> <span class=\"label label-important\">" + warning_type + "</span> <a href=\"#\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_message + " <i class=\"icon-exclamation-sign\"></i></li>"; a_e_warnings++; warning_html_color = "#a200ff"; warning_label = "btn-purple"; } if (!String.IsNullOrEmpty(warning_type)) { if (font_color == "black") warnings_html += "<li><div style=\"height:30px!important;\"><a href=\"#\" rel=\"popover\" class=\"btn " + warning_label + " btn-small\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + warning_message + ": " + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\"><font color=\"black\">" + warning_type + " <i class=\"icon-info-sign\"></i></font></a> " + warning_message + " " + tip_message + "</div></li>"; else warnings_html += "<li><div style=\"height:30px!important;\"><a href=\"#\" rel=\"popover\" class=\"btn " + warning_label + " btn-small\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + warning_message + ": " + tip_message + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_type + " <i class=\"icon-info-sign\"></i></a> " + warning_message + " " + tip_message + "</div></li>"; } if (a_e_warnings > 0) { warnings_html += "</ul>"; litHealthWarnings.Text = warnings_html; } litNumAbsenteeWarnings.Text = "<span class=\"badge\">" + a_e_warnings + "</span>"; qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(daily_summary.SchoolDistrictID); // symptom warnings string s_warning_type = string.Empty; string s_tip_message = string.Empty; string s_warnings_html = string.Empty; int num_symptom_warnings = 0; string currentStatus = "normal"; plhStatusNormal.Visible = false; plhStatusCaution.Visible = false; plhStatusWarning.Visible = false; string currStatusDescription = string.Empty; string tip_data = string.Empty; if (daily_summary.GastrointestinalStatus == "red") { warning_type = "Gastrointestinal Warning"; tip_message += "A Gastrointestinal warning is triggered for a school when gastroinstestinal-related absenses make up " + variables.RedGastrointestinalBoundary + "% or more of all reported absenses."; tip_data = daily_summary.School + " Gastrointestinal-related absenses on " + String.Format("{0:d}", curr_date) + " = " + Math.Round(daily_summary.GastrointestinalRate, 2) + "%"; num_symptom_warnings++; } if (daily_summary.RashStatus == "red") { warning_type = "Rash Warning"; tip_message += "A Rash warning is triggered for a school when rash-related absenses make up " + variables.RedRashBoundary + "% or more of all resported absenses."; tip_data = daily_summary.School + " Rash-related absenses on " + String.Format("{0:d}", curr_date) + " = " + Math.Round(daily_summary.RashRate, 2) + "%"; ; num_symptom_warnings++; } if (daily_summary.RespiratoryStatus == "red") { warning_type = "Respiratory Warning"; tip_message += "A Respiratory warning is triggered for a school when respiratory-related absenses make up " + variables.RedRespiratoryBoundary + "% or more of all reported absenses."; tip_data = daily_summary.School + " Respiratory-related absenses on " + String.Format("{0:d}", curr_date) + " = " + Math.Round(daily_summary.RespiratoryRate, 2) + "%"; num_symptom_warnings++; } if (!String.IsNullOrEmpty(warning_type)) { s_warnings_html += "<li><div style=\"height:30px!important;\"><a href=\"#\" class=\"btn btn-darkblue btn-small\" rel=\"popover\" data-trigger=\"hover\" data-placement=\"left\" title=\"\" data-content=\"" + tip_message + " " + tip_data + "\" data-original-title=\"" + warning_type + " at " + daily_summary.School + "\">" + warning_type + " <i class=\"icon-info-sign\"></i></a>"; s_warnings_html += "</div></li>"; } if (a_e_warnings > 0) { currentStatus = "warning"; currStatusDescription += "There are absentee warnings.<br>"; } litNumSymptomWarnings.Text = "<span class=\"badge\">" + num_symptom_warnings + "</span>"; string status_text = "School Status for <strong>" + String.Format("{0:M/d/yyyy}", curr_date) + "</strong><br><br>"; if (currentStatus == "normal") { plhStatusNormal.Visible = true; currStatusDescription = "There are no absentee or symptom warnings. All other trends appear to be normal."; } //else if (currentStatus == "caution") //{ // plhStatusCaution.Visible = true; // currStatusDescription = "There are illness symptom trends of concern."; //} else if (currentStatus == "warning") { plhStatusWarning.Visible = true; litWarningStatusColor.Text = "bgcolor=\"" + warning_html_color + "\""; litWarningFooter.Text = warning_type; } litNormalHeader.Text = status_text; litCautionHeader.Text = status_text; litWarningHeader.Text = status_text; litStatusDescription.Text = "<i class=\"icon-info-sign\"></i> " + currStatusDescription; } } }
protected void Page_Load(object sender, EventArgs e) { if (!Page.IsPostBack) { if (school_district_id == 0) school_district_id = 1; qHtl_AbsenteeAnalysisVariable variables = new qHtl_AbsenteeAnalysisVariable(school_district_id); if (summary == null) { if (String.IsNullOrEmpty(Request.QueryString["currDate"])) { summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetMostRecentDailySummary(); } else { string eval_curr_date = Convert.ToString(Request.QueryString["currDate"]); summary = qHtl_DailySchoolDistrictAbsenteeSummary.GetDailySummaryByDate(eval_curr_date); } } if (summary != null) { if (summary.DailySchoolDistrictAbsenteeSummaryID > 0) { DateTime curr_date = new DateTime(); curr_date = Convert.ToDateTime(summary.DataDate); litMostRecentDate.Text = String.Format("{0:MMMM d, yyyy}", curr_date); litEnrolled.Text = String.Format("{0:0,0}", summary.TotalEnrolled); litAbsences.Text = String.Format("{0:0,0}", summary.TotalAbsent); int total_illness = summary.Gastrointestinal + summary.Rash + summary.Respiratory + summary.Rash + summary.OtherIllness; int total_unknown = summary.TotalAbsent - total_illness; litIllness.Text = String.Format("{0:0,0}", total_illness); litUnknown.Text = String.Format("{0:0,0}", total_unknown); litRate.Text = Convert.ToString(Math.Round(summary.OverallAbsenteeRate, 2)); litMovingAverage.Text = Convert.ToString(Math.Round(summary.HistoricAbsenteeRate, 2)); decimal num_gast = Convert.ToDecimal(summary.Gastrointestinal); decimal num_resp = Convert.ToDecimal(summary.Respiratory); decimal num_rash = Convert.ToDecimal(summary.Rash); decimal num_othr = Convert.ToDecimal(summary.OtherIllness); decimal num_illness_total = num_gast + num_resp + num_rash + num_othr; decimal percent_gast = 0; decimal percent_resp = 0; decimal percent_rash = 0; decimal percent_othr = 0; if (num_gast > 0) { percent_gast = num_gast / num_illness_total; percent_gast = percent_gast * 100; } if (num_resp > 0) { percent_resp = num_resp / num_illness_total; percent_resp = percent_resp * 100; } if (num_rash > 0) { percent_rash = num_rash / num_illness_total; percent_rash = percent_rash * 100; } if (num_othr > 0) { percent_othr = num_othr / num_illness_total; percent_othr = percent_othr * 100; } litGastBar.Text = "style=\"width:" + percent_gast + "%\""; litRespBar.Text = "style=\"width:" + percent_resp + "%\""; litRashBar.Text = "style=\"width:" + percent_rash + "%\""; litOthrBar.Text = "style=\"width:" + percent_othr + "%\""; litGastrointestinal.Text = "(" + Convert.ToString(summary.Gastrointestinal) + ")"; litRespiratory.Text = "(" + Convert.ToString(summary.Respiratory) + ")"; litRash.Text = "(" + Convert.ToString(summary.Rash) + ")"; litOtherIllness.Text = "(" + Convert.ToString(summary.OtherIllness) + ")"; litProcessed.Text = Convert.ToString(summary.Created); if (num_warnings > 0) litNumWarnings.Text = "<a href=\"/manage/school-districts/school-health-warnings.aspx\">" + num_warnings + " A-E Warnings</a>"; else { int num_a_e_warnings = 0; num_a_e_warnings = qHtl_DailySchoolAbsenteeData.CountNumberAEWarningsByDate(Convert.ToDateTime(summary.DataDate)); if (num_a_e_warnings > 0) litNumWarnings.Text = "<i class=\"icon-warning-sign\"></i> <strong>(" + num_a_e_warnings + ")</strong> Absentee Warnings"; else litNumWarnings.Text = "No warnings for this date"; } } } } }