diff --git a/BMA.EHR.Leave/Controllers/LeaveReportController.cs b/BMA.EHR.Leave/Controllers/LeaveReportController.cs
index 1cceb86f..83d3657b 100644
--- a/BMA.EHR.Leave/Controllers/LeaveReportController.cs
+++ b/BMA.EHR.Leave/Controllers/LeaveReportController.cs
@@ -920,6 +920,189 @@ namespace BMA.EHR.Leave.Service.Controllers
}
}
+
+ ///
+ /// LV2_035 - รายงานสำหรับการลางานของข้าราชการ-กรุงเทพมหานครสามัญ และลูกจ้างประจำกรุงเทพมหานคร
+ ///
+ ///
+ ///
+ /// เมื่อทำรายการสำเร็จ
+ /// ไม่ได้ Login เข้าระบบ
+ /// เมื่อเกิดข้อผิดพลาดในการทำงาน
+ [HttpPost("leavedayRetire")]
+ [ProducesResponseType(StatusCodes.Status200OK)]
+ [ProducesResponseType(StatusCodes.Status401Unauthorized)]
+ [ProducesResponseType(StatusCodes.Status500InternalServerError)]
+ public async Task> GetLeaveDayRetireReport([FromBody] GetLeaveDetailByNodeReportDto req)
+ {
+ try
+ {
+ var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_LEAVE_REPORT");
+ var jsonData = JsonConvert.DeserializeObject(getPermission);
+ if (jsonData["status"]?.ToString() != "200")
+ {
+ return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
+ }
+ var profile = new List();
+ profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficerRetireFilter(AccessToken, req.node, req.nodeId, jsonData["result"] == "OWNER" || jsonData["result"] == "CHILD", req.isRetirement??true);
+
+ // get leave day
+ var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate);
+ var leaveTypes = await _leaveTypeRepository.GetAllAsync();
+
+ var count = 1;
+ var employees = new List();
+
+ foreach (var p in profile)
+ {
+ var keycloakUserId = p.Keycloak ?? Guid.Empty;
+
+ var sickDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-001");
+ var sickDayCount = sickDay != null ? sickDay.SumLeaveDay : 0;
+
+ var personalDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-002");
+ var personalDayCount = personalDay != null ? personalDay.SumLeaveDay : 0;
+
+ var maternityDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-003");
+ var maternityDayCount = maternityDay != null ? maternityDay.SumLeaveDay : 0;
+
+ var wifeDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-004");
+ var wifeDayCount = wifeDay != null ? wifeDay.SumLeaveDay : 0;
+
+ var restDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-005");
+ var restDayCount = restDay != null ? restDay.SumLeaveDay : 0;
+
+ var ordainDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-006");
+ var ordainDayCount = ordainDay != null ? ordainDay.SumLeaveDay : 0;
+
+ var absentDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-007");
+ var absentDayCount = absentDay != null ? absentDay.SumLeaveDay : 0;
+
+ var studyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-008");
+ var studyDayCount = studyDay != null ? studyDay.SumLeaveDay : 0;
+
+ var agencyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-009");
+ var agencyDayCount = agencyDay != null ? agencyDay.SumLeaveDay : 0;
+
+ var coupleDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-010");
+ var coupleDayCount = coupleDay != null ? coupleDay.SumLeaveDay : 0;
+
+ var therapyDay = leaveDays.FirstOrDefault(x => x.KeycloakUserId == keycloakUserId && x.LeaveTypeCode == "LV-011");
+ var therapyDayCount = therapyDay != null ? therapyDay.SumLeaveDay : 0;
+
+ var timeStamps = await _processUserTimeStampRepository.GetTimeStampHistoryByRangeForUserAsync(p.Keycloak ?? Guid.Empty,
+ req.StartDate,
+ req.EndDate);
+
+ var defaultRound = await _dutyTimeRepository.GetDefaultAsync();
+ if (defaultRound == null)
+ {
+ return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound);
+ }
+
+ //var userRound = await _dutyTimeRepository.GetByIdAsync(profile.DutyTimeId ?? Guid.Empty);
+ var effectiveDate = await _userDutyTimeRepository.GetLastEffectRound(p.Id);
+ var roundId = effectiveDate != null ? effectiveDate.DutyTimeId : Guid.Empty;
+ var userRound = await _dutyTimeRepository.GetByIdAsync(roundId);
+
+ var duty = userRound ?? defaultRound;
+
+ var processTimeStamps = timeStamps
+ .Select(d => new
+ {
+ d.Id,
+ CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) >
+ DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ?
+ "LATE" :
+ "NORMAL",
+ CheckOutStatus = d.CheckOut == null ? "" :
+ DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
+ DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeAfternoon}") ?
+ "LATE" :
+ DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) <
+ DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.EndTimeMorning}") ?
+ "ABSENT" :
+ "NORMAL",
+ });
+
+ var absentCount = processTimeStamps.Count(x => x.CheckOutStatus == "ABSENT");
+ var lateCount = processTimeStamps.Count(x => x.CheckInStatus == "LATE");
+
+ var emp = new
+ {
+ no = count,
+ fullName = $"{p.Prefix}{p.FirstName} {p.LastName}",
+ position = p.Position == null ? "" : p.Position,
+ positionLevel = p.PositionLevel == null ? "" : p.PositionLevel,
+ posNo = p.PosNo == null ? "" : p.PosNo,
+ reason = "",
+ sickDayCount = sickDayCount,
+ maternityDayCount = maternityDayCount,
+ wifeDayCount = wifeDayCount,
+ personalDayCount = personalDayCount,
+ restDayCount = restDayCount,
+ ordainDayCount = ordainDayCount,
+ absentDayCount = absentDayCount,
+ studyDayCount = studyDayCount,
+ agencyDayCount = agencyDayCount,
+ coupleDayCount = coupleDayCount,
+ therapyDayCount = therapyDayCount,
+ absentTotal = absentCount,
+ lateTotal = lateCount,
+
+ leaveTotal = sickDayCount +
+ maternityDayCount +
+ wifeDayCount +
+ personalDayCount +
+ restDayCount +
+ ordainDayCount +
+ absentDayCount +
+ studyDayCount +
+ agencyDayCount +
+ coupleDayCount +
+ therapyDayCount
+ };
+
+ employees.Add(emp);
+ count++;
+ }
+
+ var leaveTitleType = "";
+ if (req.Type.Trim().ToUpper() == "FULL")
+ {
+ leaveTitleType = "หนึ่งปี";
+ }
+ else if (req.Type.Trim().ToUpper() == "HAFT")
+ {
+ leaveTitleType = "ครึ่งปี";
+ }
+ else if (req.Type.Trim().ToUpper() == "MONTH")
+ {
+ leaveTitleType = "หนึ่งเดือน";
+ }
+ var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
+ var result = new
+ {
+ template = "LeaveYear-Officer",
+ reportName = "LeaveYear-Officer",
+ data = new
+ {
+ dateTimeStamp = $"วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
+ organizationName = profile?.FirstOrDefault()?.Oc ?? "",
+ headerText = "ข้าราชการสามัญ",
+ leaveTitleType = leaveTitleType,
+ employees = employees,
+ }
+ };
+
+ return Success(result);
+ }
+ catch (Exception ex)
+ {
+ return Error(ex);
+ }
+ }
+
///
/// LV2_037 - รายงานการเข้างานจำแนกรายวัน รายสัปดาห์ รายเดือน แยกรายหน่วยงาน/ส่วนราชการ
///