Esempio n. 1
0
        public CustomTaskStatus Create(CustomTaskStatus status)
        {
            if (!ProjectSecurity.CurrentUserAdministrator)
            {
                ProjectSecurity.CreateSecurityException();
            }

            var statuses   = DaoFactory.StatusDao.Get().Where(r => r.StatusType == status.StatusType).OrderBy(r => r.Order);
            var lastStatus = statuses.LastOrDefault();

            if (lastStatus != null)
            {
                status.Order = lastStatus.Order + 1;
            }
            else
            {
                status.Order = 1;
            }

            if (!status.Available.HasValue)
            {
                status.Available = statuses.All(r => r.Available == null || r.Available.Value);
            }

            return(DaoFactory.StatusDao.Create(status));
        }
Esempio n. 2
0
        public override CustomTaskStatus Create(CustomTaskStatus status)
        {
            var result = base.Create(status);

            ResetCache();
            return(result);
        }
Esempio n. 3
0
        public TaskWrapperFull UpdateTask(int taskid, TaskStatus status, int statusId = 0)
        {
            var task = EngineFactory.TaskEngine.GetByID(taskid).NotFoundIfNull();

            var customStatus = EngineFactory.StatusEngine.GetWithDefaults().FirstOrDefault(r => r.Id == statusId) ??
                               CustomTaskStatus.GetDefaults().First(r => r.StatusType == status);

            EngineFactory.TaskEngine.ChangeStatus(task, customStatus);
            MessageService.Send(Request, MessageAction.TaskUpdatedStatus, MessageTarget.Create(task.ID), task.Project.Title, task.Title, LocalizedEnumConverter.ConvertToString(task.Status));

            return(GetTask(taskid));
        }
Esempio n. 4
0
        public List <CustomTaskStatus> GetWithDefaults()
        {
            var result = Get();

            if (!result.Any(r => r.StatusType == TaskStatus.Open && r.IsDefault))
            {
                result.Add(CustomTaskStatus.GetDefault(TaskStatus.Open));
            }
            if (!result.Any(r => r.StatusType == TaskStatus.Closed && r.IsDefault))
            {
                result.Add(CustomTaskStatus.GetDefault(TaskStatus.Closed));
            }

            return(result);
        }
Esempio n. 5
0
        public void Delete(int id)
        {
            if (!ProjectSecurity.CurrentUserAdministrator)
            {
                ProjectSecurity.CreateSecurityException();
            }
            var defaultTask = CustomTaskStatus.GetDefaults().FirstOrDefault(r => r.Id == id);

            if (defaultTask != null)
            {
                return;
            }

            DaoFactory.StatusDao.Delete(id);
        }
Esempio n. 6
0
        public virtual void Update(CustomTaskStatus status)
        {
            var insert = Update(StatusTable)
                         .Set("title", status.Title)
                         .Set("description", status.Description)
                         .Set("image", status.Image)
                         .Set("imageType", status.ImageType)
                         .Set("color", status.Color)
                         .Set("`order`", status.Order)
                         .Set("statusType", status.StatusType)
                         .Set("available", status.Available)
                         .Where("id", status.Id);

            Db.ExecuteNonQuery(insert);
        }
Esempio n. 7
0
        public void Update(CustomTaskStatus status)
        {
            if (!ProjectSecurity.CurrentUserAdministrator)
            {
                ProjectSecurity.CreateSecurityException();
            }

            var statuses = DaoFactory.StatusDao.Get().Where(r => r.StatusType == status.StatusType).OrderBy(r => r.Order);

            if (!status.Available.HasValue)
            {
                status.Available = statuses.All(r => r.Available == null || r.Available.Value);
            }

            DaoFactory.StatusDao.Update(status);
        }
Esempio n. 8
0
        public virtual CustomTaskStatus Create(CustomTaskStatus status)
        {
            var insert = Insert(StatusTable, false)
                         .InColumnValue("id", 0)
                         .InColumnValue("title", status.Title)
                         .InColumnValue("description", status.Description)
                         .InColumnValue("statusType", status.StatusType)
                         .InColumnValue("image", status.Image)
                         .InColumnValue("imageType", status.ImageType)
                         .InColumnValue("color", status.Color)
                         .InColumnValue("`order`", status.Order)
                         .InColumnValue("isDefault", status.IsDefault)
                         .InColumnValue("available", status.Available)
                         .Identity(1, 0, true);

            status.Id = Db.ExecuteScalar <int>(insert);
            return(status);
        }
        public CustomTaskStatus UpdateStatus(CustomTaskStatus newStatus)
        {
            if (newStatus.IsDefault && !EngineFactory.StatusEngine.Get().Any(r => r.IsDefault && r.StatusType == newStatus.StatusType))
            {
                return(CreateStatus(newStatus));
            }

            var status = EngineFactory.StatusEngine.Get().FirstOrDefault(r => r.Id == newStatus.Id).NotFoundIfNull();

            status.Title       = Update.IfNotEmptyAndNotEquals(status.Title, newStatus.Title);
            status.Description = Update.IfNotEmptyAndNotEquals(status.Description, newStatus.Description);
            status.Color       = Update.IfNotEmptyAndNotEquals(status.Color, newStatus.Color);
            status.Image       = Update.IfNotEmptyAndNotEquals(status.Image, newStatus.Image);
            status.ImageType   = Update.IfNotEmptyAndNotEquals(status.ImageType, newStatus.ImageType);
            status.Order       = Update.IfNotEmptyAndNotEquals(status.Order, newStatus.Order);
            status.StatusType  = Update.IfNotEmptyAndNotEquals(status.StatusType, newStatus.StatusType);
            status.Available   = Update.IfNotEmptyAndNotEquals(status.Available, newStatus.Available);

            EngineFactory.StatusEngine.Update(status);

            return(status);
        }
Esempio n. 10
0
 protected override IEnumerable <KeyValuePair <string, object> > GetClientVariables(HttpContext context)
 {
     return(new List <KeyValuePair <string, object> >(10)
     {
         RegisterResourceSet("ProjectsJSResource", ProjectsJSResource.ResourceManager),
         RegisterResourceSet("ProjectsFilterResource", ProjectsFilterResource.ResourceManager),
         RegisterResourceSet("ImportResource", ImportResource.ResourceManager),
         RegisterResourceSet("TasksResource", TaskResource.ResourceManager),
         RegisterResourceSet("CommonResource", ProjectsCommonResource.ResourceManager),
         RegisterResourceSet("TimeTrackingResource", TimeTrackingResource.ResourceManager),
         RegisterResourceSet("MessageResource", MessageResource.ResourceManager),
         RegisterResourceSet("ProjectResource", ProjectResource.ResourceManager),
         RegisterResourceSet("MilestoneResource", MilestoneResource.ResourceManager),
         RegisterResourceSet("ProjectTemplatesResource", ProjectTemplatesResource.ResourceManager),
         RegisterResourceSet("ProjectsFileResource", ProjectsFileResource.ResourceManager),
         RegisterResourceSet("ReportResource", ReportResource.ResourceManager),
         RegisterObject(
             new
         {
             ViewByDepartments = CustomNamingPeople.Substitute <ReportResource>("ViewByDepartments").HtmlEncode(),
             ViewByUsers = CustomNamingPeople.Substitute <ReportResource>("ViewByUsers").HtmlEncode(),
             AllDepartments = CustomNamingPeople.Substitute <ProjectsCommonResource>("AllDepartments").HtmlEncode(),
             AllUsers = CustomNamingPeople.Substitute <ProjectsCommonResource>("AllUsers").HtmlEncode(),
             PaymentStatus = new
             {
                 NotChargeable = ResourceEnumConverter.ConvertToString(PaymentStatus.NotChargeable),
                 NotBilled = ResourceEnumConverter.ConvertToString(PaymentStatus.NotBilled),
                 Billed = ResourceEnumConverter.ConvertToString(PaymentStatus.Billed)
             },
             GrammaticalResource.DayGenitiveSingular,
             GrammaticalResource.MonthNominative,
             GrammaticalResource.MonthGenitiveSingular,
             GrammaticalResource.MonthGenitivePlural,
             ProjectStatus = new[]
             {
                 new { id = ProjectStatus.Open, title = ProjectsJSResource.StatusOpenProject },
                 new { id = ProjectStatus.Paused, title = ProjectsJSResource.StatusSuspendProject },
                 new { id = ProjectStatus.Closed, title = ProjectsJSResource.StatusClosedProject }
             },
             StartModules = new[]
             {
                 StartModule.TaskModule,
                 StartModule.ProjectsModule,
                 StartModule.DiscussionModule,
                 StartModule.TimeTrackingModule
             }.Select(r => new { r.Page, r.StartModuleType, Title = r.Title() }),
             Statuses = CustomTaskStatus.GetDefaults().Select(r => new
             {
                 id = r.Id,
                 image = r.Image,
                 imageType = r.ImageType,
                 title = r.Title,
                 description = r.Description,
                 color = r.Color,
                 statusType = r.StatusType,
                 isDefault = r.IsDefault,
                 available = r.Available,
                 canChangeAvailable = r.CanChangeAvailable
             })
         })
     });
 }
Esempio n. 11
0
 public CustomTask(Guid uid, CustomTaskStatus status, DateTime timeStamp)
 {
     Uid       = uid;
     Status    = status;
     TimeStamp = timeStamp;
 }
Esempio n. 12
0
        public Task ChangeStatus(Task task, CustomTaskStatus newStatus)
        {
            ProjectSecurity.DemandEdit(task);

            if (task == null)
            {
                throw new ArgumentNullException("task");
            }
            if (task.Project == null)
            {
                throw new Exception("Project can't be null.");
            }
            if (task.Project.Status == ProjectStatus.Closed)
            {
                throw new Exception(EngineResource.ProjectClosedError);
            }

            if (task.Status == newStatus.StatusType && task.CustomTaskStatus == newStatus.Id)
            {
                return(task);
            }

            var status       = StatusEngine.Get().FirstOrDefault(r => r.Id == newStatus.Id);
            var cannotChange =
                status != null &&
                status.Available.HasValue && !status.Available.Value &&
                task.CreateBy != SecurityContext.CurrentAccount.ID &&
                task.Project.Responsible != SecurityContext.CurrentAccount.ID &&
                !ProjectSecurity.CurrentUserAdministrator;

            if (cannotChange)
            {
                ProjectSecurity.CreateSecurityException();
            }


            var senders = GetSubscribers(task);

            if (newStatus.StatusType == TaskStatus.Closed && !DisableNotifications && senders.Count != 0)
            {
                NotifyClient.Instance.SendAboutTaskClosing(senders, task);
            }

            if (newStatus.StatusType == TaskStatus.Open && !DisableNotifications && senders.Count != 0)
            {
                NotifyClient.Instance.SendAboutTaskResumed(senders, task);
            }

            task.Status           = newStatus.StatusType;
            task.CustomTaskStatus = newStatus.Id < 0 ? null : (int?)newStatus.Id;
            task.LastModifiedBy   = SecurityContext.CurrentAccount.ID;
            task.LastModifiedOn   = TenantUtil.DateTimeNow();
            task.StatusChangedOn  = TenantUtil.DateTimeNow();

            //subtask
            if (newStatus.StatusType == TaskStatus.Closed)
            {
                if (!task.Responsibles.Any())
                {
                    task.Responsibles.Add(SecurityContext.CurrentAccount.ID);
                }

                DaoFactory.SubtaskDao.CloseAllSubtasks(task);
                foreach (var subTask in task.SubTasks)
                {
                    subTask.Status = TaskStatus.Closed;
                }
            }

            return(DaoFactory.TaskDao.Update(task));
        }
Esempio n. 13
0
        public TaskWrapperFull UpdateProjectTask(
            int taskid,
            string description,
            ApiDateTime deadline,
            ApiDateTime startDate,
            TaskPriority?priority,
            string title,
            int milestoneid,
            IEnumerable <Guid> responsibles,
            int?projectID,
            bool notify,
            TaskStatus?status,
            int?progress)
        {
            var taskEngine = EngineFactory.TaskEngine;
            var task       = taskEngine.GetByID(taskid).NotFoundIfNull();

            if (string.IsNullOrEmpty(title))
            {
                throw new ArgumentException(@"title can't be empty", "title");
            }

            if (!EngineFactory.MilestoneEngine.IsExists(milestoneid) && milestoneid > 0)
            {
                throw new ItemNotFoundException("Milestone not found");
            }

            task.Responsibles = new List <Guid>(responsibles.Distinct());

            task.Deadline    = Update.IfNotEquals(task.Deadline, deadline);
            task.Description = Update.IfNotEquals(task.Description, description);

            if (priority.HasValue)
            {
                task.Priority = Update.IfNotEquals(task.Priority, priority.Value);
            }

            task.Title     = Update.IfNotEmptyAndNotEquals(task.Title, title);
            task.Milestone = Update.IfNotEquals(task.Milestone, milestoneid);
            task.StartDate = Update.IfNotEquals(task.StartDate, startDate);

            if (projectID.HasValue)
            {
                var project = EngineFactory.ProjectEngine.GetByID((int)projectID).NotFoundIfNull();
                task.Project = project;
            }

            if (progress.HasValue)
            {
                task.Progress = progress.Value;
            }

            taskEngine.SaveOrUpdate(task, null, notify);

            if (status.HasValue)
            {
                taskEngine.ChangeStatus(task, CustomTaskStatus.GetDefaults().First(r => r.StatusType == status.Value));
            }

            MessageService.Send(Request, MessageAction.TaskUpdated, MessageTarget.Create(task.ID), task.Project.Title, task.Title);

            return(GetTask(taskid));
        }
