diff --git a/Controllers/ExamReportController.cs b/Controllers/ExamReportController.cs
index aee878d..91fde03 100644
--- a/Controllers/ExamReportController.cs
+++ b/Controllers/ExamReportController.cs
@@ -666,7 +666,7 @@ namespace BMA.EHR.Report.Service.Controllers
}
///
- /// รายชื่อผู้มีสิทธิ์สอบ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือกอื่นๆ)
+ /// รายชื่อผู้มีสิทธิ์สอบ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือกผู้พิการ)
///
/// รหัสรอบการสอบ
///
@@ -796,7 +796,7 @@ namespace BMA.EHR.Report.Service.Controllers
}
///
- /// รายชื่อผู้สอบคัดเลือกได้ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือกอื่นๆ)
+ /// รายชื่อผู้สอบแข่งขันได้ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือกผู้พิการ)
///
/// รหัสรอบการสอบ
///
@@ -871,7 +871,7 @@ namespace BMA.EHR.Report.Service.Controllers
document.SetFont(font).SetFontSize(16);
document.SetMargins(30, 15, 20, 15);
- var title = new Paragraph($"รายชื่อผู้สอบคัดเลือกได้\n{examName}")
+ var title = new Paragraph($"รายชื่อผู้สอบแข่งขันได้\n{examName}")
.SetBold()
.SetMultipliedLeading(1.0f)
.SetTextAlignment(TextAlignment.CENTER);
@@ -924,282 +924,6 @@ namespace BMA.EHR.Report.Service.Controllers
}
}
- ///
- /// รายชื่อผู้มีสิทธิ์สอบ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือก)
- ///
- /// รหัสรอบการสอบ
- ///
- /// เมื่อแสดงรายงานสำเร็จ
- /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง
- /// ไม่ได้ Login เข้าระบบ
- /// เมื่อเกิดข้อผิดพลาดในการทำงาน
- [HttpGet("candidate/candidate-new/{id:length(36)}")]
- [AllowAnonymous]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status401Unauthorized)]
- [ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task> GetListCandidateNewReportAsync(Guid id)
- {
- try
- {
- var periodExam = await _context.PeriodExams.AsQueryable()
- .Where(x => x.CheckDisability == false)
- .FirstOrDefaultAsync(x => x.Id == id);
-
- if (periodExam == null)
- return Error("ไม่พบข้อมูลการรับสมัครสอบ");
-
- var data = await _context.Candidates.AsQueryable()
- .Include(x => x.PeriodExam)
- .ThenInclude(x => x.PositionExam)
- .Where(x => x.PeriodExam!.Id == periodExam.Id)
- .OrderBy(x => x.ExamIdenNumber)
- .ThenBy(x => x.PositionExam!.CreatedAt)
- .Select(p => new
- {
- FullName = $"{p.PrefixName ?? ""}{p.FirstName ?? ""} {p.LastName ?? ""}",
- PositionName = p.PositionExam!.PositionName,
- Remark = !string.IsNullOrEmpty(p.ExamReason) ? p.ExamReason.ToThaiNumber() : "",
- ExamId = !string.IsNullOrEmpty(p.ExamIdenNumber) ? p.ExamIdenNumber.ToThaiNumber() : "",
- ExamName =
- ($"{p.PeriodExam!.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam.Year.Value.ToThaiYear()}").ToThaiNumber(),
- }).ToListAsync();
-
- if (data.Count == 0)
- return Error("ไม่พบข้อมูลในระบบ");
-
- var examName = data.First().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(),
- ExamId = x.ExamId,
- FullName = x.FullName,
- Remark = x.Remark
- }).ToList()
- })
- .ToList();
-
- // เตรียม MemoryStream
- using (var stream = new MemoryStream())
- {
- // สร้าง PDF document
- using (var writer = new PdfWriter(stream))
- using (var pdf = new PdfDocument(writer))
- using (var document = new Document(pdf, iText.Kernel.Geom.PageSize.A4))
- {
- // กำหนดฟ้อนต์ TH-Sarabun
- var fontPath = System.IO.Path.Combine(Environment.CurrentDirectory, "Fonts", "THSarabun.ttf");
- var font = PdfFontFactory.CreateFont(fontPath, "Identity-H");
- document.SetFont(font).SetFontSize(16);
-
- // ตั้งค่าระยะขอบ top, right, bottom, left
- document.SetMargins(30, 15, 20, 15);
-
- // Title
- var title = new Paragraph($"รายชื่อผู้มีสิทธิ์สอบ\n{examName ?? ""}")
- .SetBold()
- .SetMultipliedLeading(1.0f)
- .SetTextAlignment(TextAlignment.CENTER);
-
- document.Add(title);
- float[] columnWidths = { 10f, 20f, 45f, 25f };
- // Loop Groups
- foreach (var group in groupData)
- {
- // Group Header (ตำแหน่ง)
- Paragraph positionHeader = new Paragraph($"{group.PositionName} {group.Total}")
- .SetBold()
- .SetMultipliedLeading(1.0f)
- .SetTextAlignment(TextAlignment.CENTER)
- .SetMarginBottom(5);
-
- document.Add(positionHeader);
-
- var table = new iText.Layout.Element.Table(UnitValue.CreatePercentArray(columnWidths)).UseAllAvailableWidth();
-
- // Table Header
- string[] headers = { "ลำดับที่", "เลขประจำตัวสอบ", "ชื่อ-สกุล", "หมายเหตุ" };
- foreach (var h in headers)
- {
- table.AddHeaderCell(new Cell()
- .Add(new Paragraph(h).SetMultipliedLeading(1.0f))
- .SetBold()
- .SetTextAlignment(TextAlignment.CENTER));
- }
-
- // Table Details
- foreach (var x in group.Persons)
- {
- table.AddCell(new Cell().Add(new Paragraph(x.No ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER));
-
- table.AddCell(new Cell().Add(new Paragraph(x.ExamId ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER));
-
- table.AddCell(new Cell().Add(new Paragraph(x.FullName ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.LEFT));
-
- table.AddCell(new Cell().Add(new Paragraph(x.Remark ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER));
- }
- document.Add(table);
- document.Add(new Paragraph("").SetMarginBottom(15));
- }
- }
- return File(stream.ToArray(), "application/pdf", $"รายชื่อผู้มีสิทธิ์สอบ_{examName}");
- }
- }
- catch (Exception ex)
- {
- return Error(ex);
- }
- }
-
- ///
- /// รายชื่อผู้สอบคัดเลือกได้ แสดงรายชื่อแบ่งตามตำแหน่ง (สอบคัดเลือก)
- ///
- /// รหัสรอบการสอบ
- ///
- /// เมื่อแสดงรายงานสำเร็จ
- /// ค่าตัวแปรที่ส่งมาไม่ถูกต้อง
- /// ไม่ได้ Login เข้าระบบ
- /// เมื่อเกิดข้อผิดพลาดในการทำงาน
- [HttpGet("candidate/pass-new/{id:length(36)}")]
- [AllowAnonymous]
- [ProducesResponseType(StatusCodes.Status200OK)]
- [ProducesResponseType(StatusCodes.Status400BadRequest)]
- [ProducesResponseType(StatusCodes.Status401Unauthorized)]
- [ProducesResponseType(StatusCodes.Status500InternalServerError)]
- public async Task> GetCandidatePassExamListNewReportAsync(Guid id)
- {
- try
- {
- var periodExam = await _context.PeriodExams.AsQueryable()
- .Where(x => x.CheckDisability == false)
- .FirstOrDefaultAsync(x => x.Id == id);
-
- if (periodExam == null)
- return Error("ไม่พบข้อมูลการรับสมัครสอบ");
-
- var candidates = await _context.Candidates.AsQueryable()
- .Include(x => x.PeriodExam)
- .ThenInclude(x => x.PositionExam)
- .Where(x => x.PeriodExam!.Id == periodExam.Id)
- .Where(x => x.Status != "register")
- .OrderBy(x => x.PositionExam!.CreatedAt)
- .ToListAsync();
-
- var data = candidates.Select((p, idx) => new
- {
- PositionName = p.PositionExam!.PositionName,
- FullName = $"{p.PrefixName ?? ""}{p.FirstName ?? ""} {p.LastName ?? ""}".Trim(),
- ExamResult = p.Pass,
- ExamName = $"{p.PeriodExam!.Name} ครั้งที่ {p.PeriodExam.Round}/{p.PeriodExam!.Year.Value.ToThaiYear()}".ToThaiNumber(),
- Number = string.IsNullOrEmpty(p.Number) ? (idx + 1) : Convert.ToInt32(p.Number),
- SumScore = (Convert.ToInt32(p.PointB ?? "0") + Convert.ToInt32(p.PointC ?? "0")) .ToString().ToThaiNumber(),
- SeatNumber = string.IsNullOrEmpty(p.SeatNumber) ? "" : p.SeatNumber.ToThaiNumber(),
- })
- .OrderBy(x => x.Number)
- .Where(x => x.ExamResult?.Trim() == "ได้")
- .ToList();
-
- if (data.Count == 0)
- return Error("ไม่พบข้อมูลในระบบ");
-
- var examName = data.First().ExamName;
-
- // Group by PositionName
- var groupData = data
- .GroupBy(g => g.PositionName)
- .Select(g => new
- {
- PositionName = $"ตำแหน่ง {g.Key}",
- Total = $"จำนวน {g.Count().ToString().ToThaiNumber()} ราย",
- Persons = g.Select((x) => new
- {
- Number = x.Number > 0 ? x.Number.ToString().ToThaiNumber() : "",
- FullName = x.FullName,
- SumScore = x.SumScore,
- SeatNumber = x.SeatNumber
- }).ToList()
- })
- .ToList();
-
- using (var stream = new MemoryStream())
- {
- using (var writer = new PdfWriter(stream))
- using (var pdf = new PdfDocument(writer))
- using (var document = new Document(pdf, iText.Kernel.Geom.PageSize.A4))
- {
- var fontPath = System.IO.Path.Combine(Environment.CurrentDirectory, "Fonts", "THSarabun.ttf");
- var font = PdfFontFactory.CreateFont(fontPath, "Identity-H");
-
- document.SetFont(font).SetFontSize(16);
- document.SetMargins(30, 15, 20, 15);
-
- var title = new Paragraph($"รายชื่อผู้สอบคัดเลือกได้\n{examName}")
- .SetBold()
- .SetMultipliedLeading(1.0f)
- .SetTextAlignment(TextAlignment.CENTER);
-
- document.Add(title);
- // float[] columnWidths = { 10f, 20f, 45f, 25f };
- float[] columnWidths = { 10f, 25f, 25f, 25f };
- foreach (var g in groupData)
- {
- // Header per group
- Paragraph positionHeader = new Paragraph($"{g.PositionName} {g.Total}")
- .SetBold()
- .SetMultipliedLeading(1.0f)
- .SetTextAlignment(TextAlignment.CENTER)
- .SetMarginBottom(5);
-
-
- document.Add(positionHeader);
-
- var table = new iText.Layout.Element.Table(UnitValue.CreatePercentArray(columnWidths)).UseAllAvailableWidth();
-
- string[] headers = { "ลำดับที่", "สนามสอบ", "ชื่อ - นามสกุล", "คะแนนสอบ" };
- foreach (var h in headers)
- {
- table.AddHeaderCell(new Cell().Add(new Paragraph(h).SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER)
- .SetBold());
- }
-
- foreach (var p in g.Persons) //SeatNumber
- {
- table.AddCell(new Cell().Add(new Paragraph(p.Number ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER));
- table.AddCell(new Cell().Add(new Paragraph(p.SeatNumber).SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.LEFT));
- table.AddCell(new Cell().Add(new Paragraph(p.FullName ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.LEFT));
- table.AddCell(new Cell().Add(new Paragraph(p.SumScore ?? "").SetMultipliedLeading(1.0f))
- .SetTextAlignment(TextAlignment.CENTER));
- }
-
- document.Add(table);
- document.Add(new Paragraph("").SetMarginBottom(15));
- }
- }
- return File(stream.ToArray(), "application/pdf", $"รายชื่อผู้สอบแข่งขันได้_{examName}");
- }
- }
- catch (Exception ex)
- {
- return Error(ex, "เกิดข้อผิดพลาดในการแสดงรายงาน");
- }
- }
-
#endregion
}
}