Example #1
0
        public static void UpdateIssueToDo(int todoId,
                                           int issueId,
                                           int managerId,
                                           string title,
                                           string description,
                                           DateTime startDate,
                                           DateTime finishDate,
                                           int priorityId,
                                           int activationTypeId,
                                           int completionTypeId,
                                           bool mustBeConfirmed,
                                           bool completeIssue,
                                           int taskTime,
                                           ArrayList categories,
                                           PrimaryKeyId contactUid,
                                           PrimaryKeyId orgUid)
        {
            if (!ToDo.CanUpdateIncidentTodo(todoId, issueId))
            {
                throw new AccessDeniedException();
            }

            using (DbTransaction tran = DbTransaction.Begin())
            {
                UpdateGeneralInfo(todoId, title, description, false);
                UpdateTimeline(todoId, startDate, finishDate, taskTime);
                UpdatePriority(todoId, priorityId, false);
                UpdateCategories(ListAction.Set, todoId, categories, false);
                UpdateConfigurationInfo(todoId, activationTypeId, completionTypeId, mustBeConfirmed, false);
                UpdateClient(todoId, contactUid, orgUid, false);
                UpdateManager(todoId, managerId, false);

                int issueState = completeIssue ? (int)ObjectStates.Completed : -1;
                DBToDo.AddIncidentToDo(issueId, todoId, issueState);

                tran.Commit();
            }
        }
Example #2
0
        public static int GetSharingLevel(ObjectTypes ObjectType, int ObjectId)
        {
            int UserId = Security.CurrentUser.UserID;

            int RetVal = -1;

            switch (ObjectType)
            {
            case ObjectTypes.ToDo:
                RetVal = DBToDo.GetSharingLevel(UserId, ObjectId);
                break;

            case ObjectTypes.Task:
                RetVal = DBTask.GetSharingLevel(UserId, ObjectId);
                break;

            case ObjectTypes.CalendarEntry:
                RetVal = DBEvent.GetSharingLevel(UserId, ObjectId);
                break;

            case ObjectTypes.Issue:
                RetVal = DBIncident.GetSharingLevel(UserId, ObjectId);
                break;

            case ObjectTypes.Project:
                RetVal = DBProject.GetSharingLevel(UserId, ObjectId);
                break;

            case ObjectTypes.Document:
                RetVal = DBDocument.GetSharingLevel(UserId, ObjectId);
                break;

            default:
                RetVal = -1;
                break;
            }
            return(RetVal);
        }
Example #3
0
        // Batch
        #region UpdateWithProject()
        public static void UpdateWithProject(int todoId,
                                             int projectId,
                                             int managerId,
                                             string title,
                                             string description,
                                             DateTime startDate,
                                             DateTime finishDate,
                                             int priorityId,
                                             int activationTypeId,
                                             int completionTypeId,
                                             bool mustBeConfirmed,
                                             int taskTime,
                                             ArrayList categories,
                                             PrimaryKeyId contactUid,
                                             PrimaryKeyId orgUid)
        {
            VerifyCanUpdate(todoId);

            int oldProjectId = DBToDo.GetProject(todoId);

            if (oldProjectId != projectId && !ToDo.CanChangeProject(todoId))
            {
                throw new AccessDeniedException();
            }

            using (DbTransaction tran = DbTransaction.Begin())
            {
                UpdateGeneralInfo(todoId, title, description, false);
                UpdateProjectAndManager(todoId, projectId, managerId);
                UpdateTimeline(todoId, startDate, finishDate, taskTime);
                UpdatePriority(todoId, priorityId, false);
                UpdateCategories(ListAction.Set, todoId, categories, false);
                UpdateConfigurationInfo(todoId, activationTypeId, completionTypeId, mustBeConfirmed, false);
                UpdateClient(todoId, contactUid, orgUid, false);

                tran.Commit();
            }
        }
Example #4
0
 /// <summary>
 /// Reader returns fields:
 ///  CompletionTypeId, CompletionTypeName
 /// </summary>
 /// <returns></returns>
 public static IDataReader GetListToDoCompletionTypes(int LanguageId)
 {
     return(DBToDo.GetListCompletionTypes(LanguageId));
 }
