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(); } }
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); }
// 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(); } }
/// <summary> /// Reader returns fields: /// CompletionTypeId, CompletionTypeName /// </summary> /// <returns></returns> public static IDataReader GetListToDoCompletionTypes(int LanguageId) { return(DBToDo.GetListCompletionTypes(LanguageId)); }
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(); } }
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 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); } }