ReportTransactionController.php 2.1KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  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'))->get();
  25. $transactionGroupBy = $transactions->groupBy('created_at')
  26. ->transform(fn($transactions) => [[
  27. 'date' => $transactions->first()->getRawOriginal('created_at'),
  28. 'createdAt' => $transactions->first()->created_at,
  29. 'totalTransaction' => $transactions->count(),
  30. 'totalPrice' => (new TransactionService)->totalPriceGroupAsString($transactions),
  31. ]])
  32. ->flatten(1)
  33. ->toArray();
  34. $transaction = (new TransactionService)->getPaginator($transactionGroupBy);
  35. return inertia('transaction/Report', [
  36. 'filters' => request()->all('startDate', 'endDate', 'outlet'),
  37. 'transactions' => Inertia::lazy(
  38. fn() => [
  39. 'totalTransaction' => $transactions->count(),
  40. 'totalAmount' => (new TransactionService)->totalPriceGroupAsString($transactions),
  41. 'details' => $transaction,
  42. ]
  43. ),
  44. 'outlets' => Outlet::all()
  45. ->transform(fn($outlet) => [
  46. 'label' => $outlet->name,
  47. 'value' => $outlet->id,
  48. ]),
  49. ]);
  50. }
  51. /**
  52. * Export to excel
  53. */
  54. public function exportExcel()
  55. {
  56. return new TransactionExport(request());
  57. }
  58. }