Esempio n. 14
0
 private async Task UpdateTaskStatus(CustomTask task, CustomTaskStatus status)
 {
     task.SetStatus(status);
     await _repository.SaveTask(task);
 }
Esempio n. 15
0
 public void SetStatus(CustomTaskStatus status)
 {
     Status    = status;
     TimeStamp = DateTime.Now;
 }
Esempio n. 16
0
 public CustomTaskStatus CreateStatus(CustomTaskStatus status)
 {
     return(EngineFactory.StatusEngine.Create(status));
 }
Esempio n. 17
0
 public override void Update(CustomTaskStatus status)
 {
     base.Update(status);
     ResetCache();
 }
Esempio n. 18
0
        public TaskWrapperFull UpdateProjectTask(
            int taskid,
            string description,
            ApiDateTime deadline,
            ApiDateTime startDate,
            TaskPriority?priority,
            string title,
            int milestoneid,
            IEnumerable <Guid> responsibles,
            int?projectID,
            bool notify,
            TaskStatus?status,
            int?progress)
        {
            var taskEngine = EngineFactory.TaskEngine;
            var task       = taskEngine.GetByID(taskid).NotFoundIfNull();

            if (string.IsNullOrEmpty(title))
            {
                throw new ArgumentException(@"title can't be empty", "title");
            }

            if (!EngineFactory.MilestoneEngine.IsExists(milestoneid) && milestoneid > 0)
            {
                throw new ItemNotFoundException("Milestone not found");
            }

            var distinctResponsibles = new List <Guid>(responsibles.Distinct());

            var hasChanges = !(task.Responsibles.Count == distinctResponsibles.Count && task.Responsibles.All(distinctResponsibles.Contains));

            task.Responsibles = distinctResponsibles;

            task.Deadline    = Update.IfNotEquals(TenantUtil.DateTimeToUtc(task.Deadline), deadline, ref hasChanges);
            task.Description = Update.IfNotEquals(task.Description, description, ref hasChanges);

            if (priority.HasValue)
            {
                task.Priority = Update.IfNotEquals(task.Priority, priority.Value, ref hasChanges);
            }

            task.Title     = Update.IfNotEmptyAndNotEquals(task.Title, title, ref hasChanges);
            task.Milestone = Update.IfNotEquals(task.Milestone, milestoneid, ref hasChanges);
            task.StartDate = Update.IfNotEquals(TenantUtil.DateTimeToUtc(task.StartDate), startDate, ref hasChanges);

            if (projectID.HasValue)
            {
                if (task.Project.ID != projectID.Value)
                {
                    var project = EngineFactory.ProjectEngine.GetByID(projectID.Value).NotFoundIfNull();
                    task.Project = project;
                    hasChanges   = true;
                }
            }

            if (progress.HasValue)
            {
                task.Progress = Update.IfNotEquals(task.Progress, progress.Value, ref hasChanges);
            }

            if (hasChanges)
            {
                taskEngine.SaveOrUpdate(task, null, notify);
            }

            if (status.HasValue)
            {
                var newStatus = CustomTaskStatus.GetDefaults().First(r => r.StatusType == status.Value);

                if (task.Status != newStatus.StatusType || task.CustomTaskStatus != newStatus.Id)
                {
                    hasChanges = true;
                    taskEngine.ChangeStatus(task, newStatus);
                }
            }

            if (hasChanges)
            {
                MessageService.Send(Request, MessageAction.TaskUpdated, MessageTarget.Create(task.ID), task.Project.Title, task.Title);
            }

            return(GetTask(taskid));
        }