예제 #1
0
파일: Document2.cs 프로젝트: alex765022/IBN
        internal static void UpdateManager(int documentId, int managerId, bool checkAccess)
        {
            if (checkAccess)
            {
                VerifyCanUpdate(documentId);
            }

            int oldManagerId = DBDocument.GetManager(documentId);

            if (oldManagerId != managerId)
            {
                using (DbTransaction tran = DbTransaction.Begin())
                {
                    DbDocument2.UpdateManager(documentId, managerId);

                    // TODO: implement Document_Updated_Manager
                    // SystemEvents.AddSystemEvents(SystemEventTypes.Document_Updated_Manager, documentId);

                    // OZ: User Role Addon
                    if (managerId != oldManagerId)
                    {
                        UserRoleHelper.DeleteDocumentManagerRole(documentId, oldManagerId);
                        UserRoleHelper.AddDocumentManagerRole(documentId, managerId);
                    }
                    // end OZ

                    tran.Commit();
                }
            }
        }
예제 #2
0
        private static void UpdateProjectAndManager(int objectId, int projectId, int managerId)
        {
            int oldProjectId = DBEvent.GetProject(objectId);
            int oldManagerId = DBEvent.GetManager(objectId);

            if (managerId == 0)             // Don't change manager
            {
                managerId = oldManagerId;
            }

            if (projectId == 0)            // Don't change project
            {
                projectId = oldProjectId;
            }

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

                    // OZ: User Role Addon
                    if (managerId != oldManagerId)
                    {
                        UserRoleHelper.DeleteEventManagerRole(objectId, oldManagerId);
                        UserRoleHelper.AddEventManagerRole(objectId, managerId);
                    }

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

                    if (projectId != oldProjectId)
                    {
                        if (projectId > 0)
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Project_Updated_CalendarEntryList_CalendarEntryAdded, projectId, objectId);
                        }
                        else
                        {
                            SystemEvents.AddSystemEvents(SystemEventTypes.Project_Updated_CalendarEntryList_CalendarEntryDeleted, oldProjectId, objectId);
                        }
                    }

                    if (managerId != oldManagerId)
                    {
                        SystemEvents.AddSystemEvents(SystemEventTypes.CalendarEntry_Updated_Manager_ManagerDeleted, objectId, oldManagerId);
                        SystemEvents.AddSystemEvents(SystemEventTypes.CalendarEntry_Updated_Manager_ManagerAdded, objectId, managerId);
                    }

                    tran.Commit();
                }
            }
        }
예제 #3
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();
                }
            }
        }
예제 #4
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();
            }
        }
