public function export(Request $request)
{
$businessId = $request->input('business_id'); // Optional filter
return Excel::download(new PurchasedNotificationPackagesExport($businessId),'PurchasedPackages.xlsx');
}
public function export()
{
$response = new StreamedResponse(function () {
$handle = fopen('php://output', 'w');
// Header row
fputcsv($handle, [
'Business Name',
'Package Name',
'Total Push Limit',
'Push Limit (Left)',
'Start Datetime',
'End Datetime',
'Days (Left)',
'Price',
'Status',
]);
// Fetch data in chunks
PurchasedNotificationPackage::with(['business', 'notification_package'])
->selectRaw('*, DATEDIFF(end_datetime, ?) as remaining_days', [Carbon::now()->toDateTimeString()])
->when(request('business_id'), fn($q) => $q->where('business_id', request('business_id')))
->latest()
->chunk(1000, function ($packages) use ($handle) {
foreach ($packages as $row) {
$status = 'Inactive';
if (($row->end_datetime && Carbon::parse($row->end_datetime)->isPast()) || $row->push_limit == 0) {
$status = 'Expired';
} elseif ($row->status == '1') {
$status = 'Active';
}
$start = Carbon::parse($row->start_datetime)->format(config('app.app_datetime_without_seconds_format'));
$end = Carbon::parse($row->end_datetime)->format(config('app.app_datetime_without_seconds_format'));
fputcsv($handle, [
$row->business->name ?? 'N/A',
$row->notification_package->name ?? 'N/A',
$row->purchased_push_limit == 0 ? '0' : $row->purchased_push_limit,
$row->push_limit == 0 ? '0' : $row->push_limit,
$start,
$end,
$row->remaining_days . ' days',
$row->price,
$status,
]);
}
});
fclose($handle);
});
$response->headers->set('Content-Type', 'text/csv');
$response->headers->set('Content-Disposition', 'attachment; filename="purchased_packages_' . now()->format('Ymd_His') . '.csv"');
return $response;
}
Top comments (0)