Ejemplo n.º 1
0
        public ActionResult AddMyTeamStudent(string labID, int primKeyID, string subID)
        {
            //παίρνουμε όλες τις πληροφορίες που χρειάζεται ο φοιτητής να γνωρίζει για το εργαστήριο του συγκεκριμένου μαθήματος και τις μεταφέρουμε στο αντίστοιχο View με ViewData

            LabsAnnouncements lab   = db.LabsAnnouncements.Find(labID);
            int numberOfTeamMembers = lab.numberOfTeamMembers;

            ViewBag.numberOfTeamMembers = numberOfTeamMembers - 1;
            ViewData["labID"]           = labID;
            ViewData["labTitle"]        = lab.labTitle;
            ViewData["labDate"]         = lab.BeginDateTime.Date.ToShortDateString();
            ViewData["labTime"]         = lab.BeginDateTime.ToShortTimeString() + " - " + lab.EndDateTime.ToShortTimeString();

            Subjects subject = db.Subjects.Find(subID);

            ViewData["subID"]        = subID;
            ViewData["subjectTitle"] = subject.subjectTitle;

            ExamSlotsAvailability slotAvailability = db.ExamSlotsAvailability.Find(primKeyID);

            ViewData["teamID"]       = slotAvailability.registeredTeamsNumber + 1;
            ViewData["selectedSlot"] = slotAvailability.slot;

            return(View());
        }
Ejemplo n.º 2
0
        public ActionResult DeleteSubjectLabProfessorConfirmed(string id)
        {
            LabsAnnouncements labsAnnouncements = db.LabsAnnouncements.Find(id);


            List <ExamSlotsAvailability> examSlots = db.ExamSlotsAvailability.ToList(); //δημιουργία αντικειμένου διαθεσιμότητας των slots, προς διαγραφή τους

            List <int> primKeyIDs = new List <int>();                                   //λίστα για να αποθηκεύσουμε τα primKeyIDs των slots

            foreach (var item in examSlots)
            {
                if (item.labID == id)
                {
                    primKeyIDs.Add(item.primKeyID); //για κάθε slot, αποθηκεύουμε το primKeyID του στη λίστα
                }
            }

            //για κάθε primKeyID, το βρίσκουμε και διαγράφουμε την εγγραφή με τα slots
            foreach (var item in primKeyIDs)
            {
                ExamSlotsAvailability slot = db.ExamSlotsAvailability.Find(item);
                db.ExamSlotsAvailability.Remove(slot);
                db.SaveChanges();
            }


            db.LabsAnnouncements.Remove(labsAnnouncements);      //αφαιρούμε το εργαστήριο από τη βάση δεδομένων

            LabsAvailability lab = db.LabsAvailability.Find(id); //βρίσκουμε το id του εργαστηρίου που εμφανίζεται στον διαχειριστή του εργαστηρίου

            db.LabsAvailability.Remove(lab);                     //και το αφαιρούμε από τη βάση δεδομένων

            //string labNumber = id.Substring(Math.Max(0, id.Length - 1));
            // int eventID = Convert.ToInt32(labNumber);
            List <Events> ev = db.Events.Where(m => m.labID == id).ToList();

            foreach (var item in ev)
            {
                db.Events.Remove(item);
            }

            List <Enrollments> enrollments = db.Enrollments.Where(m => m.labID == id).ToList();

            foreach (var item in enrollments)
            {
                db.Enrollments.Remove(item);
            }


            db.SaveChanges();
            return(RedirectToAction("MySubjectsProfessor")); //ανακατεύθυνση στην αρχική σελίδα
        }
