/// <summary> /// Finds the patient. /// </summary> /// <param name="facilityId">The facility identifier.</param> /// <param name="lastname">The lastname.</param> /// <param name="middlename">The middlename.</param> /// <param name="firstname">The firstname.</param> /// <param name="enrollment">The enrollment.</param> /// <param name="gender">The gender.</param> /// <param name="status">The status.</param> /// <param name="dob">The dob.</param> /// <param name="registrationDate">The registration date.</param> /// <param name="moduleId">The module identifier.</param> /// <param name="maxRecords">The maximum records.</param> /// <returns></returns> public static DataTable FindPatient(int facilityId, string lastname, string middlename, string firstname, string enrollment, string gender, string status, DateTime?dob, DateTime?registrationDate, int moduleId = 999, int maxRecords = 100, string phoneNumber = "", string identifierName = "") { IPatientRegistration pMgr = (IPatientRegistration)ObjectFactory.CreateInstance("BusinessProcess.Clinical.BPatientRegistration, BusinessProcess.Clinical"); string rowFilter = ""; string rowFilter2 = ""; string ruleOne = ""; string ruleOneAge = ""; string ruleTwoAge = ""; string rule1Sex = ""; string rule2Sex = ""; string ruletwo = ""; if (moduleId < 999) { IModule moduleMgr = (IModule)ObjectFactory.CreateInstance("BusinessProcess.FormBuilder.BModule, BusinessProcess.FormBuilder"); List <ServiceRule> rules = moduleMgr.GetBusinessRule(moduleId); if (rules != null && rules.Count > 0) { ServiceRule setOneAge = rules.Where(r => r.RuleSet == 1 && r.RuleReferenceId == "ACTIVE_AGE_RANGE_YEARS").FirstOrDefault(); List <ServiceRule> setOneFemale = rules.Where(r => r.RuleSet == 1 && r.RuleReferenceId == "ACTIVE_FEMALE").ToList(); List <ServiceRule> setOneMale = rules.Where(r => r.RuleSet == 1 && r.RuleReferenceId == "ACTIVE_MALE").ToList(); if (setOneAge != null) { if (setOneAge.MinValue != "" || setOneAge.MaxValue != "") { rowFilter = string.Format("{0} Age >= {1} And Age <= {2} ", rowFilter, Convert.ToDecimal(setOneAge.MinValue), Convert.ToDecimal(setOneAge.MaxValue)); ruleOne = string.Format("And (convert(varchar,round(cast(datediff(dd,DOB,DateofDeath)/365.25 as decimal(5,2)),2))) between {0} and {1})", setOneAge.MinValue, setOneAge.MaxValue); ruleOneAge = string.Format(" (Age between {0} and {1}) ", setOneAge.MinValue, setOneAge.MaxValue); } } if (setOneFemale != null && setOneFemale.Count > 0 && setOneMale != null && setOneMale.Count > 0) { } else { if (setOneFemale.Count > 0) { if (rowFilter != "") { rowFilter = rowFilter + " and "; } rowFilter = string.Format("{0} Sex = '{1}' ", rowFilter, "Female"); ruleOne += " And (Sex = 17) "; rule1Sex = "(Sex = 'Female')"; } else if (setOneMale.Count > 0) { if (rowFilter != "") { rowFilter = rowFilter + " and "; } rowFilter = string.Format("{0} Sex = '{1}' ", rowFilter, "male"); ruleOne += " And (Sex = 16) "; rule1Sex = "(Sex = 'Male')"; } } ServiceRule set2Age = rules.Where(r => r.RuleSet == 2 && r.RuleReferenceId == "ACTIVE_AGE_RANGE_YEARS").FirstOrDefault(); List <ServiceRule> set2Female = rules.Where(r => r.RuleSet == 2 && r.RuleReferenceId == "ACTIVE_FEMALE").ToList(); List <ServiceRule> set2Male = rules.Where(r => r.RuleSet == 2 && r.RuleReferenceId == "ACTIVE_MALE").ToList(); if (set2Age != null) { if (set2Age.MinValue != "" || set2Age.MaxValue != "") { rowFilter2 = string.Format("{0} Age >= {1} And Age <= {2} ", rowFilter2, Convert.ToDecimal(set2Age.MinValue), Convert.ToDecimal(set2Age.MaxValue)); ruletwo = string.Format("And (convert(varchar,round(cast(datediff(dd,DOB,DateofDeath)/365.25 as decimal(5,2)),2))) between {0} and {1})", setOneAge.MinValue, setOneAge.MaxValue); ruleTwoAge = string.Format(" (Age between {0} and {1})", set2Age.MinValue, set2Age.MaxValue); } if (set2Female != null && set2Female.Count > 0 && set2Male != null && set2Male.Count > 0) { } else { if (set2Female.Count > 0) { if (rowFilter2 != "") { rowFilter2 = rowFilter2 + " and "; } rowFilter2 = string.Format("{0} Sex = '{1}' ", rowFilter2, "Female"); ruletwo += " And (Sex = 17) "; rule2Sex = " (Sex = 'Female') "; } else if (set2Male.Count > 0) { if (rowFilter2 != "") { rowFilter2 = rowFilter2 + " and "; } rowFilter2 = string.Format("{0} Sex = '{1}' ", rowFilter2, "male"); ruletwo += " And (Sex = 16) "; rule2Sex = " (Sex = 'Male') "; } } string mainRowFilter = rowFilter; if (rowFilter2 != "") { mainRowFilter = mainRowFilter + " or (" + rowFilter2 + " )"; } //dtPatient.DefaultView.RowFilter = mainRowFilter; } } ruleOne = ruleOneAge.Trim() + (rule1Sex.Trim() != "" ? " And " + rule1Sex.Trim() : ""); ruletwo = ruleTwoAge.Trim() + (rule2Sex.Trim() != "" ? " And " + rule2Sex.Trim() : ""); if (ruleOne.Trim() != "" && ruletwo.Trim() != "") { rowFilter = string.Format(" Where ( {0} or ( {1}))", ruleOne, ruletwo); } else if (ruleOne.Trim() != "") { rowFilter = " Where " + ruleOne; } else if (ruletwo.Trim() != "") { rowFilter = " Where " + ruletwo; } } DataTable dtPatient = pMgr.GetPatientSearchResults(facilityId, lastname, middlename, firstname, enrollment, gender, status, dob, registrationDate, moduleId, maxRecords, rowFilter, phoneNumber, identifierName); // DataTable dt = dtPatient.DefaultView.ToTable(); return(dtPatient); }