예제 #5
0
        private static void UpdateListResources(int objectId, DataTable items, bool checkAccess)
        {
            if (checkAccess)
            {
                VerifyCanModifyResources(objectId);
            }

            int  taskCompletionTypeId;
            bool taskMustBeConfirmed;
            bool taskIsCompleted;
            int  taskReasonId;
            int  taskProjectId;
            int  taskPercentCompleted;

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

                taskCompletionTypeId = (int)reader["CompletionTypeId"];
                taskMustBeConfirmed  = (bool)reader["MustBeConfirmed"];
                taskIsCompleted      = (bool)reader["IsCompleted"];
                taskReasonId         = (int)reader["ReasonId"];
                taskProjectId        = (int)reader["ProjectId"];
                taskPercentCompleted = (int)reader["PercentCompleted"];
            }
            int managerId = DBProject.GetProjectManager(taskProjectId);

            ArrayList oldItems = new ArrayList();

            using (IDataReader reader = DBTask.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);

                    DBTask.DeleteResource(objectId, id);

                    // OZ: User Role Addon
                    UserRoleHelper.DeleteTaskResourceRole(objectId, id);
                    if (id != managerId)
                    {
                        UserRoleHelper.DeleteTaskManagerRole(objectId, id);
                    }
                    //
                    SystemEvents.AddSystemEvents(SystemEventTypes.Task_Updated_ResourceList_AssignmentDeleted, objectId, id);
                }

                foreach (DataRow row in items.Rows)
                {
                    int  id = (int)row["UserId"];
                    bool mustBeConfirmed = (bool)row["MustBeConfirmed"];
                    bool canManage       = (bool)row["CanManage"];
                    if (id == managerId)
                    {
                        canManage = true;
                    }

                    bool updated = true;

                    if (add.Contains(id))
                    {
                        DbTask2.AddResource(objectId, id, mustBeConfirmed, canManage);
                        if (User.IsExternal(id))
                        {
                            DBCommon.AddGate((int)OBJECT_TYPE, objectId, id);
                        }
                    }
                    else
                    {
                        updated = (0 < DbTask2.UpdateResource(objectId, id, mustBeConfirmed, canManage));
                    }

                    // OZ: User Role Addon
                    if (id != managerId)
                    {
                        UserRoleHelper.DeleteTaskManagerRole(objectId, id);
                    }
                    UserRoleHelper.DeleteTaskResourceRole(objectId, id);

                    if (canManage)
                    {
                        if (id != managerId)
                        {
                            UserRoleHelper.AddTaskManagerRole(objectId, id);
                        }
                    }
                    else
                    {
                        UserRoleHelper.AddTaskResourceRole(objectId, id);
                    }
                    //

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

                if (taskCompletionTypeId == (int)CompletionType.All)
                {
                    int overallPercent = Task.RecalculateOverallPercent(objectId);
                    if (taskPercentCompleted != overallPercent)
                    {
                        DBTask.UpdatePercent(objectId, overallPercent);
                        SystemEvents.AddSystemEvents(SystemEventTypes.Task_Updated_Percent, objectId);
                    }

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

                    DBTask.RecalculateSummaryPercent(objectId);
                }

                tran.Commit();
            }
        }
예제 #6
0
파일: Document2.cs 프로젝트: alex765022/IBN
        private static void UpdateListResources(int objectId, DataTable items, bool checkAccess)
        {
            if (checkAccess)
            {
                VerifyCanUpdate(objectId);
            }

            int managerId = -1;

            using (IDataReader reader = DBDocument.GetDocument(objectId, Security.CurrentUser.TimeZoneId, Security.CurrentUser.LanguageId))
            {
                reader.Read();
                managerId = (int)reader["ManagerId"];
            }

            ArrayList oldItems = new ArrayList();

            using (IDataReader reader = DBDocument.GetListResources(objectId, Security.CurrentUser.TimeZoneId))
            {
                Common.LoadPrincipals(reader, oldItems);
            }

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

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

            del.AddRange(oldItems);

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

                    // OZ: User Role Addon
                    UserRoleHelper.DeleteDocumentResourceRole(objectId, id);
                    if (id != managerId)
                    {
                        UserRoleHelper.DeleteDocumentManagerRole(objectId, id);
                    }
                    //
                    SystemEvents.AddSystemEvents(SystemEventTypes.Document_Updated_ResourceList_AssignmentDeleted, objectId, id);
                }

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

                    if (add.Contains(id))
                    {
                        DbDocument2.ResourceAdd(objectId, id, mustBeConfirmed, canManage);
                        if (User.IsExternal(id))
                        {
                            DBCommon.AddGate((int)OBJECT_TYPE, objectId, id);
                        }
                    }
                    else
                    {
                        updated = (0 < DbDocument2.ResourceUpdate(objectId, id, mustBeConfirmed, canManage));
                    }

                    // OZ: User Role Addon
                    if (canManage)
                    {
                        if (id != managerId)
                        {
                            UserRoleHelper.AddDocumentManagerRole(objectId, id);
                        }
                    }
                    else
                    {
                        UserRoleHelper.AddDocumentResourceRole(objectId, id);
                    }
                    // end

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

                tran.Commit();
            }
        }