filled('project_id')) { $query->where('project_id', $request->project_id); } if ($request->filled('from_date')) { $query->where('expense_date', '>=', $request->from_date); } if ($request->filled('to_date')) { $query->where('expense_date', '<=', $request->to_date); } $expenses = $query->orderBy('expense_date', 'desc')->get(); $totalAmount = $expenses->sum('amount'); $approvedAmount = $expenses->where('status', 'approved')->sum('amount'); $pendingAmount = $expenses->where('status', 'pending')->sum('amount'); $byProject = $expenses->groupBy('project_id')->map(function ($group) { return [ 'project' => $group->first()?->project?->name ?? '-', 'total' => $group->sum('amount'), 'count' => $group->count(), ]; }); $byCategory = $expenses->groupBy('category')->map(function ($group) { return [ 'category' => $group->first()->category ?? '-', 'total' => $group->sum('amount'), 'count' => $group->count(), ]; }); $projects = Project::all(); return view('reports.financial', compact('expenses', 'totalAmount', 'approvedAmount', 'pendingAmount', 'byProject', 'byCategory', 'projects')); } /** * Export financial report to Excel. */ public function financialExportExcel(Request $request) { // Stub - will implement with Excel export library return back()->with('info', __('reports.export_coming_soon')); } /** * Export financial report to PDF. */ public function financialExportPdf(Request $request) { // Stub - will implement with PDF library return back()->with('info', __('reports.export_coming_soon')); } /** * Display employee work-log report. */ public function employeeWorklog(Request $request) { $query = WorkLog::with(['employee', 'project', 'task']); if ($request->filled('employee_id')) { $query->where('employee_id', $request->employee_id); } if ($request->filled('project_id')) { $query->where('project_id', $request->project_id); } if ($request->filled('from_date')) { $query->where('date', '>=', $request->from_date); } if ($request->filled('to_date')) { $query->where('date', '<=', $request->to_date); } $workLogs = $query->orderBy('date', 'desc')->paginate(30)->appends($request->query()); $employees = Employee::where('status', 'active')->get(); $projects = Project::all(); return view('reports.employee-worklog', compact('workLogs', 'employees', 'projects')); } /** * Export employee work-log report to Excel. */ public function employeeWorklogExportExcel(Request $request) { return back()->with('info', __('reports.export_coming_soon')); } /** * Display inventory report. */ public function inventory(Request $request) { $query = InventoryTransaction::with(['item', 'warehouse', 'project']); if ($request->filled('warehouse_id')) { $query->where('warehouse_id', $request->warehouse_id); } if ($request->filled('type')) { $query->where('type', $request->type); } if ($request->filled('from_date')) { $query->where('created_at', '>=', $request->from_date); } if ($request->filled('to_date')) { $query->where('created_at', '<=', $request->to_date); } $transactions = $query->orderBy('created_at', 'desc')->paginate(30)->appends($request->query()); $items = Item::orderBy('name')->get(); $warehouses = \App\Models\Warehouse::orderBy('name')->get(); return view('reports.inventory', compact('transactions', 'items', 'warehouses')); } /** * Export inventory report to Excel. */ public function inventoryExportExcel(Request $request) { return back()->with('info', __('reports.export_coming_soon')); } /** * Display payroll report. */ public function payroll(Request $request) { $query = EmployeeFinancial::with(['employee', 'currency']); if ($request->filled('month')) { $query->where('month', $request->month); } if ($request->filled('year')) { $query->where('year', $request->year); } if ($request->filled('type')) { $query->byType($request->type); } $financials = $query->orderBy('effective_date', 'desc')->paginate(30)->appends($request->query()); $employees = Employee::where('status', 'active')->get(); $months = range(1, 12); $currentYear = now()->year; $years = range($currentYear - 2, $currentYear + 1); return view('reports.payroll', compact('financials', 'employees', 'months', 'years')); } /** * Export payroll report to Excel. */ public function payrollExportExcel(Request $request) { return back()->with('info', __('reports.export_coming_soon')); } }