diff --git a/app/Http/Controllers/PayrollRunController.php b/app/Http/Controllers/PayrollRunController.php index 6c922a55b..c950bc03a 100644 --- a/app/Http/Controllers/PayrollRunController.php +++ b/app/Http/Controllers/PayrollRunController.php @@ -97,7 +97,6 @@ class PayrollRunController extends Controller if (Auth::user()->can('create-payroll-runs')) { $validated = $request->validate([ 'title' => 'required|string|max:255', - 'payroll_frequency' => 'required|in:weekly,biweekly,semi-monthly,monthly', 'pay_period_start' => 'required|date', 'pay_period_end' => 'required|date|after:pay_period_start', 'pay_date' => 'required|date|after_or_equal:pay_period_end', @@ -106,6 +105,16 @@ class PayrollRunController extends Controller $validated['created_by'] = creatorId(); $validated['status'] = 'draft'; + + // Dynamically calculate frequency + $daysDiff = \Carbon\Carbon::parse($validated['pay_period_start'])->diffInDays(\Carbon\Carbon::parse($validated['pay_period_end'])) + 1; + if ($daysDiff >= 28) { + $validated['payroll_frequency'] = 'monthly'; + } elseif ($daysDiff <= 7) { + $validated['payroll_frequency'] = 'weekly'; + } else { + $validated['payroll_frequency'] = 'semi-monthly'; + } // Check if payroll run already exists for this period $exists = PayrollRun::where('pay_period_start', $validated['pay_period_start']) @@ -136,12 +145,21 @@ class PayrollRunController extends Controller try { $validated = $request->validate([ 'title' => 'required|string|max:255', - 'payroll_frequency' => 'required|in:weekly,biweekly,semi-monthly,monthly', 'pay_period_start' => 'required|date', 'pay_period_end' => 'required|date|after:pay_period_start', 'pay_date' => 'required|date|after_or_equal:pay_period_end', 'notes' => 'nullable|string', ]); + + // Dynamically calculate frequency + $daysDiff = \Carbon\Carbon::parse($validated['pay_period_start'])->diffInDays(\Carbon\Carbon::parse($validated['pay_period_end'])) + 1; + if ($daysDiff >= 28) { + $validated['payroll_frequency'] = 'monthly'; + } elseif ($daysDiff <= 7) { + $validated['payroll_frequency'] = 'weekly'; + } else { + $validated['payroll_frequency'] = 'semi-monthly'; + } // Only allow updates if status is draft if ($payrollRun->status !== 'draft') { @@ -331,12 +349,11 @@ class PayrollRunController extends Controller $callback = function () use ($payrollRuns) { $file = fopen('php://output', 'w'); - fputcsv($file, ['Title', 'Payroll Frequency', 'Pay Period Start', 'Pay Period End', 'Pay Date', 'Status', 'Notes']); + fputcsv($file, ['Title', 'Pay Period Start', 'Pay Period End', 'Pay Date', 'Status', 'Notes']); foreach ($payrollRuns as $run) { fputcsv($file, [ $run->title, - $run->payroll_frequency, \Carbon\Carbon::parse($run->pay_period_start)->format('Y-m-d'), \Carbon\Carbon::parse($run->pay_period_end)->format('Y-m-d'), \Carbon\Carbon::parse($run->pay_date)->format('Y-m-d'), @@ -457,9 +474,19 @@ class PayrollRunController extends Controller continue; } + // Dynamically calculate frequency + $daysDiff = \Carbon\Carbon::parse($row['pay_period_start'])->diffInDays(\Carbon\Carbon::parse($row['pay_period_end'])) + 1; + if ($daysDiff >= 28) { + $calcFreq = 'monthly'; + } elseif ($daysDiff <= 7) { + $calcFreq = 'weekly'; + } else { + $calcFreq = 'semi-monthly'; + } + PayrollRun::create([ 'title' => $row['title'], - 'payroll_frequency' => $row['payroll_frequency'] ?? 'monthly', + 'payroll_frequency' => $calcFreq, 'pay_period_start' => $row['pay_period_start'], 'pay_period_end' => $row['pay_period_end'], 'pay_date' => $row['pay_date'],