示例#1
0
 public MoveDepartmentMenu(IDepartmentDTO d, List <IDepartmentDTO> deptList)
 {
     InitializeComponent();
     IdDisplay.Text                 = $"{d.DeptID}";
     DeptNameDisplay.Text           = d.DeptName;
     DeparmmentEntryBox.ItemsSource = deptList;
 }
        public OperationResult <IDepartmentDTO> GetDepartment(int departmentId)
        {
            OperationResult <IDepartmentDTO> getDepartmentRetVal = null;

            try
            {
                IDepartmentDAC departmentDAC         = (IDepartmentDAC)DACFactory.Instance.Create(DACType.DepartmentDAC);
                IDepartmentDTO returnedDepartmentDTO = departmentDAC.GetDepartment(departmentId);
                if (returnedDepartmentDTO != null)
                {
                    getDepartmentRetVal = OperationResult <IDepartmentDTO> .CreateSuccessResult(returnedDepartmentDTO, " successfully");
                }
                else
                {
                    getDepartmentRetVal = OperationResult <IDepartmentDTO> .CreateFailureResult("failed!");
                }
            }
            catch (DACException dacEx)
            {
                getDepartmentRetVal = OperationResult <IDepartmentDTO> .CreateErrorResult(dacEx.Message, dacEx.StackTrace);
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ex);
                getDepartmentRetVal = OperationResult <IDepartmentDTO> .CreateErrorResult(ex.Message, ex.StackTrace);
            }
            return(getDepartmentRetVal);
        }
示例#3
0
        /// <summary>
        /// Creates TreeViewItem node for the department
        /// </summary>
        /// <param name="d">Department</param>
        /// <returns></returns>
        private TreeViewItem CreateTVINode(IDepartmentDTO d)
        {
            var item = new TreeViewItem()
            {
                // Set the header
                Header = d.DeptName,

                // Add reference to the node content
                Tag = d
            };

            // Add a dummy item if the item being expanded has subitems
            // We do this in order to show "expand" arrow next to a tree node name
            // If a node cannot be expanded, arrow does not appear
            if ((item.Tag as IDepartmentDTO).NumberOfSubDepts != 0)
            {
                item.Items.Add(null);
            }

            // Listen out for item being selected. This method is already added in XAML
            //item.Selected += Department_Selected;

            // Listen out for item being expanded. This method is already added in XAML
            //item.Expanded += Department_Expanded;

            return(item);
        }
示例#4
0
        /// <summary>
        /// Moves worker to the department with specified ID
        /// </summary>
        /// <param name="worker">Worker to move</param>
        /// <param name="destDept">Destination department</param>
        /// <returns>
        /// 0 if moved successfully
        /// -1 if worker with such ID does not exist
        /// -2 if department with such ID does not exist
        /// -3 if destination department is current worker's department
        /// </returns>
        public int MoveWorker(IWorker worker, IDepartmentDTO destDept)
        {
            var w = RemoveWorker(worker);

            // Worker can be moved to another department only either as Employee or Intern
            if (w.Position != Positions.Employee &&
                w.Position != Positions.Intern)
            {
                w.Position      = Positions.Employee;
                w.PositionTitle = "Employee";
            }

            // Move worker to destination department
            w.DeptID = destDept.DeptID;

            if (w is Director)
            {
                // Using explicit type cast operator from Director to Employee
                // defined in Employee class
                Employee e = (Employee)(w as Director);
                AddWorker(e);
            }
            else
            {
                AddWorker(w);
            }
            return(0);
        }
