Exemple #1
0
        /// <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);
        }