63 lines
2.1 KiB
PHP
63 lines
2.1 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Models\StaffMember;
|
|
use App\Models\LeaveRequest;
|
|
use Illuminate\Http\Request;
|
|
use Carbon\Carbon;
|
|
|
|
class ManagementDashboardController extends Controller
|
|
{
|
|
public function index(Request $request)
|
|
{
|
|
$pendingLeaves = LeaveRequest::with('staff')
|
|
->where('status', 'Pending')
|
|
->orderBy('created_at', 'asc')
|
|
->get();
|
|
|
|
$startDate = $request->input('start_date', Carbon::now()->startOfMonth()->format('Y-m-d'));
|
|
$endDate = $request->input('end_date', Carbon::now()->endOfMonth()->format('Y-m-d'));
|
|
|
|
|
|
$staffReports = StaffMember::where('department_id', '!=', 5)
|
|
->withCount(['dailyReports' => function ($query) use ($startDate, $endDate) {
|
|
$query->whereBetween('report_date', [$startDate, $endDate]);
|
|
}])
|
|
->orderBy('name')
|
|
->get();
|
|
|
|
return view('management.index', compact('pendingLeaves', 'staffReports', 'startDate', 'endDate'));
|
|
}
|
|
public function updateLeaveStatus(Request $request, $id)
|
|
{
|
|
$request->validate(['status' => 'required|in:Approved,Rejected']);
|
|
|
|
$leave = LeaveRequest::findOrFail($id);
|
|
if ($request['status'] === 'Approved' && $leave->status !== 'Approved') {
|
|
if ($leave->leave_type === 'Annual') {
|
|
$staff = $leave->staff;
|
|
$staff->annual_leave_balance -= $leave->total_days;
|
|
$staff->save();
|
|
}
|
|
}
|
|
|
|
if ($request['status'] === 'Rejected' && $leave->status === 'Rejected') {
|
|
if ($leave->leave_type === 'Annual') {
|
|
$staff = $leave->staff;
|
|
$staff->annual_leave_balance += $leave->total_days;
|
|
$staff->save();
|
|
}
|
|
}
|
|
|
|
$leave->update([
|
|
'status' => strtoupper($request['status']),
|
|
'admin_remarks' => 'N/A',
|
|
'approved_by' => auth()->id(),
|
|
]);
|
|
|
|
// $leave->update(['status' => $request->status]);
|
|
|
|
return response()->json(['success' => true, 'message' => "Leave request {$request->status} successfully."]);
|
|
}
|
|
} |