Esempio n. 1
0
        /// <summary>
        /// Основная функция обновления статуса
        /// Она проверяет все что нужно
        /// </summary>
        public ITask UpdateStatus(int taskId, int statusId, Limits limits)
        {
            ITask     task    = _Get(taskId);
            TimezTask oldTask = new TimezTask(task);

            if (task.TaskStatusId != statusId)
            {
                ITasksStatus newStatus = Utility.Statuses.Get(task.BoardId, statusId);

                CheckStatusLimits(newStatus, task.PlanningTime);
                CheckTaskLimits(newStatus, task.ExecutorUserId, limits, task);

                // Для обычных статусов только обновляем поля у задачи
                Repository.Tasks.UpdateStatus(task.Id, newStatus);

                // Обновляем у этой сущности, что б не запрашивать из бд
                task.TaskStatusId         = newStatus.Id;
                task.TaskStatusPosition   = newStatus.Position;
                task.StatusChangeDateTime = DateTime.Now;
                task.TaskStatusName       = newStatus.Name;

                OnUpdateStatus.Invoke(this, new UpdateEventArgs <ITask>(oldTask, task));
            }

            return(task);
        }
Esempio n. 2
0
        /// <summary>
        /// Получени задачи из архива
        /// </summary>
        public ITask GetFromArchive(int id)
        {
            var       archive = Repository.Tasks.GetFromArchiveById(id) as ITask;
            TimezTask task    = new TimezTask(archive);

            return(task);
        }
Esempio n. 3
0
        /// <summary>
        /// Перманентное удаление задачи
        /// </summary>
        /// <returns></returns>
        public ITask Delete(int id)
        {
            Task      task  = _Get(_Context, id);
            TimezTask dummy = null;

            if (task != null)
            {
                dummy = new TimezTask(task);
                _Context.Tasks.DeleteOnSubmit(task);
                _Context.SubmitChanges();
            }
            return(dummy);
        }
Esempio n. 4
0
        public ITask SetPlanningTime(int boardId, int newStatusId, int taskId, int time, Limits limits)
        {
            ITask     task    = _Get(taskId);
            TimezTask oldTask = new TimezTask(task);

            var status = Utility.Statuses.Get(boardId, newStatusId);             // проверяем в новом статусе лимиты

            CheckTaskLimits(status, task.ExecutorUserId, limits, task);

            task.PlanningTime = time;
            Repository.SubmitChanges();

            OnUpdatePlaningTime.Invoke(new UpdateEventArgs <ITask>(oldTask, task));

            return(task);
        }
Esempio n. 5
0
        public IProject SetProject(int taskId, int projectId, int boardId)
        {
            IProject project = Utility.Projects.Get(boardId, projectId);
            ITask    task    = _Get(taskId);

            if (task.ProjectId != project.Id)
            {
                ITask oldTask = new TimezTask(task);

                task.ProjectId   = project.Id;
                task.ProjectName = project.Name;
                Repository.SubmitChanges();
                OnUpdateProject.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
            }

            return(project);
        }
Esempio n. 6
0
        public IUser SetExecutor(int taskId, int userId)
        {
            IUser executor = Utility.Users.Get(userId);
            ITask task     = _Get(taskId);

            if (task.ExecutorUserId != executor.Id)
            {
                TimezTask oldTask = new TimezTask(task);

                task.ExecutorUserId = executor.Id;
                task.ExecutorEmail  = executor.EMail;
                task.ExecutorNick   = executor.Nick;
                Repository.SubmitChanges();

                OnTaskAssigned.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
            }

            return(executor);
        }
Esempio n. 7
0
        public IBoardsColor SetColor(int taskId, int colorId, int boardId)
        {
            IBoardsColor color = Utility.Boards.GetColor(boardId, colorId);
            ITask        task  = _Get(taskId);

            if (task.ColorId != color.Id)
            {
                ITask oldTask = new TimezTask(task);

                task.ColorId       = color.Id;
                task.ColorHEX      = color.Color;
                task.ColorName     = color.Name;
                task.ColorPosition = color.Position;
                Repository.SubmitChanges();

                OnUpdateColor.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
            }

            return(color);
        }
Esempio n. 8
0
        /// <summary>
        /// Обновлеяе основные параметры задачи
        /// Кроме статуса! Так как там сложная логика
        /// Обновление задачи, если задача была в кеше, то обновление происходит асинхронно
        /// Если в кеше задачи не было, то обновление синхронное и после задача добавляется в кеш
        /// </summary>
        public ITask Update(int boardId, int taskId, string name, string description, int userId, int projectId, int colorId, int?planingTime, Limits limits)
        {
            if (name.IsNullOrEmpty())
            {
                throw new ArgumentException("Name");
            }

            // TODO: Не вызывать апдейт, если ничиго не поменялось
            // TODO: Добавить колонку с временем обновления для поддержки версионности

            ITask     task    = _Get(taskId);
            TimezTask oldTask = new TimezTask(task);

            IProject     project  = Utility.Projects.Get(boardId, projectId);
            IBoardsColor color    = Utility.Boards.GetColor(project.BoardId, colorId);
            IUser        executor = Utility.Users.Get(userId);
            ITasksStatus status   = Utility.Statuses.Get(boardId, task.TaskStatusId);

            CheckTaskLimits(status, userId, limits, task);

            bool taskAssigned       = task.ExecutorUserId != executor.Id;
            bool colorChanged       = task.ColorId != color.Id;
            bool projectChanged     = task.ProjectId != project.Id;
            bool planingTimeChanged = task.PlanningTime != planingTime;

            task.Name           = name;
            task.Description    = description;
            task.ExecutorUserId = executor.Id;
            task.ExecutorEmail  = executor.EMail;
            task.ExecutorNick   = executor.Nick;
            task.ProjectId      = project.Id;
            task.ProjectName    = project.Name;
            task.ColorId        = color.Id;
            task.ColorHEX       = color.Color;
            task.ColorName      = color.Name;
            task.ColorPosition  = color.Position;
            task.PlanningTime   = planingTime;

            using (TransactionScope scope = new TransactionScope())
            {
                Repository.SubmitChanges();

                OnUpdate.Invoke(new UpdateEventArgs <ITask>(oldTask, task));

                if (taskAssigned)
                {
                    OnTaskAssigned.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
                }

                if (colorChanged)
                {
                    OnUpdateColor.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
                }

                if (projectChanged)
                {
                    OnUpdateProject.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
                }

                if (planingTimeChanged)
                {
                    OnUpdatePlaningTime.Invoke(new UpdateEventArgs <ITask>(oldTask, task));
                }

                scope.Complete();
            }

            return(task);
        }