protected void AddSupervision(DateTime t_start, DateTime t_end, ScheduledComponent sc) { ScheduledComponent sched1 = new ScheduledComponent(); TimeSpan tgap = new TimeSpan(); tgap = t_end - t_start; if ((tgap.TotalMinutes >= 10) && (tgap.TotalDays < 2)) { ExamConversions u = new ExamConversions(); ExamComponent ec1 = new ExamComponent(); ec1.m_ComponentCode = "Super"; ec1.m_ComponentTitle = "Supervision"; ec1.m_ComponentTitle += "-" + sc.GetHashCode().ToString(); ec1.m_ExamBoardID = new Guid("436ff234-0457-430a-b1e2-b08758ff30ef"); ec1.m_year = Year.ToString().Substring(2, 2); ec1.m_season = u.GetSeasonCode(SeasonCode); ec1.m_Teachermarks = "0"; ec1.m_MaximumMark = "0"; ec1.m_Timetabled = "T"; ec1.m_TimetableDate = t_start; ec1.m_TimetableSession = "A"; ec1.m_Time = tgap.TotalMinutes.ToString(); //now if the brat has extra time we need to reduce...>!!!! StudentSENList ssen1 = new StudentSENList(sc.m_StudentId.ToString()); double extra_time = 0; double time1 = tgap.TotalMinutes; //now if the brat has extra time we need to reduce.. becasue it will be increased by code when read... foreach (StudentSEN sen1 in ssen1.m_List) { if (sen1.m_ExamsExtraTime > 0) { extra_time = (double)sen1.m_ExamsExtraTime; } } time1 = time1 / ((100 + extra_time) / 100); int i = (int)time1; ec1.m_Time = i.ToString(); ec1.Create(); ec1.m_ComponentID = ec1.Find_ComponentID(ec1.m_ComponentCode, ec1.m_ComponentTitle, ec1.m_ExamBoardID.ToString(), ec1.m_season, ec1.m_year); if (ec1.m_ComponentID != Guid.Empty) { sched1.Load(ec1.m_ComponentID, sc.m_StudentId); if (!sched1.m_valid) { sched1.m_StudentId = sc.m_StudentId; sched1.m_ComponentId = ec1.m_ComponentID; sched1.m_RoomId = Guid.Empty; sched1.m_Year = Year.ToString(); sched1.m_Season = u.GetSeasonCode(SeasonCode); sched1.m_valid = true; sched1.m_Date = t_start; sched1.m_Desk = ""; sched1.m_Will_Type = false;// do these later... sched1.Save(); } } } }
protected void Button_EditSave_Click(object sender, EventArgs e) { Guid g = (Guid)ViewState["CurrentEdit"]; ScheduledComponent sc = new ScheduledComponent(); sc.Load(g); sc.m_Desk = TextBox_Desk.Text; sc.m_RoomId = new Guid(DropDownList_Rooms.SelectedValue); //starttime box is hh:mm int hour = System.Convert.ToInt16(TextBox_StartTime.Text.Substring(0, 2)); int min = Convert.ToInt16(TextBox_StartTime.Text.Substring(3, 2)); DateTime t1 = new DateTime(sc.m_Date.Year, sc.m_Date.Month, sc.m_Date.Day, hour, min, 0); sc.m_Date = t1; sc.Save(); Panel1.Visible = true; Panel2.Visible = false; SetupGrid(); GridView1.DataBind(); }
protected void FindNextSlot(ScheduledComponent sc, DateTime start_time)//start time is time of last exam.. { //so we are going to look forward for next slot big enough to accomodate this boy and scehdule it?? ScheduledComponentList scl2 = new ScheduledComponentList(); //goto next day DateTime t0 = new DateTime(start_time.Year, start_time.Month, start_time.Day); bool found = false; while (!found) { t0 = t0.AddDays(1); if (t0.DayOfWeek == DayOfWeek.Saturday) { t0 = t0.AddDays(2); //nightmare! } scl2.LoadList_Student(t0.AddHours(8), t0.AddHours(12), sc.m_StudentId.ToString()); if (scl2.m_List.Count == 0) { sc.m_Date = t0.AddHours(12).AddMinutes(30).AddMinutes(-sc.m_TimeAllowed - 10); sc.Save(); //need to add supervision.... AddSupervision(start_time, sc.m_Date, sc); found = true; } else { //going to count hours am... int total = 0; DateTime t3 = new DateTime(); foreach (ScheduledComponent sc1 in scl2.m_List) { total += sc1.m_TimeAllowed + 10; t3 = sc1.m_Date.AddMinutes(sc1.m_TimeAllowed + 10); } total += sc.m_TimeAllowed; if (total <= 180) { sc.m_Date = t3; sc.Save(); AddSupervision(start_time, sc.m_Date, sc); found = true; } else { scl2.LoadList_Student(t0.AddHours(13), t0.AddHours(18), sc.m_StudentId.ToString()); if (scl2.m_List.Count == 0) { sc.m_Date = t0.AddHours(13).AddMinutes(40); sc.Save(); //need to add supervision.... AddSupervision(start_time, sc.m_Date, sc); found = true; } else { total = 0; foreach (ScheduledComponent sc1 in scl2.m_List) { total += sc1.m_TimeAllowed + 10; t3 = sc1.m_Date.AddMinutes(sc1.m_TimeAllowed + 10); } total += sc.m_TimeAllowed; if (total <= 180) { sc.m_Date = t3; sc.Save(); AddSupervision(start_time, sc.m_Date, sc); found = true; } else { found = false; } } } } } }
protected void UpdateTimetable(DateTime start, DateTime end) { // add scheduled components for any components not scheduled... //TODO also delete any withdrawn.... ExamConversions u = new ExamConversions(); ExamCompononent_List ecl1 = new ExamCompononent_List(); //ecl1.LoadAllComponents(Year.ToString(), SeasonCode.ToString()); ecl1.LoadAllComponentsSeasonDate(YearCode.ToString(), SeasonCode.ToString(), start, end); Encode en = new Encode(); string s = ""; ScheduledComponent sched1 = new ScheduledComponent(); s = ""; int n = 0; DateTime d1 = new DateTime(); foreach (ExamComponent ec in ecl1.m_list) { ExamLinkComponent_List elcl1 = new ExamLinkComponent_List(); elcl1.LoadList_Component(ec.m_ComponentID); foreach (ExamLinkComponent elc in elcl1.m_list) { ExamEntries_List exl1 = new ExamEntries_List(); //now need all entries for this option..... exl1.Load_Option(elc.m_OptionId); n += exl1.m_list.Count; } } int n1 = 0; int n2 = 0; foreach (ExamComponent ec in ecl1.m_list) { if (ec.m_Timetabled == "T") { d1 = ec.m_TimetableDate; if (ec.m_TimetableSession == "A") { d1 = d1.AddHours(8); d1 = d1.AddMinutes(50); } else { d1 = d1.AddHours(13); d1 = d1.AddMinutes(40); } //need to find all entries that use this component..... ExamLinkComponent_List elcl1 = new ExamLinkComponent_List(); elcl1.LoadList_Component(ec.m_ComponentID); foreach (ExamLinkComponent elc in elcl1.m_list) { ExamEntries_List exl1 = new ExamEntries_List(); //now need all entries for this option..... exl1.Load_Option(elc.m_OptionId); foreach (Exam_Entry ex in exl1.m_list) { if (!ex.m_withdrawn) { sched1.Load(ec.m_ComponentID, ex.m_StudentID); if (!sched1.m_valid) { sched1.m_StudentId = ex.m_StudentID; sched1.m_ComponentId = ec.m_ComponentID; sched1.m_RoomId = Guid.Empty; sched1.m_Year = Year.ToString(); sched1.m_Season = u.GetSeasonCode(SeasonCode); sched1.m_valid = true; sched1.m_Date = d1; sched1.m_Desk = ""; sched1.m_Will_Type = false;// do these later... sched1.Save(); n2++; } } else { sched1.Load(ec.m_ComponentID, ex.m_StudentID); if (sched1.m_valid) { //need to delete sched1.Delete(); n1++; } } } } } } //now ought to update the willtype fields to agree with the cantype entry.. //oohhh this is going to be messy..... //read from a querry..... then update Exams_Scheduled_components... CanTypeList typists = new CanTypeList(); foreach (Guid g in typists.m_List) { s = "UPDATE dbo.tbl_Exams_ScheduledComponents SET WillType =1 WHERE (StudentId = '" + g.ToString() + "' )AND (Year='" + YearCode.ToString() + "' ) AND (Season ='" + u.GetSeasonCode(SeasonCode) + "' )"; en.ExecuteSQL(s); } }