public static void InsertTask(TaskList list, string title, string details, int?priority, ICollection <Comment> comments, TaskItem parent, TaskFrequency frequency, DateTime?dueDate, DateTime?completed) { ValidateTaskValues(title, priority, frequency, dueDate); TaskItem item = new TaskItem(); item.List = list; item.Name = title; item.Description = details; item.Priority = priority.Value; item.Parent = parent; item.Created = item.Updated = DateTime.Now; SetFrequency(item, frequency, dueDate); Workspace.Instance.Tasks.Add(item); Workspace.Instance.SaveChanges(); SetCompletedAndOrder(item, completed); foreach (var comment in comments) { comment.Owner = item; DB.Comments.Add(comment); } DB.SaveChanges(); }
private static void ValidateTaskValues(string name, int?priority, TaskFrequency frequency, DateTime?startDate, int?id = null) { //Name var existing = Workspace.Instance.Tasks.FirstOrDefault(x => x.Name == name); if (existing != null) { if (id == null || existing.TaskItemID != id) { throw new Exception("An task by this name already exists."); } } //Priority if (priority == null) { throw new Exception("Priority must be set."); } //Frequency if (startDate == null && frequency != TaskFrequency.No) { throw new Exception("Frequency is set but DueDate is not."); } }
/// <summary> /// 转换成QuartzTaskEditModel /// </summary> /// <returns></returns> public static QuartzTaskEditModel AsEditModel(this QuartzTask quartzTask) { string seconds = quartzTask.GetRulePart(RulePart.seconds); string minutes = quartzTask.GetRulePart(RulePart.minutes); string hours = quartzTask.GetRulePart(RulePart.hours); string day = quartzTask.GetRulePart(RulePart.day); string mouth = quartzTask.GetRulePart(RulePart.mouth); string dayOfWeek = quartzTask.GetRulePart(RulePart.dayofweek) ?? string.Empty; string[] rulePartArray = quartzTask.TaskRule.Split(' '); TaskFrequency frequency = TaskFrequency.EveryDay; if ((rulePartArray[3].Contains("/") || rulePartArray[3] == "*") && rulePartArray[4] == "*") { frequency = TaskFrequency.EveryDay; } else if (rulePartArray[5] != "?" && !rulePartArray[5].Contains("#")) { frequency = TaskFrequency.Weekly; } else { frequency = TaskFrequency.PerMonth; } bool dayRepeat = false; for (int i = 0; i < 3; i++) { dayRepeat = rulePartArray[i].Contains("*") || rulePartArray[i].Contains("/"); if (dayRepeat) { break; } } return(new QuartzTaskEditModel() { TaskName = quartzTask.Name, IsRepeat = quartzTask.TaskRule.Contains("/") || quartzTask.TaskRule.Contains("*"), Seconds = seconds, Minutes = minutes, Hours = hours, Day = day, Mouth = mouth, Frequency = frequency, DayOrWeekly = !dayOfWeek.Contains("#"), DayOfMouth = day, WeeklyOfMouth = dayOfWeek.Contains("#") ? dayOfWeek.Substring(0, dayOfWeek.IndexOf("#")) : "2", Number = dayOfWeek.Contains("#") ? dayOfWeek.Substring(dayOfWeek.IndexOf("#") + 1) : "1", DayOfWeek = dayOfWeek.Contains("#") ? null : dayOfWeek.Split(','), DayRepeat = dayRepeat, OnceTime = !dayRepeat ? new DateTime(2016, 1, 1, Convert.ToInt32(hours), Convert.ToInt32(minutes), Convert.ToInt32(seconds)) : new DateTime(2016, 1, 1, 1, 0, 0), OnceDate = !dayRepeat ? new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day, Convert.ToInt32(hours), Convert.ToInt32(minutes), Convert.ToInt32(seconds)) : DateTime.Now, StartDate = string.IsNullOrEmpty(quartzTask.StartDate.ToString()) ? DateTime.Now : quartzTask.StartDate, EndDate = quartzTask.EndDate ?? new DateTime(2099, DateTime.Now.Month, DateTime.Now.Day, DateTime.Now.Hour, DateTime.Now.Minute, DateTime.Now.Second), Enabled = quartzTask.Enabled }); }
public CreateTask(string id, string name, int unitsOfWork, Importance importance, TaskFrequency frequency) { Id = id; Name = name; UnitsOfWork = unitsOfWork; Importance = importance; Frequency = frequency; }
private static DateTime GetNextReminder(TaskFrequency frequency, DateTime startDate) { if (startDate >= DateTime.Today) { return(startDate); } else { return(Workspace.API.CalculateNextReminder(frequency, startDate)); } }
/// <summary> /// Sets the Frequency and DueDate on the task /// </summary> /// <param name="task"></param> /// <param name="frequency"></param> /// <param name="startDate"></param> private static void SetFrequency(TaskItem task, TaskFrequency frequency, DateTime?startDate) { if (frequency != TaskFrequency.No && startDate != null) { DateTime reminder = GetNextReminder(frequency, startDate.Value.Date); task.Frequency = frequency; task.DueDate = reminder; } else //Delete { task.Frequency = TaskFrequency.No; task.DueDate = startDate; } }
public static DateTime CalculateLastReminder(TaskFrequency frequency, DateTime referenceDate) { DateTime dt = referenceDate; switch (frequency) { case TaskFrequency.Daily: dt = dt.AddDays(-1); break; case TaskFrequency.Monthly: dt = dt.AddMonths(-1); break; case TaskFrequency.Weekly: dt = dt.AddDays(-7); break; } return(dt); }
public static DateTime CalculateNextReminder(TaskFrequency frequency, DateTime referenceDate) { DateTime dt = referenceDate; while (dt < DateTime.Today) { switch (frequency) { case TaskFrequency.Daily: dt = dt.AddDays(1); break; case TaskFrequency.Monthly: dt = dt.AddMonths(1); break; case TaskFrequency.Weekly: dt = dt.AddDays(7); break; } } return(dt); }
public static void UpdateTask(TaskItem existing, string title, string details, ICollection <Comment> comments, int?priority, TaskItem parent, int order, TaskFrequency frequency, DateTime?dueDate, DateTime?completed, TaskList newList) { ValidateTaskValues(title, priority, frequency, dueDate, existing.TaskItemID); existing.Name = title; existing.Description = details; existing.Priority = priority.Value; existing.Updated = DateTime.Now; SetFrequency(existing, frequency, dueDate); //Impacts DB directly/immediately bool listChanged = newList != null && newList.TaskListID != existing.ListID; bool parentChanged = HasTaskParentChanged(parent, existing.Parent); if (parentChanged) { int listId = existing.ListID; int?oldParentId = existing.ParentID; CheckParentChild(existing, parent); existing.Parent = parent; DB.SaveChanges(); Workspace.API.RenumberTasks(listId, existing.ParentID); //This is now the new one Workspace.API.RenumberTasks(listId, oldParentId); DB.SaveChanges(); } if (listChanged) { int oldListId = existing.ListID; int newListId = newList.TaskListID; existing.ListID = newListId; DB.SaveChanges(); Workspace.API.RenumberTasks(newListId, existing.ParentID); Workspace.API.RenumberTasks(oldListId, null); DB.SaveChanges(); //Move Children if (existing.Children != null) { SetList(existing, newListId); DB.SaveChanges(); } } SetCompletedAndOrder(existing, completed); //Process Comments foreach (var c in comments.Where(x => x.Owner == null)) { c.Owner = existing; } ProcessComments(existing.Comments, comments); }