Hiệu chỉnh chức năng ngày phép
This commit is contained in:
parent
d61fd879b7
commit
ddcb78ef98
|
|
@ -232,16 +232,11 @@ class TicketController extends Controller
|
|||
|
||||
// Kiểm tra số dư ngày phép
|
||||
$balanceCheckResult = $this->checkLeaveBalance($user, $currentYear, $dataListPeriod);
|
||||
dd($balanceCheckResult);
|
||||
// Nếu không đủ ngày phép, trả về thông báo và không tạo ticket
|
||||
if (!$balanceCheckResult['success']) {
|
||||
return response()->json([
|
||||
'message' => $balanceCheckResult['message'],
|
||||
'status' => false
|
||||
]);
|
||||
return response()->json($balanceCheckResult);
|
||||
}
|
||||
}
|
||||
dd("đã qua kiểm tra");
|
||||
// --- Kết thúc kiểm tra ---
|
||||
|
||||
// Nếu đủ ngày phép (hoặc loại ticket không phải ONLEAVE), tiếp tục tạo ticket
|
||||
|
|
@ -296,7 +291,7 @@ class TicketController extends Controller
|
|||
* @param array|null $dataListPeriod Danh sách các ngày xin nghỉ [['date' => 'Y-m-d', 'period' => 'ALL|S|C'], ...]
|
||||
* @return array Kết quả kiểm tra ['success' => bool, 'message' => string|null, ...]
|
||||
*/
|
||||
private function checkLeaveBalance($user, int $year, array $dataListPeriod = null): array
|
||||
private function checkLeaveBalance($user, int $year, ?array $dataListPeriod = null): array
|
||||
{
|
||||
// Tính tổng số ngày yêu cầu
|
||||
$daysRequested = $this->calculateTotalLeaveDays($dataListPeriod);
|
||||
|
|
@ -390,7 +385,7 @@ class TicketController extends Controller
|
|||
$monthsInfo = [];
|
||||
$hasInsufficientDays = false;
|
||||
$errorMessage = '';
|
||||
|
||||
$remainingDaysInMonthIsUsed = 0;
|
||||
foreach ($requestMonths as $monthKey => $monthData) {
|
||||
// Tính tổng số ngày nghỉ có phép trong tháng
|
||||
$usedDaysInMonth = $this->getUsedLeaveDaysInMonth($user, $monthData['year'], $monthData['month'], 'ONLEAVE');
|
||||
|
|
@ -425,18 +420,21 @@ class TicketController extends Controller
|
|||
'status' => 'ok', // mặc định là ok
|
||||
];
|
||||
|
||||
$remainingDaysInMonthRemaining = $remainingDaysInMonth - $remainingDaysInMonthIsUsed;
|
||||
// Xử lý các trường hợp thiếu ngày phép
|
||||
if ($remainingDaysInMonth <= 0) { //hết phép
|
||||
if ($remainingDaysInMonthRemaining <= 0) { //hết phép
|
||||
$hasInsufficientDays = true;
|
||||
$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']}\nBạn sẽ nộp: " . $monthData['days_requested'] . " ngày không phép.";
|
||||
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||
} else if ($remainingDaysInMonth < $monthData['days_requested']) { // không đủ ngày phép
|
||||
} else if ($remainingDaysInMonthRemaining < $monthData['days_requested']) { // không đủ ngày phép
|
||||
$hasInsufficientDays = true;
|
||||
$month_data['status'] = 'insufficient_days';
|
||||
$daysNotEnough = $monthData['days_requested'] - $remainingDaysInMonth;
|
||||
$monthMessage = "Tháng {$monthData['month']}/{$monthData['year']}: Số ngày phép còn lại: {$remainingDaysInMonth}, Số ngày yêu cầu: {$monthData['days_requested']}.\nBạn sẽ sử dụng {$remainingDaysInMonth} ngày phép và {$daysNotEnough} ngày không phép.";
|
||||
$daysNotEnough = $monthData['days_requested'] - $remainingDaysInMonthRemaining;
|
||||
$monthMessage = "Tháng {$monthData['month']}/{$monthData['year']}: Số ngày phép còn lại: {$remainingDaysInMonthRemaining}, Số ngày yêu cầu: {$monthData['days_requested']}.\nBạn sẽ sử dụng {$remainingDaysInMonthRemaining} ngày phép và {$daysNotEnough} ngày không phép.";
|
||||
$errorMessage .= $errorMessage ? "\n\n" . $monthMessage : $monthMessage;
|
||||
|
||||
$remainingDaysInMonthIsUsed = $remainingDaysInMonth;
|
||||
}
|
||||
|
||||
// Thêm thông tin tháng vào mảng kết quả
|
||||
|
|
@ -754,6 +752,18 @@ class TicketController extends Controller
|
|||
$afternoon = $time_type->get('C');
|
||||
$all_day = $time_type->get('ALL');
|
||||
|
||||
// Get all Saturday work schedules and sort them by date in descending order
|
||||
$saturday_work_schedules = Category::where('c_type', 'SATURDAY_WORK_SCHEDULE')
|
||||
->get()
|
||||
->sortByDesc(function ($item) {
|
||||
// Parse the date string from c_code to a Carbon instance for proper comparison
|
||||
return Carbon::createFromFormat('d-m-Y', $item->c_code);
|
||||
});
|
||||
|
||||
// Get the most recent schedule date (first item after sorting)
|
||||
$latest_schedule = $saturday_work_schedules->first();
|
||||
$latestScheduleDate = Carbon::createFromFormat('d-m-Y', $latest_schedule->c_code);
|
||||
|
||||
if (!$morning || !$afternoon || !$all_day) {
|
||||
// Handle error: TIME_TYPE categories not found
|
||||
Log::error("TIME_TYPE categories (S, C, ALL) not found in database.");
|
||||
|
|
@ -761,8 +771,24 @@ class TicketController extends Controller
|
|||
}
|
||||
|
||||
foreach ($period as $date) {
|
||||
// Bỏ qua Thứ 7 (6) và Chủ Nhật (0)
|
||||
if ($date->dayOfWeek === Carbon::SATURDAY || $date->dayOfWeek === Carbon::SUNDAY) {
|
||||
// Check if the current day is a Saturday
|
||||
if ($date->dayOfWeek === Carbon::SATURDAY) {
|
||||
|
||||
if ($latest_schedule) {
|
||||
$weeksDifference = $latestScheduleDate->startOfDay()->diffInWeeks($date->copy()->startOfDay());
|
||||
$isSaturdayWorkDay = ($weeksDifference % 2 === 0);
|
||||
|
||||
// echo $date->toDateString() . ' - ' . ($isSaturdayWorkDay ? 'Làm việc' : 'Nghỉ') . "<br>";
|
||||
}
|
||||
|
||||
if ($isSaturdayWorkDay) {
|
||||
$results[] = ['date' => $date->toDateString(), 'period' => "S"];
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
// Skip Sundays entirely
|
||||
else if ($date->dayOfWeek === Carbon::SUNDAY) {
|
||||
continue;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue