diff --git a/Controllers/PeriodExamController.cs b/Controllers/PeriodExamController.cs
index b52b0f6..84ea0d9 100644
--- a/Controllers/PeriodExamController.cs
+++ b/Controllers/PeriodExamController.cs
@@ -749,6 +749,56 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers
}
}
+ ///
+ /// ดาวน์โหลดรายชื่อผู้มีสิทธิ์สอบ
+ ///
+ /// รหัสรอบสมัคร
+ ///
+ /// เมื่อทำการอ่านโหลดผู้สมัครสอบสำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpGet("download/candidate-exam/{examId:length(36)}")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status401Unauthorized)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> DownloadCandidateExamAsync(string examId)
+ {
+ try
+ {
+ var data = await _periodExamService.DownloadCandidateExamAsync(examId);
+ return Success(data);
+ }
+ catch (Exception ex)
+ {
+ return Error(ex);
+ }
+ }
+
+ ///
+ /// ดาวน์โหลดรายชื่อผู้สอบคัดเลือกได้
+ ///
+ /// รหัสรอบสมัคร
+ ///
+ /// เมื่อทำการอ่านโหลดผู้สมัครสอบสำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpGet("download/pass-exam/{examId:length(36)}")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status401Unauthorized)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> DownloadPassExamAsync(string examId)
+ {
+ try
+ {
+ var data = await _periodExamService.DownloadPassExamAsync(examId);
+ return Success(data);
+ }
+ catch (Exception ex)
+ {
+ return Error(ex, "เกิดข้อผิดพลาดในการแสดงรายงาน");
+ }
+ }
+
///
/// โหลดผู้สมัครสอบ
///
diff --git a/Services/PeriodExamService.cs b/Services/PeriodExamService.cs
index aeefa24..c967bca 100644
--- a/Services/PeriodExamService.cs
+++ b/Services/PeriodExamService.cs
@@ -1625,6 +1625,101 @@ namespace BMA.EHR.Recurit.Exam.Service.Services
};
}
+ public async Task DownloadCandidateExamAsync(string examId)
+ {
+ var periodExam = await _context.PeriodExams.AsQueryable()
+ .Where(x => x.CheckDisability == false)
+ .FirstOrDefaultAsync(x => x.Id == Guid.Parse(examId));
+
+ if (periodExam == null)
+ throw new Exception(GlobalMessages.ExamNotFound);
+
+ var data = await _context.Candidates.AsQueryable()
+ .Include(x => x.PeriodExam)
+ .Where(x => x.PeriodExam == periodExam)
+ .Where(x => x.Status != "register")
+ .Where(x => x.ExamIdenNumber != null && x.ExamIdenNumber != "")
+ .OrderBy(x => x.ExamIdenNumber)
+ .Select(p => new
+ {
+ ExamId = p.ExamIdenNumber == null ? null : (p.ExamIdenNumber.ToThaiNumber()),
+ FullName = $"{p.PrefixName}{p.FirstName} {p.LastName}",
+ PositionName = "",
+ ExamName =
+ ($"{p.PeriodExam.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam.Year.Value.ToThaiYear()}").ToThaiNumber(),
+ }).ToListAsync();
+
+ if (data.Count == 0)
+ throw new Exception("ไม่พบข้อมูลในระบบ");
+
+ var examName = data[0].ExamName;
+ return new
+ {
+ template = "rptCandidateList",
+ reportName = $"รายชื่อผู้มีสิทธิ์สอบ_{data.First().ExamName}",
+ data = new
+ {
+ examName = examName,
+ data = data
+ }
+ };
+ }
+
+ public async Task DownloadPassExamAsync(string examId)
+ {
+ var periodExam = await _context.PeriodExams.AsQueryable()
+ .Where(x => x.CheckDisability == false)
+ .FirstOrDefaultAsync(x => x.Id == Guid.Parse(examId));
+
+ if (periodExam == null)
+ throw new Exception(GlobalMessages.ExamNotFound);
+
+ var candidates = await _context.Candidates.AsQueryable()
+ .Include(x => x.PeriodExam)
+ .ThenInclude(x => x.ScoreImport)
+ .Where(x => x.PeriodExam == periodExam)
+ .Where(x => x.Status != "register")
+ .ToListAsync();
+
+ var data = candidates.Select((p, idx) => new
+ {
+ SeatNumber = p.SeatNumber == null ? "-" : (p.SeatNumber.ToThaiNumber()),
+ CitizenId = p.CitizenId == null ? "-" : (p.CitizenId.ToThaiNumber()),
+ FullName = $"{p.PrefixName}{p.FirstName} {p.LastName}",
+ DateOfBirth = p.DateOfBirth == null ? "-" : (p.DateOfBirth.Value.ToThaiShortDate()),
+ ExamName = ($"{p.PeriodExam.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam.Year.Value.ToThaiYear()}").ToThaiNumber(),
+ Number = p.Number == null ? (idx + 1).ToString().ToThaiNumber() : p.Number.ToThaiNumber(),
+ FullA = "๐",
+ SumA = "๐",
+ FullB = p.PointTotalB == null ? "-" : p.PointTotalB.ToString(),
+ SumB = p.PointB == null ? "-" : p.PointB.ToString(),
+ FullC = p.PointTotalC == null ? "-" : p.PointTotalC.ToString(),
+ SumC = p.PointC == null ? "-" : p.PointC.ToString(),
+ SumScore = ((Convert.ToInt32(p.PointB ?? "0") + Convert.ToInt32(p.PointC ?? "0")).ToString()).ToThaiNumber(),
+ ExamResult = p.Pass,
+ ExamThaiId = p.ExamIdenNumber == null ? "-" : p.ExamIdenNumber.ToThaiNumber(),
+ ExamId = p.ExamIdenNumber,
+ })
+ .OrderBy(x => x.ExamId)
+ .Where(x => x.ExamResult?.Trim() == "ได้")
+ .ToList();
+
+ if (data.Count == 0)
+ throw new Exception("ไม่พบข้อมูลในระบบ");
+
+ var examName = data[0].ExamName;
+ return new
+ {
+ template = "rptPassExamList",
+ reportName = $"รายชื่อผู้สอบแข่งขันได้_{periodExam.Name} ครั้งที่ {periodExam.Round}/{periodExam.Year.Value.ToThaiYear()}",
+ data = new
+ {
+ examName = examName,
+ data = data
+ }
+ };
+ }
+
public async Task GetsPaymentExamAsync(string examId)
{
var periodExam = await _context.PeriodExams.AsQueryable()