private MostWorkedEmployeesUnit CalculateCurrentMostWorkedEmployeesUnit(List <Employee> currentEmployees, int projectId)
        {
            var currentMostWorkedEmployeesUnit = new MostWorkedEmployeesUnit(-1, -1, -1, -1);

            for (int i = 0; i < currentEmployees.Count; i++)
            {
                var currentEmployee         = currentEmployees[i];
                var currentEmployeeId       = currentEmployee.EmployeeId;
                var currentEmployeeDateFrom = currentEmployee.DateFrom;
                var currentEmployeeDateTo   = currentEmployee.DateTo;

                for (int j = i + 1; j < currentEmployees.Count; j++)
                {
                    var nextEmployee         = currentEmployees[j];
                    var nextEmployeeId       = nextEmployee.EmployeeId;
                    var nextEmployeeDateFrom = nextEmployee.DateFrom;
                    var nextEmployeeDateTo   = nextEmployee.DateTo;

                    DateTime currentDateFromWorkedTogether = DateTime.Now;
                    if (currentEmployeeDateFrom >= nextEmployeeDateFrom)
                    {
                        currentDateFromWorkedTogether = currentEmployeeDateFrom;
                    }
                    else
                    {
                        currentDateFromWorkedTogether = nextEmployeeDateFrom;
                    }

                    DateTime currentDateToWorkedTogether = DateTime.Now;
                    if (currentEmployeeDateTo >= nextEmployeeDateTo)
                    {
                        currentDateToWorkedTogether = currentEmployeeDateTo;
                    }
                    else
                    {
                        currentDateToWorkedTogether = nextEmployeeDateTo;
                    }

                    var daysWorkedTogether = (currentDateToWorkedTogether - currentDateFromWorkedTogether).TotalDays;

                    if (currentMostWorkedEmployeesUnit.DaysWorked < daysWorkedTogether)
                    {
                        currentMostWorkedEmployeesUnit = new MostWorkedEmployeesUnit(currentEmployeeId, nextEmployeeId, projectId, Math.Ceiling(daysWorkedTogether));
                    }
                }
            }

            return(currentMostWorkedEmployeesUnit);
        }
        public List <MostWorkedEmployeesUnit> CalculateMostWorkedEmployeesInProject()
        {
            Dictionary <int, List <Employee> > structure = GenerateStructureForCalculation();
            var mostWorkedEmployeesResult = new List <MostWorkedEmployeesUnit>();

            foreach (var item in structure)
            {
                List <Employee>         currentEmployees = item.Value;
                MostWorkedEmployeesUnit currentMostWorkedEmployeesUnit = CalculateCurrentMostWorkedEmployeesUnit(currentEmployees, item.Key);
                if (currentMostWorkedEmployeesUnit.DaysWorked != -1)
                {
                    mostWorkedEmployeesResult.Add(currentMostWorkedEmployeesUnit);
                }
            }

            return(mostWorkedEmployeesResult.OrderByDescending(x => x.DaysWorked).ToList());
        }