[MA] สรรหาสอบแข่งขัน ไฟล์รายชื่อต้องแบ่งตามตำแหน่ง #1530

This commit is contained in:
Bright 2025-05-29 10:47:49 +07:00
parent d0d315d0f3
commit 2195624d6f

View file

@ -306,6 +306,79 @@ namespace BMA.EHR.Report.Service.Controllers
}
}
/// <summary>
/// แสดงรายชื่อแบ่งตามตำแหน่ง (สอบแข่งขัน)
/// </summary>
/// <param name="id">รหัสรอบการสอบ</param>
/// <returns></returns>
/// <response code="200">เมื่อแสดงรายงานสำเร็จ</response>
/// <response code="400">ค่าตัวแปรที่ส่งมาไม่ถูกต้อง</response>
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
[HttpGet("candidate-new/{id:length(36)}")]
[AllowAnonymous]
public async Task<ActionResult<ResponseObject>> GetCandidateNewListReportAsync(Guid id)
{
try
{
var data = await _context.Recruits.AsQueryable()
.Include(x => x.RecruitImport)
.Include(x => x.Payments)
.Include(x => x.Documents)
.ThenInclude(x => x.DocumentFile)
.Where(x => x.RecruitImport.Id == id)
.OrderBy(x => x.ExamId)
.Select(p => new
{
FullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
PositionName = p.PositionName,
Remark = p.Remark != null ? p.Remark.ToThaiNumber() : "",
RefNo1 = p.Payments.Select(x => x.RefNo1).FirstOrDefault() != null
? p.Payments.Select(x => x.RefNo1).FirstOrDefault().ToThaiNumber()
: "",
ExamName =
$"ครั้งที่ {p.RecruitImport.Order.ToString().ToThaiNumber()}/{p.RecruitImport.Year.ToThaiYear().ToString().ToThaiNumber()}",
}).ToListAsync();
if (data.Count == 0) return Error("ไม่พบข้อมูลในระบบ");
var examName = data[0].ExamName;
var groupData = data
.GroupBy(x => x.PositionName)
.Select(g => new
{
PositionName = $"ตำแหน่ง {g.Key}",
Total = $"จำนวน {g.Count().ToString().ToThaiNumber()} ราย",
Persons = g.Select((x, index) => new
{
No = (index + 1).ToString().ToThaiNumber(),
RefNo1 = x.RefNo1,
FullName = x.FullName,
Remark = x.Remark
}).ToList()
})
.ToList();
var _data = new
{
template = "rptCandidateList-New",
reportName = $"รายชื่อแบ่งตามตำแหน่ง(สอบแข่งขัน)",
data = new
{
examName = examName,
data = groupData
}
};
return Success(_data);
}
catch (Exception ex)
{
return Error(ex);
}
}
[HttpGet("pass/{id:length(36)}")]
[AllowAnonymous]
[ProducesResponseType(StatusCodes.Status200OK)]