Merge pull request 'Hiệu chỉnh hàm tính toán ngày phép' (#122) from truong-leave-day into dev
Reviewed-on: #122
This commit is contained in:
commit
f8c2af2ec8
|
|
@ -312,14 +312,20 @@ class TicketController extends Controller
|
||||||
}
|
}
|
||||||
|
|
||||||
$balanceCheckResultWaiting = $this->checkLeaveBalance($user, $dataListPeriodWaiting);
|
$balanceCheckResultWaiting = $this->checkLeaveBalance($user, $dataListPeriodWaiting);
|
||||||
|
// dd($balanceCheckResultWaiting,$dataListPeriodWaiting,$user);
|
||||||
if ($balanceCheckResultWaiting['months_info']) {
|
if ($balanceCheckResultWaiting['months_info']) {
|
||||||
$monthsInfoWaiting = $balanceCheckResultWaiting['months_info'];
|
$monthsInfoWaiting = $balanceCheckResultWaiting['months_info'];
|
||||||
|
if ($balanceCheckResultWaiting['success']) {
|
||||||
|
$waitingTicketsMessage .= "------------------------------------------------";
|
||||||
|
}else{
|
||||||
$waitingTicketsMessage .= $balanceCheckResultWaiting['message'] . "\n------------------------------------------------";
|
$waitingTicketsMessage .= $balanceCheckResultWaiting['message'] . "\n------------------------------------------------";
|
||||||
|
}
|
||||||
$balanceCheckResult = $this->checkLeaveBalance($user, $dataListPeriod, $monthsInfoWaiting);
|
$balanceCheckResult = $this->checkLeaveBalance($user, $dataListPeriod, $monthsInfoWaiting);
|
||||||
|
// dd($balanceCheckResult, $waitingTicketsMessage);
|
||||||
} else {
|
} else {
|
||||||
$balanceCheckResult = $this->checkLeaveBalance($user, $dataListPeriod);
|
$balanceCheckResult = $this->checkLeaveBalance($user, $dataListPeriod);
|
||||||
}
|
}
|
||||||
|
// dd($balanceCheckResult);
|
||||||
// Nếu không đủ ngày phép, trả về thông báo và không tạo ticket
|
// Nếu không đủ ngày phép, trả về thông báo và không tạo ticket
|
||||||
if (!$balanceCheckResult['success']) {
|
if (!$balanceCheckResult['success']) {
|
||||||
$finalMessage = $waitingTicketsMessage;
|
$finalMessage = $waitingTicketsMessage;
|
||||||
|
|
@ -449,31 +455,28 @@ class TicketController extends Controller
|
||||||
$errorMessage = '';
|
$errorMessage = '';
|
||||||
$remainingDaysInMonthIsUsed = 0;
|
$remainingDaysInMonthIsUsed = 0;
|
||||||
|
|
||||||
|
// Tổng giới hạn ngày nghỉ có phép tối đa trong tháng
|
||||||
|
$maxDaysPerMonth = $this->getMaxLeaveDaysPerMonth();
|
||||||
|
|
||||||
foreach ($requestMonths as $monthKey => $monthData) {
|
foreach ($requestMonths as $monthKey => $monthData) {
|
||||||
if ($monthsInfoWaiting) {
|
if ($monthsInfoWaiting) {
|
||||||
|
// dd($requestMonths, $monthsInfoWaiting);
|
||||||
foreach ($monthsInfoWaiting as $monthInfo) {
|
foreach ($monthsInfoWaiting as $monthInfo) {
|
||||||
if ($monthInfo['month'] == $monthData['month'] && $monthInfo['year'] == $monthData['year']) {
|
if ($monthInfo['month'] == $monthData['month'] && $monthInfo['year'] == $monthData['year']) {
|
||||||
$remainingDaysInMonthIsUsed += $monthInfo['remaining_days_in_month_remaining'];
|
$remainingDaysInMonthIsUsed += $monthInfo['remaining_days_in_month_remaining'];
|
||||||
|
// dd($remainingDaysInMonthIsUsed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// Tính tổng số ngày nghỉ có phép trong tháng
|
// Tổng số ngày nghỉ có phép trong tháng
|
||||||
$usedDaysInMonth = $this->getUsedLeaveDaysInMonth($user, $monthData['year'], $monthData['month'], 'ONLEAVE');
|
$usedDaysInMonth = $this->getUsedLeaveDaysInMonth($user, $monthData['year'], $monthData['month'], 'ONLEAVE');
|
||||||
|
// Tổng số ngày nghỉ không phép trong tháng
|
||||||
// Tính tổng số ngày nghỉ không phép trong tháng
|
|
||||||
$usedDaysInMonthWithoutPay = $this->getUsedLeaveDaysInMonth($user, $monthData['year'], $monthData['month'], 'LEAVE_WITHOUT_PAY');
|
$usedDaysInMonthWithoutPay = $this->getUsedLeaveDaysInMonth($user, $monthData['year'], $monthData['month'], 'LEAVE_WITHOUT_PAY');
|
||||||
|
|
||||||
// Tính tổng giới hạn ngày nghỉ có phép tối đa trong tháng
|
// Tổng số ngày nghỉ trong tháng = tổng ngày nghỉ có phép + tổng ngày nghỉ không phép + tổng ngày yêu cầu
|
||||||
|
|
||||||
$maxDaysPerMonth = $this->getMaxLeaveDaysPerMonth();
|
|
||||||
|
|
||||||
$days_will_use = 0;
|
|
||||||
$days_will_use_without_pay = 0;
|
|
||||||
|
|
||||||
// Tính tổng số ngày nghỉ trong tháng
|
|
||||||
$totalDaysInMonth = $usedDaysInMonth + $usedDaysInMonthWithoutPay + $monthData['days_requested'];
|
$totalDaysInMonth = $usedDaysInMonth + $usedDaysInMonthWithoutPay + $monthData['days_requested'];
|
||||||
|
|
||||||
// Tính tổng phép có trong tháng
|
// Tổng phép có trong tháng
|
||||||
$totalLeaveDaysInMonth = $this->getTotalLeaveDaysInMonth($user, $monthData['year'], $monthData['month']);
|
$totalLeaveDaysInMonth = $this->getTotalLeaveDaysInMonth($user, $monthData['year'], $monthData['month']);
|
||||||
|
|
||||||
// Tính tổng số ngày nghỉ có phép đến tháng hiện tại
|
// Tính tổng số ngày nghỉ có phép đến tháng hiện tại
|
||||||
|
|
@ -483,10 +486,24 @@ class TicketController extends Controller
|
||||||
$remainingDaysInMonth = $totalLeaveDaysInMonth - $totalLeaveDaysInMonthToMonth;
|
$remainingDaysInMonth = $totalLeaveDaysInMonth - $totalLeaveDaysInMonthToMonth;
|
||||||
|
|
||||||
$remainingDaysInMonthRemaining = $remainingDaysInMonth - $remainingDaysInMonthIsUsed;
|
$remainingDaysInMonthRemaining = $remainingDaysInMonth - $remainingDaysInMonthIsUsed;
|
||||||
|
// if ($monthsInfoWaiting) {
|
||||||
|
// dd(
|
||||||
|
// "Ngày phép còn lại trong tháng: " . $remainingDaysInMonthRemaining,
|
||||||
|
// "Ngày phép còn lại: " . $remainingDaysInMonth,
|
||||||
|
// "Ngày phép đã sử dụng: " . $remainingDaysInMonthIsUsed,
|
||||||
|
// "Ngày phép yêu cầu: " . $monthData['days_requested'],
|
||||||
|
// "Tổng ngày nghỉ trong tháng: " . $totalDaysInMonth,
|
||||||
|
// "Ngày phép đã sử dụng: " . $usedDaysInMonth,
|
||||||
|
// );
|
||||||
|
// }
|
||||||
|
|
||||||
|
$month_data_status = 'ok';
|
||||||
|
$days_will_use = 0;
|
||||||
|
$days_will_use_without_pay = 0;
|
||||||
// Xử lý các trường hợp thiếu ngày phép
|
// Xử lý các trường hợp thiếu ngày phép
|
||||||
if ($remainingDaysInMonthRemaining <= 0) { //hết phép
|
if ($remainingDaysInMonthRemaining <= 0) { //hết phép
|
||||||
$hasInsufficientDays = true;
|
$hasInsufficientDays = true;
|
||||||
$month_data['status'] = 'no_days_left';
|
$month_data_status = 'no_days_left';
|
||||||
$monthMessage = "* Hiện tại bạn đã hết phép nghỉ trong tháng {$monthData['month']}/{$monthData['year']}\n - Bạn sẽ nộp: " . $monthData['days_requested'] . " ngày không phép.";
|
$monthMessage = "* Hiện tại bạn đã hết phép nghỉ trong tháng {$monthData['month']}/{$monthData['year']}\n - Bạn sẽ nộp: " . $monthData['days_requested'] . " ngày không phép.";
|
||||||
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||||
|
|
||||||
|
|
@ -494,7 +511,7 @@ class TicketController extends Controller
|
||||||
$days_will_use_without_pay = $monthData['days_requested'];
|
$days_will_use_without_pay = $monthData['days_requested'];
|
||||||
} else if ($remainingDaysInMonthRemaining < $monthData['days_requested']) { // không đủ ngày phép
|
} else if ($remainingDaysInMonthRemaining < $monthData['days_requested']) { // không đủ ngày phép
|
||||||
$hasInsufficientDays = true;
|
$hasInsufficientDays = true;
|
||||||
$month_data['status'] = 'insufficient_days';
|
$month_data_status = 'insufficient_days';
|
||||||
$daysNotEnough = $monthData['days_requested'] - $remainingDaysInMonthRemaining;
|
$daysNotEnough = $monthData['days_requested'] - $remainingDaysInMonthRemaining;
|
||||||
$monthMessage = "* Tháng {$monthData['month']}/{$monthData['year']}: \n - Số ngày phép còn lại: {$remainingDaysInMonthRemaining}, Số ngày yêu cầu: {$monthData['days_requested']}.\n - Bạn sẽ sử dụng {$remainingDaysInMonthRemaining} ngày phép và {$daysNotEnough} ngày không phép.";
|
$monthMessage = "* Tháng {$monthData['month']}/{$monthData['year']}: \n - Số ngày phép còn lại: {$remainingDaysInMonthRemaining}, Số ngày yêu cầu: {$monthData['days_requested']}.\n - Bạn sẽ sử dụng {$remainingDaysInMonthRemaining} ngày phép và {$daysNotEnough} ngày không phép.";
|
||||||
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||||
|
|
@ -502,14 +519,37 @@ class TicketController extends Controller
|
||||||
|
|
||||||
$days_will_use = $remainingDaysInMonthRemaining;
|
$days_will_use = $remainingDaysInMonthRemaining;
|
||||||
$days_will_use_without_pay = $daysNotEnough;
|
$days_will_use_without_pay = $daysNotEnough;
|
||||||
} else if ($remainingDaysInMonthRemaining >= $monthData['days_requested']) { // Đủ ngày phép ở tháng đó
|
} else if (
|
||||||
|
$remainingDaysInMonthRemaining >= $monthData['days_requested']
|
||||||
|
// || $remainingDaysInMonthIsUsed + $monthData['days_requested'] > $maxDaysPerMonth
|
||||||
|
) { // Đủ ngày phép ở tháng đó
|
||||||
// 1. Check thêm rule 1 tháng chỉ được nghỉ tối đa $maxDaysPerMonth ngày có phép, ngày vượt sẽ là ngày không phép
|
// 1. Check thêm rule 1 tháng chỉ được nghỉ tối đa $maxDaysPerMonth ngày có phép, ngày vượt sẽ là ngày không phép
|
||||||
if ($monthData['days_requested'] > $maxDaysPerMonth) {
|
if($totalDaysInMonth > $maxDaysPerMonth){
|
||||||
|
$daysWithoutPermission = $totalDaysInMonth - $maxDaysPerMonth;
|
||||||
|
$daysWillUse = $maxDaysPerMonth - $usedDaysInMonth; // số ngày phép sẽ sử dụng
|
||||||
|
|
||||||
$hasInsufficientDays = true;
|
$hasInsufficientDays = true;
|
||||||
$month_data['status'] = 'exceed_max_days';
|
$month_data_status = 'exceed_max_days';
|
||||||
|
|
||||||
|
$monthMessage = "* Theo quy định ngày phép tối đa mỗi tháng là {$maxDaysPerMonth} ngày. \nTháng {$monthData['month']}/{$monthData['year']}: \n - Bạn đã sử dụng {$usedDaysInMonth} ngày phép, còn lại {$remainingDaysInMonthRemaining} ngày phép.\n - Bạn sẽ sử dụng " . $daysWillUse . " ngày phép và {$daysWithoutPermission} ngày không phép.";
|
||||||
|
|
||||||
|
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||||
|
$days_will_use = $daysWillUse;
|
||||||
|
$days_will_use_without_pay = $daysWithoutPermission;
|
||||||
|
}else if ($monthData['days_requested'] + $remainingDaysInMonthIsUsed > $maxDaysPerMonth) {
|
||||||
|
if ($remainingDaysInMonthIsUsed > 0) {
|
||||||
|
|
||||||
|
$daysWillUse = $maxDaysPerMonth - $remainingDaysInMonthIsUsed; // số ngày phép sẽ sử dụng
|
||||||
|
$daysWithoutPermission = $monthData['days_requested'] - $daysWillUse;
|
||||||
|
|
||||||
|
$monthMessage = "* Theo quy định ngày phép tối đa mỗi tháng là {$maxDaysPerMonth} ngày. \nTháng {$monthData['month']}/{$monthData['year']}: \n - Bạn đã sử dụng {$remainingDaysInMonthIsUsed} ngày phép, còn lại {$remainingDaysInMonthRemaining} ngày phép.\n - Bạn sẽ sử dụng " . $daysWillUse . " ngày phép và {$daysWithoutPermission} ngày không phép.";
|
||||||
|
} else {
|
||||||
$daysWithoutPermission = $monthData['days_requested'] - $maxDaysPerMonth;
|
$daysWithoutPermission = $monthData['days_requested'] - $maxDaysPerMonth;
|
||||||
$monthMessage = "* Theo quy định ngày phép tôi đa mỗi tháng là {$maxDaysPerMonth} ngày. \nTháng {$monthData['month']}/{$monthData['year']}: \n - Số ngày phép còn lại: {$remainingDaysInMonthRemaining}, Số ngày yêu cầu: {$monthData['days_requested']}.\n - Bạn sẽ sử dụng {$maxDaysPerMonth} ngày phép và {$daysWithoutPermission} ngày không phép.";
|
$monthMessage = "* Theo quy định ngày phép tối đa mỗi tháng là {$maxDaysPerMonth} ngày. \nTháng {$monthData['month']}/{$monthData['year']}: \n - Số ngày phép còn lại: {$remainingDaysInMonthRemaining}, Số ngày yêu cầu: {$monthData['days_requested']}.\n - Bạn sẽ sử dụng {$maxDaysPerMonth} ngày phép và {$daysWithoutPermission} ngày không phép.";
|
||||||
|
}
|
||||||
|
$hasInsufficientDays = true;
|
||||||
|
$month_data_status = 'exceed_max_days';
|
||||||
|
|
||||||
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||||
|
|
||||||
$days_will_use = $maxDaysPerMonth;
|
$days_will_use = $maxDaysPerMonth;
|
||||||
|
|
@ -536,7 +576,7 @@ class TicketController extends Controller
|
||||||
'remaining_days_in_month_remaining' => $remainingDaysInMonthRemaining,
|
'remaining_days_in_month_remaining' => $remainingDaysInMonthRemaining,
|
||||||
'days_will_use' => $days_will_use, //Số ngày phép sẽ sử dụng
|
'days_will_use' => $days_will_use, //Số ngày phép sẽ sử dụng
|
||||||
'days_will_use_without_pay' => $days_will_use_without_pay, //Số ngày không phép sẽ sử dụng
|
'days_will_use_without_pay' => $days_will_use_without_pay, //Số ngày không phép sẽ sử dụng
|
||||||
'status' => 'ok', // mặc định là ok
|
'status' => $month_data_status, // mặc định là ok
|
||||||
];
|
];
|
||||||
|
|
||||||
// Thêm thông tin tháng vào mảng kết quả
|
// Thêm thông tin tháng vào mảng kết quả
|
||||||
|
|
@ -584,9 +624,9 @@ class TicketController extends Controller
|
||||||
// if ($leaveDaysInfo->ld_day_total > $month) {
|
// if ($leaveDaysInfo->ld_day_total > $month) {
|
||||||
// $totalAllocated = $month;
|
// $totalAllocated = $month;
|
||||||
// } else {
|
// } else {
|
||||||
// $totalAllocated = $leaveDaysInfo->ld_day_total;
|
$totalAllocated = $leaveDaysInfo->ld_day_total;
|
||||||
// }
|
// }
|
||||||
$totalAllocated = $month; //(+ tạm để check)
|
// $totalAllocated = $month; //(+ tạm để check)
|
||||||
// bên hàm duyệt ticket sẽ check lại để + 1 ngày trước job để đảm bảo đủ ngày phép
|
// bên hàm duyệt ticket sẽ check lại để + 1 ngày trước job để đảm bảo đủ ngày phép
|
||||||
} else {
|
} else {
|
||||||
Log::warning("No LeaveDays record found for user ID: {$user->id}, year: {$year}. Assuming 0 allocated days.");
|
Log::warning("No LeaveDays record found for user ID: {$user->id}, year: {$year}. Assuming 0 allocated days.");
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue