add api report
This commit is contained in:
parent
049a289467
commit
9ec411eebb
1 changed files with 183 additions and 0 deletions
|
|
@ -920,6 +920,189 @@ namespace BMA.EHR.Leave.Service.Controllers
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// LV2_035 - รายงานสำหรับการลางานของข้าราชการ-กรุงเทพมหานครสามัญ และลูกจ้างประจำกรุงเทพมหานคร
|
||||||
|
/// </summary>
|
||||||
|
/// <returns>
|
||||||
|
/// </returns>
|
||||||
|
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||||
|
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||||
|
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||||
|
[HttpPost("leavedayRetire")]
|
||||||
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||||
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||||
|
public async Task<ActionResult<ResponseObject>> GetLeaveDayRetireReport([FromBody] GetLeaveDetailByNodeReportDto req)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var getPermission = await _permission.GetPermissionAPIAsync("LIST", "SYS_LEAVE_REPORT");
|
||||||
|
var jsonData = JsonConvert.DeserializeObject<JObject>(getPermission);
|
||||||
|
if (jsonData["status"]?.ToString() != "200")
|
||||||
|
{
|
||||||
|
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
|
||||||
|
}
|
||||||
|
var profile = new List<GetProfileByKeycloakIdRootDto>();
|
||||||
|
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<dynamic>();
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// LV2_037 - รายงานการเข้างานจำแนกรายวัน รายสัปดาห์ รายเดือน แยกรายหน่วยงาน/ส่วนราชการ
|
/// LV2_037 - รายงานการเข้างานจำแนกรายวัน รายสัปดาห์ รายเดือน แยกรายหน่วยงาน/ส่วนราชการ
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue