diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs index 79b0cf49..1299337f 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveController.cs @@ -843,7 +843,8 @@ namespace BMA.EHR.Leave.Service.Controllers CheckInLocation = d.CheckInPOI, CheckInLat = d.CheckInLat, CheckInLon = d.CheckInLon, - CheckInStatus = DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > + CheckInStatus = d.CheckInStatus != "" ? d.CheckInStatus : + DateTime.Parse(d.CheckIn.ToString("yyyy-MM-dd HH:mm")) > DateTime.Parse($"{d.CheckIn.Date.ToString("yyyy-MM-dd")} {duty.StartTimeMorning}") ? "LATE" : "NORMAL", @@ -856,7 +857,8 @@ namespace BMA.EHR.Leave.Service.Controllers CheckOutLocation = d.CheckOut == null ? "" : d.CheckOutPOI, CheckOutLat = d.CheckOut == null ? null : d.CheckOutLat, CheckOutLon = d.CheckOut == null ? null : d.CheckOutLon, - CheckOutStatus = d.CheckOut == null ? null : DateTime.Parse(d.CheckOut.Value.ToString("yyyy-MM-dd HH:mm")) < + CheckOutStatus = d.CheckOutStatus != "" ? d.CheckOutStatus : + d.CheckOut == null ? 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")) < diff --git a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs index d183444d..55e01c67 100644 --- a/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs +++ b/BMA.EHR.Leave.Service/Controllers/LeaveRequestController.cs @@ -134,8 +134,6 @@ namespace BMA.EHR.Leave.Service.Controllers else leaveTotal = sumLeave - sumHoliday - sumWeekend; - - var leaveRequest = new LeaveRequest { Type = leaveType, @@ -297,6 +295,218 @@ namespace BMA.EHR.Leave.Service.Controllers return Success(new { id = leaveRequest.Id }); } + + /// + /// LV2_020 - แก้ไขคำขอการลา + /// + /// + /// + /// เมื่อทำรายการสำเร็จ + /// ไม่ได้ Login เข้าระบบ + /// เมื่อเกิดข้อผิดพลาดในการทำงาน + [HttpPut("user/{id:guid}")] + [ProducesResponseType(StatusCodes.Status200OK)] + [ProducesResponseType(StatusCodes.Status401Unauthorized)] + [ProducesResponseType(StatusCodes.Status500InternalServerError)] + public async Task> EditLeaveRequestAsync(Guid id, [FromForm] CreateLeaveRequestDto req) + { + var oldData = await _leaveRequestRepository.GetByIdAsync(id); + if (oldData == null) + { + return Error(GlobalMessages.DataNotFound); + } + + + + var userId = UserId == null ? Guid.Empty : Guid.Parse(UserId); + var thisYear = DateTime.Now.Year; + + var profile = await _userProfileRepository.GetProfileByKeycloakIdAsync(userId); + + if (profile == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + var leaveType = await _leaveTypeRepository.GetByIdAsync(req.Type); + if (leaveType == null) + { + return Error(GlobalMessages.DataNotFound, StatusCodes.Status404NotFound); + } + + var sumLeave = req.LeaveStartDate.DiffDay(req.LeaveEndDate); + var sumHoliday = await _holidayRepository.GetHolidayCountAsync(req.LeaveStartDate, req.LeaveEndDate); + var sumWeekend = _holidayRepository.GetWeekEndCount(req.LeaveStartDate, req.LeaveEndDate); + + var leaveTotal = 0.0; + if (req.LeaveRange != "ALL") + leaveTotal = 0.5; + else + leaveTotal = sumLeave - sumHoliday - sumWeekend; + + var leaveRequest = new LeaveRequest + { + Id = id, + Type = leaveType, + LeaveRange = req.LeaveRange, + LeaveStartDate = req.LeaveStartDate, + LeaveEndDate = req.LeaveEndDate, + LeaveWrote = req.LeaveWrote ?? "", + LeaveDetail = req.LeaveDetail ?? "", + LeaveAddress = req.LeaveAddress ?? "", + LeaveNumber = req.LeaveNumber ?? "", + //LeaveTotal = req.LeaveStartDate.DiffDay(req.LeaveEndDate), + LeaveTotal = leaveTotal, + + + LeaveSalaryText = req.LeaveSalaryText ?? "", + LeaveStatus = oldData.LeaveStatus, + KeycloakUserId = userId, + ApproveStep = oldData.ApproveStep + }; + + // get leave last + leaveRequest.LeaveLast = await _leaveRequestRepository.GetLeaveLastByTypeForUserAsync(userId, req.Type); + + // upload document + if (req.LeaveDocument != null) + { + var doc = await _minIOService.UploadFileAsync(req.LeaveDocument); + if (doc != null) + { + leaveRequest.LeaveDocument = doc; + } + } + + // upload draft document + if (req.LeaveDraftDocument != null) + { + var doc = await _minIOService.UploadFileAsync(req.LeaveDraftDocument); + if (doc != null) + { + leaveRequest.LeaveDraftDocument = doc; + } + } + + // switch from leave type + switch (leaveType.Code.Trim().ToUpper()) + { + case "LV-004": + { + leaveRequest.WifeDayName = req.WifeDayName ?? ""; + leaveRequest.WifeDayDateBorn = req.WifeDayDateBorn ?? ""; + } + break; + case "LV-005": + { + leaveRequest.RestDayOldTotal = + await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear - 1); + leaveRequest.RestDayCurrentTotal = + await _leaveRequestRepository.GetRestDayTotalByYearForUserAsync(userId, thisYear); + } + break; + case "LV-006": + { + leaveRequest.OrdainDayStatus = req.OrdainDayStatus ?? false; + leaveRequest.OrdainDayLocationName = req.OrdainDayLocationName ?? ""; + leaveRequest.OrdainDayLocationAddress = req.OrdainDayLocationAddress ?? ""; + leaveRequest.OrdainDayLocationNumber = req.OrdainDayLocationNumber ?? ""; + if (req.OrdainDayOrdination != null) + leaveRequest.OrdainDayOrdination = req.OrdainDayOrdination.Value; + + leaveRequest.OrdainDayBuddhistLentName = req.OrdainDayBuddhistLentName ?? ""; + + leaveRequest.OrdainDayBuddhistLentAddress = req.OrdainDayBuddhistLentAddress ?? ""; + + leaveRequest.LeaveBirthDate = profile.BirthDate; + leaveRequest.LeaveGovernmentDate = profile.DateStart; + + leaveRequest.HajjDayStatus = req.HajjDayStatus ?? false; + } + break; + case "LV-007": + { + leaveRequest.AbsentDayLocation = req.AbsentDayLocation ?? ""; + leaveRequest.AbsentDaySummon = req.AbsentDaySummon ?? ""; + if (req.AbsentDayRegistorDate != null) + leaveRequest.AbsentDayRegistorDate = req.AbsentDayRegistorDate.Value; + + leaveRequest.AbsentDayGetIn = req.AbsentDayGetIn ?? ""; + + leaveRequest.AbsentDayAt = req.AbsentDayAt ?? ""; + } + break; + case "LV-008": + { + var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); + + leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value; + leaveRequest.LeaveSalaryText = + lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false); + leaveRequest.LeaveBirthDate = profile.BirthDate; + leaveRequest.LeaveGovernmentDate = profile.DateStart; + + leaveRequest.StudyDaySubject = req.StudyDaySubject ?? ""; + leaveRequest.StudyDayDegreeLevel = req.StudyDayDegreeLevel ?? ""; + leaveRequest.StudyDayUniversityName = req.StudyDayUniversityName ?? ""; + leaveRequest.StudyDayCountry = req.StudyDayCountry ?? ""; + leaveRequest.StudyDayScholarship = req.StudyDayScholarship ?? ""; + + leaveRequest.StudyDayTrainingSubject = req.StudyDayTrainingSubject ?? ""; + leaveRequest.StudyDayTrainingName = req.StudyDayTrainingName ?? ""; + } + break; + case "LV-010": + { + var lastSalary = profile.Salaries.OrderByDescending(x => x.Order).FirstOrDefault(); + + leaveRequest.LeaveSalary = lastSalary == null ? 0 : (int)lastSalary.Amount.Value; + leaveRequest.LeaveSalaryText = + lastSalary == null ? "" : ((int)lastSalary.Amount.Value).ToThaiBahtText(false); + + leaveRequest.CoupleDayName = req.CoupleDayName ?? ""; + leaveRequest.CoupleDayPosition = req.CoupleDayPosition ?? ""; + leaveRequest.CoupleDayLevel = req.CoupleDayLevel ?? ""; + leaveRequest.CoupleDayLevelCountry = req.CoupleDayLevelCountry ?? ""; + leaveRequest.CoupleDayCountryHistory = req.CoupleDayCountryHistory ?? ""; + leaveRequest.CoupleDayTotalHistory = req.CoupleDayTotalHistory ?? ""; + + if (req.CoupleDayStartDateHistory != null) + leaveRequest.CoupleDayStartDateHistory = req.CoupleDayStartDateHistory.Value; + + if (req.CoupleDayEndDateHistory != null) + leaveRequest.CoupleDayEndDateHistory = req.CoupleDayEndDateHistory.Value; + + leaveRequest.CoupleDaySumTotalHistory = req.CoupleDaySumTotalHistory ?? ""; + } + break; + } + + // add dear and oc_data + var rootOc = _userProfileRepository.GetRootOcId(profile.OcId ?? Guid.Empty); + var approver = string.Empty; + if (rootOc != null) + { + var list = await _commandRepository.GetOrgApproverAsync(rootOc ?? Guid.Empty); + if (list.Count > 0) + approver = list.First().Name; + } + + leaveRequest.LeaveTypeCode = leaveType.Code; + leaveRequest.Dear = approver; + leaveRequest.PositionName = profile.Position == null ? "" : profile.Position.Name; + leaveRequest.PositionLevelName = profile.PositionLevel == null ? "" : profile.PositionLevel.Name; + leaveRequest.OrganizationName = profile.Oc ?? ""; + + // delet old + await _leaveRequestRepository.DeleteAsync(oldData); + + // save to database + await _leaveRequestRepository.AddAsync(leaveRequest); + + return Success(new { id = leaveRequest.Id }); + } + /// /// LV2_002 - ข้อมูลที่ user ขอยื่นลา (USER) ///