diff --git a/Http/Controllers/DailySalePaymentReportModuleController.php b/Http/Controllers/DailySalePaymentReportModuleController.php index e5c108a..6b757c9 100644 --- a/Http/Controllers/DailySalePaymentReportModuleController.php +++ b/Http/Controllers/DailySalePaymentReportModuleController.php @@ -23,6 +23,8 @@ class DailySalePaymentReportModuleController extends Controller ->orderBy('id') ->get(['id', 'name']); + $creditCollections = $this->getCreditSaleCollections($report_date); + $sales = DB::table('sales') ->leftJoin('users', 'sales.user_id', '=', 'users.id') @@ -95,7 +97,85 @@ class DailySalePaymentReportModuleController extends Controller ]; } - return view('dailysalepaymentreportmodule::index', compact('sales_data', 'report_date', 'paymentOptions')); + return view('dailysalepaymentreportmodule::index', compact('sales_data', 'report_date', 'paymentOptions', 'creditCollections')); + } + + private function getCreditSaleCollections($date) + { + $paymentsTable = DB::table('payments') + ->whereNotNull('sale_id') + ->whereDate('created_at', $date) + ->get(['id', 'sale_id', 'amount', 'payment_option_id']); + + $usedPaymentIds = $paymentsTable->pluck('id')->all(); + + $salesPaymentsTable = DB::table('sales_payments') + ->whereDate('created_at', $date) + ->where(function ($q) use ($usedPaymentIds) { + $q->whereNull('payment_id'); + if (!empty($usedPaymentIds)) { + $q->orWhereNotIn('payment_id', $usedPaymentIds); + } + }) + ->get(['id', 'sale_id', 'amount', 'payment', 'payment_id']); + + $linkedPaymentIds = $salesPaymentsTable->whereNotNull('payment_id')->pluck('payment_id')->unique(); + + $linkedOptionMap = DB::table('payments') + ->whereIn('id', $linkedPaymentIds) + ->pluck('payment_option_id', 'id'); + + $saleIds = $paymentsTable->pluck('sale_id') + ->merge($salesPaymentsTable->pluck('sale_id')) + ->unique() + ->values(); + + if ($saleIds->isEmpty()) { + return collect(); + } + + $sales = DB::table('sales') + ->whereIn('id', $saleIds) + ->whereDate('created_at', '<', $date) + ->select('id', 'reference_no', 'user_id', 'customer_id', 'grand_total', 'paid_amount', 'created_at') + ->get() + ->keyBy('id'); + + if ($sales->isEmpty()) { + return collect(); + } + + $users = DB::table('users')->whereIn('id', $sales->pluck('user_id')->unique())->pluck('name', 'id'); + $customers = DB::table('customers')->whereIn('id', $sales->pluck('customer_id')->unique())->pluck('name', 'id'); + + $rows = []; + + foreach ($sales as $saleId => $sale) { + $methodTotals = []; + + foreach ($paymentsTable->where('sale_id', $saleId) as $p) { + $optionId = $p->payment_option_id; + $methodTotals[$optionId] = ($methodTotals[$optionId] ?? 0) + $p->amount; + } + + foreach ($salesPaymentsTable->where('sale_id', $saleId) as $sp) { + $optionId = $sp->payment_id ? ($linkedOptionMap[$sp->payment_id] ?? null) : null; + if ($optionId) { + $methodTotals[$optionId] = ($methodTotals[$optionId] ?? 0) + $sp->amount; + } + } + + $rows[] = [ + 'date' => $sale->created_at, + 'reference' => $sale->reference_no, + 'cashier' => $users[$sale->user_id] ?? '-', + 'customer' => $customers[$sale->customer_id] ?? '-', + 'grand_total' => $sale->grand_total - $sale->paid_amount, + 'methods' => $methodTotals, + ]; + } + + return collect($rows); } /** diff --git a/Resources/views/index.blade.php b/Resources/views/index.blade.php index 2ba8cca..7c4fc76 100644 --- a/Resources/views/index.blade.php +++ b/Resources/views/index.blade.php @@ -1,296 +1,299 @@ @extends('backend.layout.main') @section('content') - @if ($errors->has('title')) -