middleware('check.permission:due-reports.read')->only(['index']); } public function index(Request $request) { $user = auth()->user(); $activeBranch = $user->active_branch; $business_id = $user->business_id; $query = Party::where('business_id', $business_id) ->where('type', '!=', 'Supplier') ->when($request->search, function ($q) use ($request) { $q->where(function ($q2) use ($request) { $q2->where('type', 'like', '%' . $request->search . '%') ->orWhere('name', 'like', '%' . $request->search . '%') ->orWhere('phone', 'like', '%' . $request->search . '%') ->orWhere('credit_limit', 'like', '%' . $request->search . '%'); }); }) ->when($request->type, function ($q) use ($request) { $q->where('type', $request->type); }) ->with('sales_dues') ->latest(); $parties = $query->paginate($request->per_page ?? 20)->appends($request->query()); if ($activeBranch) { $parties->setCollection( $parties->getCollection() ->transform(function ($customer) use ($activeBranch) { $party_due = $customer->sales_dues ->where('branch_id', $activeBranch->id) ->sum('dueAmount'); if ($customer->branch_id === $activeBranch->id) { $openingBalanceDue = $customer->opening_balance_type === 'due' ? ($customer->opening_balance ?? 0) : 0; $customer->due = $openingBalanceDue + $party_due; } else { $customer->due = $party_due; } return $customer; }) ->filter(fn($customer) => $customer->due > 0) ->values() ); } else { $parties->setCollection( $parties->getCollection() ->filter(fn($customer) => ($customer->due ?? 0) > 0) ->values() ); } $customer_total_due = $parties->getCollection()->sum('due'); if ($request->ajax()) { return response()->json([ 'data' => view('business::reports.due.datas', compact('parties'))->render(), 'customer_total_due' => currency_format($customer_total_due, currency: business_currency()) ]); } return view('business::reports.due.due-reports', compact('parties', 'customer_total_due')); } public function exportExcel() { return Excel::download(new ExportDue, 'customer-due.xlsx'); } public function exportCsv() { return Excel::download(new ExportDue, 'customer-due.csv'); } public function exportPdf(Request $request) { $user = auth()->user(); $activeBranch = $user->active_branch; $business_id = $user->business_id; $query = Party::where('business_id', $business_id) ->where('type', '!=', 'Supplier') ->when($request->search, function ($q) use ($request) { $q->where(function ($q2) use ($request) { $q2->where('type', 'like', '%' . $request->search . '%') ->orWhere('name', 'like', '%' . $request->search . '%') ->orWhere('phone', 'like', '%' . $request->search . '%') ->orWhere('credit_limit', 'like', '%' . $request->search . '%'); }); }) ->when($request->type, function ($q) use ($request) { $q->where('type', $request->type); }) ->with('sales_dues') ->latest(); $parties = $query->get(); if ($activeBranch) { $parties = $parties ->transform(function ($customer) use ($activeBranch) { $party_due = $customer->sales_dues ->where('branch_id', $activeBranch->id) ->sum('dueAmount'); if ($customer->branch_id === $activeBranch->id) { $openingBalanceDue = $customer->opening_balance_type === 'due' ? ($customer->opening_balance ?? 0) : 0; $customer->due = $openingBalanceDue + $party_due; } else { $customer->due = $party_due; } return $customer; }) ->filter(fn($customer) => $customer->due > 0) ->take($request->per_page ?? 20) ->values(); } else { $parties = $parties ->filter(fn($customer) => ($customer->due ?? 0) > 0) ->take($request->per_page ?? 20) ->values(); } return PdfService::render('business::reports.due.pdf', compact('parties'), 'customer-due-report.pdf'); } }