From b96f49bd54f947a6a85362ed00fc11aa8c8c78c7 Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 7 Mar 2025 22:42:58 +0700 Subject: [PATCH 1/3] =?UTF-8?q?=E0=B9=81=E0=B8=81=E0=B9=89=E0=B8=A3?= =?UTF-8?q?=E0=B8=B2=E0=B8=A2=E0=B8=87=E0=B8=B2=E0=B8=99=E0=B8=A5=E0=B8=B2?= =?UTF-8?q?=E0=B8=87=E0=B8=87=E0=B8=B2=E0=B8=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Extensions/DateTimeExtension.cs | 16 ++++++ .../Controllers/LeaveReportController.cs | 54 ++++++++++++++----- 2 files changed, 56 insertions(+), 14 deletions(-) diff --git a/BMA.EHR.Domain/Extensions/DateTimeExtension.cs b/BMA.EHR.Domain/Extensions/DateTimeExtension.cs index 18f03079..27ebc5a8 100644 --- a/BMA.EHR.Domain/Extensions/DateTimeExtension.cs +++ b/BMA.EHR.Domain/Extensions/DateTimeExtension.cs @@ -408,6 +408,22 @@ namespace BMA.EHR.Domain.Extensions public int days { get; set; } } + // แปลงจาก DayOfWeek เป็นภาษาไทย + public static string GetThaiDayOfWeek(this DateTime date) + { + return date.DayOfWeek switch + { + DayOfWeek.Sunday => "อาทิตย์", + DayOfWeek.Monday => "จันทร์", + DayOfWeek.Tuesday => "อังคาร", + DayOfWeek.Wednesday => "พุธ", + DayOfWeek.Thursday => "พฤหัสบดี", + DayOfWeek.Friday => "ศุกร์", + DayOfWeek.Saturday => "เสาร์", + _ => "ไม่ทราบ" + }; + } + #endregion #endregion diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 0fa71312..33198b05 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -71,6 +71,12 @@ namespace BMA.EHR.Leave.Service.Controllers _httpContextAccessor = httpContextAccessor; _permission = permission; } + private class LoopDate + { + public DateTime date { get; set; } + + public bool isHoliday { get; set; } + } #endregion @@ -1150,12 +1156,25 @@ namespace BMA.EHR.Leave.Service.Controllers var weekend = _holidayRepository.GetWeekEnd(req.StartDate.Date, req.EndDate.Date); var excludeDates = holidays.Union(weekend).ToList(); - var dateList = new List(); - + var dateList = new List(); for (DateTime i = req.StartDate.Date; i <= req.EndDate.Date; i = i.AddDays(1)) { - // if (!excludeDates.Contains(i)) - dateList.Add(i); + if (!excludeDates.Contains(i)) + { + dateList.Add(new LoopDate + { + date = i, + isHoliday = true, + }); + } + else + { + dateList.Add(new LoopDate + { + date = i, + isHoliday = true, + }); + } } var employees = new List(); @@ -1174,7 +1193,7 @@ namespace BMA.EHR.Leave.Service.Controllers { var keycloakUserId = p.Keycloak ?? Guid.Empty; - var timeStamps = await _processUserTimeStampRepository.GetTimestampByDateAsync(keycloakUserId, dd); + var timeStamps = await _processUserTimeStampRepository.GetTimestampByDateAsync(keycloakUserId, dd.date); var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}"; // _userProfileRepository.GetUserFullName(keycloakUserId, AccessToken); @@ -1191,7 +1210,7 @@ namespace BMA.EHR.Leave.Service.Controllers var duty = userRound ?? defaultRound; // check วันลาของแต่ละคน - var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(keycloakUserId, dd); + var leaveReq = await _leaveRequestRepository.GetLeavePeriodAsync(keycloakUserId, dd.date); var remarkStr = string.Empty; if (leaveReq != null) @@ -1217,8 +1236,14 @@ namespace BMA.EHR.Leave.Service.Controllers { if (timeStamps == null) { - if (dd <= DateTime.Now.Date) + if (dd.date <= DateTime.Now.Date) + { remarkStr = "ขาดราชการ"; + if (dd.isHoliday == true) + { + remarkStr = "วันหยุด"; + } + } else remarkStr = ""; } else @@ -1266,10 +1291,11 @@ namespace BMA.EHR.Leave.Service.Controllers $"{timeStamps.CheckOut.Value.ToString("HH:mm")} น." : "", remark = remarkStr, - checkInDate = timeStamps == null ? dd.Date.ToThaiFullDate2().ToThaiNumber() : timeStamps.CheckIn.Date.ToThaiFullDate2().ToThaiNumber(), - checkedOutDate = timeStamps == null ? dd.Date.ToThaiFullDate2().ToThaiNumber() : + date = timeStamps == null ? dd.date.Date : timeStamps.CheckIn.Date, + checkInDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() : timeStamps.CheckIn.Date.ToThaiFullDate2(), + checkedOutDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() : timeStamps.CheckOut != null ? - timeStamps.CheckOut.Value.ToThaiFullDate2().ToThaiNumber() : + timeStamps.CheckOut.Value.ToThaiFullDate2() : "", }; @@ -1307,10 +1333,10 @@ namespace BMA.EHR.Leave.Service.Controllers } } - var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}"; + var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate()}"; var item = new { - dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}", + dateTimeStamp = $"ณ วัน{req.StartDate.Date.GetThaiDayOfWeek()} ที่ {req.StartDate.Date.ToThaiShortDate()}{enddate}", organizationName = profile?.FirstOrDefault()?.Oc ?? "", officerTotal = profile.Count, workTotal = workTotal, @@ -1320,9 +1346,9 @@ namespace BMA.EHR.Leave.Service.Controllers wfhTotal = wfhTotal, seminarTotal = seminarTotal, studyTotal = studyTotal, - employees = employees + employees = employees.OrderBy(x => x.date).ToList() }; - + //วันที่ออก var result = new { template = "TimeStamp", From 3b95c4d2d1ae75185765eee92b2f66f3594ba92d Mon Sep 17 00:00:00 2001 From: kittapath Date: Fri, 7 Mar 2025 23:30:43 +0700 Subject: [PATCH 2/3] report leave sort --- .github/workflows/release_leave.yaml | 72 +++++++++---------- .../Controllers/LeaveReportController.cs | 34 +++++++-- 2 files changed, 64 insertions(+), 42 deletions(-) diff --git a/.github/workflows/release_leave.yaml b/.github/workflows/release_leave.yaml index b017222d..a354557f 100644 --- a/.github/workflows/release_leave.yaml +++ b/.github/workflows/release_leave.yaml @@ -68,40 +68,40 @@ jobs: docker compose pull docker compose up -d echo "${{ steps.gen_ver.outputs.image_ver }}"> success - - name: Notify Discord Success - if: success() - run: | - curl -H "Content-Type: application/json" \ - -X POST \ - -d '{ - "embeds": [{ - "title": "✅ Deployment Success!", - "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", - "color": 3066993, - "footer": { - "text": "Release Notification", - "icon_url": "https://example.com/success-icon.png" - }, - "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - }] - }' \ - ${{ secrets.DISCORD_WEBHOOK }} + # - name: Notify Discord Success + # if: success() + # run: | + # curl -H "Content-Type: application/json" \ + # -X POST \ + # -d '{ + # "embeds": [{ + # "title": "✅ Deployment Success!", + # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", + # "color": 3066993, + # "footer": { + # "text": "Release Notification", + # "icon_url": "https://example.com/success-icon.png" + # }, + # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + # }] + # }' \ + # ${{ secrets.DISCORD_WEBHOOK }} - - name: Notify Discord Failure - if: failure() - run: | - curl -H "Content-Type: application/json" \ - -X POST \ - -d '{ - "embeds": [{ - "title": "❌ Deployment Failed!", - "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", - "color": 15158332, - "footer": { - "text": "Release Notification", - "icon_url": "https://example.com/failure-icon.png" - }, - "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - }] - }' \ - ${{ secrets.DISCORD_WEBHOOK }} + # - name: Notify Discord Failure + # if: failure() + # run: | + # curl -H "Content-Type: application/json" \ + # -X POST \ + # -d '{ + # "embeds": [{ + # "title": "❌ Deployment Failed!", + # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", + # "color": 15158332, + # "footer": { + # "text": "Release Notification", + # "icon_url": "https://example.com/failure-icon.png" + # }, + # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + # }] + # }' \ + # ${{ secrets.DISCORD_WEBHOOK }} diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs index 33198b05..509917c9 100644 --- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs +++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs @@ -77,6 +77,22 @@ namespace BMA.EHR.Leave.Service.Controllers public bool isHoliday { get; set; } } + private class DateResultReport + { + public int no { get; set; } + + public string fullName { get; set; } + public string dutyTimeName { get; set; } + public string checkInLocation { get; set; } + public string checkInTime { get; set; } + public string checkOutLocation { get; set; } + public string checkOutTime { get; set; } + public string remark { get; set; } + public string checkInDate { get; set; } + public string checkedOutDate { get; set; } + public DateTime? checkInTimeRaw { get; set; } + public DateTime? checkOutTimeRaw { get; set; } + } #endregion @@ -1159,7 +1175,7 @@ namespace BMA.EHR.Leave.Service.Controllers var dateList = new List(); for (DateTime i = req.StartDate.Date; i <= req.EndDate.Date; i = i.AddDays(1)) { - if (!excludeDates.Contains(i)) + if (excludeDates.Contains(i)) { dateList.Add(new LoopDate { @@ -1172,12 +1188,12 @@ namespace BMA.EHR.Leave.Service.Controllers dateList.Add(new LoopDate { date = i, - isHoliday = true, + isHoliday = false, }); } } - var employees = new List(); + var employees = new List(); var count = 1; var restTotal = 0; @@ -1278,7 +1294,7 @@ namespace BMA.EHR.Leave.Service.Controllers } } - var emp = new + var emp = new DateResultReport { no = count, fullName = fullName, @@ -1291,12 +1307,13 @@ namespace BMA.EHR.Leave.Service.Controllers $"{timeStamps.CheckOut.Value.ToString("HH:mm")} น." : "", remark = remarkStr, - date = timeStamps == null ? dd.date.Date : timeStamps.CheckIn.Date, checkInDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() : timeStamps.CheckIn.Date.ToThaiFullDate2(), checkedOutDate = timeStamps == null ? dd.date.Date.ToThaiFullDate2() : timeStamps.CheckOut != null ? timeStamps.CheckOut.Value.ToThaiFullDate2() : "", + checkInTimeRaw = timeStamps?.CheckIn, + checkOutTimeRaw = timeStamps?.CheckOut, }; if (timeStamps != null) @@ -1332,6 +1349,11 @@ namespace BMA.EHR.Leave.Service.Controllers count++; } } + employees = employees.OrderBy(x => x.checkInTimeRaw ?? DateTime.MaxValue).ThenBy(x => x.checkOutTimeRaw ?? DateTime.MaxValue).ToList(); + for (int i = 0; i < employees.Count; i++) + { + employees[i].no = i + 1; + } var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate()}"; var item = new @@ -1346,7 +1368,7 @@ namespace BMA.EHR.Leave.Service.Controllers wfhTotal = wfhTotal, seminarTotal = seminarTotal, studyTotal = studyTotal, - employees = employees.OrderBy(x => x.date).ToList() + employees = employees }; //วันที่ออก var result = new From 8980c4a2ee163b6b70e8f655f320b9ec067169fc Mon Sep 17 00:00:00 2001 From: kittapath Date: Sat, 8 Mar 2025 00:35:47 +0700 Subject: [PATCH 3/3] on noti leave --- .github/workflows/release_leave.yaml | 72 ++++++++++++++-------------- 1 file changed, 36 insertions(+), 36 deletions(-) diff --git a/.github/workflows/release_leave.yaml b/.github/workflows/release_leave.yaml index a354557f..b017222d 100644 --- a/.github/workflows/release_leave.yaml +++ b/.github/workflows/release_leave.yaml @@ -68,40 +68,40 @@ jobs: docker compose pull docker compose up -d echo "${{ steps.gen_ver.outputs.image_ver }}"> success - # - name: Notify Discord Success - # if: success() - # run: | - # curl -H "Content-Type: application/json" \ - # -X POST \ - # -d '{ - # "embeds": [{ - # "title": "✅ Deployment Success!", - # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", - # "color": 3066993, - # "footer": { - # "text": "Release Notification", - # "icon_url": "https://example.com/success-icon.png" - # }, - # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - # }] - # }' \ - # ${{ secrets.DISCORD_WEBHOOK }} + - name: Notify Discord Success + if: success() + run: | + curl -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "embeds": [{ + "title": "✅ Deployment Success!", + "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Deployed by: `${{github.actor}}`", + "color": 3066993, + "footer": { + "text": "Release Notification", + "icon_url": "https://example.com/success-icon.png" + }, + "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + }] + }' \ + ${{ secrets.DISCORD_WEBHOOK }} - # - name: Notify Discord Failure - # if: failure() - # run: | - # curl -H "Content-Type: application/json" \ - # -X POST \ - # -d '{ - # "embeds": [{ - # "title": "❌ Deployment Failed!", - # "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", - # "color": 15158332, - # "footer": { - # "text": "Release Notification", - # "icon_url": "https://example.com/failure-icon.png" - # }, - # "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" - # }] - # }' \ - # ${{ secrets.DISCORD_WEBHOOK }} + - name: Notify Discord Failure + if: failure() + run: | + curl -H "Content-Type: application/json" \ + -X POST \ + -d '{ + "embeds": [{ + "title": "❌ Deployment Failed!", + "description": "**Details:**\n- Image: `${{env.IMAGE_NAME}}`\n- Version: `${{ steps.gen_ver.outputs.image_ver }}`\n- Attempted by: `${{github.actor}}`", + "color": 15158332, + "footer": { + "text": "Release Notification", + "icon_url": "https://example.com/failure-icon.png" + }, + "timestamp": "'$(date -u +%Y-%m-%dT%H:%M:%SZ)'" + }] + }' \ + ${{ secrets.DISCORD_WEBHOOK }}