Example #5
0
        public static void DeclineResource(int todoId)
        {
            UserLight cu      = Security.CurrentUser;
            int       UserId  = cu.UserID;
            DateTime  utc_now = DateTime.UtcNow;

            int    CompletionTypeId;
            bool   IsManagerConfirmed;
            bool   IsCompleted;
            int    ReasonId;
            int    IncidentId          = -1;
            int    DocumentId          = -1;
            int    TaskId              = -1;
            bool   CompleteIncident    = false;
            bool   CompleteTask        = false;
            bool   CompleteDocument    = false;
            int    oldPercentCompleted = 0;
            string title = "";

            using (IDataReader reader = DBToDo.GetToDo(todoId, cu.TimeZoneId, cu.LanguageId))
            {
                reader.Read();
                CompletionTypeId   = (int)reader["CompletionTypeId"];
                IsManagerConfirmed = (bool)reader["MustBeConfirmed"];
                IsCompleted        = (bool)reader["IsCompleted"];
                ReasonId           = (int)reader["ReasonId"];
                if (reader["IncidentId"] != DBNull.Value)
                {
                    IncidentId = (int)reader["IncidentId"];
                }
                if (reader["DocumentId"] != DBNull.Value)
                {
                    DocumentId = (int)reader["DocumentId"];
                }
                if (reader["TaskId"] != DBNull.Value)
                {
                    TaskId = (int)reader["TaskId"];
                }
                if (reader["CompleteIncident"] != DBNull.Value)
                {
                    CompleteIncident = (bool)reader["CompleteIncident"];
                }
                if (reader["CompleteTask"] != DBNull.Value)
                {
                    CompleteTask = (bool)reader["CompleteTask"];
                }
                if (reader["CompleteDocument"] != DBNull.Value)
                {
                    CompleteDocument = (bool)reader["CompleteDocument"];
                }
                oldPercentCompleted = (int)reader["PercentCompleted"];
                title = reader["Title"].ToString();
            }

            using (DbTransaction tran = DbTransaction.Begin())
            {
                DbTodo2.ResourceReply(todoId, UserId, false);

                // O.R. [2009-02-12]
                DBCalendar.DeleteStickedObject((int)OBJECT_TYPE, todoId, UserId);

                SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_ResourceList_RequestDenied, todoId, UserId);

                if (CompletionTypeId == (int)CompletionType.All)
                {
                    int OverallPercent = ToDo.RecalculateOverallPercent(todoId);

                    if (oldPercentCompleted != OverallPercent)
                    {
                        DBToDo.UpdatePercent(todoId, OverallPercent);
                        SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_Percent, todoId);
                    }

                    if (!IsCompleted && !IsManagerConfirmed && OverallPercent == 100)
                    {
                        DBToDo.UpdateCompletion(todoId, true, (int)CompletionReason.CompletedAutomatically);

                        if (TaskId > 0 && CompleteTask)
                        {
                            ToDo.UpdateTaskCompletion(TaskId);
                        }

                        if (DocumentId > 0 && CompleteDocument)
                        {
                            ToDo.UpdateDocumentCompletion(DocumentId);
                        }

                        if (IncidentId > 0 && CompleteIncident)
                        {
                            ToDo.CompleteIncidentIfNeed(IncidentId);
                        }

                        ToDo.RecalculateState(todoId);
                    }
                }

                tran.Commit();
            }
        }
Example #6
0
        private static void UpdateProjectAndManager(int todoId, int projectId, int managerId)
        {
            int oldProjectId = DBToDo.GetProject(todoId);
            int oldManagerId = DBToDo.GetManager(todoId);

            if (projectId == 0)            // leave old project
            {
                projectId = oldProjectId;
            }

            if (managerId == 0)                 // Leave old manager
            {
                managerId = oldManagerId;
            }

            if (projectId != oldProjectId && projectId > 0 && !ToDo.CanCreate(projectId))
            {
                throw new AccessDeniedException();
            }

            if (projectId != oldProjectId || managerId != oldManagerId)
            {
                using (DbTransaction tran = DbTransaction.Begin())
                {
                    DBToDo.UpdateProjectAndManager(todoId, projectId, managerId);

                    // OZ: User Role Addon
                    if (managerId != oldManagerId)
                    {
                        UserRoleHelper.DeleteTodoManagerRole(todoId, oldManagerId);
                        UserRoleHelper.AddTodoManagerRole(todoId, managerId);
                    }

                    if (projectId != oldProjectId)
                    {
                        ForeignContainerKey.Delete(UserRoleHelper.CreateTodoContainerKey(todoId), UserRoleHelper.CreateProjectContainerKey(oldProjectId));
                        if (projectId > 0)
                        {
                            ForeignContainerKey.Add(UserRoleHelper.CreateTodoContainerKey(todoId), UserRoleHelper.CreateProjectContainerKey(projectId));
                        }
                    }
                    // end OZ

                    if (projectId != oldProjectId)
                    {
                        if (projectId > 0)
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Project_Updated_TodoList_TodoAdded, projectId, todoId);
                        }
                        else
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Project_Updated_TodoList_TodoDeleted, oldProjectId, todoId);
                        }

                        // O.R. [2008-07-30]
                        if (oldProjectId > 0)
                        {
                            TimeTracking.RecalculateProjectTaskTime(oldProjectId);
                        }
                        if (projectId > 0)
                        {
                            TimeTracking.RecalculateProjectTaskTime(projectId);
                        }
                    }

                    if (managerId != oldManagerId)
                    {
                        SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_Manager_ManagerDeleted, todoId, oldManagerId);
                        SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_Manager_ManagerAdded, todoId, managerId);
                    }

                    tran.Commit();
                }
            }
        }
Example #7
0
        private static void UpdateListResources(int objectId, DataTable items, bool checkAccess)
        {
            if (checkAccess)
            {
                VerifyCanUpdate(objectId);
            }

            int    todoCompletionTypeId;
            bool   todoManagerConfirmed;
            bool   todoIsCompleted;
            int    todoReasonId;
            int    todoIncidentId       = -1;
            int    todoDocumentId       = -1;
            int    todoTaskId           = -1;
            int    todoPercentCompleted = 0;
            bool   CompleteIncident     = false;
            bool   todoCompleteTask     = false;
            bool   todoCompleteDocument = false;
            string todoTitle            = "";

            using (IDataReader reader = DBToDo.GetToDo(objectId, Security.CurrentUser.TimeZoneId, Security.CurrentUser.LanguageId))
            {
                reader.Read();

                todoCompletionTypeId = (int)reader["CompletionTypeId"];
                todoManagerConfirmed = (bool)reader["MustBeConfirmed"];
                todoIsCompleted      = (bool)reader["IsCompleted"];
                todoReasonId         = (int)reader["ReasonId"];
                if (reader["IncidentId"] != DBNull.Value)
                {
                    todoIncidentId = (int)reader["IncidentId"];
                }
                if (reader["DocumentId"] != DBNull.Value)
                {
                    todoDocumentId = (int)reader["DocumentId"];
                }
                if (reader["TaskId"] != DBNull.Value)
                {
                    todoTaskId = (int)reader["TaskId"];
                }
                if (reader["CompleteIncident"] != DBNull.Value)
                {
                    CompleteIncident = (bool)reader["CompleteIncident"];
                }
                if (reader["CompleteTask"] != DBNull.Value)
                {
                    todoCompleteTask = (bool)reader["CompleteTask"];
                }
                if (reader["CompleteDocument"] != DBNull.Value)
                {
                    todoCompleteDocument = (bool)reader["CompleteDocument"];
                }
                todoPercentCompleted = (int)reader["PercentCompleted"];
                todoTitle            = reader["Title"].ToString();
            }

            ArrayList oldItems = new ArrayList();

            using (IDataReader reader = DBToDo.GetListResources(objectId, Security.CurrentUser.TimeZoneId))
            {
                Common.LoadItems(reader, "UserId", oldItems);
            }

            ArrayList add = new ArrayList();
            ArrayList del = new ArrayList();

            foreach (DataRow row in items.Rows)
            {
                int id = (int)row["UserId"];
                if (oldItems.Contains(id))
                {
                    oldItems.Remove(id);
                }
                else
                {
                    add.Add(id);
                }
            }

            del.AddRange(oldItems);

            int cuid = Security.CurrentUser.UserID;

            using (DbTransaction tran = DbTransaction.Begin())
            {
                foreach (int id in del)
                {
                    DBCommon.DeleteGate((int)OBJECT_TYPE, objectId, id);

                    // O.R. [2009-02-12]
                    DBCalendar.DeleteStickedObject((int)OBJECT_TYPE, objectId, id);

                    DBToDo.DeleteResource(objectId, id);

                    // OZ: User Role Addon
                    //if(todoIncidentId!=-1)
                    //{
                    //    UserRoleHelper.DeleteIssueTodoResourceRole(todoIncidentId, id);
                    //}
                    //else
                    if (todoDocumentId != -1)
                    {
                        UserRoleHelper.DeleteDocumentTodoResourceRole(todoDocumentId, id);
                    }
                    else if (todoTaskId != -1)
                    {
                        UserRoleHelper.DeleteTaskTodoResourceRole(todoTaskId, id);
                    }
                    else
                    {
                        UserRoleHelper.DeleteTodoResourceRole(objectId, id);
                    }
                    //

                    SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_ResourceList_AssignmentDeleted, objectId, id);
                }

                foreach (DataRow row in items.Rows)
                {
                    int  id = (int)row["UserId"];
                    bool mustBeConfirmed = (bool)row["MustBeConfirmed"];
                    bool updated         = true;

                    if (add.Contains(id))
                    {
                        DbTodo2.AddResource(objectId, id, mustBeConfirmed);
                        if (User.IsExternal(id))
                        {
                            DBCommon.AddGate((int)OBJECT_TYPE, objectId, id);
                        }

                        // OZ: User Role Addon
                        //if(todoIncidentId!=-1)
                        //{
                        //    UserRoleHelper.AddIssueTodoResourceRole(todoIncidentId, id);
                        //}
                        //else
                        if (todoDocumentId != -1)
                        {
                            UserRoleHelper.AddDocumentTodoResourceRole(todoDocumentId, id);
                        }
                        else if (todoTaskId != -1)
                        {
                            UserRoleHelper.AddTaskTodoResourceRole(todoTaskId, id);
                        }
                        else
                        {
                            UserRoleHelper.AddTodoResourceRole(objectId, id);
                        }
                        //
                    }
                    else
                    {
                        updated = (0 < DbTodo2.UpdateResource(objectId, id, mustBeConfirmed));
                    }

                    if (updated)
                    {
                        if (mustBeConfirmed)
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_ResourceList_RequestAdded, objectId, id);
                        }
                        else
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_ResourceList_AssignmentAdded, objectId, id);
                        }
                    }
                }

                if (todoCompletionTypeId == (int)CompletionType.All)
                {
                    int overallPercent = ToDo.RecalculateOverallPercent(objectId);
                    if (todoPercentCompleted != overallPercent)
                    {
                        DBToDo.UpdatePercent(objectId, overallPercent);
                        SystemEvents.AddSystemEvents(SystemEventTypes.Todo_Updated_Percent, objectId);
                    }

                    // Если поручение было незавершённым, то при удалении людей, процент завершения может
                    // увеличиться и достигнуть 100%. Если при этом не требуется подтверждения менеджера,
                    // то произойдёт завершение todo
                    if (!todoIsCompleted && !todoManagerConfirmed && overallPercent == 100)
                    {
                        DBToDo.UpdateCompletion(objectId, true, (int)CompletionReason.CompletedAutomatically);

                        if (todoTaskId > 0 && todoCompleteTask)
                        {
                            ToDo.UpdateTaskCompletion(todoTaskId);
                        }

                        if (todoDocumentId > 0 && todoCompleteDocument)
                        {
                            ToDo.UpdateDocumentCompletion(todoDocumentId);
                        }

                        if (todoIncidentId > 0 && CompleteIncident)
                        {
                            ToDo.CompleteIncidentIfNeed(todoIncidentId);
                        }

                        ToDo.RecalculateState(objectId);
                    }
                }

                tran.Commit();
            }
        }
