From c45627f575d3fbc3b8d375d1a9b512ff87452e3b Mon Sep 17 00:00:00 2001 From: harid Date: Thu, 2 Jul 2026 09:42:29 +0700 Subject: [PATCH 1/3] =?UTF-8?q?=E0=B9=80=E0=B8=9E=E0=B8=B4=E0=B9=88?= =?UTF-8?q?=E0=B8=A1=E0=B8=AA=E0=B9=88=E0=B8=87=E0=B8=9F=E0=B8=B4=E0=B8=A5?= =?UTF-8?q?=E0=B8=94=E0=B9=8C=E0=B8=A7=E0=B8=B1=E0=B8=99=E0=B8=AB=E0=B8=A1?= =?UTF-8?q?=E0=B8=81=E0=B8=AD=E0=B8=B2=E0=B8=A2=E0=B8=B8=E0=B8=9A=E0=B8=B1?= =?UTF-8?q?=E0=B8=8D=E0=B8=8A=E0=B8=B5=20=E0=B8=A3=E0=B8=AD=E0=B8=9A?= =?UTF-8?q?=E0=B8=84=E0=B8=B1=E0=B8=94=E0=B9=80=E0=B8=A5=E0=B8=B7=E0=B8=AD?= =?UTF-8?q?=E0=B8=81=E0=B8=AD=E0=B8=B7=E0=B9=88=E0=B8=99=E0=B9=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/DisableController.cs | 4 ++++ Request/Disables/PostDisableImportRequest.cs | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/Controllers/DisableController.cs b/Controllers/DisableController.cs index 164c0fe..481a3dc 100644 --- a/Controllers/DisableController.cs +++ b/Controllers/DisableController.cs @@ -487,6 +487,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers PaymentEndDate = req.PaymentEndDate, Note = req.Note, AnnouncementDate = req.AnnouncementDate, + ScoreExpireDate = req.ScoreExpireDate, CheckDisability = true, OrganizationId = req.rootDnaId, CreatedAt = DateTime.Now, @@ -570,6 +571,9 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers data.ExamDate = req.ExamDate; data.Note = req.Note; data.AnnouncementDate = req.AnnouncementDate; + // ScoreExpireDate อัปเดตเฉพาะเมื่อ FE ส่งค่ามาเท่านั้น (ไม่บังคับส่ง) + if (req.ScoreExpireDate.HasValue) + data.ScoreExpireDate = req.ScoreExpireDate; data.LastUpdatedAt = DateTime.Now; data.LastUpdateUserId = UserId ?? ""; data.LastUpdateFullName = FullName ?? "System Administrator"; diff --git a/Request/Disables/PostDisableImportRequest.cs b/Request/Disables/PostDisableImportRequest.cs index c62d148..b88dd73 100644 --- a/Request/Disables/PostDisableImportRequest.cs +++ b/Request/Disables/PostDisableImportRequest.cs @@ -83,6 +83,11 @@ namespace BMA.EHR.Recurit.Exam.Service.Request.Disables /// public DateTime AnnouncementDate { get; set; } + /// + /// วันหมดอายุบัญชี (ไม่บังคับส่ง) + /// + public DateTime? ScoreExpireDate { get; set; } + /// /// รหัส DNA หน่วยงาน /// From 9f0b6039c1e1e21492afb8b66f2202d459fd3841 Mon Sep 17 00:00:00 2001 From: harid Date: Thu, 2 Jul 2026 11:35:46 +0700 Subject: [PATCH 2/3] fix Error #1606 --- Controllers/DisableController.cs | 1 + Services/PeriodExamService.cs | 76 ++++++++++++++++---------------- 2 files changed, 38 insertions(+), 39 deletions(-) diff --git a/Controllers/DisableController.cs b/Controllers/DisableController.cs index 481a3dc..825ad07 100644 --- a/Controllers/DisableController.cs +++ b/Controllers/DisableController.cs @@ -382,6 +382,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers AnnouncementEndDate = x.AnnouncementEndDate, AnnouncementStartDate = x.AnnouncementStartDate, AnnouncementDate = x.AnnouncementDate, + ScoreExpireDate = x.ScoreExpireDate, CheckDisability = x.CheckDisability, CheckDocument = x.CheckDocument, Detail = x.Detail, diff --git a/Services/PeriodExamService.cs b/Services/PeriodExamService.cs index 7ed223e..d3a3ee6 100644 --- a/Services/PeriodExamService.cs +++ b/Services/PeriodExamService.cs @@ -1144,8 +1144,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Services for (int row = 4; row <= rowCount; row++) { System.Diagnostics.Debug.WriteLine(worksheet); - // if (worksheet.Cells[row, 2].Value != null) - // { + if (worksheet.Cells[row, 2].Value == null) continue; list.Add(new RequestImportSeat { Number = worksheet.Cells[row, 1].Value != null ? worksheet.Cells[row, 1].Value.ToString() : null, @@ -1153,58 +1152,57 @@ namespace BMA.EHR.Recurit.Exam.Service.Services CitizenId = worksheet.Cells[row, 3].Value != null ? worksheet.Cells[row, 3].Value.ToString() : null, SeatNumber = worksheet.Cells[row, 4].Value != null ? worksheet.Cells[row, 4].Value.ToString() : null, - PointPath1A = worksheet.Cells[row, 9].Value != null ? worksheet.Cells[row, 9].Value.ToString() : null, - PointPath2A = worksheet.Cells[row, 10].Value != null ? worksheet.Cells[row, 10].Value.ToString() : null, - PointPath3A = worksheet.Cells[row, 11].Value != null ? worksheet.Cells[row, 11].Value.ToString() : null, + PointPath1A = worksheet.Cells[row, 9].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 9].Value.ToString()) : null, + PointPath2A = worksheet.Cells[row, 10].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 10].Value.ToString()) : null, + PointPath3A = worksheet.Cells[row, 11].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 11].Value.ToString()) : null, PointTotalA = worksheet.Cells[3, 12].Value != null ? ExtractFirstNumber(worksheet.Cells[3, 12].Value.ToString()) : null, - PointA = worksheet.Cells[row, 12].Value != null ? worksheet.Cells[row, 12].Value.ToString() : null, - PointPerA = worksheet.Cells[row, 13].Value != null ? worksheet.Cells[row, 13].Value.ToString() : null, + PointA = worksheet.Cells[row, 12].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 12].Value.ToString()) : null, + PointPerA = worksheet.Cells[row, 13].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 13].Value.ToString()) : null, ResultA = worksheet.Cells[row, 14].Value != null ? worksheet.Cells[row, 14].Value.ToString() : null, PointTotalB = worksheet.Cells[3, 15].Value != null ? ExtractFirstNumber(worksheet.Cells[3, 15].Value.ToString()) : null, - PointB = worksheet.Cells[row, 15].Value != null ? worksheet.Cells[row, 15].Value.ToString() : null, - PointPerB = worksheet.Cells[row, 16].Value != null ? worksheet.Cells[row, 16].Value.ToString() : null, + PointB = worksheet.Cells[row, 15].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 15].Value.ToString()) : null, + PointPerB = worksheet.Cells[row, 16].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 16].Value.ToString()) : null, ResultB = worksheet.Cells[row, 17].Value != null ? worksheet.Cells[row, 17].Value.ToString() : null, - PointPath1C = worksheet.Cells[row, 18].Value != null ? worksheet.Cells[row, 18].Value.ToString() : null, - PointPath2C = worksheet.Cells[row, 19].Value != null ? worksheet.Cells[row, 19].Value.ToString() : null, + PointPath1C = worksheet.Cells[row, 18].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 18].Value.ToString()) : null, + PointPath2C = worksheet.Cells[row, 19].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 19].Value.ToString()) : null, PointTotalC = worksheet.Cells[3, 20].Value != null ? ExtractFirstNumber(worksheet.Cells[3, 20].Value.ToString()) : null, - PointC = worksheet.Cells[row, 20].Value != null ? worksheet.Cells[row, 20].Value.ToString() : null, - PointPerC = worksheet.Cells[row, 21].Value != null ? worksheet.Cells[row, 21].Value.ToString() : null, + PointC = worksheet.Cells[row, 20].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 20].Value.ToString()) : null, + PointPerC = worksheet.Cells[row, 21].Value != null ? ExtractFirstNumber(worksheet.Cells[row, 21].Value.ToString()) : null, ResultC = worksheet.Cells[row, 22].Value != null ? worksheet.Cells[row, 22].Value.ToString() : null, Pass = worksheet.Cells[row, 23].Value != null ? worksheet.Cells[row, 23].Value.ToString() : null, ExamReason = worksheet.Cells[row, 27].Value != null ? worksheet.Cells[row, 27].Value.ToString() : null, }); - if (!int.TryParse(worksheet.Cells[row, 9].Value != null ? worksheet.Cells[row, 9].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 10].Value != null ? worksheet.Cells[row, 10].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 11].Value != null ? worksheet.Cells[row, 11].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 9].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ I)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 10].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ J)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 11].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ K)"); if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[3, 12].Value?.ToString()) ?? "0", out _)) - throw new Exception("รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกเป็นตัวเลข (คอลัมน์ L)"); - if (!int.TryParse(worksheet.Cells[row, 12].Value != null ? worksheet.Cells[row, 12].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 13].Value != null ? worksheet.Cells[row, 13].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); + throw new Exception($"รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกตัวเลขนำหน้า เช่น '100 คะเนน' หรือ '100' หรือเว้นว่างไว้ (แถวที่ 3 คอลัมน์ L)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 12].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ L)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 13].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ M)"); if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[3, 15].Value?.ToString()) ?? "0", out _)) - throw new Exception("รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกเป็นตัวเลข (คอลัมน์ O)"); - if (!int.TryParse(worksheet.Cells[row, 15].Value != null ? worksheet.Cells[row, 15].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 16].Value != null ? worksheet.Cells[row, 16].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 18].Value != null ? worksheet.Cells[row, 18].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 19].Value != null ? worksheet.Cells[row, 19].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); + throw new Exception($"รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกตัวเลขนำหน้า เช่น '100 คะเนน' หรือ '100' หรือเว้นว่างไว้ (แถวที่ 3 คอลัมน์ O)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 15].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ O)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 16].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ P)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 18].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ R)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 19].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ S)"); if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[3, 20].Value?.ToString()) ?? "0", out _)) - throw new Exception("รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกเป็นตัวเลข (คอลัมน์ T)"); - if (!int.TryParse(worksheet.Cells[row, 20].Value != null ? worksheet.Cells[row, 20].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - if (!int.TryParse(worksheet.Cells[row, 21].Value != null ? worksheet.Cells[row, 21].Value.ToString() : "0", out _)) - throw new Exception("กรอกจำนวนคะแนนไม่ถูกต้อง"); - // } + throw new Exception($"รูปแบบคะแนนรวมไม่ถูกต้อง กรุณากรอกตัวเลขนำหน้า เช่น '100 คะเนน' หรือ '100' หรือเว้นว่างไว้ (แถวที่ 3 คอลัมน์ T)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 20].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ T)"); + if (!int.TryParse(ExtractFirstNumber(worksheet.Cells[row, 21].Value?.ToString()) ?? "0", out _)) + throw new Exception($"กรอกจำนวนคะแนนไม่ถูกต้อง (แถวที่ {row} คอลัมน์ U)"); } } } From eec8eef4d62fee3c6f902062f706949c9a8e8f77 Mon Sep 17 00:00:00 2001 From: harid Date: Thu, 2 Jul 2026 13:30:07 +0700 Subject: [PATCH 3/3] =?UTF-8?q?fix=20=E0=B8=88=E0=B8=B3=E0=B8=99=E0=B8=A7?= =?UTF-8?q?=E0=B8=99=E0=B8=9C=E0=B8=B9=E0=B9=89=E0=B8=97=E0=B8=B5=E0=B9=88?= =?UTF-8?q?=E0=B8=AA=E0=B8=AD=E0=B8=9A=E0=B8=9C=E0=B9=88=E0=B8=B2=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Controllers/DisableController.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Controllers/DisableController.cs b/Controllers/DisableController.cs index 825ad07..ebae0bb 100644 --- a/Controllers/DisableController.cs +++ b/Controllers/DisableController.cs @@ -709,8 +709,7 @@ namespace BMA.EHR.Recurit.Exam.Service.Controllers ImportYear = x.ScoreImport.Year, ImportDate = x.CreatedAt.Date.ToThaiShortDate(), ScoreCount = x.ScoreImport.Scores.Count(), - // ResultCount = x.ScoreImport.Scores.Count(x => !string.IsNullOrEmpty(x.Number)) - ResultCount = x.ScoreImport.Scores.Count(x => x.ExamStatus == "ผ่าน") + ResultCount = x.ScoreImport.Scores.Count(x => x.ExamStatus == "ผ่าน" && !string.IsNullOrEmpty(x.Number)) }, x.CreatedUserId, })