/// <summary> /// Изменение вышестоящего департамента /// </summary> /// <param name="department">Экземпляр департамента</param> /// <param name="NewHigherDepartmentId">Id нового вышестоящего департамента</param> private void Change_Parent_Department(Department department, int NewHigherDepartmentId) { int OldHigherDepartmentId = department.HigherDepartmentId; //Id старого департамента-родителя this[OldHigherDepartmentId].SlaveDepartmentId.Remove(department.Id); //удаляем Id этого департамента из списка подчиненных //в старом родителе department.HigherDepartmentId = NewHigherDepartmentId; //добавляем Id нового родителя в наш департамент if (NewHigherDepartmentId != 0) { this[NewHigherDepartmentId].SlaveDepartmentId.Add(department.Id); //добавляем Id нашего департамента в список подчиненных родителя } else { SlaveDepartmentId.Add(department.Id); //или подчиняем напрямую организации (старший департамент) } }
/// <summary> /// Добавление нового департамента /// </summary> /// <param name="Name">Наименование</param> /// <param name="HigherDepartmentId">Id вышестоящего департамента</param> public void Add_Department(string Name, int HigherDepartmentId) { if (Name == null || Name == "") { Name = "Новый департамент"; } //присвоение имени по умолчанию Department department = new Department(Name, HigherDepartmentId); //создаем новый экземпляр департамента Departments.Add(department); //добавляем экземпляр в коллекцию департаментов организации if (HigherDepartmentId == 0) { SlaveDepartmentId.Add(department.Id); } //если Id вышестоящего департамента 0 - подчиняем организации else { this[HigherDepartmentId].SlaveDepartmentId.Add(department.Id); } //или подчиняем указанному департаменту }
/// <summary> /// Удаление департамента (сотрудники перемещаются в нераспределенные) /// </summary> /// <param name="department">Удаляемый экземпляр</param> public void Delete_Department(Department department) { if (department.SlaveDepartmentId.Count != 0) //если у департамента есть подчиненные департаменты { //все подчиненные департаменты переподчиняем вышестоящему департаменту while (department.SlaveDepartmentId.Count != 0) { int Id = department.SlaveDepartmentId.Count - 1; Change_Parent_Department(this[department.SlaveDepartmentId[Id]], department.HigherDepartmentId); } } if (department.ChiefId != 0) { Add_Unallocated_Worker(this[department.ChiefId, department.Id]); //переводим руководителя в нераспределенные } if (department.DepartmentEmployeesId.Count != 0) { foreach (var Id in department.DepartmentEmployeesId) //переводим всех сотрудников в нераспределенные { Worker worker = this[Id, department.Id]; Add_Unallocated_Worker(worker); } } //удаляем Id департамента из вышестояшего департамента/организации if (department.HigherDepartmentId != 0) //удаляем из вышестоящего { this[department.HigherDepartmentId].SlaveDepartmentId.Remove(department.Id); } else { SlaveDepartmentId.Remove(department.Id); } //или удаляем из подчиненных напрямую организации //удаляем сам департамент Departments.Remove(department); //удаляем департамент из коллекции, где хранится его экземпляр SalaryService.MainMethodSetSalaryForManagers(this); //пересчитываем ЗП }