Пример #1
0
 public Researcher GetResearcher(RESEARCHER_TYPE type, int id)
 {
     return(Database.GetInstance().GetResearcher(type, id));
 }
Пример #2
0
        //        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);
        }