Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }