public async System.Threading.Tasks.Task <ActionResult> List() { var isAdmin = User.IsInRole(UserRoleName.Admin); var jobs = await _jobsRepository.GetAsync(); if (!isAdmin) { jobs = jobs.Where(x => x.JobStatusId == JobStatus.Enabled).ToList(); } var myJobs = await _jobsRepository.GetAsync(await sessionAdapter.EmployeeIdAsync()); var availableClients = await clientRepository.GetAllClients(); var availableSites = await siteRepository.GetAll(); var allEmployees = await _employeeRepository.GetAllEmployees(); var models = jobs.OrderBy(x => x.JobCode).Select(job => { var details = new JobModelDetail { Client = _mapper.Map <ClientModel>(availableClients.SingleOrDefault(z => z.ClientId == job.ClientId)), Site = _mapper.Map <SiteModel>(availableSites.SingleOrDefault(z => z.SiteID == job.SiteId)), ProjectManager = _mapper.Map <ProjectManagerModel>(allEmployees.SingleOrDefault(z => z.EmployeeId == job.ProjectManagerEmployeeId)) }; return(job, details); }).ToList(); var vm = new JobListViewModel() { AllJobsWithAssociationStatus = models.OrderBy(x => x.job.JobCode) .ToDictionary(x => x, x => myJobs.Any(z => z.JobId == x.job.JobId)), }; return(View("ListJobs", vm)); }
/* * below to BE removed! * private async Task<ExcelReport<JobSummaryReportCriteria>> GetJobSummaryReportCriteria(bool isCurrentUserAdmin) * { * var vm = new JobSummaryReportCriteria(); * vm.PeriodSettings = GetDefaultPeriodSettings(); * vm.AvailableJobs = (await jobService.GetAsync()).OrderBy(x => x.FullJobCodeWithName).ToList(); * var rpt = new ExcelReport<JobSummaryReportCriteria>(JobSummaryReportCriteria.PROJECT_STATUS_REPORT_NAME, vm, isCurrentUserAdmin); * return rpt; * } */ private async Task <ExcelReport <QuickJobTimeReportCriteria> > GetJobDetailreportAsync() { var vm = new QuickJobTimeReportCriteria(); vm.PeriodSettings = GetDefaultPeriodSettings(); vm.AvailableJobs = (await jobService.GetAsync()).OrderBy(x => x.FullJobCodeWithName).ToList(); var rpt = new ExcelReport <QuickJobTimeReportCriteria>(QuickJobTimeReportCriteria.QUICK_JOB_TIME_REPORT_NAME, vm, true); return(rpt); }
public async Task <ActionResult> Index(int weekid, string originUrl) { var jobs = await _jobsService.GetAsync(await _sessionAdapter.EmployeeIdAsync()); var vm = new AddExpenseViewModel() { AvailableJobs = jobs.ToList(), ExpenseToSave = new ExpenseModel(), Week = WeekDTO.CreateForWeekId(weekid), CancelUrl = originUrl, WeekId = weekid, }; return(View("New", vm)); }
public async Task <IActionResult> Upsert(int?id) { IEnumerable <JobSearch> jsList = await _jsRepo.GetAllAsync(SD.JobSearchAPIPath); JobVM objVM = new JobVM() { JobSearchList = jsList.Select(i => new Microsoft.AspNetCore.Mvc.Rendering.SelectListItem { Text = i.Name, Value = i.Id.ToString() }) }; if (id == null) { //true for insert or create return(View(objVM)); } objVM.Job = await _jobsRepo.GetAsync(SD.JobsAPIPath, id.GetValueOrDefault()); if (objVM.Job == null) { //update return(NotFound()); } return(View(objVM)); }
public async Task <ActionResult> Edit(string employee) { var allJobs = jobService.GetAsync(); var roles = await employeeService.GetAllRoles(); var emp = await employeeService.GetSingleEmployeeAsync(employee); var vm = new EditEmployeeViewModel() { SelectedRole = emp.Role, AvailableRoles = roles, Email = emp.UserName, FirstName = emp.First, LastName = emp.Last, IsExempt = emp.IsExempt }; return(View("Edit", vm)); }
public JobsController(IMapper mapper, IJobsRepository jobRepo) { _repo = new InMemRepo <Job>(() => ((Job z) => z.Id, jobRepo.GetAsync() .GetAwaiter() .GetResult() .Select(x => new Job() { Name = x.JobName, JobCode = x.JobCode, Id = x.FullJobCodeWithName.ToGuid(), ClientId = x.ClientId.ToString().ToGuid(), SiteId = x.SiteId.ToString().ToGuid(), LastModified = DateTimeOffset.Now, }).ToArray())); }
public async Task <FullTimeEntryViewModel> GetFullTimeEntryViewModelAsync(WeekOfTimeEntriesRequest request) { var employeeForWeek = await employeeService.GetSingleEmployeeAsync(request.EmployeeId); if (!request.RequestingUserIsAdmin && employeeForWeek.UserName != request.RequestingUserName) { throw new UnauthorizedAccessException($"You are not allowed to view others time sheets"); } var currentWeek = WeekDTO.CreateForWeekId(request.WeekId); var weekOfTimeEntries = await timeService.GetWeekAsync(request.EmployeeId, request.WeekId); //var timeEntries = await timeService.GetAsync(request.WeekId, request.EmployeeId); var allJobList = (await jobService.GetAsync()).ToList(); var taskList = (await taskService.GetTasks()).ToList().OrderBy(x => x.Name).ThenBy(x => x.Description); var entries = new List <TimeEntryViewModel>(); var status = await timeApprovalService.GetAsync(request.WeekId, request.EmployeeId); var existingJobWithTasks = weekOfTimeEntries.AsEnumerable().GroupBy(x => new JobWithTaskDTO() { JobId = x.JobId, TaskId = x.JobTaskId }); foreach (var entry in existingJobWithTasks) { var tasky = taskList.FirstOrDefault(x => x.TaskId == entry.Key.TaskId); var SelectedEntryTaskName = $"{tasky?.LegacyCode} - {tasky?.Name}"; var SelectedEntryJob = allJobList.FirstOrDefault(x => x.JobId == entry.Key.JobId); var jobCode = ""; if (SelectedEntryJob != null) { jobCode = SelectedEntryJob.JobCode; } var item = new TimeEntryViewModel() { SelectedJobId = entry.Key.JobId, SelectedTaskId = entry.Key.TaskId, SelectedEntryTaskName = SelectedEntryTaskName, SelectedEntryJobName = SelectedEntryJob?.JobName, SelectedJobCode = jobCode, SelectedTaskCategory = tasky?.Category?.Name, Monday = MapToViewModel(currentWeek, DayOfWeek.Monday, entry), Tuesday = MapToViewModel(currentWeek, DayOfWeek.Tuesday, entry), Wednesday = MapToViewModel(currentWeek, DayOfWeek.Wednesday, entry), Thursday = MapToViewModel(currentWeek, DayOfWeek.Thursday, entry), Friday = MapToViewModel(currentWeek, DayOfWeek.Friday, entry), Saturday = MapToViewModel(currentWeek, DayOfWeek.Saturday, entry), Sunday = MapToViewModel(currentWeek, DayOfWeek.Sunday, entry), }; entries.Add(item); } entries = entries.OrderBy(x => x.SelectedJobCode).ThenBy(x => x.SelectedTaskId).ToList(); var nextWeek = currentWeek.Next(); var prevWeek = currentWeek.Previous(); return(new FullTimeEntryViewModel() { TimeEntryRow = entries, EmployeeId = employeeForWeek.EmployeeId, EmployeeDisplayName = $"{employeeForWeek.First} {employeeForWeek.Last}", NewEntry = await GenerateEmptyJobTaskAsync(request.WeekId, request.EmployeeId), Week = new WeekIdentifier() { WeekEnd = currentWeek.WeekEnd, WeekStart = currentWeek.WeekStart, WeekId = currentWeek.WeekId.Value, Year = currentWeek.Year }, ApprovalStatus = status.TimeApprovalStatus, Expenses = await _expenseService.GetExpensesForEmployee(request.EmployeeId, request.WeekId) }); }
public async Task <ActionResult <IEnumerable <CoreJobDto> > > SaveBulkJobs([FromBody] IEnumerable <JobUploadModel> jobs) { var res = new JobUploadResults() { NewClients = new Dictionary <string, int>(), NewSites = new Dictionary <string, int>(), }; try { var allSites = await _sitesRepository.GetAll(); var sitesBySiteName = await BulkSaveSites(allSites, jobs, newSite => res.NewSites.TryAdd(newSite.SiteName, newSite.SiteID)); var allClients = await _clientsRepository.GetAllClients(); var clientsByClientName = await BulkSaveClients(allClients, jobs, newClient => res.NewClients.TryAdd(newClient.ClientName, newClient.ClientId)); var allJobs = await _jobsRepository.GetAsync(); var newJobs = new List <CoreJobDto>(); var updatedJobs = new List <CoreJobDto>(); var skippedEntry = new List <CoreJobDto>(); foreach (var rec in jobs) { var isBrandNewJob = false; var temp = rec; var matchedJob = await SaveForMatchingField(allJobs, matchCriteria : (existingJob, newJob) => { var wtf = existingJob.JobCode.Replace("-", "").Equals(newJob.JobCode.Replace("-", ""), StringComparison.InvariantCultureIgnoreCase); return(wtf); }, factory : async(newJob) => { var created = await _jobsRepository.Create(new BLL.Jobs.CreateJobDto() { ClientId = clientsByClientName[newJob.ClientName.Trim()], JobCode = newJob.JobCode, JobName = newJob.JobName, JobStatusId = JobStatus.Enabled, SiteId = sitesBySiteName[newJob.SiteName.Trim()], ProjectManagerEmployeeId = newJob.ProjectManager ?? 1 }); isBrandNewJob = true; return(created); }, field : temp); var nameChanged = matchedJob.JobName != rec.JobName; var clientChanged = matchedJob.ClientId != clientsByClientName[rec.ClientName.Trim()]; var siteChanged = matchedJob.SiteId != sitesBySiteName[rec.SiteName.Trim()]; if (isBrandNewJob) { newJobs.Add(matchedJob); } else if (nameChanged || clientChanged || siteChanged) { matchedJob.JobName = rec.JobName; matchedJob.ClientId = clientsByClientName[rec.ClientName.Trim()]; matchedJob.SiteId = sitesBySiteName[rec.SiteName.Trim()]; await _jobsRepository.Update(matchedJob); updatedJobs.Add(matchedJob); } else { skippedEntry.Add(matchedJob); } } res.UpdatedJobs = updatedJobs; res.CreatedJobs = newJobs; res.SkippedEntriesBecuaseNoChange = skippedEntry; } catch (Exception e) { return(new ObjectResult(new { Error = new ProblemDetails() { Title = e.Message, Detail = e.ToString(), Instance = this.HttpContext.Request.GetDisplayUrl(), Status = StatusCodes.Status500InternalServerError, Type = "Unhandled Error" }, Processed = res })); } return(Ok(res)); }
public async Task <ReportDTO <QuickJobTimeReportDTO> > RunAsync(QuickJobTimeReportCriteria criteria) { DateTime start = criteria.PeriodSettings.Start; DateTime end = criteria.PeriodSettings.End; int jobId = int.Parse(criteria.SelectedJobId); int?limitToEmployeeId = await _sessionAdapter.EmployeeIdAsync(); if (criteria.ShowAllEmployeesForJob) { limitToEmployeeId = null; } using (var conn = new SqlConnection(configuration.GetConnectionString("SiteConnection"))) using (var cmd = conn.CreateCommand()) { conn.Open(); cmd.CommandText = @" Select " + $" min(Convert(varchar(10),Isnull(te.Date,@WeekStart), 101)) as {nameof(QuickJobTimeReportDTO.PeriodStart)}, " + $" max(Convert(varchar(10),isnull( te.Date,@WeekEnd),101)) as {nameof(QuickJobTimeReportDTO.PeriodEnd)}, " + $" COALESCE(e.Last,'') + ', ' + COALESCE(e.First,'') as {nameof(QuickJobEmployees.EmployeeName)}, " + $" j.JobCode as {nameof(QuickJobTimeReportDTO.JobCode)}, " + $" j.JobName as {nameof(QuickJobTimeReportDTO.JobName)}," + $" c.ClientName as {nameof(QuickJobTimeReportDTO.ClientName)}, " + $" s.SiteName as {nameof(QuickJobTimeReportDTO.SiteName)}, " + $" jt.LegacyCode + ' - ' + jt.[Name] as {nameof(QuickJobEmployees.TaskName)}, " + $" tc.Name as {nameof(QuickJobEmployees.TaskCategory)}, " + $" isnull(sum(te.hours),0) as {nameof(QuickJobEmployees.Regular)}, " + $" isnull(sum(te.overtimehours),0) as {nameof(QuickJobEmployees.Overtime)}, " + $" isnull(sum(te.hours),0) + isnull(sum(te.overtimehours),0) as {nameof(QuickJobEmployees.Combined)}" + @" from dbo.Jobs j inner join dbo.Clients c on c.ClientId = j.ClientId left outer join [dbo].TimeEntries te on j.JobId = te.JobId left outer join [dbo].Employees e on e.EmployeeId = te.EmployeeId inner join dbo.[Sites] s on j.SiteId = s.SiteID left outer join dbo.JobTasks jt on jt.JobTaskId = te.TaskId inner join dbo.TaskCategories tc on tc.TaskCategoryId = jt.TaskCategoryId where (@JobId is null Or te.JobId = @JobId) and te.Date >= @WeekStart and te.Date <= @WeekEnd and ISNULL(e.[UserName],'') != '*****@*****.**' " + (limitToEmployeeId.HasValue ? $" and te.EmployeeId = { limitToEmployeeId.Value}" : string.Empty) + @" group by tc.Name,s.SiteName, j.JobCode, COALESCE(e.Last,'') + ', ' + COALESCE(e.First,'') , j.JobName, c.ClientName , jt.LegacyCode + ' - ' + jt.[Name], j.JobId Select 'Time And Expense Expenditures' as [name] ,SUM(ISNULL(e.Amount,0)) as amount from dbo.Jobs j inner join dbo.TimeAndExpenceExpenditures e on e.JobId = j.JobId where WeekId BETWEEN @WeekIdStartInclusive AND @WeekIdEndInclusive AND (@LimitToEmployeeId is null OR @LimitToEmployeeId = e.EmployeeId) AND (@JobId is null Or j.JobId = @JobId) HAVING SUM(ISNULL(e.Amount,0)) > 0 UNION ALL select 'Company Vehicle Expense' as [name] ,SUM(ISNULL((ve.TotalNumberOfDaysUsed * 125) + CASE WHEN ve.TotalMiles > 250 THEN (ve.TotalMiles * .50) - (250 * .50) ELSE 0 END,0)) as amount from dbo.Jobs j inner join dbo.CompanyVehicleExpenditures ve on ve.JobId = j.JobId where WeekId BETWEEN @WeekIdStartInclusive AND @WeekIdEndInclusive AND (@LimitToEmployeeId is null OR @LimitToEmployeeId = ve.EmployeeId) AND (@JobId is null Or j.JobId = @JobId) HAVING SUM(ISNULL((ve.TotalNumberOfDaysUsed * 125) + CASE WHEN ve.TotalMiles > 250 THEN (ve.TotalMiles * .50) - (250 * .50) ELSE 0 END,0)) > 0 UNION ALL select 'Contractor/PO Expense' as [name] ,SUM(ISNULL(ce.TotalPOContractAmount,0)) as amount from dbo.Jobs j inner join dbo.ContractorExpenditures ce on j.JobId = ce.JobId where WeekId BETWEEN @WeekIdStartInclusive AND @WeekIdEndInclusive AND (@LimitToEmployeeId is null OR @LimitToEmployeeId = ce.EmployeeId) AND (@JobId is null Or j.JobId = @JobId) HAVING SUM(ISNULL(ce.TotalPOContractAmount,0)) > 0 UNION ALL select 'Arc Flash Labels Expense' as [name] ,SUM(ISNULL(e.TotalLabelsCost,0) + ISNULL(e.TotalPostageCost,0)) as amount FROM dbo.Jobs j inner join dbo.ArcFlashlabelExpenditures e on j.jobId = e.jobId where WeekId BETWEEN @WeekIdStartInclusive AND @WeekIdEndInclusive AND (@LimitToEmployeeId is null OR @LimitToEmployeeId = e.EmployeeId) AND (@JobId is null Or j.JobId = @JobId) HAVING SUM(ISNULL(e.TotalLabelsCost,0) + ISNULL(e.TotalPostageCost,0)) > 0 UNION ALL select 'Miscellaneous Expense' as [name] ,SUM(ISNULL(e.Amount,0)) as amount from dbo.Jobs j inner join dbo.MiscExpenditures e on j.JobId = e.JobId where WeekId BETWEEN @WeekIdStartInclusive AND @WeekIdEndInclusive AND (@LimitToEmployeeId is null OR @LimitToEmployeeId = e.EmployeeId) AND (@JobId is null Or j.JobId = @JobId) HAVING SUM(ISNULL(e.Amount,0)) > 0 "; cmd.Parameters.Add(new SqlParameter("JobId", jobId)); cmd.Parameters.Add(new SqlParameter("LimitToEmployeeId", limitToEmployeeId.HasValue ? limitToEmployeeId : DBNull.Value)); cmd.Parameters.Add(new SqlParameter("WeekIdStartInclusive", WeekDTO.CreateWithWeekContaining(start).WeekId.Value)); cmd.Parameters.Add(new SqlParameter("WeekIdEndInclusive", WeekDTO.CreateWithWeekContaining(end).WeekId.Value)); cmd.Parameters.Add(new SqlParameter("WeekStart", start)); cmd.Parameters.Add(new SqlParameter("WeekEnd", end)); var rdr = cmd.ExecuteReader(); var map = GetColumnMap(rdr.GetColumnSchema()); var rpt = new QuickJobTimeReportDTO() { PeriodEnd = end, PeriodStart = start, Expenses = new Dictionary <string, decimal>() }; var employeeRows = new List <QuickJobEmployees>(); var job = (await _jobsRepository.GetAsync()).SingleOrDefault(x => x.JobId == jobId); rpt.JobCode = job.JobCode; rpt.JobName = job.JobName; rpt.SiteName = (await _sitesRepository.GetAll()).SingleOrDefault(x => x.SiteID == job.SiteId)?.SiteName; rpt.ClientName = (await _clientsRepository.GetClient(job.ClientId))?.ClientName; while (await rdr.ReadAsync()) { if (rdr.HasRows) { employeeRows.Add(new QuickJobEmployees() { Combined = rdr.GetDecimal(map[nameof(QuickJobEmployees.Combined)]), Regular = rdr.GetDecimal(map[nameof(QuickJobEmployees.Regular)]), Overtime = rdr.GetDecimal(map[nameof(QuickJobEmployees.Overtime)]), EmployeeName = rdr.GetSqlString(map[nameof(QuickJobEmployees.EmployeeName)]).Value, TaskCategory = rdr.GetSqlString(map[nameof(QuickJobEmployees.TaskCategory)]).Value, TaskName = rdr.GetSqlString(map[nameof(QuickJobEmployees.TaskName)]).Value, }); } } rpt.Employees = employeeRows; await rdr.NextResultAsync(); while (await rdr.ReadAsync()) { rpt.Expenses.Add(rdr.GetString(0), rdr.GetDecimal(1)); } return(new ReportDTO <QuickJobTimeReportDTO>() { Data = rpt, ReportName = QuickJobTimeReport.QuickJobTimeReportCriteria.QUICK_JOB_TIME_REPORT_NAME, RunSettings = new Dictionary <string, string>() { { "Generated", $"{DateTimeWithZone.EasternStandardTime.ToShortDateString()} at {DateTimeWithZone.EasternStandardTime.ToShortTimeString()}" }, { "Company", $"Orion Engineering Co., Inc." }, { "Showing Time From", criteria.ShowAllEmployeesForJob ? "All Employees" : "Self" }, } }); } }
protected override async Task <IProcessResult <AllExpendituresModel> > Handle(GetAllExpendituresRequest msg) { var employeeDetails = (await empRepo.GetAllEmployees()) .Where(x => x.EmployeeId != 1) //exclude Admin here .ToDictionary(x => x.EmployeeId); var jobs = (await jobsRepository.GetAsync()).ToDictionary(x => x.JobId); var result = new AllExpendituresModel(); if (msg.IncludeArcFlashlabels) { await LoadSection(await arcFlashLabelsRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ? x.ExternalId == msg.LimitToSingleExpense.Value : true), (ArcFlashLabelExpenditure x) => new Expense <ArcFlashLabelExpenditure>() { Detail = x, Amount = x.TotalLabelsCost, EmployeeName = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}", FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName, Id = x.Id, ShortExpenseName = $"Arc Flash Label Expense ({DateTimeWithZone.ConvertToEST(x.DateOfInvoice.UtcDateTime).ToShortDateString()})", JobId = x.JobId, LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime) }, mapped => result.ArcFlashLabelExpenditures = mapped); } if (msg.IncludeCompanyVehicles) { await LoadSection(await companyVehicleRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ? x.ExternalId == msg.LimitToSingleExpense.Value : true), (CompanyVehicleExpenditure x) => new Expense <CompanyVehicleExpenditure>() { Detail = x, Amount = x.GetTotalCost(), EmployeeName = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}", FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName, Id = x.ExternalId, ShortExpenseName = $"Company Vehicle: {x.Vehicle} ({x.TotalMiles:N} miles)", JobId = x.JobId, LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime) }, mapped => result.CompanyVehicleExpenditures = mapped); } if (msg.IncludeContractorExpenditures) { await LoadSection(await contractorExpRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ? x.ExternalId == msg.LimitToSingleExpense.Value : true), (ContractorExpenditure x) => new Expense <ContractorExpenditure>() { Detail = x, Amount = x.TotalPOContractAmount, EmployeeName = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}", FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName, Id = x.ExternalId, ShortExpenseName = $"Contrator Expense (PO: {x.OrionPONumber})", JobId = x.JobId, LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime) }, mapped => result.ContractorExpenditures = mapped); } if (msg.IncludeMiscExpenditure) { await LoadSection(await miscRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ? x.ExternalId == msg.LimitToSingleExpense.Value : true), (MiscExpenditure x) => new Expense <MiscExpenditure>() { Detail = x, Amount = x.Amount, EmployeeName = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}", FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName, Id = x.Id, ShortExpenseName = $"Misc - {x.Description}", JobId = x.JobId, LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime) }, mapped => result.MiscExpenditures = mapped); } if (msg.IncludeTimeAndExpenseExpenditures) { await LoadSection(await timeAndExpenseExpRepo.SearchForEntity(x => msg.LimitToSingleExpense.HasValue ? x.ExternalId == msg.LimitToSingleExpense.Value : true), (TimeAndExpenceExpenditure x) => new Expense <TimeAndExpenceExpenditure>() { Detail = x, Amount = x.Amount, EmployeeName = $"{employeeDetails[x.EmployeeId].Last}, {employeeDetails[x.EmployeeId].First}", FullJobNameWithCode = jobs[x.JobId].FullJobCodeWithName, Id = x.Id, ShortExpenseName = $"T&E - ({DateTimeWithZone.ConvertToEST(x.ExpenseOnDate.UtcDateTime).ToShortDateString()})", JobId = x.JobId, LastModifiedDateEst = DateTimeWithZone.ConvertToEST(x.LastModified.UtcDateTime) }, mapped => result.TimeAndExpenceExpenditures = mapped); } result.AvailableEmployees = employeeDetails.Select(e => new CoreEmployeeDto() { EmployeeId = e.Key, First = e.Value.First, Last = e.Value.Last }).ToList(); var inUseJobs = result.AsFullList().Select(x => x.JobId).ToHashSet(); result.AvailableJobs = jobs.Values.Where(x => x.JobStatusId == JobStatus.Enabled || inUseJobs.Contains(x.JobId)).ToList(); return(Success(result)); }
protected override async Task <IProcessResult <ExpenseViewModel> > Handle(GetCreateExpenseModelMessage msg) { var emps = (await empRepo.GetAllEmployees()).Where(x => x.EmployeeId != 1).ToList(); var jobs = await jobsRepository.GetAsync(); var mdl = msg.TargetExpenseType switch { ExpenditureTypeEnum.ArcFlashLabelExpenditure => new ExpenseViewModel() { AvailableEmployees = emps, AvailableJobs = jobs, ExpenseType = msg.TargetExpenseType, IsBrandNewExpenditureCreation = true, ArcFlashLabelExpenditure = new Expense <api.expenditures.Models.ArcFlashLabelExpenditure>() { Detail = new api.expenditures.Models.ArcFlashLabelExpenditure() { DateOfInvoice = DateTimeOffset.Now, } } }, ExpenditureTypeEnum.MiscExpenditure => new ExpenseViewModel() { AvailableEmployees = emps, AvailableJobs = jobs, ExpenseType = msg.TargetExpenseType, IsBrandNewExpenditureCreation = true, MiscExpenditure = new Expense <api.expenditures.Models.MiscExpenditure>() { Detail = new api.expenditures.Models.MiscExpenditure() { ExpensedOn = DateTimeOffset.Now, } } }, ExpenditureTypeEnum.ContractorExpenditure => new ExpenseViewModel() { AvailableEmployees = emps, AvailableJobs = jobs, ExpenseType = msg.TargetExpenseType, IsBrandNewExpenditureCreation = true, ContractorExpenditure = new Expense <api.expenditures.Models.ContractorExpenditure>() { Detail = new api.expenditures.Models.ContractorExpenditure() { ExpensedOn = DateTimeOffset.Now } } }, ExpenditureTypeEnum.TimeAndExpenceExpenditure => new ExpenseViewModel() { AvailableEmployees = emps, AvailableJobs = jobs, ExpenseType = msg.TargetExpenseType, IsBrandNewExpenditureCreation = true, TimeAndExpenceExpenditure = new Expense <api.expenditures.Models.TimeAndExpenceExpenditure>() { Detail = new api.expenditures.Models.TimeAndExpenceExpenditure() { ExpenseOnDate = DateTimeOffset.Now } } }, ExpenditureTypeEnum.CompanyVehicleExpenditure => new ExpenseViewModel() { AvailableEmployees = emps, AvailableJobs = jobs, ExpenseType = msg.TargetExpenseType, IsBrandNewExpenditureCreation = true, CompanyVehicleExpenditure = new Expense <api.expenditures.Models.CompanyVehicleExpenditure>() { Detail = new api.expenditures.Models.CompanyVehicleExpenditure() { DateVehicleFirstUsed = DateTimeOffset.Now } } }, _ => throw new NotImplementedException() }; return(Success(mdl)); } }