public static void StartCalculationsForAllPersons(DateTimeOffset accountingDate, int numberOfPersons,
                                                          Person employee)
        {
            //опеределенние самого высокого узла иерархии
            CreateRealTree(employee, numberOfPersons);
            Person targetPerson = CommonTools.FindPersonById(tree.Last());

            SecondSolution.StartCalculations(targetPerson, numberOfPersons, accountingDate);
        }
Exemple #2
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();
        }