public Researcher GetResearcher(RESEARCHER_TYPE type, int id) { return(Database.GetInstance().GetResearcher(type, id)); }
// public ObservableCollection<Researcher> GetResearchers1() // { // ObservableCollection<Researcher> researchers = new ObservableCollection<Researcher>(); // // MySqlDataReader rd = null; // // var rpulication = GetResearcherPublications(); // var allpulications = GetPublication(); // var positions = GetPosition(); // var supervisions = GetSupervision(); // // try // { // db.Open(); // // MySqlCommand cmd = new MySqlCommand("select r1.id, r1.type, r1.given_name, r1.family_name, r1.title, r1.unit, r1.campus, r1.email, r1.photo, r1.degree, r1.supervisor_id, r1.level, r1.utas_start, r1.current_start, r2.given_name as supervisorGN, r2.family_name as supervisorFN from researcher as r1 left join researcher as r2 on r1.supervisor_id=r2.id", db); // rd = cmd.ExecuteReader(); // // while (rd.Read()) // { // var researcher = new Researcher // { // ID = rd.GetInt32(0), // Type = (RESEARCHER_TYPE)Enum.Parse(typeof(RESEARCHER_TYPE), rd.GetString(1)), // GivenName = rd.GetString(2), // FamilyName = rd.GetString(3), // Title = rd.GetString(4), // Unit = rd.GetString(5), // Campus = (CAMPUS)Enum.Parse(typeof(CAMPUS), rd.GetString(6).Replace(' ', '_')), // Email = rd.GetString(7), // Photo = rd.GetString(8), // Degree = rd.IsDBNull(9) ? "" : rd.GetString(9), // SupervisorID = rd.IsDBNull(10) ? 0 : rd.GetInt32(10), // Level = rd.IsDBNull(11) ? LEVEL.STUDENT_ONLY : Utility.LEVEL_Parse(rd.GetString(11)), // UtasStart = DateTime.Parse(rd.GetString(12)), // CurrentStart = DateTime.Parse(rd.GetString(13)), // SupervisorGivenName = rd.IsDBNull(14) ? "" : rd.GetString(14), // SupervisorFamilyName = rd.IsDBNull(14) ? "" : rd.GetString(15), // }; // researcher.JobTitle = Utility.GetJobTitle(researcher.Level); // // // publication // var publications = from ResearcherPublication rp in rpulication // join Publication pu in allpulications on rp.DOI equals pu.DOI // orderby pu.Year // where rp.ResearcherID == researcher.ID // select pu; // researcher.Publications = new ObservableCollection<Publication>(publications.ToList()); // researcher.CumulativeCount = publications.Count(); // // // 3 year average // var threeYearPublication = from p in publications // where p.Year == "2016" || p.Year == "2017" || p.Year == "2018" // select p; // researcher.ThreeYearAve = threeYearPublication.Count() / 3.0; // // // positions // var thisPositions = from Position p in positions // where p.ID == researcher.ID // select p; // researcher.positions = new ObservableCollection<Position>(thisPositions.ToList()); // // // supervision // var thisSupervisions = from Supervision su in supervisions // where su.StaffID == researcher.ID // select su; // researcher.Supervisions = new ObservableCollection<Supervision>(thisSupervisions.ToList()); // researcher.SupervisorCount = thisSupervisions.Count(); // // // Tenure // researcher.Tenure = (DateTime.Now - researcher.UtasStart).TotalDays / 365; // // // performance // if(researcher.Level == LEVEL.STUDENT_ONLY) // { // researcher.Performance = 0; // } // else // { // researcher.Performance = researcher.ThreeYearAve / Researcher.EXPECTED_PUBLICATION[researcher.Level] * 100; // } // // researchers.Add(researcher); // } // } // catch (MySqlException e) // { // ReportError("loading staff", e); // } // finally // { // if (rd != null) // rd.Close(); // if (db != null) // db.Close(); // } // // return researchers; // } public Researcher GetResearcher(RESEARCHER_TYPE type, int id) { MySqlDataReader rd = null; Researcher researcher; if (type == RESEARCHER_TYPE.Student) { researcher = new Model.Student(); } else { researcher = new Model.Stuff(); } try { db.Open(); MySqlCommand cmd = new MySqlCommand("select r1.id, r1.type, r1.given_name, r1.family_name, r1.title, r1.unit, r1.campus, r1.email, r1.photo, r1.degree, r1.supervisor_id, r1.level, r1.utas_start, r1.current_start, r2.given_name as supervisorGN, r2.family_name as supervisorFN from researcher as r1 left join researcher as r2 on r1.supervisor_id=r2.id where r1.id=" + id.ToString(), db); rd = cmd.ExecuteReader(); rd.Read(); { researcher.ID = rd.GetInt32(0); researcher.Type = (RESEARCHER_TYPE)Enum.Parse(typeof(RESEARCHER_TYPE), rd.GetString(1)); researcher.GivenName = rd.GetString(2); researcher.FamilyName = rd.GetString(3); researcher.Title = rd.GetString(4); researcher.Unit = rd.GetString(5); researcher.Campus = (CAMPUS)Enum.Parse(typeof(CAMPUS), rd.GetString(6).Replace(' ', '_')); researcher.Email = rd.GetString(7); researcher.Photo = rd.GetString(8); if (researcher is Model.Student student) { student.Degree = rd.IsDBNull(9) ? "" : rd.GetString(9); } researcher.SupervisorID = rd.IsDBNull(10) ? 0 : rd.GetInt32(10); researcher.Level = rd.IsDBNull(11) ? LEVEL.STUDENT_ONLY : Utility.LEVEL_Parse(rd.GetString(11)); researcher.UtasStart = DateTime.Parse(rd.GetString(12)); researcher.CurrentStart = DateTime.Parse(rd.GetString(13)); researcher.SupervisorGivenName = rd.IsDBNull(14) ? "" : rd.GetString(14); researcher.SupervisorFamilyName = rd.IsDBNull(14) ? "" : rd.GetString(15); researcher.JobTitle = Utility.GetJobTitle(researcher.Level); } } catch (MySqlException e) { ReportError("loading staff", e); } finally { if (rd != null) { rd.Close(); } if (db != null) { db.Close(); } } // publication researcher.Publications = GetPublication(id); researcher.CumulativeCount = researcher.Publications.Count(); // positions if (researcher is Model.Stuff stuff) { stuff.Positions = GetPosition(id); } // 3 year average var threeYearPublication = from p in researcher.Publications where p.Year == "2016" || p.Year == "2017" || p.Year == "2018" select p; researcher.ThreeYearAve = threeYearPublication.Count() / 3.0; // supervision researcher.Supervisions = GetSupervision(id); researcher.SupervisorCount = researcher.Supervisions.Count(); // Tenure researcher.Tenure = (DateTime.Now - researcher.UtasStart).TotalDays / 365; // performance if (researcher.Level == LEVEL.STUDENT_ONLY) { researcher.Performance = 0; } else { researcher.Performance = researcher.ThreeYearAve / Researcher.EXPECTED_PUBLICATION[researcher.Level] * 100; } return(researcher); }