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()); }