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)
+
+
+
+
+ Date
+ Reference Number
+ Cashier
+ Customer
+ Grand Total
+ @foreach($paymentOptions as $option)
+ {{ $option->name }}
+ @endforeach
+ Due Amount
+
+
+
+ @php
+ $tot_grand = 0; $tot_due = 0; $option_totals = [];
+ foreach ($paymentOptions as $opt) { $option_totals[$opt->id] = 0; }
+ @endphp
+ @foreach ($sales_data as $sale)
+
+ {{ $sale->date }}
+ {{ $sale->reference_no }}
+ {{ $sale->cashier }}
+ {{ $sale->customer }}
+ {{ number_format($sale->grand_total, 2) }}
+ @foreach($paymentOptions as $option)
+ {{ number_format($sale->methods[$option->id] ?? 0, 2) }}
+ @endforeach
+ {{ number_format($sale->due_amount, 2) }}
+
+ @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
+
+
+
+ Total
+ {{ number_format($tot_grand, 2) }}
+ @foreach($paymentOptions as $option)
+ {{ number_format($option_totals[$option->id], 2) }}
+ @endforeach
+ {{ number_format($tot_due, 2) }}
+
+
+
+
+ Credit Sale Collections
+
+
+
+ Original Bill Date
+ Reference Number
+ Cashier
+ Customer
+ Grand Total
+ @foreach ($paymentOptions as $option)
+ {{ $option->name }}
+ @endforeach
+
+
+
+ @foreach ($creditCollections as $row)
+
+ {{ \Carbon\Carbon::parse($row['date'])->format('Y-m-d') }}
+ {{ $row['reference'] }}
+ {{ $row['cashier'] }}
+ {{ $row['customer'] }}
+ {{ number_format($row['grand_total'], 2) }}
+ @foreach ($paymentOptions as $option)
+ {{ number_format($row['methods'][$option->id] ?? 0, 2) }}
+ @endforeach
+
+ @endforeach
+
+
+
+ Total
+ {{ number_format($creditTotals['grand_total'], 2) }}
+ @foreach ($paymentOptions as $option)
+ {{ number_format($creditTotals['methods'][$option->id] ?? 0, 2) }}
+ @endforeach
+
+
+
+
+ Payment Method Summary
+
+
+
+
+ Payment Option
+ Sale Amount
+ Received Amount
+ Total Amount
+
+
+
+ @php
+ $grand_sale = 0; $grand_received = 0; $grand_total = 0;
+ @endphp
+ @foreach ($summaryData as $summary)
+
+ {{ $summary['name'] }}
+ {{ number_format($summary['sale_amount'], 2) }}
+ {{ number_format($summary['received_amount'], 2) }}
+ {{ number_format($summary['total_amount'], 2) }}
+
+ @php
+ $grand_sale += $summary['sale_amount'];
+ $grand_received += $summary['received_amount'];
+ $grand_total += $summary['total_amount'];
+ @endphp
+ @endforeach
+
+
+
+ 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 @@
-
+
Export PDF
@@ -278,5 +278,12 @@
window.location.href = exportUrl;
}
+
+ function exportFullPdf(exportType) {
+ var selectedDate = $('#report_date').val();
+
+ var exportUrl = "{{ url('/dailysalepaymentreportmodule/export_pdf') }}" + "?date=" + selectedDate + "&type=" + exportType;
+ window.location.href = exportUrl;
+ }
@endpush
\ No newline at end of file
diff --git a/Routes/web.php b/Routes/web.php
index e9e94f6..07fece0 100644
--- a/Routes/web.php
+++ b/Routes/web.php
@@ -17,5 +17,6 @@ Route::middleware(['common', 'auth', 'active'])->group(function () {
Route::controller(DailySalePaymentReportModuleController::class)->prefix('dailysalepaymentreportmodule')->group(function () {
Route::get('/', 'index');
Route::get('/export', 'exportReport');
+ Route::get('/export_pdf', 'exportPDF');
});
});