示例#5
0
        /// <summary>
        /// Removes department with specified ID from the list of departments
        /// provided that this is not root department.
        /// Adds sub departments to the parent department.
        /// Adds all department workers to the parent department.
        /// </summary>
        /// <param name="d">Department to delete</param>
        /// <returns>
        /// Deleted department
        /// null if such department does not exist or we are trying to delete root department
        /// </returns>
        public IDepartmentDTO SelfExcludeOfDepartment(IDepartmentDTO d)
        {
            var parentDept = Department(d.ParentDeptID) as BaseDepartment;

            var dir = Director(d);

            if (dir != null)
            {
                MoveWorker(dir, parentDept);
            }

            // update department ID of each worker to destinationDept ID
            foreach (var w in OneDepartmentWorkersList(d))
            {
                w.DeptID = parentDept.DeptID;

                // Make all vice bosses as Employees
                if (w.Position != Positions.Employee ||
                    w.Position != Positions.Intern)
                {
                    w.Position      = Positions.Employee;
                    w.PositionTitle = "Employee";
                }
            }
            d.NumberOfEmployees = 0;

            foreach (var dept in SubDepartments(d))
            {
                MoveDepartment(dept, parentDept);
            }

            UpdateSalaries(parentDept);
            return(DeleteEmptyDepartment(d));
        }
示例#6
0
        /// <summary>
        /// Searches through UI Tree for specific node
        /// </summary>
        /// <param name="entryNode"></param>
        /// <param name="d"></param>
        /// <returns>UI TreeViewItem corresponding to department</returns>
        private TreeViewItem FindNode(TreeViewItem entryNode, IDepartmentDTO d)
        {
            var currDept = entryNode.Tag as IDepartmentDTO;

            if (currDept.DeptID == d.DeptID)
            {
                return(entryNode);
            }
            TreeViewItem foundNode = null;

            foreach (var subNode in entryNode.Items)
            {
                // We need this check because our TreeViewItem.Items has null item at Items[0]
                // in shown but not expanded yet items.
                if (subNode == null)
                {
                    continue;
                }
                foundNode = FindNode(subNode as TreeViewItem, d);
                if (foundNode != null)
                {
                    break;
                }
            }
            return(foundNode);
        }
示例#7
0
        /// <summary>
        /// Used wherever a specific department is required.
        /// </summary>
        /// <param name="departmentId"></param>
        /// <returns></returns>
        public IDepartmentDTO GetADepartment(int departmentId)
        {
            IDepartmentDTO departmentDTO = null;

            using (EmployeePortal2017Entities portal = new EmployeePortal2017Entities())
            {
                try
                {
                    var department = portal.Departments.Where(d => d.DepartmentId == departmentId)
                                     .SingleOrDefault <Department>();

                    departmentDTO = (IDepartmentDTO)DTOFactory.Instance.Create(DTOType.DepartmentDTO);;
                    if (department != null)
                    {
                        EntityConverter.FillDTOFromEntity(department, departmentDTO);
                    }
                }
                catch (Exception ex)
                {
                    ExceptionManager.HandleException(ex);
                    throw new DACException(ex.Message);
                }
            }
            return(departmentDTO);
        }
示例#8
0
        /// <summary>
        /// Creates new worker of specified type and adds him to the organization
        /// </summary>
        /// <param name="fn">First name</param>
        /// <param name="ln">Last name</param>
        /// <param name="dob">Date of birth</param>
        /// <param name="d">Department interface</param>
        /// <param name="pos">Position</param>
        /// <returns>
        ///  0 if worker was added successfully,
        /// -1 if worker is director and department already has a director
        /// </returns>
        public int AddWorker(string fn, string ln, DateTime dob, IDepartmentDTO d, Positions pos)
        {
            // Check if we are not adding a director to the department which already has a director
            if ((pos == Positions.President ||
                 pos == Positions.DivisionHead ||
                 pos == Positions.DeptDirector) &&
                Director(d) != null)
            {
                return(-1);
            }

            Worker newWorker = null;

            switch (pos)
            {
            case Positions.President:
                newWorker = new Director(fn, ln, dob, DateTime.Now, d.DeptID, "President", pos);
                break;

            case Positions.VicePresident:
                newWorker = new Employee(fn, ln, dob, DateTime.Now, d.DeptID, "VicePresident", pos);
                break;

            case Positions.DivisionHead:
                newWorker = new Director(fn, ln, dob, DateTime.Now, d.DeptID,
                                         "Head of the " + d.DeptName, pos);
                break;

            case Positions.ViceDivisionHead:
                newWorker = new Employee(fn, ln, dob, DateTime.Now, d.DeptID,
                                         "Deputy Head of the " + d.DeptName, pos);
                break;

            case Positions.DeptDirector:
                newWorker = new Director(fn, ln, dob, DateTime.Now, d.DeptID,
                                         "Director" + d.DeptName.Substring(10), pos);
                break;

            case Positions.ViceDeptDirector:
                newWorker = new Employee(fn, ln, dob, DateTime.Now, d.DeptID,
                                         "Vice Director" + d.DeptName.Substring(10), pos);
                break;

            case Positions.Employee:
                newWorker = new Employee(fn, ln, dob, DateTime.Now, d.DeptID, "Employee", pos);
                break;

            case Positions.Intern:
                newWorker = new Intern(fn, ln, dob, DateTime.Now, d.DeptID, "Intern");
                break;

            default:
                break;
            }
            return(AddWorker(newWorker as IWorker));
        }
