ReportTransactionController.php 1.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Exports\TransactionExport;
  4. use App\Models\Outlet;
  5. use App\Models\Transaction;
  6. use App\Services\TransactionService;
  7. use Illuminate\Support\Facades\Gate;
  8. use Inertia\Controller;
  9. use Inertia\Inertia;
  10. class ReportTransactionController extends Controller
  11. {
  12. /**
  13. * Display a listing of the resource.
  14. *
  15. * @return \Inertia\Response
  16. */
  17. public function index()
  18. {
  19. if (Gate::allows('isOutletHead')) {
  20. request()->merge(['outlet' => request()->user()->outlet_id]);
  21. } else if (Gate::allows('isEmployee')) {
  22. request()->merge(['outlet' => request()->user()->outlet_id]);
  23. }
  24. $transactions = Transaction::filter(request()->only('startDate', 'endDate', 'outlet'))
  25. ->get()
  26. ->groupBy('created_at')
  27. ->transform(fn($transactions) => [[
  28. 'date' => $transactions->first()->getRawOriginal('created_at'),
  29. 'createdAt' => $transactions->first()->created_at,
  30. 'totalTransaction' => $transactions->count(),
  31. 'totalPrice' => (new TransactionService)->totalPriceGroupAsString($transactions),
  32. ]])
  33. ->flatten(1)
  34. ->toArray();
  35. $transaction = (new TransactionService)->getPaginator($transactions);
  36. return inertia('transaction/Report', [
  37. 'filters' => request()->all('startDate', 'endDate', 'outlet'),
  38. 'transactions' => Inertia::lazy(
  39. fn() => $transaction
  40. ),
  41. 'outlets' => Outlet::all()
  42. ->transform(fn($outlet) => [
  43. 'label' => $outlet->name,
  44. 'value' => $outlet->id,
  45. ]),
  46. ]);
  47. }
  48. /**
  49. * Export to excel
  50. */
  51. public function exportExcel()
  52. {
  53. return new TransactionExport(request());
  54. }
  55. }