//פונקצית החלפת שיבוץ לשעה אחרת באם מתאפשר //מחזירה אמת אם החליפה ושקר אם לא 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); }
/// <summary> /// 產生交班表Excel byte[] /// </summary> /// <param name="sch_data"></param> /// <returns></returns> public FileContentResult ExportShiftExcel(scheduling sch_data) { byte[] buf = null; string actionName = "ExportShiftExcel"; setFileContentType(fileType.xls); try { NPOITool NPOITool = new Models.NPOITool(); buf = NPOITool.ExportShiftExcel(sch_data); } catch (Exception ex) { RESPONSE_MSG.message = "產生Excel發生錯誤,請洽資訊人員,錯誤訊息如下所示:" + ex.Message; RESPONSE_MSG.status = RESPONSE_STATUS.EXCEPTION; LogTool.SaveLogMessage(ex, actionName, csName); } return(retunFile(buf)); }
//פונקצית שיבוץ לתלמידה בודדת // אם יכול לשבץ מוסיף לאוסף השיבוץ ומחזיר אמת //אחרת מחזיר שקר bool Shibutz_stud(studens s) { //נשלוף את הבקשות של האמא //את השיבוצים של האחיות של התלמידה // את השעות הפנויות בכיתה שלה //וננסה לשבץ באופן שמתאים לכל הקריטריונים request r = s.parents.request.FirstOrDefault(); if (r == null) { r = new request(); r.id_parent = s.id_parent; r.from_hour = s.classes.times.FirstOrDefault().from_hour; r.to_hour = s.classes.times.FirstOrDefault().to_hour; } List <scheduling> lstSis = lstscheduling.Where(ss => ss.studens.id_parent == s.id_parent).ToList(); List <scheduling> lstClass = lstscheduling.Where(ss => ss.studens.code_class == s.code_class) .OrderBy(ss => ss.hour_).ToList(); //לולאה שעוברת על כל השעות שבטווח הבקשה של האמא //ומנסה לשבץ //אם הצליחה מחזירה אמת for (TimeSpan h = r.from_hour; h < r.to_hour; h.Add(new TimeSpan(0, 15, 0))) { if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null) { if (lstClass.Where(ss => ss.hour_.Equals(h)).ToList().Count < 2) { //שיבוץ בפועל //והחזרת אמת scheduling x = new scheduling(); x.code_class = s.code_class; x.hour_ = h; x.id_student = s.id; lstscheduling.Add(x); return(true); } } } //אם לא הצליחה //לולאה שעוברת על כל הטווח של הכיתה //ומנסה לשבץ //!!!!!!!!!!!!!!!!!!!!!!!!!!חובה לשנות שישלוף את הזמנים של הכיתה times tt = new times();//global.PARENTS.times.Where(t => t.code_class == s.code_class); for (TimeSpan h = tt.from_hour; h < tt.to_hour; h.Add(new TimeSpan(0, 15, 0))) { if (lstClass.Where(ss => ss.hour_.Equals(h)).ToList().Count < 2) { if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null) { { //שיבוץ בפועל //והחזרת אמת scheduling x = new scheduling(); x.code_class = s.code_class; x.hour_ = h; x.id_student = s.id; lstscheduling.Add(x); return(true); } } } } //אם לא הצליחה יחזיר שקר return(false); }
// בלחיצה על כפתור שבץ יופעל פונקציה של השיבוצים השונים ותגדיר רשימה של שיבוצים והפונקציה תפעיל על כל שיבוץ ברשימה פונקצית הערכה ותבחר את השיבוץ הטוב ביותר ואותו תשמור בפונקצית השיבוצים //ברגע שהאמא הגיע הוא בודק מה התור הקרוב ביותר ומעדכן את השיבוץ של הכיתות השונות //לשקול בהמשך אם כדאי להוסיף פונקציה לשיפור של שיבוץ קיים //פונקצית זמן אמת מקבלת קוד הורה ןבודקת האם כדאי לשנות את התור 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 bool Shibutz_stud(studens s) { //נשלוף את הבקשות של האמא //את השיבוצים של האחיות של התלמידה // את השעות הפנויות בכיתה שלה //וננסה לשבץ באופן שמתאים לכל הקריטריונים //בקשות parents p = new parents(); p = allParents .Where(t => t.id == s.id_parent).FirstOrDefault(); request r = allRquest .Where(rr => rr.id_parent == p.id).FirstOrDefault(); if (r == null) { r = new request(); r.id_parent = s.id_parent; r.from_hour = allTimes.Where(t => t.code_class == s.code_class).FirstOrDefault().from_hour; r.to_hour = allTimes.Where(t => t.code_class == s.code_class).FirstOrDefault().to_hour; } //שיבוצים של אחיות List <studens> lst_sis = allStudents .Where(a => a.id_parent == s.id_parent).ToList(); List <scheduling> lstSis = new List <scheduling>(); foreach (studens item in lst_sis) { scheduling scd = lstscheduling .Where(u => u.id_student == item.id) .FirstOrDefault(); if (scd != null) { lstSis.Add(scd); } } //שעות פנויות בכיתה ממוין לפי שעה List <studens> all_class = allStudents .Where(cc => cc.code_class == s.code_class).ToList(); List <scheduling> lstClassNotEmpty = new List <scheduling>(); foreach (var item in all_class) { scheduling scd = lstscheduling .Where(cc => cc.id_student == item.id).FirstOrDefault(); if (scd != null) { lstClassNotEmpty.Add(scd); } } lstClassNotEmpty = lstClassNotEmpty.OrderBy(ss => ss.hour_).ToList(); TimeSpan t1 = allTimes .Where(o => o.code_class == s.code_class) .FirstOrDefault().from_hour; TimeSpan t2 = allTimes .Where(o => o.code_class == s.code_class) .FirstOrDefault().to_hour; List <TimeSpan> lstClass = new List <TimeSpan>(); for (TimeSpan h = t1; h < t2; h += (new TimeSpan(0, 15, 0))) { if (lstClassNotEmpty.Where(ss => ss.hour_.Equals(h)).ToList().Count() == 1) { lstClass.Add(h); } else if (lstClassNotEmpty.Where(ss => ss.hour_.Equals(h)).ToList().Count() == 0) { lstClass.Add(h); lstClass.Add(h); } } //לולאה שעוברת על כל השעות שבטווח הבקשה של האמא //ומנסה לשבץ //אם הצליחה מחזירה אמת for (TimeSpan h = r.from_hour; h < r.to_hour; h += (new TimeSpan(0, 15, 0))) { if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null) { TimeSpan f = lstClass.Where(ss => ss == h).FirstOrDefault(); if (lstClass.Where(ss => ss == h).FirstOrDefault() != (new TimeSpan(00, 00, 00)) && h >= t1 && h < t2) { //שיבוץ בפועל //והחזרת אמת scheduling x = new scheduling(); x.code_class = s.code_class; x.hour_ = h; x.id_student = s.id; lstscheduling.Add(x); return(true); } } } //אם לא הצליחה //לולאה שעוברת על כל הטווח של הכיתה //ומנסה לשבץ foreach (TimeSpan h in lstClass) { if (lstSis == null || lstSis.Where(ss => ss.hour_.Equals(h)).FirstOrDefault() == null) { { //שיבוץ בפועל //והחזרת אמת scheduling x = new scheduling(); x.code_class = s.code_class; x.hour_ = h; x.id_student = s.id; lstscheduling.Add(x);; return(true); } } } //אם לא הצליחה יחזיר שקר return(false); }