diff --git a/Controllers/RecruitController.cs b/Controllers/RecruitController.cs index 7b44a0e..ca9ed1d 100644 --- a/Controllers/RecruitController.cs +++ b/Controllers/RecruitController.cs @@ -2261,31 +2261,6 @@ namespace BMA.EHR.Recruit.Service.Controllers .ToList(); - - //var periods = _context.RecruitImports.AsQueryable() - // .Where(x => x.Year == this_year) - // .Include(x => x.RecruitImages) - // .Select(r => new - // { - // id = r.Id, - // title = $"{r.Name} ครั้งที่ {r.Order}/{r.Year.ToThaiYear()}", - // category = "สำนักงาน ก.ก.", - // category_id = 1, - // announcement_startDate = r.AnnouncementStartDate == null ? "" : r.AnnouncementStartDate.Value.ToString("yyyy-mm-dd"), - // announcement_endDate = r.AnnouncementEndDate == null ? "" : r.AnnouncementEndDate.Value.ToString("yyyy-MM-dd"), - // announcementExam = true, - // register_startDate = r.RegisterStartDate == null ? "" : r.RegisterStartDate.Value.ToString("yyyy-MM-dd"), - // register_endDate = r.RegisterEndDate == null ? "" : r.RegisterEndDate.Value.ToString("yyyy-MM-dd"), - // payment_startDate = r.PaymentStartDate == null ? "" : r.PaymentStartDate.Value.ToString("yyyy-MM-dd"), - // payment_endDate = r.PaymentEndDate == null ? "" : r.PaymentEndDate.Value.ToString("yyyy-MM-dd"), - // exam_date = r.ExamDate == null ? "" : r.ExamDate.Value.ToString("yyyy-MM-dd"), - // image = r.RecruitImages.OrderBy(o => o.CreatedAt).FirstOrDefault() == null ? "" : - // r.RecruitImages.OrderBy(o => o.CreatedAt).FirstOrDefault().Document.Id.ToString("D") - // }) - // .OrderByDescending(x => x.announcement_startDate) - // .ToList(); - - if (limit > 0) periods = periods.Take(limit).ToList(); @@ -2319,6 +2294,95 @@ namespace BMA.EHR.Recruit.Service.Controllers } } + /// + /// ดึงรายการรอบการสอบแข่งขันสำหรับ CMS (POST version) + /// + /// ข้อมูลการกรองตามช่วงวันที่ + /// รายการรอบการสอบแข่งขัน + /// เมื่อดึงข้อมูลสำเร็จ + /// ข้อมูลที่ส่งมาไม่ถูกต้อง + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPost("competitive")] + [AllowAnonymous] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status400BadRequest)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public IActionResult GetPeriodForCMSPost([FromBody] CompetitivePeriodRequest request) + { + try + { + if (request == null) + return BadRequest("Request body is required"); + + var query = _context.RecruitImports.AsQueryable(); + + // กรองตามช่วงวันที่ (ถ้ามีการส่งมา) + if (request.StartDate.HasValue && request.EndDate.HasValue) + { + var startDate = request.StartDate.Value.Date; + var endDate = request.EndDate.Value.Date.AddDays(1).AddTicks(-1); // ถึงสิ้นวัน + + query = query.Where(r => + (r.AnnouncementStartDate != null && r.AnnouncementStartDate.Value >= startDate && r.AnnouncementStartDate.Value <= endDate) || + (r.AnnouncementEndDate != null && r.AnnouncementEndDate.Value >= startDate && r.AnnouncementEndDate.Value <= endDate) || + (r.AnnouncementStartDate != null && r.AnnouncementEndDate != null && + r.AnnouncementStartDate.Value <= endDate && r.AnnouncementEndDate.Value >= startDate) + ); + } + + var periods = (from r in query.Include(x => x.RecruitImages) + orderby r.AnnouncementStartDate descending + select new + { + id = r.Id, + title = $"{r.Name} ครั้งที่ {r.Order}/{r.Year.ToThaiYear()}", + category = "สำนักงาน ก.ก.", + category_id = 1, + announcement_startDate = r.AnnouncementStartDate == null ? "" : r.AnnouncementStartDate.Value.ToString("yyyy-MM-dd"), + announcement_endDate = r.AnnouncementEndDate == null ? "" : r.AnnouncementEndDate.Value.ToString("yyyy-MM-dd"), + announcementExam = true, + register_startDate = r.RegisterStartDate == null ? "" : r.RegisterStartDate.Value.ToString("yyyy-MM-dd"), + register_endDate = r.RegisterEndDate == null ? "" : r.RegisterEndDate.Value.ToString("yyyy-MM-dd"), + payment_startDate = r.PaymentStartDate == null ? "" : r.PaymentStartDate.Value.ToString("yyyy-MM-dd"), + payment_endDate = r.PaymentEndDate == null ? "" : r.PaymentEndDate.Value.ToString("yyyy-MM-dd"), + exam_date = r.ExamDate == null ? "" : r.ExamDate.Value.ToString("yyyy-MM-dd"), + image = r.RecruitImages.OrderBy(o => o.CreatedAt).FirstOrDefault() == null ? "" : + r.RecruitImages.OrderBy(o => o.CreatedAt).FirstOrDefault().Document.Id.ToString("D") + }) + .ToList(); + + if (request.Limit > 0) + periods = periods.Take(request.Limit).ToList(); + + var result = new List(); + foreach (var p in periods) + { + result.Add(new + { + p.id, + p.title, + p.category, + p.category_id, + p.announcementExam, + p.announcement_startDate, + p.announcement_endDate, + p.register_endDate, + p.register_startDate, + p.payment_startDate, + p.payment_endDate, + p.exam_date, + image = p.image == "" ? "" : _minioService.GetFilePath(Guid.Parse(p.image)).Result, + }); + } + + return Ok(result); + } + catch (Exception ex) + { + return StatusCode(500, ex.Message); + } + } + [HttpGet("competitive/{id:length(36)}")] [AllowAnonymous] public IActionResult GetPeriodForCMSById(Guid id) diff --git a/Requests/Recruits/CompetitivePeriodRequest.cs b/Requests/Recruits/CompetitivePeriodRequest.cs new file mode 100644 index 0000000..5426b45 --- /dev/null +++ b/Requests/Recruits/CompetitivePeriodRequest.cs @@ -0,0 +1,23 @@ +using System.ComponentModel.DataAnnotations; + +namespace BMA.EHR.Recruit.Service.Requests.Recruits +{ + public class CompetitivePeriodRequest + { + /// + /// วันที่เริ่มต้นของช่วงที่ต้องการกรอง + /// + public DateTime? StartDate { get; set; } + + /// + /// วันที่สิ้นสุดของช่วงที่ต้องการกรอง + /// + public DateTime? EndDate { get; set; } + + /// + /// จำนวนรายการสูงสุดที่ต้องการ (0 = ไม่จำกัด) + /// + [Range(0, int.MaxValue, ErrorMessage = "Limit ต้องมากกว่าหรือเท่ากับ 0")] + public int Limit { get; set; } = 0; + } +} \ No newline at end of file