//פונקצית החלפת שיבוץ לשעה אחרת באם מתאפשר
        //מחזירה אמת אם החליפה ושקר אם לא
        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));
        }
示例#3
0
        //פונקצית שיבוץ לתלמידה בודדת
        // אם יכול לשבץ מוסיף לאוסף השיבוץ ומחזיר אמת
        //אחרת מחזיר שקר
        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);
        }