report leave
This commit is contained in:
parent
12448ba0a4
commit
771b9b940a
17 changed files with 2109 additions and 305 deletions
|
|
@ -635,14 +635,11 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
// validate duplicate check in
|
||||
var currentCheckIn = await _userTimeStampRepository.GetTimestampByDateAsync(userId, currentDate);
|
||||
|
||||
|
||||
|
||||
if (currentCheckIn != null)
|
||||
{
|
||||
return Error(new Exception("ไม่สามารถลงเวลาได้ เนื่องจากมีการลงเวลาในวันนี้แล้ว!"), StatusCodes.Status400BadRequest);
|
||||
}
|
||||
|
||||
|
||||
var checkin = new UserTimeStamp
|
||||
{
|
||||
KeycloakUserId = userId,
|
||||
|
|
@ -657,6 +654,23 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
Prefix = profile.Prefix,
|
||||
FirstName = profile.FirstName,
|
||||
LastName = profile.LastName,
|
||||
CitizenId = profile.CitizenId,
|
||||
|
||||
Root = profile.Root,
|
||||
Child1 = profile.Child1,
|
||||
Child2 = profile.Child2,
|
||||
Child3 = profile.Child3,
|
||||
Child4 = profile.Child4,
|
||||
|
||||
RootId = profile.RootId,
|
||||
Child1Id = profile.Child1Id,
|
||||
Child2Id = profile.Child2Id,
|
||||
Child3Id = profile.Child3Id,
|
||||
Child4Id = profile.Child4Id,
|
||||
Gender = profile.Gender,
|
||||
|
||||
ProfileId = profile.Id,
|
||||
ProfileType = profile.ProfileType,
|
||||
};
|
||||
|
||||
var checkInStatus = DateTime.Parse(currentDate.ToString("yyyy-MM-dd HH:mm")) >
|
||||
|
|
@ -684,6 +698,23 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
Prefix = profile.Prefix,
|
||||
FirstName = profile.FirstName,
|
||||
LastName = profile.LastName,
|
||||
CitizenId = profile.CitizenId,
|
||||
|
||||
Root = profile.Root,
|
||||
Child1 = profile.Child1,
|
||||
Child2 = profile.Child2,
|
||||
Child3 = profile.Child3,
|
||||
Child4 = profile.Child4,
|
||||
|
||||
RootId = profile.RootId,
|
||||
Child1Id = profile.Child1Id,
|
||||
Child2Id = profile.Child2Id,
|
||||
Child3Id = profile.Child3Id,
|
||||
Child4Id = profile.Child4Id,
|
||||
Gender = profile.Gender,
|
||||
|
||||
ProfileId = profile.Id,
|
||||
ProfileType = profile.ProfileType,
|
||||
};
|
||||
|
||||
await _userTimeStampRepository.AddAsync(checkin);
|
||||
|
|
|
|||
|
|
@ -740,7 +740,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||
[HttpPost("leaveday/{type:string}")]
|
||||
[HttpPost("leaveday/{type}")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||
|
|
@ -754,7 +754,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
|
||||
}
|
||||
var profile = new List<GetProfileByKeycloakIdDto>();
|
||||
var profile = new List<GetProfileByKeycloakIdRootDto>();
|
||||
if (type.Trim().ToUpper() == "OFFICER")
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId);
|
||||
|
|
@ -763,10 +763,6 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
if (profile.Count > 0)
|
||||
{
|
||||
profile = profile.Where(p => p.IsLeave == false).ToList();
|
||||
}
|
||||
// get leave day
|
||||
var leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByTypeAndRange(req.StartDate, req.EndDate);
|
||||
var leaveTypes = await _leaveTypeRepository.GetAllAsync();
|
||||
|
|
@ -891,16 +887,33 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
count++;
|
||||
}
|
||||
|
||||
var text = "";
|
||||
if (req.Type.Trim().ToUpper() == "FULL")
|
||||
{
|
||||
text = "หนึ่งปี";
|
||||
}
|
||||
else if (req.Type.Trim().ToUpper() == "HAFT")
|
||||
{
|
||||
text = "ครึ่งปี";
|
||||
}
|
||||
else if (req.Type.Trim().ToUpper() == "MONTH")
|
||||
{
|
||||
text = "หนึ่งเดือน";
|
||||
}
|
||||
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
|
||||
var result = new
|
||||
{
|
||||
template = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-ขรก" : "LeaveHalfYear-ลูกจ้าง",
|
||||
reportName = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-Officer" : "LeaveHalfYear-Employee",
|
||||
template = "LeaveHalfYear-Officer",
|
||||
reportName = "LeaveHalfYear-Officer",
|
||||
data = new
|
||||
{
|
||||
leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
organizationName = profile.First().Oc ?? "",
|
||||
employees = employees
|
||||
dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
|
||||
organizationName = profile?.FirstOrDefault()?.Oc ?? "",
|
||||
employees = employees,
|
||||
headerText = type.Trim().ToUpper() == "OFFICER" ? "ข้าราชการสามัญ" : "ลูกจ้างประจำ",
|
||||
text = text
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -920,7 +933,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||
[HttpPost("time-records/{type:string}")]
|
||||
[HttpPost("time-records/{type}")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||
|
|
@ -934,7 +947,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
|
||||
}
|
||||
var profile = new List<GetProfileByKeycloakIdDto>();
|
||||
var profile = new List<GetProfileByKeycloakIdRootDto>();
|
||||
if (type.Trim().ToUpper() == "OFFICER")
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId);
|
||||
|
|
@ -943,10 +956,6 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
if (profile.Count > 0)
|
||||
{
|
||||
profile = profile.Where(p => p.IsLeave == false).ToList();
|
||||
}
|
||||
var date = req.StartDate.Date;
|
||||
|
||||
var holidays = await _holidayRepository.GetHolidayAsync(req.StartDate.Date, req.EndDate.Date);
|
||||
|
|
@ -1075,7 +1084,6 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
timeStamps.CheckOut != null ?
|
||||
$"{timeStamps.CheckOut.Value.ToString("HH:mm")} น." :
|
||||
"",
|
||||
|
||||
//remark = timeStamps == null ? "ขาดราชการ" : "",
|
||||
remark = remarkStr,
|
||||
|
||||
|
|
@ -1096,8 +1104,6 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
else if (timeStamps.CheckInLocationName == "ไปประชุม/อบรม/สัมมนา/ปฏิบัติงานที่บ้านนอกสถานที่")
|
||||
seminarTotal += 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -1126,9 +1132,10 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
|
||||
}
|
||||
|
||||
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
|
||||
var item = new
|
||||
{
|
||||
DateTimeStamp = req.StartDate.Date.ToThaiFullDate().ToThaiNumber() + "-" + req.EndDate.Date.ToThaiFullDate().ToThaiNumber(),
|
||||
dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
|
||||
officerTotal = profile.Count,
|
||||
workTotal = workTotal,
|
||||
restTotal = restTotal,
|
||||
|
|
@ -1163,7 +1170,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||
[HttpPost("late/{type:string}")]
|
||||
[HttpPost("late/{type}")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||
|
|
@ -1177,155 +1184,63 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
|
||||
}
|
||||
var profile = new List<GetProfileByKeycloakIdDto>();
|
||||
if (type.Trim().ToUpper() == "OFFICER")
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
if (profile.Count > 0)
|
||||
{
|
||||
profile = profile.Where(p => p.IsLeave == false).ToList();
|
||||
}
|
||||
// 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>();
|
||||
var count = 1;
|
||||
|
||||
foreach (var p in profile)
|
||||
var userTimeStamps = await _processUserTimeStampRepository.GetTimestampByDateLateAsync(type.Trim().ToUpper());
|
||||
foreach (var p in userTimeStamps)
|
||||
{
|
||||
var keycloakUserId = p.Keycloak ?? Guid.Empty;
|
||||
var fullName = $"{p.Prefix}{p.FirstName} {p.LastName}";
|
||||
|
||||
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
|
||||
var duty = userRound;
|
||||
if (duty == null)
|
||||
{
|
||||
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");
|
||||
duty = await _dutyTimeRepository.GetDefaultAsync();
|
||||
if (duty == null)
|
||||
{
|
||||
return Error("ไม่พบรอบการลงเวลา Default", StatusCodes.Status404NotFound);
|
||||
}
|
||||
}
|
||||
|
||||
var emp = new
|
||||
{
|
||||
no = count,
|
||||
fullName = $"{p.Prefix}{p.FirstName} {p.LastName}",// _userProfileRepository.GetUserFullName(p.Keycloak ?? Guid.Empty, AccessToken),
|
||||
position = p.Position == null ? "" : p.Position,
|
||||
//positionLevel = p.PosLevel == null ? "" : p.PosLevel,
|
||||
//posNo = p.ProfileSalary == null ? "" : p.ProfileSalary.PosNo,
|
||||
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
|
||||
fullName = fullName,
|
||||
dutyTimeName = $"{duty.StartTimeMorning} - {duty.EndTimeAfternoon} น.",
|
||||
checkInLocation = p.CheckInPOI,
|
||||
checkInTime = $"{p.CheckIn.ToString("HH:mm")} น.",
|
||||
checkOutLocation = p.CheckOutPOI ?? "",
|
||||
checkOutTime = p.CheckOut != null ?
|
||||
$"{p.CheckOut.Value.ToString("HH:mm")} น." :
|
||||
"",
|
||||
remark = "",
|
||||
checkInDate = p.CheckIn.Date.ToThaiFullDate2().ToThaiNumber(),
|
||||
checkedOutDate = p.CheckOut != null ?
|
||||
p.CheckOut.Value.ToThaiFullDate2().ToThaiNumber() :
|
||||
"",
|
||||
};
|
||||
|
||||
employees.Add(emp);
|
||||
count++;
|
||||
}
|
||||
|
||||
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
|
||||
var item = new
|
||||
{
|
||||
dateTimeStamp = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
|
||||
// officerTotal = profile.Count,
|
||||
employees = employees
|
||||
};
|
||||
|
||||
var result = new
|
||||
{
|
||||
template = "LeaveHalfYear-Officer",
|
||||
reportName = "LeaveHalfYear-Officer",
|
||||
data = new
|
||||
{
|
||||
leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
organizationName = profile.First().Oc ?? "",
|
||||
employees = employees,
|
||||
headerText = type.Trim().ToUpper() == "OFFICER" ? "ข้าราชการสามัญ" : "ลูกจ้างประจำ"
|
||||
}
|
||||
template = "TimeStamp-Day",
|
||||
reportName = "TimeStamp-Day",
|
||||
data = item
|
||||
};
|
||||
|
||||
return Success(result);
|
||||
|
|
@ -1344,7 +1259,7 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
/// <response code="200">เมื่อทำรายการสำเร็จ</response>
|
||||
/// <response code="401">ไม่ได้ Login เข้าระบบ</response>
|
||||
/// <response code="500">เมื่อเกิดข้อผิดพลาดในการทำงาน</response>
|
||||
[HttpPost("leave2/{type:string}")]
|
||||
[HttpPost("leave2/{type}")]
|
||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||
[ProducesResponseType(StatusCodes.Status401Unauthorized)]
|
||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||
|
|
@ -1358,153 +1273,17 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
{
|
||||
return Error(jsonData["message"]?.ToString(), StatusCodes.Status403Forbidden);
|
||||
}
|
||||
var profile = new List<GetProfileByKeycloakIdDto>();
|
||||
if (type.Trim().ToUpper() == "OFFICER")
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllOfficer(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
else
|
||||
{
|
||||
profile = await _userProfileRepository.GetProfileWithKeycloakAllEmployee(AccessToken, req.node, req.nodeId);
|
||||
}
|
||||
if (profile.Count > 0)
|
||||
{
|
||||
profile = profile.Where(p => p.IsLeave == false).ToList();
|
||||
}
|
||||
// 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}",// _userProfileRepository.GetUserFullName(p.Keycloak ?? Guid.Empty, AccessToken),
|
||||
position = p.Position == null ? "" : p.Position,
|
||||
//positionLevel = p.PosLevel == null ? "" : p.PosLevel,
|
||||
//posNo = p.ProfileSalary == null ? "" : p.ProfileSalary.PosNo,
|
||||
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 leaveDays = await _leaveRequestRepository.GetSumApproveLeaveByRootAndRange(req.StartDate, req.EndDate, type);
|
||||
var enddate = req.EndDate.Date == req.StartDate.Date ? "" : $" - {req.EndDate.Date.ToThaiShortDate().ToThaiNumber()}";
|
||||
var result = new
|
||||
{
|
||||
template = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-ขรก" : "LeaveHalfYear-ลูกจ้าง",
|
||||
reportName = type.Trim().ToUpper() == "OFFICER" ? "LeaveHalfYear-Officer" : "LeaveHalfYear-Employee",
|
||||
template = "LeaveHalfYear-Officer",
|
||||
reportName = "LeaveHalfYear-Officer",
|
||||
data = new
|
||||
{
|
||||
leaveDateStart = req.StartDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
leaveDateStart = $"ณ วันที่ {req.StartDate.Date.ToThaiShortDate().ToThaiNumber()}{enddate}",
|
||||
leaveDateEnd = req.EndDate.Date.ToThaiShortDate().ToThaiNumber(),
|
||||
organizationName = profile.First().Oc ?? "",
|
||||
employees = employees
|
||||
employees = leaveDays
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -196,6 +196,13 @@ namespace BMA.EHR.Leave.Service.Controllers
|
|||
Child3 = profile.Child3,
|
||||
Child4 = profile.Child4,
|
||||
|
||||
RootId = profile.RootId,
|
||||
Child1Id = profile.Child1Id,
|
||||
Child2Id = profile.Child2Id,
|
||||
Child3Id = profile.Child3Id,
|
||||
Child4Id = profile.Child4Id,
|
||||
Gender = profile.Gender,
|
||||
|
||||
ProfileId = profile.Id,
|
||||
ProfileType = profile.ProfileType,
|
||||
Amount = profile.Amount,
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue