Feat: Hide payroll_frequency from UI and auto-calculate based on pay period dates
This commit is contained in:
@@ -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'],
|
||||
|
||||
Reference in New Issue
Block a user