feat: automate internship end date calculation based on business days in dashboard, Filament admin, and controller
This commit is contained in:
@@ -180,14 +180,18 @@
|
||||
<form action="{{ route('intern.upload-form') }}" method="POST" enctype="multipart/form-data" class="space-y-4">
|
||||
@csrf
|
||||
|
||||
<div class="grid grid-cols-1 sm:grid-cols-2 gap-4">
|
||||
<div class="grid grid-cols-1 sm:grid-cols-3 gap-4">
|
||||
<div>
|
||||
<label for="internship_start_date" class="block text-xs font-extrabold text-slate-500 uppercase tracking-wider mb-1.5">Staj Başlangıç Tarihi</label>
|
||||
<input type="date" name="internship_start_date" id="internship_start_date" required value="{{ $intern->internship_start_date }}" class="w-full px-4 py-3 rounded-xl border border-slate-200 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 focus:outline-none text-sm font-semibold text-slate-700 bg-white transition-all" />
|
||||
<input type="date" name="internship_start_date" id="internship_start_date" onchange="calculateEndDateFrontend()" oninput="calculateEndDateFrontend()" required value="{{ $intern->internship_start_date }}" class="w-full px-4 py-3 rounded-xl border border-slate-200 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 focus:outline-none text-sm font-semibold text-slate-700 bg-white transition-all" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="internship_end_date" class="block text-xs font-extrabold text-slate-500 uppercase tracking-wider mb-1.5">Staj Bitiş Tarihi</label>
|
||||
<input type="date" name="internship_end_date" id="internship_end_date" required value="{{ $intern->internship_end_date }}" class="w-full px-4 py-3 rounded-xl border border-slate-200 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 focus:outline-none text-sm font-semibold text-slate-700 bg-white transition-all" />
|
||||
<label for="internship_total_days" class="block text-xs font-extrabold text-slate-500 uppercase tracking-wider mb-1.5">Staj Süresi (İş Günü)</label>
|
||||
<input type="number" name="internship_total_days" id="internship_total_days" onchange="calculateEndDateFrontend()" oninput="calculateEndDateFrontend()" min="1" required value="{{ $intern->internship_total_days }}" placeholder="Örn: 20" class="w-full px-4 py-3 rounded-xl border border-slate-200 focus:border-blue-400 focus:ring-1 focus:ring-blue-400 focus:outline-none text-sm font-semibold text-slate-700 bg-white transition-all" />
|
||||
</div>
|
||||
<div>
|
||||
<label for="internship_end_date" class="block text-xs font-extrabold text-slate-500 uppercase tracking-wider mb-1.5">Staj Bitiş Tarihi (Otomatik)</label>
|
||||
<input type="date" name="internship_end_date" id="internship_end_date" readonly class="w-full px-4 py-3 rounded-xl border border-slate-200 bg-slate-50 text-slate-500 cursor-not-allowed focus:outline-none text-sm font-semibold transition-all" value="{{ $intern->internship_end_date }}" />
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -274,6 +278,43 @@
|
||||
submitBtn.classList.add('opacity-50', 'cursor-not-allowed');
|
||||
}
|
||||
}
|
||||
|
||||
function calculateEndDateFrontend() {
|
||||
const startDateVal = document.getElementById('internship_start_date').value;
|
||||
const totalDaysVal = document.getElementById('internship_total_days').value;
|
||||
const endDateInput = document.getElementById('internship_end_date');
|
||||
|
||||
if (!startDateVal || !totalDaysVal || totalDaysVal <= 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
let date = new Date(startDateVal);
|
||||
let daysToAdd = parseInt(totalDaysVal);
|
||||
let count = 0;
|
||||
let endDate = new Date(startDateVal);
|
||||
|
||||
while (count < daysToAdd) {
|
||||
const dayOfWeek = date.getDay();
|
||||
if (dayOfWeek === 6 || dayOfWeek === 0) { // 6 = Saturday, 0 = Sunday
|
||||
date.setDate(date.getDate() + 1);
|
||||
continue;
|
||||
}
|
||||
endDate = new Date(date);
|
||||
date.setDate(date.getDate() + 1);
|
||||
count++;
|
||||
}
|
||||
|
||||
// Format to YYYY-MM-DD
|
||||
const yyyy = endDate.getFullYear();
|
||||
const mm = String(endDate.getMonth() + 1).padStart(2, '0');
|
||||
const dd = String(endDate.getDate()).padStart(2, '0');
|
||||
endDateInput.value = `${yyyy}-${mm}-${dd}`;
|
||||
}
|
||||
|
||||
// Trigger calculation once on load if values exist
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
calculateEndDateFrontend();
|
||||
});
|
||||
</script>
|
||||
<style>
|
||||
.shadow-xl {
|
||||
|
||||
Reference in New Issue
Block a user