public List <schedulingDTO> GetShibutsForParents(string id) { List <scheduling> parentsList = perentsDAL.GetShibutsForParents(id); if (parentsList == null) { return(new List <schedulingDTO>()); } List <schedulingDTO> parentsDTOList = new List <schedulingDTO>(); parentsList.ForEach(x => { schedulingDTO s = new schedulingDTO(); s.code = x.code; s.code_class = x.code_class; s.hour_ = x.hour_; s.hour_enter = x.hour_enter; s.hour_exit = x.hour_exit; s.hour_reach = x.hour_reach; s.id_student = x.id_student; var v = new PARENTSEntities(); s.nameStudent = v.studens.Where(o => o.id == s.id_student).Select(r => r.first_name + " " + r.last_name).FirstOrDefault(); parentsDTOList.Add(s); }); return(parentsDTOList); }
public List <schedulingDTO> Get_parents_that_wait_to_class(int id) { var v = new PARENTSEntities(); List <scheduling> schedulingList = schedulingDAL.GetParentsThatWaitToClass(id); if (schedulingList == null) { return(new List <schedulingDTO>()); } List <schedulingDTO> schedulingDTOList = new List <schedulingDTO>(); schedulingList.ForEach(x => { perentsBL p = new perentsBL(); parents parents = new parents(); schedulingDTO s = new schedulingDTO(); parents = p.GetParentByIdStudent(x.id_student); s.code = x.code; s.code_class = x.code_class; s.hour_ = x.hour_; s.hour_enter = x.hour_enter; s.hour_exit = x.hour_exit; s.disableEnter = false; s.disableExit = false; s.nameMother = parents.first_name + " " + parents.last_name; s.idMother = parents.id; s.hour_reach = x.hour_reach; s.id_student = x.id_student; schedulingDTOList.Add(s); }); return(schedulingDTOList); }
//עדכון כניסה public List <schedulingDTO> updateEnter(string id) { var context = new PARENTSEntities(); List <scheduling> schedulingList = schedulingDAL.updateEnter(id);; if (schedulingList == null) { return(new List <schedulingDTO>()); } List <schedulingDTO> schedulingListDTO = new List <schedulingDTO>(); schedulingList.ForEach(x => { schedulingDTO s = new schedulingDTO(); s.code = x.code; s.code_class = x.code_class; s.hour_ = x.hour_; s.id_student = x.id_student; s.hour_enter = x.hour_enter; s.nameMother = context.parents.Where(p => p.id == id).Select(o => o.first_name + " " + o.last_name).FirstOrDefault(); s.disableExit = false; s.hour_exit = x.hour_exit; s.hour_reach = x.hour_reach; schedulingListDTO.Add(s); }); foreach (var item in schedulingListDTO) { if (item.id_student == id) { item.disableEnter = true; } } return(schedulingListDTO); }
//פונקצית החלפת שיבוץ לשעה אחרת באם מתאפשר //מחזירה אמת אם החליפה ושקר אם לא private bool Replace(List <scheduling> l, scheduling sc, TimeSpan t) { var context = new PARENTSEntities(); scheduling scd = l.Where(ss => ss.code_class == sc.code_class && ss.hour_.Equals(t)).FirstOrDefault(); List <studens> sis = new List <studens>(); List <studens> lst_sis = allStudents .Where(a => a.id_parent == scd.studens.id_parent).ToList(); //שיבוצים של האחיות List <scheduling> lstSis = new List <scheduling>(); foreach (studens item in lst_sis) { scheduling scd1 = lstscheduling .Where(u => u.id_student == item.id) .FirstOrDefault(); if (scd1 != null) { lstSis.Add(scd1); } } //אם אף אחות לא משובצת בשעה המבוקשת להחלפה if (lstSis.Where(ssc => ssc.hour_.Equals(sc.hour_)).FirstOrDefault() == null) { //ביצוע החלפה בפועל והחזרת ערך אמת scd.hour_ = sc.hour_; sc.hour_ = t; return(true); } return(false); }
//מחזירה רשימה של הכתות של הבנות public static List <classes> get_classes(string id) { var PARENTSEntities1 = new PARENTSEntities(); //שליפת ילדים List <studens> s = PARENTSEntities1.studens.Where(ss => ss.id_parent == id).ToList(); List <classes> c = new List <classes>(); foreach (studens item in s) { c.Add(PARENTSEntities1.classes.Where(o => o.code == item.code_class).FirstOrDefault()); } return(c); }
//מקבלת רשימת כיתות //מחזירה את הכיתה עם התור הקצר ביותר public static classes getShortClass(List <classes> list) { var parents = new PARENTSEntities(); int min = 100000, i_min = 0; foreach (classes item in list) { int v = parents.scheduling.Where(x => x.hour_reach != null && x.hour_exit == null && x.code_class == item.code).Count(); if (v < min) { i_min = list.IndexOf(item); min = v; } } return(list[i_min]); }
// בלחיצה על כפתור שבץ יופעל פונקציה של השיבוצים השונים ותגדיר רשימה של שיבוצים והפונקציה תפעיל על כל שיבוץ ברשימה פונקצית הערכה ותבחר את השיבוץ הטוב ביותר ואותו תשמור בפונקצית השיבוצים //ברגע שהאמא הגיע הוא בודק מה התור הקרוב ביותר ומעדכן את השיבוץ של הכיתות השונות //לשקול בהמשך אם כדאי להוסיף פונקציה לשיפור של שיבוץ קיים //פונקצית זמן אמת מקבלת קוד הורה ןבודקת האם כדאי לשנות את התור public schedulingDTO FuncRealTime(string id) { List <scheduling> s = new List <scheduling>(); schedulingDTO sn = new schedulingDTO(); List <classes> c = new List <classes>(); classes shortQ = new classes(); var p = new PARENTSEntities(); //שליפה ל כל השיבוצים של הבנות שהאמא עדיין לא נכנסה ומיון לפי שעה s = p.scheduling.Where(x => x.studens.id_parent == id && x.hour_exit == null) .OrderBy(f => f.hour_).ToList(); c = get_classes(id); //אם להורה יש יותר מילד אחד יש לבדוק באיזה כיתה התור קצר יותר ואם צריך להחליף if (s.Count() > 1) { for (int i = 0; i < s.Count; i++) { //עדכון שעת הגעה if (s[i].hour_reach == null) { s[i].hour_reach = DateTime.Now.TimeOfDay; } schedulingDAL.UpdateScheduling(s[i]); } shortQ = getShortClass(c); if (s[0].code_class != shortQ.code) { scheduling n = new scheduling(); List <scheduling> l = new List <scheduling>(); n = s.Where(f => f.code_class == shortQ.code).FirstOrDefault(); //תור ההורים שהגיעו ממוין לפי שעות l = p.scheduling.Where(x => x.hour_reach != null && x.hour_enter == null && x.studens.code_class == shortQ.code).OrderBy(v => v.hour_).ToList(); //אם הגיע ראשון if (l.Count == 1) { sn.idMother = id; sn.nameMother = s.First().studens.parents.first_name; sn.code_class = shortQ.code; sn.nameStudent = s.First().studens.first_name + " " + s.First().studens.last_name; sn.class_ = shortQ.class_ + " " + shortQ.num_class; return(sn); } //בדיקה האם הגיעה השעה בכיתה אחרת foreach (scheduling item in s) { if (item.hour_.Hours == DateTime.Now.Hour && item.hour_.Minutes == DateTime.Now.Minute) { if (l.Count == 1) { var f = new PARENTSEntities(); classes clas = f.classes.Where(j => j.code == item.code_class).FirstOrDefault(); sn.nameMother = s.First().studens.parents.first_name; sn.idMother = id; sn.code_class = item.code_class; sn.nameStudent = s.First().studens.first_name + " " + s.First().studens.last_name; sn.class_ = clas.class_ + " " + clas.num_class; return(sn); } } } scheduling b = l.Where(u => u.hour_ == l.Max(t => t.hour_)).First(); TimeSpan a = new TimeSpan(b.hour_.Hours, b.hour_.Minutes + 10, 00); n.hour_ = a; schedulingDAL.UpdateScheduling(n); sn.hour_ = n.hour_; sn.nameStudent = s.First().studens.first_name + " " + s.First().studens.last_name; sn.class_ = shortQ.class_ + " " + shortQ.num_class; return(sn); } } else { //עדכון שעת הגעה לשעה הנוכחית אם יש ילד אחד להורה if (s.First().hour_reach == null) { s.First().hour_reach = DateTime.Now.TimeOfDay; } schedulingDAL.UpdateScheduling(s.First()); sn.nameMother = s.First().studens.parents.first_name; sn.idMother = id; sn.nameStudent = s.First().studens.first_name + " " + s.First().studens.last_name; sn.class_ = c.First().class_ + " " + c.First().num_class; return(sn); } return(sn); }
public Boolean ShibutzAndMark(int idMosad) { var context = new PARENTSEntities(); allStudents = context.studens.ToList(); allTimes = context.times.ToList(); allParents = context.parents.ToList(); allClasses = context.classes.ToList(); allRquest = context.request.ToList(); this.idMosad = idMosad; lst_studens = SortByClasses(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByName(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByNumGirles(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByNameDesc(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByLastName(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByLastNameDesc(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByidParentDesc(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); //lstscheduling = new List<scheduling>(); //lst_studens = SortByhour(studensDAL.GetStudentsByCodeInstation(idMosad)); //func_shibutz(); //all_sceduling.Add(lstscheduling); lstscheduling = new List <scheduling>(); lst_studens = SortByidParent(allStudents.Where(o => o.parents.code_instation == idMosad).ToList()); func_shibutz(); all_sceduling.Add(lstscheduling); //lstscheduling = new List<scheduling>(); //lst_studens = SortByEmail(studensDAL.GetStudentsByCodeInstation(idMosad)); //func_shibutz(); //all_sceduling.Add(lstscheduling); double x, max = 0; int imax = 0; //הלולאה תעבוד עד שהציון הגבוה יהיה מעל 80 while (max < 90) { //חיפוש השיבוץ הטוב ביותר for (int i = 0; i < all_sceduling.Count; i++) { x = mark(all_sceduling[i]); if (x > max) { max = x; imax = i; } } shipur(all_sceduling[imax]); //שיפור של הטוב ביותר shipur(all_sceduling[0]); //שיפור של איבר קבוע שוב ושוב Random rnd = new Random(); int p = rnd.Next(all_sceduling.Count); shipur(all_sceduling[p]);//שיפור של איבר אקראי } //אחרי שהגענו למיון מ 80 ומעלה - עדכון במסד הנתונים foreach (scheduling item in all_sceduling[imax]) { schedulingDAL.AddScheduling(item); } return(true); }