Enhanced the employe log API
This commit is contained in:
parent
dc83aa72a6
commit
663d94093c
@ -80,31 +80,41 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet("log/employee/{employeeId}")]
|
[HttpGet("log/employee/{employeeId}")]
|
||||||
public async Task<IActionResult> GetAttendanceLogByEmployeeId(Guid employeeId, [FromQuery] string? dateFrom = null, [FromQuery] string? dateTo = null)
|
public async Task<IActionResult> GetAttendanceLogByEmployeeId(Guid employeeId, [FromQuery] DateTime? dateFrom = null, [FromQuery] DateTime? dateTo = null)
|
||||||
{
|
{
|
||||||
DateTime fromDate = new DateTime();
|
|
||||||
DateTime toDate = new DateTime();
|
|
||||||
|
|
||||||
if (dateFrom != null && DateTime.TryParse(dateFrom, out fromDate) == false)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("User sent Invalid from Date while featching attendance logs");
|
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
|
|
||||||
}
|
|
||||||
if (dateTo != null && DateTime.TryParse(dateTo, out toDate) == false)
|
|
||||||
{
|
|
||||||
_logger.LogWarning("User sent Invalid to Date while featching attendance logs");
|
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Invalid Date", "Invalid Date", 400));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (employeeId == Guid.Empty)
|
if (employeeId == Guid.Empty)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("The employee Id sent by user is empty");
|
_logger.LogWarning("The employee Id sent by user is empty");
|
||||||
return BadRequest(ApiResponse<object>.ErrorResponse("Employee ID is required and must not be Empty.", "Employee ID is required and must not be empty.", 400));
|
return BadRequest(ApiResponse<object>.ErrorResponse("Employee ID is required and must not be Empty.", "Employee ID is required and must not be empty.", 400));
|
||||||
}
|
}
|
||||||
List<Attendance> attendances = await _context.Attendes
|
|
||||||
.Where(c => c.EmployeeId == employeeId && c.TenantId == tenantId && c.AttendanceDate.Date >= fromDate && c.AttendanceDate.Date <= toDate).ToListAsync();
|
|
||||||
|
|
||||||
Employee? employee = await _context.Employees.Include(e => e.JobRole).FirstOrDefaultAsync(e => e.Id == employeeId && e.TenantId == tenantId && e.IsActive);
|
Employee? employee = await _context.Employees.Include(e => e.JobRole).FirstOrDefaultAsync(e => e.Id == employeeId && e.TenantId == tenantId);
|
||||||
|
if (employee == null)
|
||||||
|
{
|
||||||
|
_logger.LogWarning("Employee {EmployeeId} not found", employeeId);
|
||||||
|
return NotFound(ApiResponse<object>.ErrorResponse("Employee not found", "Employee not found in database", 404));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!dateFrom.HasValue)
|
||||||
|
{
|
||||||
|
dateFrom = DateTime.UtcNow;
|
||||||
|
}
|
||||||
|
if (!dateTo.HasValue)
|
||||||
|
{
|
||||||
|
var days = 0 - 7;
|
||||||
|
dateTo = dateFrom.Value.AddDays(days);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Attendance> attendances = await _context.Attendes
|
||||||
|
.Include(a => a.RequestedBy)
|
||||||
|
.ThenInclude(e => e!.JobRole)
|
||||||
|
.Include(a => a.RequestedBy)
|
||||||
|
.ThenInclude(e => e!.JobRole)
|
||||||
|
.Where(c => c.EmployeeId == employeeId && c.TenantId == tenantId && c.AttendanceDate.Date >= dateFrom && c.AttendanceDate.Date <= dateTo).ToListAsync();
|
||||||
|
|
||||||
|
var projectIds = attendances.Select(a => a.ProjectID).Distinct().ToList();
|
||||||
|
|
||||||
|
var projects = await _context.Projects.Where(p => projectIds.Contains(p.Id) && p.TenantId == tenantId).ToListAsync();
|
||||||
|
|
||||||
List<EmployeeAttendanceVM> results = new List<EmployeeAttendanceVM>();
|
List<EmployeeAttendanceVM> results = new List<EmployeeAttendanceVM>();
|
||||||
|
|
||||||
@ -119,11 +129,16 @@ namespace MarcoBMS.Services.Controllers
|
|||||||
FirstName = employee.FirstName,
|
FirstName = employee.FirstName,
|
||||||
LastName = employee.LastName,
|
LastName = employee.LastName,
|
||||||
ProjectId = attendance.ProjectID,
|
ProjectId = attendance.ProjectID,
|
||||||
|
ProjectName = projects.Where(p => p.Id == attendance.ProjectID).Select(p => p.Name).FirstOrDefault(),
|
||||||
CheckInTime = attendance.InTime,
|
CheckInTime = attendance.InTime,
|
||||||
CheckOutTime = attendance.OutTime,
|
CheckOutTime = attendance.OutTime,
|
||||||
JobRoleName = employee.JobRole != null ? employee.JobRole.Name : "",
|
JobRoleName = employee.JobRole != null ? employee.JobRole.Name : "",
|
||||||
Activity = attendance.Activity,
|
Activity = attendance.Activity,
|
||||||
EmployeeAvatar = null
|
EmployeeAvatar = null,
|
||||||
|
RequestedAt = attendance.RequestedAt,
|
||||||
|
RequestedBy = _mapper.Map<BasicEmployeeVM>(attendance.RequestedBy),
|
||||||
|
ApprovedAt = attendance.ApprovedAt,
|
||||||
|
Approver = _mapper.Map<BasicEmployeeVM>(attendance.Approver)
|
||||||
};
|
};
|
||||||
results.Add(result);
|
results.Add(result);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user