private DataTable GenerateTasks(ClockTime startTime, ClockTime stopTime, ClockTimeInterval interval, List <DayOfWeek> IncludedDays) { DataTable task = GetTasksDataTable(); ClockTime clockTime = new ClockTime(); foreach (var day in IncludedDays) { clockTime.Hour = startTime.Hour; clockTime.Minute = startTime.Minute; while (clockTime != stopTime) { task.Rows.Add(day, clockTime.ToString(), null); clockTime.AddInterval(interval); } } return(task); }
private bool IsTimeOverlap(ClockTime startTime, ClockTime stopTime, ClockTimeInterval interval) { ClockTimeInterval differentialInterval = ClockTimeInterval.GetInterval(startTime, stopTime); while (true) { if (differentialInterval.Hour == 0 && differentialInterval.Minute == 0) { return(true); } else if (differentialInterval.Hour < 0 || differentialInterval.Minute < 0) { return(false); } differentialInterval.SubtractInterval(interval); } }
private Tools.Planner GetPlanner(Participant participant, string plannerName) { try { DataTable plannerSample = DbAdapter.GetPlanner(participant.Name, plannerName); DayOfWeek firstDay = (DayOfWeek)Enum.Parse(typeof(DayOfWeek), plannerSample.Rows[0]["Planner_FirstDay"].ToString()); ClockTime startTime = ExtractClockTime(plannerSample.Rows[0]["Planner_StartTime"].ToString()); ClockTime stopTime = ExtractClockTime(plannerSample.Rows[0]["Planner_StopTime"].ToString()); ClockTimeInterval interval = ExtractClockTimeInterval(plannerSample.Rows[0]["Planner_Interval"].ToString()); DataTable task = ExtractTask(firstDay, startTime, stopTime, interval, DbAdapter.GetTask(participant.Name, plannerName)); return(new Tools.Planner(participant, plannerName, firstDay, startTime, stopTime, interval, task)); } catch (Exception) { throw; } }
private void CreatePlanner(Participant participant, string plannerName, DayOfWeek firstDay, List <DayOfWeek> IncludedDays, string startTimeSample, string stopTimeSample, string intervalSample) { if (plannerName.Length != 0 && startTimeSample.Length != 0 && stopTimeSample.Length != 0 && intervalSample.Length != 0) { if (!ExtractPlanners(DbAdapter.GetPlanners(this.Participant.Name)).Contains(plannerName)) { if (IsTimeFormatCorrect(startTimeSample) && IsTimeFormatCorrect(stopTimeSample) && IsTimeFormatCorrect(intervalSample)) { ClockTime startTime = ExtractClockTime(startTimeSample); ClockTime stopTime = ExtractClockTime(stopTimeSample); ClockTimeInterval interval = ExtractClockTimeInterval(intervalSample); if (IsTimeOverlap(startTime, stopTime, interval)) { try { DataTable task = GenerateTasks(startTime, stopTime, interval, IncludedDays); DbAdapter.CreatePlanner(participant.Name, plannerName, firstDay.ToString(), startTime.ToString(), stopTime.ToString(), interval.ToString(), task); AdjustPlannerListBox(); OpenPlanner(participant, plannerName); } catch (Exception exception) { MessageBox.Show(exception.Message); } } else { MessageBox.Show($"Cannot create planner of given time values"); } } else { MessageBox.Show("Time values must be expressed as hh:mm"); } } else { MessageBox.Show($"Planner {plannerName} already exists"); } } else { MessageBox.Show("All fields must be non-empty"); } }
private DataTable ExtractTask(DayOfWeek firstDay, ClockTime startTime, ClockTime stopTime, ClockTimeInterval interval, DataTable taskSample) { DataTable task = new DataTable(); #region columns definition List <string> IncludedDaysSample = (taskSample.AsEnumerable().Select(x => x["Task_Day"].ToString()).Distinct().ToList()); List <DayOfWeek> IncludedDays = IncludedDaysSample.ConvertAll(new Converter <string, DayOfWeek>(StringToDayOfWeek)); ChangeWeekDaysOrder(IncludedDays, firstDay); task.Columns.AddRange(IncludedDays.ConvertAll(new Converter <DayOfWeek, DataColumn>(DayOfWeekToDataColumn)).ToArray()); #endregion #region table values definition List <object> DataRowEquivalent = new List <object>(); ClockTime clockTime = new ClockTime(startTime.Hour, startTime.Minute); while (clockTime != stopTime) { DataRow[] dataRows = taskSample.Select($"Task_Time = '{clockTime.ToString()}'"); foreach (DataColumn dataColumn in task.Columns) { foreach (DataRow dataRow in dataRows) { if (dataColumn.ColumnName == dataRow["Task_Day"].ToString()) { DataRowEquivalent.Add(dataRow["TaskType_Name"]); break; } } } task.Rows.Add(DataRowEquivalent.ToArray()); DataRowEquivalent.Clear(); clockTime.AddInterval(interval); } #endregion return(task); }