Example #8
0
        private static void ProcessGlobalSubscription(int hookId, DateTypes dateType, ObjectTypes objectType, int?objectId, Guid?objectUid)
        {
            // Формируем список пользователей, связанных с объектом
            List <int> users = new List <int>();

            if (objectType == ObjectTypes.Project)
            {
                using (IDataReader reader = DBProject.GetProjectSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Task)
            {
                using (IDataReader reader = DBTask.GetTaskSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        if ((bool)reader["IsRealTaskResource"] || (bool)reader["IsRealTaskManager"] || (bool)reader["IsCreator"])
                        {
                            users.Add((int)reader["UserId"]);
                        }
                    }
                }
            }
            else if (objectType == ObjectTypes.ToDo)
            {
                using (IDataReader reader = DBToDo.GetToDoSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.CalendarEntry)
            {
                using (IDataReader reader = DBEvent.GetListUsersForEvent(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Document)
            {
                using (IDataReader reader = DBDocument.GetDocumentSecurity(objectId.Value))
                {
                    while (reader.Read())
                    {
                        users.Add((int)reader["UserId"]);
                    }
                }
            }
            else if (objectType == ObjectTypes.Assignment)
            {
                AssignmentEntity entity = (AssignmentEntity)BusinessManager.Load(AssignmentEntity.ClassName, (PrimaryKeyId)objectUid.Value);
                if (entity != null && entity.OwnerDocumentId.HasValue)
                {
                    using (IDataReader reader = DBDocument.GetDocumentSecurity(entity.OwnerDocumentId.Value))
                    {
                        while (reader.Read())
                        {
                            users.Add((int)reader["UserId"]);
                        }
                    }
                }
            }

            // Проверим отсутствие индивидуальной подписки
            for (int i = 0; i < users.Count; i++)
            {
                int userId = users[i];

                // O.R. [2010-04-01]: Don't process inactive users
                if (User.GetUserActivity(userId) != User.UserActivity.Active)
                {
                    users.RemoveAt(i);
                    i--;
                }
                else if (objectId.HasValue)
                {
                    if (GetSubscriptionType(dateType, userId, objectId.Value) != SubscriptionTypes.Global)
                    {
                        users.RemoveAt(i);
                        i--;
                    }
                }
            }

            // Send Reminder
            if (users.Count > 0)
            {
                SendReminder(dateType, objectType, objectId, objectUid, users);
            }
        }