Added the job progression API

This commit is contained in:
ashutosh.nehete 2025-12-04 12:12:20 +05:30
parent 6b8ba85a31
commit aa604f4d9e

View File

@ -2,6 +2,7 @@
using Marco.Pms.Model.Dtos.Attendance; using Marco.Pms.Model.Dtos.Attendance;
using Marco.Pms.Model.Entitlements; using Marco.Pms.Model.Entitlements;
using Marco.Pms.Model.Expenses; using Marco.Pms.Model.Expenses;
using Marco.Pms.Model.ServiceProject;
using Marco.Pms.Model.Utilities; using Marco.Pms.Model.Utilities;
using Marco.Pms.Model.ViewModels.DashBoard; using Marco.Pms.Model.ViewModels.DashBoard;
using Marco.Pms.Services.Service; using Marco.Pms.Services.Service;
@ -1075,78 +1076,110 @@ namespace Marco.Pms.Services.Controllers
} }
} }
//[HttpGet("job/progression")] [HttpGet("job/progression")]
//public async Task<IActionResult> GetJobProgressionAsync([FromQuery] Guid? projectId) public async Task<IActionResult> GetJobProgressionAsync([FromQuery] Guid? projectId)
//{ {
// Guid AssignedStatus = Guid.Parse("cfa1886d-055f-4ded-84c6-42a2a8a14a66"); Guid AssignedStatus = Guid.Parse("cfa1886d-055f-4ded-84c6-42a2a8a14a66");
// Guid InProgressStatus = Guid.Parse("5a6873a5-fed7-4745-a52f-8f61bf3bd72d"); Guid InProgressStatus = Guid.Parse("5a6873a5-fed7-4745-a52f-8f61bf3bd72d");
// Guid ReviewDoneStatus = Guid.Parse("ed10ab57-dbaa-4ca5-8ecd-56745dcbdbd7"); Guid ReviewDoneStatus = Guid.Parse("ed10ab57-dbaa-4ca5-8ecd-56745dcbdbd7");
// Guid ClosedStatus = Guid.Parse("3ddeefb5-ae3c-4e10-a922-35e0a452bb69"); Guid ClosedStatus = Guid.Parse("3ddeefb5-ae3c-4e10-a922-35e0a452bb69");
// if (tenantId == Guid.Empty) if (tenantId == Guid.Empty)
// { {
// _logger.LogWarning("Invalid request: TenantId is empty on progression endpoint"); _logger.LogWarning("Invalid request: TenantId is empty on progression endpoint");
// return BadRequest(ApiResponse<object>.ErrorResponse("Invalid TenantId", "Provided Invalid TenantId", 400)); return BadRequest(ApiResponse<object>.ErrorResponse("Invalid TenantId", "Provided Invalid TenantId", 400));
// } }
// var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync(); var loggedInEmployee = await _userHelper.GetCurrentEmployeeAsync();
// var jobIds = await _context.JobEmployeeMappings var jobIds = await _context.JobEmployeeMappings
// .Where(jem => jem.AssigneeId == loggedInEmployee.Id && jem.TenantId == tenantId) .Where(jem => jem.AssigneeId == loggedInEmployee.Id && jem.TenantId == tenantId)
// .Select(jem => jem.JobTicketId) .Select(jem => jem.JobTicketId)
// .ToListAsync(); .ToListAsync();
// if (projectId.HasValue) var query = _context.JobTickets
// { .Include(jt => jt.Project)
// var hasPermission = await _permissionServices.HasServiceProjectPermission(loggedInEmployee.Id, projectId.Value); .Include(jt => jt.CreatedBy).ThenInclude(e => e!.JobRole)
// if (!hasPermission) .Where(jt => jt.StatusId != ReviewDoneStatus
// { && jt.StatusId != ClosedStatus
// return StatusCode(403, && jt.Project != null
// ApiResponse<object>.ErrorResponse("You do not have permission to access this resource", "You do not have permission to access this resource", 403)); && jt.CreatedBy != null
// } && jt.TenantId == tenantId);
// var jobs = await _context.JobTickets
// .Include(jt => jt.Project)
// .Include(jt => jt.CreatedBy).ThenInclude(e => e!.JobRole)
// .Where(jt => jt.ProjectId == projectId.Value
// && jt.StatusId != ReviewDoneStatus
// && jt.StatusId != ClosedStatus
// && jt.Project != null
// && jt.CreatedBy != null
// && jt.TenantId == tenantId)
// .ToListAsync();
// var inProgressJobIds = jobs.Where(jt => jt.StatusId == InProgressStatus).Select(jt => jt.Id).ToList(); if (projectId.HasValue)
{
var hasPermission = await _permissionServices.HasServiceProjectPermission(loggedInEmployee.Id, projectId.Value);
if (!hasPermission)
{
return StatusCode(403,
ApiResponse<object>.ErrorResponse("You do not have permission to access this resource", "You do not have permission to access this resource", 403));
}
query = query.Where(jt => jt.ProjectId == projectId.Value);
}
var jobs = await query
.ToListAsync();
// var latestTagIns = await _context.JobAttendance var inProgressJobIds = jobs.Where(jt => jt.StatusId == InProgressStatus).Select(jt => jt.Id).ToList();
// .Include(ja => ja.Employee)
// .Where(ja => inProgressJobIds.Contains(ja.JobTicketId)
// && ja.Action == TAGGING_MARK_TYPE.TAG_IN
// && ja.TaggedOutAt == null
// && ja.TenantId == tenantId)
// .GroupBy(ja => ja.JobTicketId)
// .Select(g => new
// {
// JobTicketId = g.Key,
// Employee = g.Select(ja => ja.Employee).FirstOrDefault(),
// TagInAt = g.Max(ja => ja.TaggedInAt)
// })
// .ToListAsync();
// var assignedJobs = jobs var latestTagIns = await _context.JobAttendance
// .Where(jt => jt.StatusId == AssignedStatus) .Include(ja => ja.Employee)
// .Take(5) .Where(ja => inProgressJobIds.Contains(ja.JobTicketId)
// .Select(jt => new && ja.Action == TAGGING_MARK_TYPE.TAG_IN
// { && ja.TaggedOutAt == null
// Project = jt.Project!.Name, && ja.TenantId == tenantId)
// AssignedBy = jt.CreatedBy!.FirstName + " " + jt.CreatedBy.LastName, .GroupBy(ja => ja.JobTicketId)
// Title = jt.Title, .Select(g => new
// AssignedAt = jt.CreatedAt, {
JobTicketId = g.Key,
Employee = g.Select(ja => ja.Employee).FirstOrDefault(),
TagInAt = g.Max(ja => ja.TaggedInAt)
})
.ToListAsync();
// }) var assignedJobs = jobs
// .ToList(); .Where(jt => jt.StatusId == AssignedStatus)
// var inProgressJobs = jobs.Where(jt => jt.StatusId == InProgressStatus).Take(5).ToList(); .Take(5)
// var selfAssignedJobs = jobs.Where(jt => jobIds.Contains(jt.Id)).Take(5).ToList(); .Select(jt => new
// } {
// return Ok(); Project = jt.Project!.Name,
//} AssignedBy = jt.CreatedBy!.FirstName + " " + jt.CreatedBy.LastName,
Title = jt.Title,
AssignedAt = jt.CreatedAt,
})
.ToList();
var inProgressJobs = jobs
.Where(jt => jt.StatusId == InProgressStatus)
.Take(5)
.Select(jt => new
{
Project = jt.Project!.Name,
AssignedBy = jt.CreatedBy!.FirstName + " " + jt.CreatedBy.LastName,
Title = jt.Title,
AssignedAt = jt.CreatedAt,
})
.ToList();
var selfAssignedJobs = jobs
.Where(jt => jobIds.Contains(jt.Id))
.Take(5)
.Select(jt => new
{
Project = jt.Project!.Name,
AssignedBy = jt.CreatedBy!.FirstName + " " + jt.CreatedBy.LastName,
Title = jt.Title,
AssignedAt = jt.CreatedAt,
})
.ToList();
var response = new
{
AssignedJobs = assignedJobs,
InProgressJobs = inProgressJobs,
AllJobs = selfAssignedJobs
};
return Ok(ApiResponse<object>.SuccessResponse(response, "job progression fetched successfully", 200));
}
} }
} }