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(); } } }
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(); } } }
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(); } } }
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(); } }
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(); } }
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(); } }