where('business_id', auth()->user()->business_id) ->whereIn('type', ['debit', 'credit']); // Apply date filter $duration = $request->custom_days ?: 'today'; [$filter_from_date, $filter_to_date] = $this->applyDateRange($duration, $request->from_date, $request->to_date); $this->applyDateFilter($query, $duration, 'date', $request->from_date, $request->to_date); // Search filter if ($request->filled('search')) { $query->where(function ($query) use ($request) { $query->where('date', 'like', '%' . $request->search . '%') ->orWhere('invoice_no', 'like', '%' . $request->search . '%') ->orWhere('platform', 'like', '%' . $request->search . '%') ->orWhere('amount', 'like', '%' . $request->search . '%') ->orWhere('type', 'like', '%' . $request->search . '%') ->orWhere('transaction_type', 'like', '%' . $request->search . '%') ->orWhereHas('paymentType', function ($q) use ($request) { $q->where('name', 'like', '%' . $request->search . '%'); }); }); } // Platform filter if ($request->filled('platform')) { $query->where('platform', $request->platform); } // Calculate summary data $all_summary_records = (clone $query)->get(); $total_amount = $all_summary_records->sum(function ($day_book) { return match ($day_book->platform) { 'sale' => $day_book->sale?->totalAmount ?? 0, 'sale_return' => $day_book->saleReturn?->sale?->totalAmount ?? 0, 'purchase' => $day_book->purchase?->totalAmount ?? 0, 'purchase_return' => $day_book->purchaseReturn?->purchase?->totalAmount ?? 0, 'due_collect', 'due_pay' => $day_book->dueCollect?->totalDue ?? 0, default => 0 }; }); $total_money_in = $all_summary_records->where('type', 'credit')->sum(function ($day_book) { return match ($day_book->platform) { 'sale' => $day_book->sale?->totalAmount ?? 0, 'sale_return' => $day_book->saleReturn?->sale?->totalAmount ?? 0, 'purchase' => $day_book->purchase?->totalAmount ?? 0, 'purchase_return' => $day_book->purchaseReturn?->purchase?->totalAmount ?? 0, 'due_collect', 'due_pay' => $day_book->dueCollect?->totalDue ?? 0, default => 0 }; }); $total_money_out = $all_summary_records->where('type', 'debit')->sum('amount'); // Paginate data $perPage = $request->input('per_page', 20); $day_books = $query->latest()->paginate($perPage)->appends($request->query()); if ($request->ajax()) { return response()->json([ 'data' => view('business::day-book.datas', compact('day_books', 'total_amount', 'total_money_in', 'total_money_out', 'filter_from_date', 'filter_to_date', 'duration'))->render() ]); } return view('business::day-book.index', compact('day_books', 'total_amount', 'total_money_in', 'total_money_out', 'filter_from_date', 'filter_to_date', 'duration')); } public function exportExcel() { return Excel::download(new ExportDayBookReport, 'day-book.xlsx'); } public function exportCsv() { return Excel::download(new ExportDayBookReport, 'day-book.csv'); } public function exportPdf() { $day_books = Transaction::with([ 'paymentType:id,name', 'sale:id,user_id,party_id,totalAmount', 'sale.party:id,name', 'sale.user:id,name', 'saleReturn:id,sale_id', 'purchase:id,user_id,party_id,totalAmount', 'purchase.party:id,name', 'purchase.user:id,name', 'purchaseReturn:id,purchase_id', 'dueCollect:id,user_id,party_id,totalDue', 'dueCollect.party:id,name', 'dueCollect.user:id,name', ]) ->where('business_id', auth()->user()->business_id) ->whereIn('type', ['debit', 'credit']) ->latest() ->get(); return PdfService::render('business::day-book.pdf', compact('day_books'), 'day-book-report.pdf'); } }