/// <summary> /// Основной метод генерации демонстрационной организации /// </summary> /// <param name="organization">Экземпляр организации</param> /// <param name="Name">Имя организации</param> public static void RandomOrganization(Organization organization, string Name) { Worker.ClearIds(); //чистим Id работников Department.ClearIds(); //чистим Id департаментов organization.Workers = new ObservableCollection <Worker>(); //инициализируем коллекцию работников в экземпляре класса organization.Departments = new ObservableCollection <Department>(); //аналогично инициализируем коллекцию департамента organization.TopManagersId = new ObservableCollection <int>(); //инициализируем коллекцию топ-топ менеджеров organization.UnallocatedWorkersId = new ObservableCollection <int>(); //инициализируем коллекцию нераспределенных сотрудников organization.SlaveDepartmentId = new ObservableCollection <int>(); //инициализируем коллекцию подчиненных департаментов //добавляем в него департамент из метода создания демострационной организации organization.SlaveDepartmentId.Add(RandomDepartment(organization, "Департамент 1", 0, 3, 3)); SalaryService.MainMethodSetSalaryForManagers(organization); //Рассчитываем ЗП руководителей и зарплатные фонды департаментов organization.Name = Name; //присваиваем организации переданное в метод имя organization.Profit = R.Next(1, 101) * 1000000; //генерируем случайную прибыль TopManager Director = NoRandomDirector(organization.Profit); //создаем директора и передаем значение прибыли для расчета его ЗП organization.TopManagersId.Add(Director.Id); //Собственно, прописываем Id созданного директора в соответствующее поле организации organization.Workers.Add(Director); //добавляем директора в список работников }
/// <summary> /// Изменение департамента (основной метод) /// </summary> /// <param name="department">Экземпляр департамента</param> /// <param name="NewName">Новое наименование департамента</param> /// <param name="NewHigherDepartmentId">Новый вышестоящий департамент</param> public void Edit_Department(Department department, string NewName, int NewHigherDepartmentId) { if (department.Name != NewName) //если изменилось название департамента { if (NewName == "") { NewName = "Новый департамент"; } department.Name = NewName; //меняем название департамента Edit_Worker(department.ChiefId, department.Id); foreach (var workerId in department.DepartmentEmployeesId) { Edit_Worker(workerId, department.Id); //меняем название департамента у работников } } if (department.HigherDepartmentId != NewHigherDepartmentId) //если сменился департамент-родитель { Change_Parent_Department(department, NewHigherDepartmentId); //меняем старший департамент SalaryService.MainMethodSetSalaryForManagers(this); //пересчитываем ЗП } }
/// <summary> /// Метод удаления экземпляра класса-наследника Worker в Organization /// </summary> /// <param name="worker">Экземпляр, который удаляем</param> public void DeleteWorker(Worker worker) { //В зависимости от условий выбираем соотвествующий метод удаления if (worker.DepartmentId == 0 && worker.GetType() != typeof(TopManager)) { Delete_Unallocated_Worker(worker); } //если нераспределенный else if (worker.GetType() == typeof(Intern) || worker.GetType() == typeof(Workman)) { Delete_Intern_Workman(worker); } else if (worker.GetType() == typeof(Manager)) { Delete_Manager(worker); } else if (worker.GetType() == typeof(TopManager)) { Delete_TopManager(worker); } SalaryService.MainMethodSetSalaryForManagers(this); //перерасчет ЗП }
/// <summary> /// Добавление нового экземпляра класса-наследника Worker в Organization /// </summary> /// <param name="DepartmentId">Id департамента</param> /// <param name="worker">Экзепляр класса-наследника Worker</param> /// <param name="WorkerType">Тип класса наследника</param> public void AddWorker(int DepartmentId, Worker worker, Type WorkerType) { //условие добавления экземпляра Intern и Workman if ((WorkerType == typeof(Intern) || WorkerType == typeof(Workman)) && DepartmentId != 0) { Add_Intern_Workman(DepartmentId, worker); } else if (WorkerType == typeof(Manager) && DepartmentId != 0) //добавление Manager { AddManager(DepartmentId, worker); } else if (WorkerType == typeof(TopManager)) //добавление TopManager { AddTopManager(worker); } else if (WorkerType != typeof(TopManager) && DepartmentId == 0) //добавление сотрудника в коллекцию нераспределенных { Add_Unallocated_Worker(worker); } SalaryService.MainMethodSetSalaryForManagers(this); //перерасчет ЗП }
/// <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); //пересчитываем ЗП }