Skip to content
Snippets Groups Projects
Commit 96baae9c authored by Enzo Santangelo Dodera's avatar Enzo Santangelo Dodera
Browse files

Merge branch 'feature/report' into 'develop'

add course attendance report

See merge request !33
parents 8a722798 248984be
No related branches found
No related tags found
1 merge request!33add course attendance report
Pipeline #10476 passed
...@@ -161,5 +161,21 @@ namespace Tsi1.Api.Controllers ...@@ -161,5 +161,21 @@ namespace Tsi1.Api.Controllers
return Ok(result.Data); return Ok(result.Data);
} }
[Authorize(Roles = UserTypes.FacultyAdmin + ", " + UserTypes.Professor)]
[HttpGet("CourseAttendance/{courseId}")]
public async Task<IActionResult> CourseAttendance(int courseId)
{
var tenantId = int.Parse(HttpContext.User.Claims.FirstOrDefault(x => x.Type == "TenantId").Value);
var result = await _tenantService.CourseAttendance(tenantId, courseId);
if (result.HasError)
{
return BadRequest(result.Message);
}
return Ok(result.Data);
}
} }
} }
...@@ -10,6 +10,8 @@ namespace Tsi1.BusinessLayer.Dtos ...@@ -10,6 +10,8 @@ namespace Tsi1.BusinessLayer.Dtos
public string Name { get; set; } public string Name { get; set; }
public int ActivityQuantity { get; set; }
public List<UserAttendanceDto> Users { get; set; } public List<UserAttendanceDto> Users { get; set; }
} }
} }
...@@ -29,5 +29,6 @@ namespace Tsi1.BusinessLayer.Interfaces ...@@ -29,5 +29,6 @@ namespace Tsi1.BusinessLayer.Interfaces
Task<ServiceResult<List<RegistrationDto>>> CourseStudentQuantity(int tenantId); Task<ServiceResult<List<RegistrationDto>>> CourseStudentQuantity(int tenantId);
Task<ServiceResult<List<CourseAttendanceDto>>> CourseAttendance(int tenantId); Task<ServiceResult<List<CourseAttendanceDto>>> CourseAttendance(int tenantId);
Task<ServiceResult<CourseAttendanceDto>> CourseAttendance(int tenantId, int courseId);
} }
} }
...@@ -261,7 +261,7 @@ namespace Tsi1.BusinessLayer.Services ...@@ -261,7 +261,7 @@ namespace Tsi1.BusinessLayer.Services
var attendances = await _context.Attendances var attendances = await _context.Attendances
.AsNoTracking() .AsNoTracking()
.Include(x => x.Activity) .Include(x => x.Activity)
.Where(x => x.User.TenantId == tenantId) .Where(x => x.User.TenantId == tenantId && x.Activity.IsVideoConference)
.ToListAsync(); .ToListAsync();
var courseAttendanceDtos = new List<CourseAttendanceDto>(); var courseAttendanceDtos = new List<CourseAttendanceDto>();
...@@ -271,6 +271,11 @@ namespace Tsi1.BusinessLayer.Services ...@@ -271,6 +271,11 @@ namespace Tsi1.BusinessLayer.Services
{ {
Id = course.Id, Id = course.Id,
Name = course.Name, Name = course.Name,
ActivityQuantity = attendances
.Where(x => x.Activity.CourseId == course.Id)
.Select(x => x.ActivityId)
.Distinct()
.Count(),
Users = new List<UserAttendanceDto>(), Users = new List<UserAttendanceDto>(),
}; };
...@@ -302,5 +307,63 @@ namespace Tsi1.BusinessLayer.Services ...@@ -302,5 +307,63 @@ namespace Tsi1.BusinessLayer.Services
result.Data = courseAttendanceDtos; result.Data = courseAttendanceDtos;
return result; return result;
} }
public async Task<ServiceResult<CourseAttendanceDto>> CourseAttendance(int tenantId, int courseId)
{
var result = new ServiceResult<CourseAttendanceDto>();
var tenant = await _context.Tenants.FirstOrDefaultAsync(x => x.Id == tenantId && x.Name != TenantAdmin.Name);
if (tenant == null)
{
result.HasError = true;
result.AddMessage(string.Format(ErrorMessages.TenantDoesNotExist, tenantId));
return result;
}
var course = await _context.Courses
.AsNoTracking()
.Include(x => x.StudentCourses)
.FirstOrDefaultAsync(x => x.Id == courseId);
var studentIds = course.StudentCourses.Select(x => x.StudentId).ToList();
var users = await _context.Users
.AsNoTracking()
.Where(x => x.TenantId == tenantId && studentIds.Contains((int)x.StudentId))
.ToListAsync();
var attendances = await _context.Attendances
.AsNoTracking()
.Include(x => x.Activity)
.Where(x => x.Activity.CourseId == courseId && x.Activity.IsVideoConference)
.ToListAsync();
var courseAttendanceDto = new CourseAttendanceDto
{
Id = course.Id,
Name = course.Name,
ActivityQuantity = attendances.Select(x => x.ActivityId).Distinct().Count(),
Users = new List<UserAttendanceDto>(),
};
foreach (var user in users)
{
var attendanceQuantity = attendances.Where(x => x.UserId == user.Id).Count();
var userAttendanceDto = new UserAttendanceDto
{
Email = user.Email,
FirstName = user.FirstName,
LastName = user.LastName,
Quantity = attendanceQuantity
};
courseAttendanceDto.Users.Add(userAttendanceDto);
}
result.Data = courseAttendanceDto;
return result;
}
} }
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment