public static JobList buildJobList(string strSuffixCode, string strCountry, AspectResultSet aspectResultSet, HealthResultSet healthResultSet, LevelResultSet levelResultSet, string strClusterCode, string strCluster) { //do a match, but only include those inside a cluster JobList jl = new JobList(); JobItem ji; string aspecttblname = strCountry; //mrm 15/8/2006 change SQL to exclude Talent jobs DataTable dtAspects = CCLib.Cache.GetCachedDataTableWithNoExpire("MM_ALL_JOBST_" + strSuffixCode, "SELECT tblAspects" + aspecttblname + ".OccNumber, Central, Secondary, ID, Other, Education, EssentialSkills, DesirableSkills, Talent, OccName FROM Jobinfo" + strSuffixCode + " INNER JOIN tblAspects" + aspecttblname + " ON Jobinfo" + strSuffixCode + ".OccNumber = tblAspects" + aspecttblname + ".OccNumber WHERE (Talent IS NULL) or (Talent=0) ORDER BY OccName"); bool[] levelvals = new bool[MaxNoOfLevels + 1]; bool[] healthvals = new bool[MaxNoOfHealth + 1]; int[] aspectres = new int[MaxNoOfAspects + 1]; CreateFastClientArrays(aspectResultSet, levelResultSet, healthResultSet, healthvals, levelvals, aspectres); //set up arrays for fast matching foreach (DataRow rt in dtAspects.Rows) { ji = new JobItem(); ji.Score = ScoreArticle(rt, healthvals, levelvals, aspectres, ref ji.MatchCat, ref ji.MatchMore); //get job score ji.JobRef = Convert.ToInt16(rt["OccNumber"].ToString()); ji.JobTitle = rt["OccName"].ToString(); if (((int)ji.MatchCat / 100) < 6) { jl.Add(ji); }; }; //sort the list by score jl.Sort(delegate(JobItem x, JobItem y) { return Comparer.Default.Compare(y.Score, x.Score); }); // we only want the top 40 if (jl.Count > 40) { jl.RemoveRange(40, jl.Count - 40); }; //prepare rank int i = 1; foreach (JobItem ji1 in jl) { ji1.Rank = i; i++; }; //now we check against the clusters table //next section is more or less lifted from cluster.aspx DataTable dtCluster = CCLib.Cache.GetCachedDataTable("Cluster" + strSuffixCode , "select * from Clusters" + strSuffixCode + "_View"); DataRow[] drsClusterCodes; string strClusterType = strCluster; string strSQL=strClusterType+"= '"+strClusterCode.Replace("'","''")+"' or "+strClusterType+" like '"+strClusterCode.Replace("'","''")+",%' or "+strClusterType+" like '%,"+strClusterCode.Replace("'","''")+"' or "+strClusterType+" like '%,"+strClusterCode.Replace("'","''")+",%'"; drsClusterCodes = dtCluster.Select(strSQL); //yuk!! sequential search - need to check for better way JobList jlResultList = new JobList(); JobItem jitmp; foreach (DataRow dr in drsClusterCodes) { int strOccNumber = (int)dr["OccNumber"]; //copy into local variable to keep things quick jitmp = jl.Find(delegate(JobItem ji1) { return ji1.JobRef == strOccNumber; }); if (jitmp!=null) {jlResultList.Add(jitmp);}; } jlResultList.Sort(delegate(JobItem x, JobItem y) { return Comparer.Default.Compare(y.Score, x.Score); }); return (jlResultList); }
public static JobList buildJobList(string strSuffixCode, string strCountry, AspectResultSet aspectResultSet, HealthResultSet healthResultSet, LevelResultSet levelResultSet) { //do a match JobList jl = new JobList(); JobItem ji; string aspecttblname=strCountry; //mrm 15/8/2006 change SQL to exclude Talent jobs DataTable dtAspects = CCLib.Cache.GetCachedDataTableWithNoExpire("MM_ALL_JOBST_" + strSuffixCode, "SELECT tblAspects" + aspecttblname + ".OccNumber, Central, Secondary, ID, Other, Education, EssentialSkills, DesirableSkills, Talent, OccName FROM Jobinfo" + strSuffixCode + " INNER JOIN tblAspects" + aspecttblname + " ON Jobinfo" + strSuffixCode + ".OccNumber = tblAspects" + aspecttblname + ".OccNumber WHERE (Talent IS NULL) or (Talent=0) ORDER BY OccName"); bool [] levelvals= new bool[MaxNoOfLevels+1]; bool [] healthvals= new bool[MaxNoOfHealth+1]; int [] aspectres= new int[MaxNoOfAspects+1] ; CreateFastClientArrays(aspectResultSet, levelResultSet, healthResultSet, healthvals, levelvals, aspectres); foreach (DataRow rt in dtAspects.Rows) { ji = new JobItem(); ji.Score = ScoreArticle(rt,healthvals,levelvals,aspectres,ref ji.MatchCat,ref ji.MatchMore); ji.JobRef = Convert.ToInt16(rt["OccNumber"].ToString()); ji.JobTitle = rt["OccName"].ToString();// +ji.MatchCat.ToString(); //JM 20/04/2006 don't add jobs where they are a poor match if (((int)ji.MatchCat/100)<6) { jl.Add(ji); }; }; jl.Sort(delegate (JobItem x, JobItem y){return Comparer.Default.Compare(y.Score,x.Score);}); // we only want the top 40 if (jl.Count > 40) { jl.RemoveRange(40, jl.Count - 40); }; //prepare rank int i = 1; foreach (JobItem ji1 in jl) { ji1.Rank = i; i++; }; return (jl); }