Beispiel #1
0
        /// <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);                          //добавляем директора в список работников
        }
Beispiel #2
0
 /// <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);          //пересчитываем ЗП
     }
 }
Beispiel #3
0
 /// <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); //перерасчет ЗП
 }
Beispiel #4
0
 /// <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); //перерасчет ЗП
 }
Beispiel #5
0
 /// <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); //пересчитываем ЗП
 }