示例#9
0
        /// <summary>
        /// Deletes department including all sub departments with all employees
        /// </summary>
        /// <param name="d">Department to delete</param>
        public void DeleteCompletely(IDepartmentDTO d)
        {
            int i = 0;

            while (i < Workers.Count)
            {
                // We should NOT increment i after taking out a worker
                // because next worker has the same index as just deleted one
                if (Workers[i].DeptID == d.DeptID)
                {
                    Workers.RemoveAt(i);
                }
                else
                {
                    i++;
                }
            }

            // Check if d has sub departments
            if ((d as BaseDepartment).SubDepts.Count > 0)
            {
                // Delete all subdepartments from Departments list
                // Let's check deptID of each department if it belongs to SubDepts list
                // If DeptID is in SubDept list - delete department and ID from the SubDept list
                // When there is no SubDepts remain stop scanning Departments
                for (i = 0; i < Departments.Count; i++)
                {
                    if ((d as BaseDepartment).SubDepts.Count > 0)
                    {
                        int j = 0;
                        while (j < (d as BaseDepartment).SubDepts.Count)
                        {
                            if (Departments[i].DeptID == (d as BaseDepartment).SubDepts[j])
                            {
                                DeleteCompletely(Departments[i]);
                                (d as BaseDepartment).SubDepts.RemoveAt(j);
                                // After deleting subdepartment i will reman the same
                                // but Department[i] will be different
                                // because there will be shift of all list items to position i
                            }
                            else
                            {
                                j++;
                            }
                        }
                    }
                    else
                    {
                        break;                      // if no mor subdepartments in
                    }
                }
            }
            // if no, or all were deleted, delete department
            Departments.Remove(d as BaseDepartment);
        }
示例#10
0
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            // Get root department
            IDepartmentDTO d = UI.Get.RootDepartment();

            var item = CreateTVINode(d);

            // Add it the main tree-view
            AppleTree.Items.Add(item);
            AppleTreeRoot = item;
        }
示例#11
0
        /// <summary>
        /// Deletes department which has no employees and sub departments
        /// </summary>
        /// <param name="d">Department to delete</param>
        /// <returns>
        /// Deleted department
        /// null if such department does not exist or we are trying to delete root department
        /// </returns>
        public IDepartmentDTO DeleteEmptyDepartment(IDepartmentDTO d)
        {
            bool result = Departments.Remove(d as BaseDepartment);

            if (result)
            {
                BaseDepartment parent = Department(d.ParentDeptID) as BaseDepartment;
                parent.SubDepts.Remove(d.DeptID);
                return(d);
            }
            return(null);
        }
