public function withValidator22($validator) { $lang = $this->header('lang', 'ar'); $validator->after(function ($validator) use ($lang) { $employee_id = auth('employee')->id(); $date = $this->input('date'); $type = "wfh"; $timeNow = now(); $requestedMinutes = 0; $result = calculateEmployeePermission($employee_id, $date, $type); // dd($result); $usedMinutes = $result['requests_approv_total_minutes']; $limitMinutes = $result['total_monthly_permissions_minutes']; //check wfh policy $hrWfhEmployee = HrWfhEmployee::where('employee_id', $employee_id)->first(); if (! $hrWfhEmployee) { $validator->errors()->add( 'date', $lang === 'en' ? 'Sorry.. You do not belong to the work from home policy and you do not have credit.. Please check with Human Resources.' : 'عفوا .. لست منتمى لسياسه العمل من المنزل وليس لديك رصيد .. الرجاء مراجعة الموارد البشرية' ); return; } if ($hrWfhEmployee?->hrWfh?->is_active == 0) { $validator->errors()->add( 'date', $lang === 'en' ? 'Sorry, the policy you belong to is not active and you have no balance. Please contact Human Resources.' : 'عفوا .. السياسة المنتمى اليها غير مفعلة وليس لديك رصيد .. الرجاء مراجعة الموارد البشرية' ); return; } //check advance notice $dayNumber = Carbon::parse($date)->dayOfWeek; $hrWfhSetting = HrWfhSetting::where('country_id', $hrWfhEmployee?->employee?->country_id)->first(); if (! $hrWfhSetting) { $validator->errors()->add( 'date', $lang === 'en' ? 'Sorry, you cannot submit a request as your country does not have work-from-home regulations. Please contact Human Resources.' : 'عفوا .. لا يمكنك عمل طلب حيث ان دولتك ليست لديها اعدادات العمل من المنزل .. الرجاء مراجعة الموارد البشرية' ); return; } if ($hrWfhSetting->is_active == 0) { $validator->errors()->add( 'date', $lang === 'en' ? 'Sorry, your country settings are not enabled. Please contact Human Resources.' : 'عفوا .. اعدادات الدولة المنتمى اليها غير مفعله .. الرجاء مراجعة الموارد البشرية' ); return; } if (isset($hrWfhSetting->hybird_day) && in_array($dayNumber, $hrWfhSetting->hybird_day)) { $validator->errors()->add( 'date', $lang === 'en' ? 'Sorry, you cannot place an order today as it is one of the automatically closed days.' : 'عفوا .. لا يمكنك عمل طلب فى هذا اليوم لانه من الايام المغطاه تلقائيا' ); return; } // Get Today's Schedule $my_schedule_time = getActiveEmployeeWorkSchedule($employee_id, $date); if (! $my_schedule_time['status']) { return respondError($my_schedule_time['message'], 404); } $todaySchedule = collect($my_schedule_time['timetables']) ->firstWhere('day', $dayNumber); if (! $todaySchedule) { $validator->errors()->add( 'from_time', $lang === 'en' ? 'You have no schedule for today.' : 'ليس لديك جدول في هذا اليوم.' ); return; } $startSignIn = $todaySchedule['start_sign_in']; $startSignOut = $todaySchedule['start_sign_out']; $requiredHours = (int) $todaySchedule['actual_hour']; if (! $startSignIn || ! $startSignOut) { $validator->errors()->add( 'from_time', $lang === 'en' ? 'You do not have working hours today.' : 'ليس لديك توقيت عمل اليوم.' ); return; } if ($hrWfhSetting) { if ($date == date('Y-m-d')) { $advance_notice = (int) $hrWfhSetting?->advance_notice; $start_signin = Carbon::parse($startSignIn); $timenew = $start_signin->copy()->subHours($advance_notice); if ($timeNow->gt($timenew)) { $validator->errors()->add( 'from_time', $lang === 'en' ? "Sorry, the request must be submitted at before {$timenew->format('H:i')}." : "عفوا يجب ان يكون توقيت الطلب قبل الساعة {$timenew->format('H:i')}" ); return; } } } if (($usedMinutes + $requestedMinutes) >= $limitMinutes) { $validator->errors()->add( 'from_time', $lang == 'ar' ? 'لقد تجاوزت الحد المسموح من دقائق الإذن الشهرية' : 'You have exceeded your monthly permission minutes limit' ); } $exists = HrWfhRequest::where('employee_id', $employee_id) ->whereHas('employeeRequest', function ($q) use ($date) { $q->whereDate('date', $date) ->whereDate('type', 'wfh'); }) ->exists(); if ($exists) { $validator->errors()->add( 'date', $lang == 'ar' ? 'لقد قمت بإضافة هذا الطلب من قبل' : 'This order already exists' ); } /*$hasOverlap = HrPermissionRequest::where('employee_id', $employee_id) ->whereHas('employeeRequest', function ($q) use ($date) { $q->whereDate('date', $date) ->where('status', 'approved'); }) ->where(function ($q) use ($requestedFrom, $requestedTo) { $q->whereTime('from_time', '<', $requestedTo->format('H:i:s')) ->whereTime('to_time', '>', $requestedFrom->format('H:i:s')); }) ->exists(); if ($hasOverlap) { $validator->errors()->add( 'from_time', $lang == 'ar' ? 'يوجد إذن معتمد متداخل مع هذا الوقت' : 'There is an approved permission overlapping this time' ); }*/ }); }