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")); //ανακατεύθυνση στην αρχική σελίδα }
public ActionResult Details(string id) { //ανάλογα με το id της διαθεσιμότητας του εργαστηρίου, βλέπει τις αντίστοιχες πληροφορίες if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } LabsAvailability labsAvailability = db.LabsAvailability.Find(id); if (labsAvailability == null) { return(HttpNotFound()); } return(View(labsAvailability)); }
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()); } } }
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)); }