From 57d7b4c07b16c53e2824e0ebcd081fcc9da66aca Mon Sep 17 00:00:00 2001 From: "ashutosh.nehete" Date: Thu, 24 Jul 2025 10:38:31 +0530 Subject: [PATCH] Solved the issue of not showing final status in list and details API of expesne model --- Marco.Pms.Services/Service/ExpensesService.cs | 54 +++++++++++++------ 1 file changed, 39 insertions(+), 15 deletions(-) diff --git a/Marco.Pms.Services/Service/ExpensesService.cs b/Marco.Pms.Services/Service/ExpensesService.cs index 951e961..ce77f08 100644 --- a/Marco.Pms.Services/Service/ExpensesService.cs +++ b/Marco.Pms.Services/Service/ExpensesService.cs @@ -1042,16 +1042,24 @@ namespace Marco.Pms.Services.Service NextStatus = g.Select(s => s.NextStatus).ToList() }).ToListAsync(); }); + var statusTask = Task.Run(async () => + { + await using var dbContext = await _dbContextFactory.CreateDbContextAsync(); + return await dbContext.ExpensesStatusMaster + .AsNoTracking() + .Where(es => statusIds.Contains(es.Id)) + .ToListAsync(); + }); // Await all prerequisite checks at once. - await Task.WhenAll(projectTask, expenseTypeTask, paymentModeTask, statusMappingTask, paidByTask, createdByTask); + await Task.WhenAll(projectTask, expenseTypeTask, paymentModeTask, statusMappingTask, paidByTask, createdByTask, statusTask); - var projects = await projectTask; - var expenseTypes = await expenseTypeTask; - var paymentModes = await paymentModeTask; - var statusMappings = await statusMappingTask; - var paidBys = await paidByTask; - var createdBys = await createdByTask; + var projects = projectTask.Result; + var expenseTypes = expenseTypeTask.Result; + var paymentModes = paymentModeTask.Result; + var statusMappings = statusMappingTask.Result; + var paidBys = paidByTask.Result; + var createdBys = createdByTask.Result; expenseList = model.Select(m => { @@ -1061,6 +1069,11 @@ namespace Marco.Pms.Services.Service response.PaidBy = paidBys.Where(p => p.Id == m.PaidById).Select(p => _mapper.Map(p)).FirstOrDefault(); response.CreatedBy = createdBys.Where(e => e.Id == m.CreatedById).Select(e => _mapper.Map(e)).FirstOrDefault(); response.Status = statusMappings.Where(s => s.StatusId == m.StatusId).Select(s => _mapper.Map(s.Status)).FirstOrDefault(); + if (response.Status == null) + { + var status = statusTask.Result; + response.Status = status.Where(s => s.Id == m.StatusId).Select(s => _mapper.Map(s)).FirstOrDefault(); + } response.NextStatus = statusMappings.Where(s => s.StatusId == m.StatusId).Select(s => _mapper.Map>(s.NextStatus)).FirstOrDefault(); response.PaymentMode = paymentModes.Where(pm => pm.Id == m.PaymentModeId).Select(pm => _mapper.Map(pm)).FirstOrDefault(); response.ExpensesType = expenseTypes.Where(et => et.Id == m.ExpensesTypeId).Select(et => _mapper.Map(et)).FirstOrDefault(); @@ -1112,16 +1125,22 @@ namespace Marco.Pms.Services.Service NextStatus = g.Select(s => s.NextStatus).ToList() }).FirstOrDefaultAsync(); }); - + var statusTask = Task.Run(async () => + { + await using var dbContext = await _dbContextFactory.CreateDbContextAsync(); + return await dbContext.ExpensesStatusMaster + .AsNoTracking() + .FirstOrDefaultAsync(es => es.Id == Guid.Parse(model.StatusId)); + }); // Await all prerequisite checks at once. - await Task.WhenAll(projectTask, expenseTypeTask, paymentModeTask, statusMappingTask, paidByTask, createdByTask); + await Task.WhenAll(projectTask, expenseTypeTask, paymentModeTask, statusMappingTask, paidByTask, createdByTask, statusTask); - var project = await projectTask; - var expenseType = await expenseTypeTask; - var paymentMode = await paymentModeTask; - var statusMapping = await statusMappingTask; - var paidBy = await paidByTask; - var createdBy = await createdByTask; + var project = projectTask.Result; + var expenseType = expenseTypeTask.Result; + var paymentMode = paymentModeTask.Result; + var statusMapping = statusMappingTask.Result; + var paidBy = paidByTask.Result; + var createdBy = createdByTask.Result; var response = _mapper.Map(model); @@ -1133,6 +1152,11 @@ namespace Marco.Pms.Services.Service if (statusMapping != null) { response.Status = _mapper.Map(statusMapping.Status); + if (response.Status == null) + { + var status = statusTask.Result; + response.Status = _mapper.Map(status); + } response.NextStatus = _mapper.Map>(statusMapping.NextStatus); }