示例#12
0
 private void btnOk_MoveDepartment_Click(object sender, RoutedEventArgs e)
 {
     // If destination department was not selected don't do anything
     if (DeparmmentEntryBox.SelectedItem == null)
     {
         this.DialogResult = false;
     }
     else
     {
         destDept          = DeparmmentEntryBox.SelectedItem as IDepartmentDTO;
         this.DialogResult = true;
     }
 }
        /// <summary>
        /// Collects list of sub-departments of the specified department
        /// </summary>
        /// <param name="d">Department</param>
        /// <returns>
        /// Collection of sub departments of department d, or
        /// null if there are no sub departments
        /// </returns>
        public List <IDepartmentDTO> SubDepartments(IDepartmentDTO d)
        {
            List <IDepartmentDTO> dl = new List <IDepartmentDTO>();

            foreach (BaseDepartment dept in Departments)
            {
                if (dept.ParentDeptID == d.DeptID)
                {
                    dl.Add(dept);
                }
            }
            return(dl);
        }
        /// <summary>
        /// Finds all workers, including director, who work in the department d
        /// and puts them in the collection List
        /// </summary>
        /// <param name="d">Department</param>
        /// <returns>Collection of workers of IWorker type who works in the department d</returns>
        public List <IWorker> OneDepartmentWorkersList(IDepartmentDTO d)
        {
            List <IWorker> wl = new List <IWorker>();

            foreach (Worker w in Workers)
            {
                if (w.DeptID == d.DeptID)
                {
                    wl.Add(w as IWorker);
                }
            }
            return(wl);
        }
示例#15
0
        /// <summary>
        /// Returns a list of departments where we can move current department because
        /// department cannot be moved to any its direct or distant subdepartments
        /// </summary>
        /// <param name="d">Department to be moved</param>
        /// <returns>List of available departments to move specified one</returns>
        public List <IDepartmentDTO> AvailableDestinationDepartmentsList(IDepartmentDTO d)
        {
            _availDestDeptList = DepartmentsList();
            TakeOutSubDeptsAndDept(d);
            _availDestDeptList.Remove(Department(d.ParentDeptID));
            return(_availDestDeptList);

            void TakeOutSubDeptsAndDept(IDepartmentDTO dd)
            {
                foreach (var sd in SubDepartments(dd))
                {
                    TakeOutSubDeptsAndDept(sd);
                }
                _availDestDeptList.Remove(dd);
            }
        }
示例#16
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);
        }
示例#17
0
        /// <summary>
        /// Adds newly created child department to parent department
        /// </summary>
        /// <param name="parentDept">Parent department</param>
        /// <param name="childDept">Departmet to add</param>
        /// <returns>
        ///  0 if child was added successfully,
        /// </returns>
        public int AddDepartment(IDepartmentDTO pd, IDepartmentDTO cd)
        {
            BaseDepartment parentDept = pd as BaseDepartment;
            BaseDepartment childDept  = cd as BaseDepartment;

            // Creation of root department
            // it means childDept is root department
            if (parentDept == null && childDept.ParentDeptID == 0)
            {
                Departments.Add(childDept);
                return(0);
            }

            // Adding child department to parent dept
            Departments.Add(childDept);
            parentDept.SubDepts.Add(childDept.DeptID);
            childDept.ParentDeptID = parentDept.DeptID;
            return(0);
        }
示例#18
0
        public IDepartmentDTO GetDepartment(int departmentId)
        {
            IDepartmentDTO retVal = null;

            try
            {
                using (EmployeePortalEntities context = new EmployeePortalEntities())
                {
                    IDepartmentDTO departmentDTO = (IDepartmentDTO)DTOFactory.Instance.Create(DTOType.DepartmentDTO);
                    EntityConverter.FillDTOFromEntity(context.Departments.First(item => item.DepartmentId == departmentId), departmentDTO);
                    retVal = departmentDTO;
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ex);
                throw new DACException(ex.Message);
            }
            return(retVal);
        }
