예제 #1
0
        public async Task <List <DailyJobsDto> > DailyJobs(DateTime dateRequest)
        {
            List <DailyJobsDto> dailyJobsDto = new List <DailyJobsDto>();

            List <Jobs> jobs = await _jobsRepository.GetDailyJobs(dateRequest);

            // Return an empty list if no jobs are on the date requested
            if (jobs.Count == 0)
            {
                return(dailyJobsDto);
            }

            List <DailyJobEmployeeBuilder> employeeBuilder = new List <DailyJobEmployeeBuilder>();
            List <Guid>     employeeIds = new List <Guid>();
            List <Employee> employees   = new List <Employee>();

            // Builder for the employee string and ids for front-end jobs table
            foreach (var job in jobs)
            {
                var jobBuilder = new DailyJobEmployeeBuilder.Builder();

                var company = await _companyRepository.Get(job.CompanyId);

                jobBuilder = jobBuilder.WithCompany(company.Name);

                employeeIds = (job.JobsEmployees.Select(e => e.EmployeeId).ToList());

                employees = await _employeeRepository.GetMultipleEmployeesByID(employeeIds);

                jobBuilder = jobBuilder.WithJobId(job.Id)
                             .WithEmployees(employees)
                             .WithTimeOfJob(job.DateOfJob);

                employeeBuilder.Add(jobBuilder.Build());
            }

            // Combine the job entity with the employee builder to return a list of dailyJobsDto
            dailyJobsDto = jobs.Join(employeeBuilder,
                                     job => job.Id,
                                     empBldr => empBldr.Id,
                                     (job, emp) => new DailyJobsDto {
                Id                  = job.Id,
                DateOfJob           = job.DateOfJob,
                TimeOfJob           = emp.TimeOfJob,
                Address             = job.Address,
                Contact             = job.Contact,
                PhoneNumber         = job.PhoneNumber,
                NumberOfPositions   = job.NumberOfPositions,
                Positions           = job.Positions,
                IsJobComplete       = job.IsJobComplete,
                CompanyId           = job.CompanyId,
                CompanyName         = emp.CompanyName,
                EmployeesNameString = emp.EmployeesNameString,
                EmployeeIdList      = emp.EmployeeIdList
            }).ToList();

            return(dailyJobsDto);
        }