Пример #1
0
        /// <summary>
        /// Moves department to destination department
        /// </summary>
        /// <param name="d">Department to move</param>
        /// <param name="destinationDept">Destination department to nest in as subdepartment</param>
        /// <returns>Moved department with updated parent dept ID</returns>
        public IDepartmentDTO MoveDepartment(IDepartmentDTO d, IDepartmentDTO destinationDept)
        {
            var cloneDept = d as BaseDepartment;
            var oldParent = Department(d.ParentDeptID) as BaseDepartment;

            // Take out being moved department from parent's subdepartments
            oldParent.SubDepts.Remove(d.DeptID);

            // If current department level is Division, it means we are going down to Department level
            // and need to change class of department
            if (d is Division)
            {
                cloneDept = new Department(d as BaseDepartment);
            }

            // If we are moving up to Division level,
            // need to change class from Department to Division
            if (destinationDept.ParentDeptID == 0)
            {
                cloneDept          = new Division(d as BaseDepartment);
                cloneDept.DeptName = "Division_" + UniqueID.Name();
            }
            else if (SubDepartments(destinationDept).
                     Find(sameName => sameName.DeptName == cloneDept.DeptName) != null)
            {
                cloneDept.DeptName += "_" + UniqueID.Name();
            }

            // Set new parent for being moved department
            cloneDept.ParentDeptID = destinationDept.DeptID;

            // Add new child to destination subdepartment
            (destinationDept as BaseDepartment).SubDepts.Add(cloneDept.DeptID);

            // If class of department changed, need to update Departments table
            int di = Departments.FindIndex(dept => dept.DeptID == d.DeptID);

            Departments[di] = cloneDept;

            UpdateSalaries(oldParent);
            UpdateSalaries(destinationDept as BaseDepartment);
            return(cloneDept);
        }