示例#1
0
        public static void StartCalculations(Person targetPerson, int numberOfStaff, DateTimeOffset accountingDate)
        {
            List <int> mainTree = new List <int>();

            try
            {
                mainTree.Add(targetPerson.Id);
            }
            catch
            {
                CommonTools.ShowMessageAsync("Сначала выберите сотрудника из списка слева");
                return;
            }

            //Хранит id сотрудника из группы Salesman и
            //его зарплату в сумме с зп подчиненных.
            salaryWeightDictionary = new Dictionary <int, SalesmanMoneyBag>();

            bool[] isPersonSalaryCalculated = new bool[numberOfStaff];

            //Создает первичное "древо" из набора сотрудников группы Salesman
            //Возвращает сотрудника с последнего нижнего уровня
            Person lastPerson = CreateTree(targetPerson, isPersonSalaryCalculated);

            foreach (int ind in tree)
            {
                mainTree.Add(ind);
            }

            for (int i = mainTree.Count() - 1; i >= 0; i--)
            {
                targetPerson = CommonTools.FindPersonById(mainTree[i]);
                lastPerson   = CreateTree(targetPerson, isPersonSalaryCalculated);
                double subSalaryWeight = CalculateSalary(lastPerson, targetPerson, accountingDate,
                                                         isPersonSalaryCalculated);
                SalesmanMoneyBag subsBag = new SalesmanMoneyBag(subSalaryWeight, new List <int>());

                salaryWeightDictionary.Add(targetPerson.Id, subsBag);
            }

            salaryWeightDictionary.Clear();
        }
        /// <summary>
        /// Проверяет наличие данных на панели AddPersonPanel. Вызывает методы по считыванию
        /// и сохранению данных из полей в БД.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void AddPerson_button_Click(object sender, RoutedEventArgs e)
        {
            //Открывает панель добавления сотрудников
            if (addPersonPanel.Visibility == Visibility.Collapsed)
            {
                ChangeInterface("showPanel");
                return;
            }

            //создает группу, выбранную для сотрудника

            if (groupList.SelectedItem == null)
            {
                CommonTools.ShowMessageAsync("Выберите группу для сотрудника");
                return;
            }

            if (string.IsNullOrEmpty(personNameTextbox.Text))
            {
                CommonTools.ShowMessageAsync("Укажите имя сотрудника");
                return;
            }

            try
            {
                var BaseSalary = Convert.ToDouble(baseSalaryTextbox.Text);
            }
            catch (Exception)
            {
                CommonTools.ShowMessageAsync("Недопустимые символы введены в поле Ставка");
                return;
            }

            if (!dateOfStartPicker.Date.HasValue)
            {
                CommonTools.ShowMessageAsync("Выберите дату начала работы сотрудника");
                return;
            }

            if (newPerson.Name == null)
            {
                newPerson = SetDataToProfile(newPerson, false);
            }
            else
            {
                newPerson = SetDataToProfile(newPerson, true);
            }

            UpdateItemsListOnStaffEditPage();

            //Заполняем таблицу подчиненных со ссылкой на начальника
            var index = subPersonsList.SelectedItems.Count;

            if (index > 0)
            {
                for (int i = 0; i < index; i++)
                {
                    Person selectedPerson = (Person)subPersonsList.SelectedItems[i]; //сохраняем данные о выбранном пользователе
                    AddSubordinate(selectedPerson, newPerson);
                }
            }

            //Очищяем поля
            newPerson = new Person();
            ChangeInterface("hidePanel");
        }