feat: automate internship end date calculation based on business days in dashboard, Filament admin, and controller
This commit is contained in:
@@ -137,7 +137,7 @@ class CareerController extends Controller
|
||||
$request->validate([
|
||||
'internship_form' => 'required|file|mimes:pdf,docx,jpg,png,jpeg|max:51200',
|
||||
'internship_start_date' => 'required|date',
|
||||
'internship_end_date' => 'required|date|after_or_equal:internship_start_date',
|
||||
'internship_total_days' => 'required|integer|min:1',
|
||||
], [
|
||||
'internship_form.required' => 'Lütfen bir dosya seçin.',
|
||||
'internship_form.file' => 'Yüklenen öğe geçerli bir dosya olmalıdır.',
|
||||
@@ -145,9 +145,9 @@ class CareerController extends Controller
|
||||
'internship_form.max' => 'Dosya boyutu en fazla 50MB olabilir.',
|
||||
'internship_start_date.required' => 'Lütfen staj başlangıç tarihini girin.',
|
||||
'internship_start_date.date' => 'Geçerli bir başlangıç tarihi girin.',
|
||||
'internship_end_date.required' => 'Lütfen staj bitiş tarihini girin.',
|
||||
'internship_end_date.date' => 'Geçerli bir bitiş tarihi girin.',
|
||||
'internship_end_date.after_or_equal' => 'Bitiş tarihi, başlangıç tarihinden önce olamaz.',
|
||||
'internship_total_days.required' => 'Lütfen staj süresini girin.',
|
||||
'internship_total_days.integer' => 'Staj süresi geçerli bir tam sayı olmalıdır.',
|
||||
'internship_total_days.min' => 'Staj süresi en az 1 gün olmalıdır.',
|
||||
]);
|
||||
|
||||
$intern = CareerApplication::findOrFail(session('intern_id'));
|
||||
@@ -160,23 +160,29 @@ class CareerController extends Controller
|
||||
|
||||
$path = $request->file('internship_form')->store('to_be_signed_interns', 'public');
|
||||
|
||||
// Calculate business days (excluding weekends)
|
||||
// Calculate end date based on weekdays and duration
|
||||
$startDate = \Carbon\Carbon::parse($request->internship_start_date);
|
||||
$endDate = \Carbon\Carbon::parse($request->internship_end_date);
|
||||
$days = 0;
|
||||
$tempDate = $startDate->copy();
|
||||
while ($tempDate->lte($endDate)) {
|
||||
if (!$tempDate->isWeekend()) {
|
||||
$days++;
|
||||
$daysToAdd = intval($request->internship_total_days);
|
||||
|
||||
$endDate = $startDate->copy();
|
||||
$count = 0;
|
||||
$temp = $startDate->copy();
|
||||
|
||||
while ($count < $daysToAdd) {
|
||||
if ($temp->isWeekend()) {
|
||||
$temp->addDay();
|
||||
continue;
|
||||
}
|
||||
$tempDate->addDay();
|
||||
$endDate = $temp->copy();
|
||||
$temp->addDay();
|
||||
$count++;
|
||||
}
|
||||
|
||||
$intern->update([
|
||||
'to_be_signed_internship_form_path' => $path,
|
||||
'internship_start_date' => $request->internship_start_date,
|
||||
'internship_end_date' => $request->internship_end_date,
|
||||
'internship_total_days' => $days,
|
||||
'internship_end_date' => $endDate->format('Y-m-d'),
|
||||
'internship_total_days' => $daysToAdd,
|
||||
]);
|
||||
|
||||
return redirect()->back()->with('success', 'İmzalanacak staj formunuz ve staj tarihleri başarıyla kaydedildi.');
|
||||
|
||||
Reference in New Issue
Block a user