diff --git a/Http/Controllers/DailySalePaymentReportModuleController.php b/Http/Controllers/DailySalePaymentReportModuleController.php index 9c6b46b..87a07f0 100644 --- a/Http/Controllers/DailySalePaymentReportModuleController.php +++ b/Http/Controllers/DailySalePaymentReportModuleController.php @@ -2,6 +2,7 @@ namespace Modules\DailySalePaymentReportModule\Http\Controllers; +use Barryvdh\DomPDF\Facade\Pdf; use Illuminate\Contracts\Support\Renderable; use Illuminate\Http\Request; use Illuminate\Routing\Controller; @@ -140,7 +141,7 @@ class DailySalePaymentReportModuleController extends Controller } } - + $data = $this->buildReportData($report_date); return view('dailysalepaymentreportmodule::index', compact( 'sales_data', @@ -148,7 +149,8 @@ class DailySalePaymentReportModuleController extends Controller 'paymentOptions', 'creditCollections', 'creditTotals', - 'summaryData' + 'summaryData', + 'data' )); } @@ -230,6 +232,115 @@ class DailySalePaymentReportModuleController extends Controller return collect($rows); } + private function buildReportData($report_date) + { + $paymentOptions = DB::table('payment_options')->where('is_active', 1) + ->orderBy('id') + ->get(['id', 'name']); + + $creditCollections = $this->getCreditSaleCollections($report_date); + + $creditTotals = [ + 'grand_total' => $creditCollections->sum('grand_total'), + 'methods' => [], + ]; + + foreach ($paymentOptions as $option) { + $creditTotals['methods'][$option->id] = $creditCollections->sum( + fn($row) => $row['methods'][$option->id] ?? 0 + ); + } + + $sales = DB::table('sales') + ->leftJoin('users', 'sales.user_id', '=', 'users.id') + ->leftJoin('customers', 'sales.customer_id', '=', 'customers.id') + ->whereDate('sales.created_at', $report_date) + ->select( + 'sales.id', + 'sales.created_at as date', + 'sales.reference_no', + 'users.name as cashier', + 'customers.name as customer', + 'sales.grand_total', + 'sales.due_amount', + )->get(); + + $saleIds = $sales->pluck('id')->all(); + + $paymentsTable = DB::table('payments') + ->whereIn('sale_id', $saleIds) + ->whereDate('created_at', $report_date) + ->get(['id', 'sale_id', 'amount', 'payment_option_id']); + + $usedPaymentIds = $paymentsTable->pluck('id')->all(); + + $salesPaymentsTable = DB::table('sales_payments') + ->whereIn('sale_id', $saleIds) + ->whereDate('created_at', $report_date) + ->where(function ($q) use ($usedPaymentIds) { + $q->whereNull('payment_id'); + if (!empty($usedPaymentIds)) { + $q->orWhereNotIn('payment_id', $usedPaymentIds); + } + }) + ->get(['id', 'sale_id', 'amount', 'payment_id']); + + $linkedPaymentIds = $salesPaymentsTable->whereNotNull('payment_id')->pluck('payment_id')->unique(); + $linkedOptionMap = DB::table('payments')->whereIn('id', $linkedPaymentIds)->pluck('payment_option_id', 'id'); + + $sales_data = []; + foreach ($sales as $sale) { + $methodTotals = []; + foreach ($paymentsTable->where('sale_id', $sale->id) as $p) { + $optionId = $p->payment_option_id; + $methodTotals[$optionId] = ($methodTotals[$optionId] ?? 0) + $p->amount; + } + foreach ($salesPaymentsTable->where('sale_id', $sale->id) as $sp) { + $optionId = $sp->payment_id ? ($linkedOptionMap[$sp->payment_id] ?? null) : null; + if ($optionId) { + $methodTotals[$optionId] = ($methodTotals[$optionId] ?? 0) + $sp->amount; + } + } + + $sales_data[] = (object) [ + 'date' => Carbon::parse($sale->date)->format('Y-m-d'), + 'reference_no' => $sale->reference_no, + 'cashier' => $sale->cashier ?? 'N/A', + 'customer' => $sale->customer ?? 'N/A', + 'grand_total' => $sale->grand_total, + 'due_amount' => $sale->due_amount, + 'methods' => $methodTotals + ]; + } + + $summaryData = []; + foreach ($paymentOptions as $option) { + $summaryData[$option->id] = [ + 'name' => $option->name, + 'sale_amount' => 0, + 'received_amount' => 0, + 'total_amount' => 0 + ]; + } + + foreach ($sales_data as $sale) { + foreach ($paymentOptions as $option) { + $amount = $sale->methods[$option->id] ?? 0; + $summaryData[$option->id]['sale_amount'] += $amount; + $summaryData[$option->id]['total_amount'] += $amount; + } + } + + foreach ($creditCollections as $credit) { + foreach ($paymentOptions as $option) { + $amount = $credit['methods'][$option->id] ?? 0; + $summaryData[$option->id]['received_amount'] += $amount; + $summaryData[$option->id]['total_amount'] += $amount; + } + } + return compact('report_date', 'paymentOptions', 'sales_data', 'creditCollections', 'creditTotals', 'summaryData'); + } + /** * Show the form for creating a new resource. * @return Renderable @@ -297,6 +408,22 @@ class DailySalePaymentReportModuleController extends Controller $type = $request->query('type'); + return "Export function is working. Selected Date: " . $date . " | Export Type: " . $type; + } + + public function exportPDF(Request $request) + { + $date = $request->query('date', Carbon::today()->toDateString()); + $type = $request->query('type'); + + $data = $this->buildReportData($date); + + if ($type === 'pdf') { + $pdf = Pdf::loadView('dailysalepaymentreportmodule::export.pdf', $data) + ->setPaper('a4', 'landscape'); + return $pdf->download('daily-sale-payment-report-' . $date . '.pdf'); + } + return "Export function is working. Selected Date: " . $date . " | Export Type: " . $type; } } diff --git a/Resources/views/export/pdf.blade.php b/Resources/views/export/pdf.blade.php new file mode 100644 index 0000000..ba9a498 --- /dev/null +++ b/Resources/views/export/pdf.blade.php @@ -0,0 +1,182 @@ + + + + + + + + + +

Sunbeam Lanka Tailoring - Daily Sale Payment Report

+

Date: {{ $report_date }}

+ +

Sales Table (Daily Sale)

+ + + + + + + + + + @foreach($paymentOptions as $option) + + @endforeach + + + + + @php + $tot_grand = 0; $tot_due = 0; $option_totals = []; + foreach ($paymentOptions as $opt) { $option_totals[$opt->id] = 0; } + @endphp + @foreach ($sales_data as $sale) + + + + + + + @foreach($paymentOptions as $option) + + @endforeach + + + @php + $tot_grand += $sale->grand_total; + $tot_due += $sale->due_amount; + foreach ($paymentOptions as $opt) { $option_totals[$opt->id] += ($sale->methods[$opt->id] ?? 0); } + @endphp + @endforeach + + + + + + @foreach($paymentOptions as $option) + + @endforeach + + + +
DateReference NumberCashierCustomerGrand Total{{ $option->name }}Due Amount
{{ $sale->date }}{{ $sale->reference_no }}{{ $sale->cashier }}{{ $sale->customer }}{{ number_format($sale->grand_total, 2) }}{{ number_format($sale->methods[$option->id] ?? 0, 2) }}{{ number_format($sale->due_amount, 2) }}
Total{{ number_format($tot_grand, 2) }}{{ number_format($option_totals[$option->id], 2) }}{{ number_format($tot_due, 2) }}
+ +

Credit Sale Collections

+ + + + + + + + + @foreach ($paymentOptions as $option) + + @endforeach + + + + @foreach ($creditCollections as $row) + + + + + + + @foreach ($paymentOptions as $option) + + @endforeach + + @endforeach + + + + + + @foreach ($paymentOptions as $option) + + @endforeach + + +
Original Bill DateReference NumberCashierCustomerGrand Total{{ $option->name }}
{{ \Carbon\Carbon::parse($row['date'])->format('Y-m-d') }}{{ $row['reference'] }}{{ $row['cashier'] }}{{ $row['customer'] }}{{ number_format($row['grand_total'], 2) }}{{ number_format($row['methods'][$option->id] ?? 0, 2) }}
Total{{ number_format($creditTotals['grand_total'], 2) }}{{ number_format($creditTotals['methods'][$option->id] ?? 0, 2) }}
+ +

Payment Method Summary

+ + + + + + + + + + + + @php + $grand_sale = 0; $grand_received = 0; $grand_total = 0; + @endphp + @foreach ($summaryData as $summary) + + + + + + + @php + $grand_sale += $summary['sale_amount']; + $grand_received += $summary['received_amount']; + $grand_total += $summary['total_amount']; + @endphp + @endforeach + + + + + + + + + +
Payment OptionSale AmountReceived AmountTotal Amount
{{ $summary['name'] }}{{ number_format($summary['sale_amount'], 2) }}{{ number_format($summary['received_amount'], 2) }}{{ number_format($summary['total_amount'], 2) }}
Grand Total{{ number_format($grand_sale, 2) }}{{ number_format($grand_received, 2) }}{{ number_format($grand_total, 2) }}
+ + + \ No newline at end of file diff --git a/Resources/views/index.blade.php b/Resources/views/index.blade.php index 35b1a7d..b928474 100644 --- a/Resources/views/index.blade.php +++ b/Resources/views/index.blade.php @@ -53,7 +53,7 @@
-