Beispiel #1
0
            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();
            }
Beispiel #2
0
            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.");
                }
            }
Beispiel #3
0
        /// <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
            });
        }
Beispiel #4
0
 public CreateTask(string id, string name, int unitsOfWork, Importance importance, TaskFrequency frequency)
 {
     Id          = id;
     Name        = name;
     UnitsOfWork = unitsOfWork;
     Importance  = importance;
     Frequency   = frequency;
 }
Beispiel #5
0
 private static DateTime GetNextReminder(TaskFrequency frequency, DateTime startDate)
 {
     if (startDate >= DateTime.Today)
     {
         return(startDate);
     }
     else
     {
         return(Workspace.API.CalculateNextReminder(frequency, startDate));
     }
 }
Beispiel #6
0
 /// <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;
     }
 }
Beispiel #7
0
            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);
            }
Beispiel #8
0
            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);
            }
Beispiel #9
0
            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);
            }