public List <CoupleEmployeesViewModel> GetDaysWorkedTogether(List <Employee> employeesByProject, int projectId) { var employeesWithCalculatedDays = new List <CoupleEmployeesViewModel>(); for (int i = 0; i < employeesByProject.Count - 1; i++) { var currEmpl = employeesByProject[i]; for (int p = i + 1; p < employeesByProject.Count; p++) { var nextEmpl = employeesByProject[p]; double daysWorkedTogether = 0; if ((currEmpl.DateFrom <= nextEmpl.DateFrom && nextEmpl.DateFrom <= currEmpl.DateTo) && (currEmpl.DateTo <= nextEmpl.DateTo)) { daysWorkedTogether = (currEmpl.DateTo - nextEmpl.DateFrom).Value.TotalDays; } else if ((currEmpl.DateFrom <= nextEmpl.DateFrom && nextEmpl.DateFrom <= currEmpl.DateTo) && (nextEmpl.DateTo <= currEmpl.DateTo)) { daysWorkedTogether = (nextEmpl.DateTo - nextEmpl.DateFrom).Value.TotalDays; } else if ((nextEmpl.DateFrom <= currEmpl.DateFrom && currEmpl.DateFrom <= nextEmpl.DateTo) && (currEmpl.DateTo <= nextEmpl.DateTo)) { daysWorkedTogether = (currEmpl.DateTo - currEmpl.DateFrom).Value.TotalDays; } else if ((nextEmpl.DateFrom <= currEmpl.DateFrom && currEmpl.DateFrom <= nextEmpl.DateTo) && (currEmpl.DateTo > nextEmpl.DateTo)) { daysWorkedTogether = (nextEmpl.DateTo - currEmpl.DateFrom).Value.TotalDays; } var employeeWithCalculatedDays = new CoupleEmployeesViewModel { FirstEmployeeId = currEmpl.EmpId, SecondEmployeeId = nextEmpl.EmpId, ProjectId = projectId.ToString(), WorkedDays = (int)daysWorkedTogether, }; employeesWithCalculatedDays.Add(employeeWithCalculatedDays); } } return(employeesWithCalculatedDays); }
public IEnumerable <PrintModel> GiveMePrintModelByProjects(List <CoupleEmployeesViewModel> finalists) { // Rearrange Ids of employees 143|218 is == 218|143 for (int i = 0; i < finalists.Count - 1; i++) { var ID1 = finalists[i].FirstEmployeeId; var ID2 = finalists[i].SecondEmployeeId; for (int p = i + 1; p < finalists.Count; p++) { var nextID1 = finalists[p].FirstEmployeeId; var nextID2 = finalists[p].SecondEmployeeId; if (ID1 == nextID2 && ID2 == nextID1) { //Change their positions finalists[p].FirstEmployeeId = ID1; finalists[p].SecondEmployeeId = ID2; } } } // Group by Id1 and Id2 var longestWorkByPairs = finalists .GroupBy(x => new { x.FirstEmployeeId, x.SecondEmployeeId }) .ToList(); var coupleWithAllGroups = new List <CoupleEmployeesViewModel>(); foreach (var groupedElement in longestWorkByPairs) { var projectIds = groupedElement .Select(x => x.ProjectId) .ToList(); var WorkedDays = groupedElement .Sum(x => x.WorkedDays); var coupleWithGroups = new CoupleEmployeesViewModel() { FirstEmployeeId = groupedElement.Key.FirstEmployeeId, SecondEmployeeId = groupedElement.Key.SecondEmployeeId, ProjectId = string.Join(" ", projectIds), WorkedDays = WorkedDays, }; coupleWithAllGroups.Add(coupleWithGroups); } var printModel = coupleWithAllGroups .OrderByDescending(x => x.WorkedDays) .Select(x => new PrintModel { Column1Value = x.FirstEmployeeId.ToString(), Column2Value = x.SecondEmployeeId.ToString(), Column3Value = x.ProjectId.ToString(), Column4Value = x.WorkedDays.ToString(), }); return(printModel); }