using BMA.EHR.Domain.Common; using BMA.EHR.Domain.Models.MetaData; using BMA.EHR.MetaData.Service.Request; using BMA.EHR.MetaData.Service.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Swashbuckle.AspNetCore.Annotations; namespace BMA.EHR.MetaData.Service.Controllers { [Route("api/v{version:apiVersion}/metadata/holiday")] [ApiVersion("1.0")] [ApiController] [Produces("application/json")] [Authorize] [SwaggerTag("จัดการข้อมูลปฏิทินวันหยุด")] public class HolidayController : BaseController { #region " Fields " private readonly HolidayService _holidayService; #endregion #region " Constructor and Destructor " public HolidayController(HolidayService holidayService) { _holidayService = holidayService; } #endregion #region " Methods " /// /// อ่านข้อมูลจาก Relational Db โดยแสดงเฉพาะข้อมูลที่ Active เท่านั้น ตามปี /// /// ปี่ที่ต้องการ /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{year:int}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> GetsAsync(int year) { try { var items1 = await _holidayService.GetNormalAsync(year); var items2 = await _holidayService.Get6DayAsync(year); return Success(new { Normal = items1, SixDays = items2 }); } catch (Exception ex) { return Error(ex); } } /// /// อ่านข้อมูลจาก Relational Db โดยแสดงเฉพาะข้อมูลที่ Active เท่านั้น ตามเดือน /// /// ปี่ที่ต้องการ /// เดือนที่ต้องการ /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("{year:int}/{month:int}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> GetsAsyncByMonth(int year, int month) { try { var items1 = await _holidayService.GetNormalByMonthAsync(year, month); var items2 = await _holidayService.Get6DayByMonthAsync(year, month); return Success(new { Normal = items1, SixDays = items2 }); } catch (Exception ex) { return Error(ex); } } /// /// สร้างรายการวันหยุดใหม่แบบรายการเดียว /// /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CreateAsync(Holiday inserted) { try { // create normal await _holidayService.CreateAsync(inserted); // create 6days await _holidayService.Create6DayAsync(inserted); //save database await _holidayService.SaveDatabase(); return Success(inserted); } catch (Exception ex) { return Error(ex); } } /// /// สร้างรายการวันหยุดใหม่แบบหลายรายการ /// /// ช่วงวันที่ที่ต้องการเพิ่ม /// ประเภทวันหยุด ส่งค่ามาเป็น normal / 6day /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("range/add/{category}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CreateRangeAsync(List inserted, string category) { try { await _holidayService.CreateRangeAsync(inserted, category); return Success(inserted); } catch (Exception ex) { return Error(ex); } } /// /// แก้ไขรายการวันหยุด /// /// รหัส /// ข้อมูลที่ต้องการแก้ไข /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPut("{category}/{id:length(36)}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> UpdateAsync(string id, Holiday updated) { try { await _holidayService.UpdateAsync(Guid.Parse(id), updated); return Success(updated); } catch (Exception ex) { return Error(ex); } } /// /// แก้ไขรายการวันหยุด /// /// Group ข่อมูลที่แก้ไข /// ประเภทวันหยุด ส่งค่ามาเป็น normal / 6day /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("range/edit/{category}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> UpdateRangeAsync(HolidayUpdateRequest data, string category) { try { var isNormal = category.ToUpper() == "NORMAL"; await _holidayService.UpdateRangeAsync(data.history, data.updated, isNormal); return Success(data.updated); } catch (Exception ex) { return Error(ex); } } /// /// ลบรายการวันหยุด /// /// รหัส /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpDelete("{id:length(36)}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> DeleteAsync(string id) { try { await _holidayService.DeleteAsync(Guid.Parse(id)); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// ลบรายการวันหยุด /// /// ช่วงวันที่ที่ต้องการลบ /// ประเภทวันหยุด ส่งค่ามาเป็น normal / 6day /// /// ทำรายการสำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpPost("range/delete/{category}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> DeleteRangeAsync(List delete, string category) { try { var isNormal = category.ToUpper() == "NORMAL"; await _holidayService.DeleteRangeAsync(delete, isNormal); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// คัดลอกข้อมูลวันหยุด โดยระบุปีที่ต้องการคัดลอก และ ปีที่ต้องการบันทึก /// /// Request Body /// [HttpPost("copy")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> CopyAsync([FromBody] HolidayCopyRequest request) { try { await _holidayService.CopyAsync(request.FromYear, request.ToYear); return Success(); } catch (Exception ex) { return Error(ex); } } /// /// สรุปวันหยุดในแต่ละปี /// /// ปี่ที่ต้องการ /// /// เมื่อทำการอ่านข้อมูลจาก Relational Database สำเร็จ /// ไม่ได้ Login เข้าระบบ /// เมื่อเกิดข้อผิดพลาดในการทำงาน [HttpGet("summary/{year:int}")] [ProducesResponseType(StatusCodes.Status200OK)] [ProducesResponseType(StatusCodes.Status401Unauthorized)] [ProducesResponseType(StatusCodes.Status500InternalServerError)] public async Task> GetDataGroupMonthAsync(int year) { try { var items = await _holidayService.GetDataGroupMonthAsync(year); return Success(items); } catch (Exception ex) { return Error(ex); } } #endregion } }