void computeWorker_DoWork(object sender, DoWorkEventArgs e) { Result result = new Result(); EpiDataHelper DataHelper = e.Argument as EpiDataHelper; if (DataHelper != null && DataHelper.Project != null && DataHelper.Project.CollectedData != null) { IDbDriver db = DataHelper.Project.CollectedData.GetDatabase(); DateTime today = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); DataTable labTable = DataHelper.LabTable; double patientsTested = 0; double samplesCollected = labTable.Rows.Count;//0; foreach (CaseViewModel caseVM in DataHelper.CaseCollection) { if (caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded) { double samplesForCurrentCase = labTable.Select("[FKEY] = '" + caseVM.RecordId + "'").Count(); //samplesCollected = samplesCollected + samplesForCurrentCase; if (samplesForCurrentCase > 0) { patientsTested++; } } } // Commented below is the old method, which simply counted everyone with lab sample records. Customer noted this needs to change. See new code. //result.PatientsTested = patientsTested.ToString(); // New code is below. Epi.Fields.RenderableField finalLabClassField = DataHelper.CaseForm.Fields["FinalLabClass"] as Epi.Fields.RenderableField; if (finalLabClassField != null && finalLabClassField.Page != null) { string finalLabClassTableName = finalLabClassField.Page.TableName; string queryText = "select distinct lrf.FKEY from " + finalLabClassTableName + " crf INNER JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where (crf.FinalLabClass <> '' AND crf.FinalLabClass is not null)"; Query selectQuery = db.CreateQuery(queryText); int count = db.Select(selectQuery).Rows.Count; // TODO: Remove excluded cases result.PatientsTested = count.ToString(); result.SamplesCollected = samplesCollected.ToString(); } e.Result = result; } }
public static int GetControlTop(Epi.Fields.RenderableField field, int height) { return((int)Math.Ceiling(field.ControlTopPositionPercentage * height)); }
public static int GetControlLeft(Epi.Fields.RenderableField field, int width) { return((int)Math.Ceiling(field.ControlLeftPositionPercentage * width)); }
/// <summary> /// Orders the columns in a DataTable by the given ordering method. /// </summary> /// <param name="table">The table whose columns should be sorted.</param> /// <param name="columnSortOrder">The order by which the columns should be sorted.</param> /// <param name="view">The Epi Info 7 form</param> public static void OrderColumns(DataTable table, ColumnSortOrder columnSortOrder, View view = null) { #region Input Validation if (table == null) { throw new ArgumentNullException("table"); } #endregion // Input Validation if (columnSortOrder == ColumnSortOrder.None) { return; } bool isUsingEpiProject = (view == null); bool sortByTabOrder = (columnSortOrder == ColumnSortOrder.TabOrder); if (!sortByTabOrder || !isUsingEpiProject) { // alphabetical sort List <string> columnNames = new List <string>(); foreach (DataColumn dc in table.Columns) { columnNames.Add(dc.ColumnName); } columnNames.Sort(); if (columnNames.Contains("UniqueKey")) { columnNames.Remove("UniqueKey"); columnNames.Add("UniqueKey"); } else if (columnNames.Contains("UNIQUEKEY")) { columnNames.Remove("UNIQUEKEY"); columnNames.Add("UNIQUEKEY"); } for (int i = 0; i < columnNames.Count; i++) { string columnName = columnNames[i]; table.Columns[columnName].SetOrdinal(i); } } else if (sortByTabOrder && isUsingEpiProject) { // tab order sort Dictionary <string, int> columnNames = new Dictionary <string, int>(); int runningTabIndex = 0; foreach (Page page in view.Pages) { SortedDictionary <double, string> fieldsOnPage = new SortedDictionary <double, string>(); foreach (Epi.Fields.Field field in page.Fields) { if (field is Epi.Fields.RenderableField && field is Epi.Fields.IDataField) { Epi.Fields.RenderableField renderableField = field as Epi.Fields.RenderableField; if (renderableField != null) { double tabIndex = renderableField.TabIndex; while (fieldsOnPage.ContainsKey(tabIndex)) { tabIndex = tabIndex + 0.1; } fieldsOnPage.Add(tabIndex, field.Name); } } } foreach (KeyValuePair <double, string> kvp in fieldsOnPage) { columnNames.Add(kvp.Value, runningTabIndex); runningTabIndex++; } } if (columnNames.ContainsKey("UniqueKey")) { columnNames["UniqueKey"] = runningTabIndex + 1; } else if (columnNames.ContainsKey("UNIQUEKEY")) { columnNames["UNIQUEKEY"] = runningTabIndex + 1; } else { columnNames.Add("UNIQUEKEY", runningTabIndex + 1); } int newRunningTabIndex = 0; // to prevent arg exceptions; TODO: Fix this better foreach (KeyValuePair <string, int> kvp in columnNames) { if (table.Columns.Contains(kvp.Key)) { table.Columns[kvp.Key].SetOrdinal(newRunningTabIndex); newRunningTabIndex++; } } } }
void computeWorker_DoWork(object sender, DoWorkEventArgs e) { Result result = new Result(); EpiDataHelper DataHelper = e.Argument as EpiDataHelper; if (DataHelper != null && DataHelper.Project != null && DataHelper.Project.CollectedData != null) { IDbDriver db = DataHelper.Project.CollectedData.GetDatabase(); int total = (from caseVM in DataHelper.CaseCollection where caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); string format = "P1"; int count = (from caseVM in DataHelper.CaseCollection where caseVM.FinalLabClass == Core.Enums.FinalLabClassification.ConfirmedAcute && caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); result.ConfirmedAcuteCount = count.ToString(); result.ConfirmedAcutePercent = ((double)count / (double)total).ToString(format); count = (from caseVM in DataHelper.CaseCollection where caseVM.FinalLabClass == Core.Enums.FinalLabClassification.ConfirmedConvalescent && caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); result.ConfirmedConvalescentCount = count.ToString(); result.ConfirmedConvalescentPercent = ((double)count / (double)total).ToString(format); count = (from caseVM in DataHelper.CaseCollection where caseVM.FinalLabClass == Core.Enums.FinalLabClassification.NotCase && caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); result.NegativeCount = count.ToString(); result.NegativePercent = ((double)count / (double)total).ToString(format); count = (from caseVM in DataHelper.CaseCollection where caseVM.FinalLabClass == Core.Enums.FinalLabClassification.Indeterminate && caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); result.IndeterminateCount = count.ToString(); result.IndeterminatePercent = ((double)count / (double)total).ToString(format); count = (from caseVM in DataHelper.CaseCollection where caseVM.FinalLabClass == Core.Enums.FinalLabClassification.NeedsFollowUpSample && caseVM.EpiCaseDef != Core.Enums.EpiCaseClassification.Excluded select caseVM).Count(); result.NeedsFollowUpCount = count.ToString(); result.NeedsFollowUpPercent = ((double)count / (double)total).ToString(format); Epi.Fields.RenderableField finalLabClassField = DataHelper.CaseForm.Fields["FinalLabClass"] as Epi.Fields.RenderableField; Epi.Fields.RenderableField epiCaseDefField = DataHelper.CaseForm.Fields["EpiCaseDef"] as Epi.Fields.RenderableField; if (finalLabClassField != null && epiCaseDefField != null && finalLabClassField.Page != null && epiCaseDefField.Page != null) { string finalLabClassTableName = finalLabClassField.Page.TableName; string epiCaseClassTableName = epiCaseDefField.Page.TableName; string queryText = ""; if (db.ToString().ToLower().Contains("sql")) { queryText = "select count(*) from " + finalLabClassTableName + " AS crf INNER JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId INNER JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((crf.FinalLabClass = '' OR crf.FinalLabClass is null) AND (crfEpiCaseClass.EpiCaseDef <> '4'))"; } else { queryText = "select count(*) from ((" + finalLabClassTableName + " AS crf) INNER JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId) INNER JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((crf.FinalLabClass = '' OR crf.FinalLabClass is null) AND (crfEpiCaseClass.EpiCaseDef <> '4'))"; } Query selectQuery = db.CreateQuery(queryText); count = (int)db.ExecuteScalar(selectQuery); if (db.ToString().ToLower().Contains("sql")) { queryText = "select crfEpiCaseClass.ID from " + finalLabClassTableName + " AS crf INNER JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId INNER JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((crf.FinalLabClass = '' OR crf.FinalLabClass is null) AND (crfEpiCaseClass.EpiCaseDef <> '4'))"; } else { queryText = "select crfEpiCaseClass.ID from ((" + finalLabClassTableName + " AS crf) INNER JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId) INNER JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((crf.FinalLabClass = '' OR crf.FinalLabClass is null) AND (crfEpiCaseClass.EpiCaseDef <> '4'))"; } selectQuery = db.CreateQuery(queryText); DataTable dt = db.Select(selectQuery); WordBuilder wb = new WordBuilder(","); foreach (DataRow row in dt.Rows) { wb.Add(row["ID"].ToString()); } result.PendingIDs = wb.ToString(); result.PendingCount = count.ToString(); result.PendingPercent = ((double)count / (double)total).ToString(format); if (db.ToString().ToLower().Contains("sql")) { queryText = "select count(*) from CaseInformationForm AS crf LEFT JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId LEFT JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((lrf.GlobalRecordId = '' OR lrf.GlobalRecordId is null) AND (crfEpiCaseClass.EpiCaseDef <> '4') AND crf.RecStatus = 1)"; } else { queryText = "select count(*) from ((CaseInformationForm AS crf) LEFT JOIN " + epiCaseClassTableName + " AS crfEpiCaseClass on crf.GlobalRecordId = crfEpiCaseClass.GlobalRecordId) LEFT JOIN LaboratoryResultsForm lrf on crf.GlobalRecordId = lrf.FKEY where ((lrf.GlobalRecordId = '' OR lrf.GlobalRecordId is null) AND (crfEpiCaseClass.EpiCaseDef <> '4') AND crf.RecStatus = 1)"; } selectQuery = db.CreateQuery(queryText); count = (int)db.ExecuteScalar(selectQuery); result.NotSampledCount = count.ToString(); result.NotSampledPercent = ((double)count / (double)total).ToString(format); e.Result = result; } else { throw new InvalidOperationException("FinalLabClass and EpiCaseDef must both be non-null fields in computeWorker_doWork in LabClassAllPatients.xaml.cs"); } } }