示例#19
0
        /// <summary>
        /// Adds newly created child department to parent department
        /// </summary>
        /// <param name="pd">Parent department</param>
        /// <param name="childDeptName">Name of the department to be created</param>
        /// <param name="childDeptCreationDate">Child department creation date</param>
        public IDepartmentDTO CreateDepartment(IDepartmentDTO pd, string childDeptName, DateTime childDeptCreationDate)
        {
            BaseDepartment parentDept = pd as BaseDepartment;
            BaseDepartment childDept;

            // Creation of root department
            // it means childDept is root department
            if (parentDept == null)
            {
                childDept           = new HQ(childDeptName);
                childDept.CreatedOn = childDeptCreationDate;
                Departments.Add(childDept);
                return(childDept as IDepartmentDTO);
            }

            // Create Division level department
            uint rootDeptID = RootDepartment().DeptID;

            if (parentDept.DeptID == rootDeptID)
            {
                childDept = new Division(childDeptName, rootDeptID)
                {
                    CreatedOn = childDeptCreationDate
                };
                Departments.Add(childDept);
                parentDept.SubDepts.Add(childDept.DeptID);
                childDept.ParentDeptID = parentDept.DeptID;
                return(childDept as IDepartmentDTO);
            }

            // Create Department level department
            childDept = new Department(childDeptName, parentDept.DeptID)
            {
                CreatedOn = childDeptCreationDate
            };
            Departments.Add(childDept);
            parentDept.SubDepts.Add(childDept.DeptID);
            childDept.ParentDeptID = parentDept.DeptID;
            return(childDept as IDepartmentDTO);
        }
示例#20
0
        public IList <IDepartmentDTO> GetAll()
        {
            List <IDepartmentDTO> departments = new List <IDepartmentDTO>();

            try
            {
                using (EmployeePortalEntities context = new EmployeePortalEntities())
                {
                    foreach (var departmentName in context.Departments)
                    {
                        IDepartmentDTO departmentDTO = (IDepartmentDTO)DTOFactory.Instance.Create(DTOType.DepartmentDTO);
                        EntityConverter.FillDTOFromEntity(departmentName, departmentDTO);
                        departments.Add(departmentDTO);
                    }
                }
            }
            catch (Exception ex)
            {
                ExceptionManager.HandleException(ex);
                throw new DACException(ex.Message);
            }
            return(departments);
        }
示例#21
0
        public EditWorkerMenu(IWorker w,
                              IDepartmentDTO d,
                              bool hasDirector,
                              List <IPositionTuple> posList,
                              DateTime orgCreationDate)
        {
            InitializeComponent();
            wCopy = new EditWorkerValidation(w, d, hasDirector, orgCreationDate);
            EditWorkerGrid.DataContext = wCopy;

            DateOfBirthPicker.SelectedDate    = wCopy.DateOfBirth;
            EmployedOnDatePicker.SelectedDate = wCopy.EmployedOn;;
            DeptNameDisplay.Text          = d.DeptName;
            PositionEntryBox.ItemsSource  = posList;
            PositionEntryBox.SelectedItem = posList.Find(p => p.Pos == w.Position);


            DirectorSalary.Visibility = Visibility.Collapsed;
            EmployeeSalary.Visibility = Visibility.Collapsed;
            InternSalary.Visibility   = Visibility.Collapsed;

            if (w is IDirector)
            {
                DirectorSalary.Visibility = Visibility.Visible;
            }

            if (w is IEmployee)
            {
                EmployeeSalary.Visibility = Visibility.Visible;
            }

            if (w is IIntern)
            {
                InternSalary.Visibility = Visibility.Visible;
            }
        }
 public DeleteDepartmentMenu(IDepartmentDTO d)
 {
     InitializeComponent();
     deptnameid.Text = $"ID: {d.DeptID},  {d.DeptName}";
 }
        /// <summary>
        /// Finds director (president,head) of department
        /// </summary>
        /// <param name="d">Department</param>
        /// <returns>
        /// Worker of the Director class or
        /// null if a director of deptID department is not found
        /// </returns>
        public IWorker Director(IDepartmentDTO d)
        {
            Director dir = Workers.Find(w => w.DeptID == d.DeptID && w is Director) as Director;

            return(dir);
        }
示例#24
0
 /// <summary>
 /// Updates name and creation date of the department
 /// </summary>
 /// <param name="deptToEdit">Department to edit</param>
 /// <param name="newName">New department name</param>
 /// <param name="newCreationDate">New creation date</param>
 /// <returns>
 /// 0 if department was updated successfully
 /// </returns>
 public int EditDepartment(IDepartmentDTO deptToEdit, string newName, DateTime newCreationDate)
 {
     deptToEdit.DeptName  = newName;
     deptToEdit.CreatedOn = newCreationDate;
     return(0);
 }