public static WorkerCollection GetSiteContacts()
        {
            DataTable dtResults = null;
            FinalBuild.DataAccess objADO = Domain.GetADOInstance(Domain.eConnectionName.Metadata);
            string strStoredProcedure = "selHansenSiteContacts";
            dtResults = objADO.GetDataTable(strStoredProcedure, "SiteContacts");
            Worker objWorker;
            WorkerCollection colMembers = new WorkerCollection();

            foreach (DataRow drMember in dtResults.Rows)
            {
                objWorker = new Worker();
                objWorker.LoginName = drMember["NTLoginID"].ToString();
                if (drMember["EmpSurname"] != System.DBNull.Value)
                {
                    objWorker.Surname = drMember["EmpSurname"].ToString();
                }
                if (drMember["EmpForenames"] != System.DBNull.Value)
                {
                    objWorker.Forenames = drMember["EmpForenames"].ToString();
                }
                if (drMember["EmpNo"] != System.DBNull.Value)
                {
                    objWorker.EmpNo = drMember["EmpNo"].ToString();
                }

                colMembers.Add(objWorker);

            }

            return colMembers;
        }
        public static WorkerCollection PopulateTyped(DataSet collectionMembers, string sortPropertyName)
        {
            WorkerCollection colMembers = new WorkerCollection();
            Worker objWorker = null;
            DataRow[] gangMembers = null;
            DataRow[] contractorDetails = null;
            DataRow drContractor = null;
            string filterExpression = string.Empty;

            collectionMembers.Tables[0].TableName = "Common";
            if (collectionMembers.Tables.Count > 1)
            {
                collectionMembers.Tables[1].TableName = "GangMembers";
                collectionMembers.Tables[2].TableName = "ContractorDetails";
            }

            foreach (DataRow drMember in collectionMembers.Tables["Common"].Rows)
            {
                if (drMember["MobileIdentityType"].ToString().ToUpper() == "GANG")
                {
                    objWorker = new Gang();
                }
                else if (drMember["MobileIdentityType"].ToString().ToUpper() == "CONTRACTOR")
                {
                    objWorker = new Contractor();
                }
                else
                {
                    objWorker = new Engineer();   //  Assume Engineer
                }
                objWorker.UserID = drMember["UserID"].ToString();
                objWorker.LoginName = drMember["ADLoginID"].ToString();
                objWorker.EmpNo = drMember["EmpNo"].ToString();
                if (drMember["EmpSurname"] != System.DBNull.Value)
                {
                    objWorker.Surname = drMember["EmpSurname"].ToString();
                }
                if (drMember["EmpForenames"] != System.DBNull.Value)
                {
                    objWorker.Forenames = drMember["EmpForenames"].ToString();
                }
                if (drMember["EmpPrefname"] != System.DBNull.Value)
                {
                    objWorker.EmpPrefname = drMember["EmpPrefname"].ToString();
                }
                else
                {
                    objWorker.EmpPrefname = objWorker.Forenames;
                }
                if (drMember["EmpAddress"] != System.DBNull.Value)
                {
                    objWorker.EmpAddress = drMember["EmpAddress"].ToString();
                }
                else
                {
                    objWorker.EmpAddress = string.Empty;
                }
                if (!drMember["EmailAddress"].Equals(DBNull.Value))
                {
                    objWorker.Email = drMember["EmailAddress"].ToString();
                }
                if (!drMember["EmpMobileTelNo"].Equals(DBNull.Value))
                {
                    objWorker.MobileNo = drMember["EmpMobileTelNo"].ToString();
                }
                objWorker.AreaDetails = new AreaDetails();
                objWorker.AreaDetails.PrimaryArea = new Area();
                objWorker.AreaDetails.PrimaryArea.Name = "UNKNOWN";
                objWorker.AreaDetails.SubArea = new Area();
                objWorker.AreaDetails.SubArea.Name = "UNKNOWN";

                if (!drMember["PrimaryArea"].Equals(DBNull.Value))
                {
                    objWorker.AreaDetails.PrimaryArea.Name = drMember["PrimaryArea"].ToString();
                }

                if (!drMember["SubArea"].Equals(DBNull.Value))
                {
                    objWorker.AreaDetails.SubArea.Name = drMember["SubArea"].ToString();
                }

                if (drMember["IsClickEngineer"] != System.DBNull.Value)
                {
                    objWorker.IsClickEngineer = (bool)drMember["IsClickEngineer"];
                }

                if (collectionMembers.Tables.Count > 1)
                {
                    if (objWorker is Gang)
                    {
                        try
                        {
                            int numericUserID = 0;
                            if (int.TryParse(objWorker.UserID, out numericUserID))
                            {
                                throw new Exception("Gang ID must start with a non-numeric character");
                                // NB: .Select(filterExpression) can't handle it otherwise
                            }
                            filterExpression = string.Format("GangID='{0}'", objWorker.UserID);
                            gangMembers = collectionMembers.Tables["GangMembers"].Select(filterExpression);
                            if (gangMembers != null && gangMembers.Length > 0)
                            {
                                string[] gangUserIDs = new string[gangMembers.Length];
                                for (int index = 0; index < gangMembers.Length; index++)
                                {
                                    gangUserIDs[index] = gangMembers[index]["MemberID"].ToString();
                                }
                                ((Gang)objWorker).Members = WorkerCollection.GetTypedWorkers(string.Empty, gangUserIDs);
                            }
                        }
                        catch (Exception excE)
                        {
                            throw new Exception("Error attemping to load GangMembers : " + excE.Message, excE);
                        }
                    }
                    if (objWorker is Contractor)
                    {
                        // 2 types of contractor so only add extra properties to sub contractor
                        if (objWorker.AreaDetails.SubArea.Name.ToUpper() == "CONTRACTOR")
                        {
                            try
                            {
                                filterExpression = string.Format("UserID='{0}'", objWorker.UserID);
                                contractorDetails = collectionMembers.Tables["ContractorDetails"].Select(filterExpression);
                                if (contractorDetails != null && contractorDetails.Length > 0)
                                {
                                    drContractor = contractorDetails[0];
                                    objWorker.Email = drContractor[1].ToString();//Email
                                    ((Contractor)objWorker).Telephone = drContractor[2].ToString(); //Telephone
                                    ((Contractor)objWorker).Mobile = drContractor[3].ToString();    //Mobile
                                    ((Contractor)objWorker).Password = drContractor[4].ToString();  //Password
                                }
                            }
                            catch (Exception excE)
                            {
                                throw new Exception("Error attemping to load Contractors : " + excE.Message, excE);
                            }
                        }
                    }
                }

                colMembers.Add(objWorker);
            }

            if (!string.IsNullOrEmpty(sortPropertyName))
            {
                string actualPropertyName = sortPropertyName;
                if (actualPropertyName.EndsWith(" DESC"))
                {
                    actualPropertyName = actualPropertyName.Replace(" DESC", "");
                    colMembers.Sort(actualPropertyName, System.ComponentModel.ListSortDirection.Descending);
                }
                else
                {
                    colMembers.Sort(actualPropertyName, System.ComponentModel.ListSortDirection.Ascending);
                }
            }
            return colMembers;
        }
 public static WorkerCollection GetGangs(string sortPropertyName)
 {
     WorkerCollection colMembers = new WorkerCollection();
     WorkerCollection allMembers = GetTypedWorkers(sortPropertyName);
     foreach (Worker worker in allMembers)
     {
         if (worker is Gang)
         {
             colMembers.Add(worker);
         }
     }
     return colMembers;
 }
        public static WorkerCollection Populate(DataTable collectionMembers)
        {
            WorkerCollection colMembers = new WorkerCollection();
            Worker objWorker = null;

            foreach (DataRow drMember in collectionMembers.Rows)
            {
                objWorker = new Worker();
                objWorker.LoginName = drMember["ADLoginID"].ToString();
                objWorker.UserID = objWorker.LoginName;

                objWorker.EmpNo = drMember["EmployeeNo"].ToString();
                if (drMember["Surname"] != System.DBNull.Value)
                {
                    objWorker.Surname = drMember["Surname"].ToString();
                }
                if (drMember["Forenames"] != System.DBNull.Value)
                {
                    objWorker.Forenames = drMember["Forenames"].ToString();
                }
                if (drMember["PreferredName"] != System.DBNull.Value)
                {
                    objWorker.EmpPrefname = drMember["PreferredName"].ToString();
                }
                else
                {
                    objWorker.EmpPrefname = objWorker.Forenames;
                }
                /*
                if (drMember["EmpAddress"] != System.DBNull.Value)
                {
                    objWorker.EmpAddress = drMember["EmpAddress"].ToString();
                }
                else
                {
                */ 
                    objWorker.EmpAddress = string.Empty;
                /* } */
                if (!drMember["EmailAddress"].Equals(DBNull.Value))
                {
                    objWorker.Email = drMember["EmailAddress"].ToString();
                }
                if (!drMember["MobileNumber"].Equals(DBNull.Value))
                {
                    objWorker.MobileNo = drMember["MobileNumber"].ToString();
                }
                
                // Add to Collection
                colMembers.Add(objWorker);
            }

            return colMembers;
        }