Ejemplo n.º 3
0
        public ActionResult CreateSubjectLabProfessor([Bind(Include = "labID,labTitle,subjectExamed,labDate,labTime,start,end,BeginDateTime,EndDateTime,RegistrationDeadline,examSlotsDuration,numberOfTeamMembers")] LabsAnnouncements labsAnnouncements, string subID)
        {
            Subjects subject = db.Subjects.Find(subID); //βρίσκουμε το συγκεκριμένο μάθημα

            ViewData["subjectTitle"] = subject.subjectTitle;

            string labDate = labsAnnouncements.labDate.ToShortDateString(); //μετατρέπουμε την ημερομηνία του εργαστηρίου που όρισε ο καθηγητής σε string


            string time = labsAnnouncements.labTime; //παιρνάμε την ώρα του εργαστηρίου που επέλεξε ο καθηγητής σε μια string μεταβλητή

            string message = "";

            bool isTaken = db.LabsAnnouncements.Any(m => m.labDate == labsAnnouncements.labDate && m.labTime == labsAnnouncements.labTime);

            if (isTaken)
            {
                message = "Η ώρα αυτή δεν είναι διαθέσιμη. Επιλέξτε άλλη ώρα ή άλλη ημέρα.";
                return(RedirectToAction("CreateSubjectLabProfessor", new { subID, message })); //ανακατεύθυνση στα εργαστήρια του συγκεκριμένου μαθήματος
            }
            else
            {
                char[] separator1 = { '-', ' ' };           //ορίζουμε ως διαχωριστικό των ωρών την παύλα

                string[] TimeList = time.Split(separator1); //διαχωρίζουμε το string με τις ώρες με τη μέθοδο Split

                string beginTime = TimeList[0];             //ορίζουμε την ώρα έναρξης του εργαστηρίου
                string endTime   = TimeList[1];             //οριζουμε την ώρα λήξης του εργαστηρίου


                //μετατρέπουμε τις παραπάνω ώρες σε timespan ώστε να είναι έγκυρες στην μετατροπή που θα γίνει παρακάτω
                TimeSpan beginTimeSpan = TimeSpan.Parse(beginTime);
                TimeSpan endTimeSpan   = TimeSpan.Parse(endTime);


                //ορισμός τελικών dateTime που αφορούν την πλήρη ημερομηνία και ώρα εναρξης και λήξης του εργαστηρίου αντίστοιχα
                DateTime finalBeginDateTime = DateTime.ParseExact(labDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
                                              .Add(beginTimeSpan);


                DateTime finalEndDateTime = DateTime.ParseExact(labDate, "dd/MM/yyyy", CultureInfo.InvariantCulture)
                                            .Add(endTimeSpan);

                //παιρνάμε τα παραπάνω δεδομένα στο αντικείμενο labsAnnouncements
                labsAnnouncements.BeginDateTime = finalBeginDateTime;
                labsAnnouncements.EndDateTime   = finalEndDateTime;

                //μετράμε πόσα εργαστήρια έχουν δημιουργηθεί στη βάση δεδομένων και προσθέτουμε 1 για να ορίσουμε τον κωδικό του εργαστηρίου που θα ορίσουμε αυτή τη στιγμή
                int numberOfLabs = db.LabsAnnouncements.Count();
                int labNumber    = numberOfLabs + 1;
                labsAnnouncements.labID = "LAB" + labNumber;



                if (ModelState.IsValid)
                {
                    labsAnnouncements.subjectExamed = subID;

                    //διαμορφώνουμε τον τίτλο του εργαστηρίου ώστε να περιέχει και τον τίτλο του μαθήματος και τον τίτλο του εργαστηρίου
                    labsAnnouncements.labTitle = subject.subjectTitle + "-" + labsAnnouncements.labTitle;


                    DateTime startDateTime = labsAnnouncements.BeginDateTime;     //παίρνουμε την ημερομηνία και έναρξης του εργαστηρίου
                    DateTime endDateTime   = labsAnnouncements.EndDateTime;       //παίρνουμε την ημερομηνία και λήξης του εργαστηρίου
                    double   duration      = labsAnnouncements.examSlotsDuration; //παίρνουμε τη διάρκεια του εργαστηρίου

                    //ορίζουμε τις μεταβλητές morning και afternoon για να τις χρησιμοποιήσουμε στη δημιουργία των slots
                    string morning       = "";
                    string afternoon     = "";
                    int    numberOfSlots = 0; //αρχικοποίηση αριθμού slots

                    while (true)
                    {
                        DateTime dtNext = startDateTime.AddMinutes(duration); //αρχικοποιούμε τη μεταβλητή dtNext ορίζοντας την ώρα έναρξης του εργαστηρίου + τη χρονική διάρκεια του εργαστηρίου
                        if (startDateTime > endDateTime || dtNext > endDateTime)
                        {
                            break;
                        }
                        if (startDateTime < DateTime.Parse("12:00 PM"))                                            //εάν η ώρα είναι πρωινή, τότε την προσθέτουμε στο string morning
                        {
                            morning += startDateTime.ToShortTimeString() + "-" + dtNext.ToShortTimeString() + ","; //ώρα έναρξης slot - ώρα λήξης slot
                        }
                        else //εάν η ώρα δεν είναι πρωινή, τότε την προσθέτουμε στο string aternoon
                        {
                            afternoon += startDateTime.ToShortTimeString() + "-" + dtNext.ToShortTimeString() + ","; //ώρα έναρξης slot - ώρα λήξης slot
                        }
                        startDateTime = dtNext;                                                                      //για το επόμενο slot βάζουμε στην ώρα έναρξης την ώρα λήξης του προηγούμενου slot
                        numberOfSlots = numberOfSlots + 1;                                                           //αυξάνουμε τον αριθμό των slots κατά 1
                    }

                    if (morning.Length > 0)
                    {
                        morning = " " + morning;
                    }
                    if (afternoon.Length > 0)
                    {
                        afternoon = " " + afternoon;
                    }
                    labsAnnouncements.ExamSlots = morning + afternoon; //παιρνάμε στην αντίστοιχη στήλη του εργαστηρίου όλα τα slots που δημιουργήσαμε



                    // παιρνάμε το string με τα slots σε ένα άλλο string ώστε να τα διαχωρίσουμε
                    string ExamSlots = morning + afternoon;

                    char[] separator = { ',', ' ' }; //ορίζουμε ως διαχωριστικό το ,

                    // ορίζουμε την τελική λίστα που θα περιέχει τα slot του εργαστηρίου

                    List <string> finalList = new List <string>();


                    string[] ExamSlotsList = ExamSlots.Split(separator); //διαχωρίζουμε το string βάσει του κόμματος, χρησιμοποιώντας τη μέθοδο Split, και τα προσθέτουμε σε μια λίστα από string

                    foreach (var item in ExamSlotsList)
                    {
                        finalList.Add(item); //τέλος, γεμίζουμε την τελική λίστα που ορίσαμε παραπάνω με κάθε slot
                    }

                    //ViewBag.ExamSlotsList = ExamSlotsList;


                    ExamSlotsAvailability slots = new ExamSlotsAvailability();

                    foreach (var item in finalList.ToList())
                    {
                        if (item == "")
                        {
                            finalList.Remove(item); //σε περίπτωση που υπάρχουν κενά slots που δημιουργήθηκαν παραπάνω, τα αφαιρούμε από τη λίστα
                        }
                    }

                    foreach (var item in finalList)
                    {
                        slots.labID     = labsAnnouncements.labID; //ορίζουμε το labID των  slots ως το labID των εργαστηρίων
                        slots.slot      = item;                    //αποθηκεύουμε κάθε slot
                        slots.available = true;                    //το ορίζουμε ως "δαθέσιμο"
                        db.ExamSlotsAvailability.Add(slots);       //και το προσθέτουμε στη βάση δεδομένων
                        db.SaveChanges();
                    }

                    Events ev = new Events();
                    ev.EventID = labNumber;
                    ev.Subject = labsAnnouncements.labTitle;
                    ev.Start   = labsAnnouncements.BeginDateTime;
                    ev.End     = labsAnnouncements.EndDateTime;
                    ev.RegistrationDeadLine = labsAnnouncements.RegistrationDeadline;
                    ev.labID     = labsAnnouncements.labID;
                    ev.subID     = labsAnnouncements.subjectExamed;
                    ev.IsFullDay = false;

                    if (subject.subjectSemester == 1)
                    {
                        ev.ThemeColor = "yellow";
                    }
                    else if (subject.subjectSemester == 2)
                    {
                        ev.ThemeColor = "orange";
                    }
                    else if (subject.subjectSemester == 3)
                    {
                        ev.ThemeColor = "blue";
                    }
                    else if (subject.subjectSemester == 4)
                    {
                        ev.ThemeColor = "green";
                    }
                    else if (subject.subjectSemester == 5)
                    {
                        ev.ThemeColor = "pink";
                    }
                    else if (subject.subjectSemester == 6)
                    {
                        ev.ThemeColor = "purple";
                    }
                    else if (subject.subjectSemester == 7)
                    {
                        ev.ThemeColor = "brown";
                    }
                    else if (subject.subjectSemester == 8)
                    {
                        ev.ThemeColor = "red";
                    }

                    db.Events.Add(ev);

                    LabsAvailability lab = new LabsAvailability();

                    lab.labID              = labsAnnouncements.labID;
                    lab.labDate            = labDate;
                    lab.labTime            = labsAnnouncements.labTime;
                    lab.subjectExamed      = labsAnnouncements.subjectExamed;
                    lab.subjectTitle       = subject.subjectTitle;
                    lab.professorTeaching  = subject.professorTeaching;
                    lab.availableComputers = 20;

                    db.LabsAvailability.Add(lab);

                    db.LabsAnnouncements.Add(labsAnnouncements);

                    db.SaveChanges();

                    return(RedirectToAction("SubjectLabsProfessor", new { subjectID = subID })); //ανακατεύθυνση στα εργαστήρια του συγκεκριμένου μαθήματος
                }
                else
                {
                    return(View());
                }
            }
        }
Ejemplo n.º 4
0
        public ActionResult AddMyTeamStudent([Bind(Include = "primKeyID, subjectID, labID, teamID, selectedExamSlot, team, teamMembers, subjectTitle, labTitle, labDate, labTime")] Enrollments enrollments, int primKeyID, string labID, string subID, List <string> team)
        {
            var hubContext = GlobalHost.ConnectionManager.GetHubContext <NotificationHub>(); //δημιουργία μεταβλητής για σύνδεση με το hub που χρησιμοποιούμε για τις ειδοποιήσεις SignalR


            var userManager = new UnipiUsersManager(new CustomUserStore(new UnipiLabsDbContext()));
            var user        = userManager.FindById(System.Web.HttpContext.Current.User.Identity.GetUserId <int>());

            string userID = user.UserName;

            LabsAnnouncements lab = db.LabsAnnouncements.Find(labID);


            //προσθέτουμε τα μέλη της ομάδας στη βάση δεδομένων στα Enrollments και στα Subjects
            enrollments.teamMembers = enrollments.team[0];

            for (int i = 1; i <= enrollments.team.Count() - 1; i++)
            {
                enrollments.teamMembers = enrollments.teamMembers + "," + enrollments.team[i];
            }


            if (lab.regStudents == null)
            {
                lab.regStudents = enrollments.teamMembers;
            }
            else
            {
                lab.regStudents = lab.regStudents + "," + enrollments.teamMembers;
            }
            db.Entry(lab).State = EntityState.Modified;
            db.SaveChanges();


            ExamSlotsAvailability availabilitySlot = db.ExamSlotsAvailability.Find(primKeyID);



            availabilitySlot.registeredTeamsNumber = enrollments.teamID; //ο αριθμός των εγγεγραμμένων ομάδων ισούται με το team ID της ομάδας ξεχωριστά σε κάθε slot

            LabsAvailability availability = db.LabsAvailability.Find(labID);



            if (availabilitySlot.registeredTeamsNumber >= availability.availableComputers)
            {
                availabilitySlot.available = false; //εάν ο αριθμός των εγγεγραμμένων ομάδων είναι >= του αριθμού των διαθέσιμων υπολογιστών του εργαστηρίου, τότε δεν ελιναι πλέον διαθέσιμο
            }

            enrollments.primKeyID = primKeyID;


            if (ModelState.IsValid)
            {
                team.Remove(userID); //αφαιρούμε τον συνδεδεμένο χρήστη από την ομάδα για να μην πάει και σε εκείνον ειδοποίηση ότι γράφτηκε στην ομάδα του, παρά μόνο στα υπόλοιπα
                                     //μέλη της ομάδας του

                //σε κάθε μέλος της ομάδας, μέσω του hub πο δημιουργήσαμε προηγουμένως, πηγαίνει ειδοποίηση ότι ο συνδεδεμένος χρήστης τους έγραψε στην ομάδα του στο συγκεκριμένο εργαστήριο
                hubContext.Clients.Users(team).addNewMessageToPage("Ο χρήστης με ΑΜ " + userID + " σας πρόσθεσε στην ομάδα του στο εργαστήριο με τίτλο " + lab.labTitle);

                //προσθέτουμε τα μέλη της ομάδας στους εγγεγραμμένους φοιτητές του εργαστηρίου
                LabsAnnouncements labRegistered = db.LabsAnnouncements.Find(labID);
                if (labRegistered.regStudents == null)
                {
                    labRegistered.regStudents = enrollments.teamMembers;
                }
                else
                {
                    labRegistered.regStudents = labRegistered.regStudents + enrollments.teamMembers;
                }


                db.Enrollments.Add(enrollments); //αποθήκευση εγγραφής στη βάση δεδομένων
                db.SaveChanges();


                return(RedirectToAction("MyLabsStudent", enrollments)); //ανακατεύθυνση στα εργαστήρια στα οποία συμμετέχει ο συνδεδεμένος φοιτητής
            }


            return(View(enrollments));
        }