ExpenseController.php 4.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\Expense\StoreExpenseRequest;
  5. use App\Models\Expense;
  6. use App\Models\Outlet;
  7. use Illuminate\Database\QueryException;
  8. use Illuminate\Http\Request;
  9. use Illuminate\Support\Facades\DB;
  10. use Illuminate\Support\Facades\Gate;
  11. use Inertia\Inertia;
  12. class ExpenseController extends Controller
  13. {
  14. /**
  15. * Display a listing of the resource.
  16. *
  17. * @return \Inertia\Response
  18. */
  19. public function index()
  20. {
  21. if (Gate::allows('isOutletHead')) {
  22. request()->merge(['outlet' => request()->user()->outlet_id]);
  23. } else if (Gate::allows('isEmployee')) {
  24. request()->merge(['outlet' => request()->user()->outlet_id]);
  25. }
  26. return inertia('expense/Index', [
  27. 'filters' => request()->all('startDate', 'endDate', 'outlet'),
  28. 'expenses' => Expense::filter(request()->only('startDate', 'endDate', 'outlet'))
  29. ->latest()
  30. ->paginate(10)
  31. ->withQueryString()
  32. ->through(fn($expense) => [
  33. 'id' => $expense->id,
  34. 'createdAt' => $expense->created_at,
  35. 'amount' => $expense->amount,
  36. 'outlet' => $expense->outlet->name,
  37. 'user' => $expense->user->name,
  38. ]),
  39. 'outlets' => Outlet::all()
  40. ->transform(fn($outlet) => [
  41. 'label' => $outlet->name,
  42. 'value' => $outlet->id,
  43. ]),
  44. ]);
  45. }
  46. /**
  47. * Show the form for creating a new resource.
  48. *
  49. * @return \Illuminate\Http\Response
  50. */
  51. public function create()
  52. {
  53. return inertia('expense/Create');
  54. }
  55. /**
  56. * Store a newly created resource in storage.
  57. *
  58. * @param \Illuminate\Http\Request $request
  59. * @return \Illuminate\Http\Response
  60. */
  61. public function store(StoreExpenseRequest $request)
  62. {
  63. DB::beginTransaction();
  64. try {
  65. $expense = Expense::create([
  66. 'description' => $request->description,
  67. 'amount' => $request->amount,
  68. 'user_id' => $request->user()->id,
  69. 'outlet_id' => $request->user()->outlet_id,
  70. ]);
  71. $expense->mutation()->create([
  72. 'type' => 2,
  73. 'amount' => $expense->getRawOriginal('amount'),
  74. 'outlet_id' => $request->user()->outlet_id,
  75. ]);
  76. DB::commit();
  77. return back()->with('success', __('messages.success.store.expense'));
  78. } catch (QueryException $e) {
  79. DB::rollBack();
  80. return back()->with('error', __('messages.error.store.expense'));
  81. }
  82. }
  83. /**
  84. * Display the specified resource.
  85. *
  86. * @param Expense $expense
  87. * @return \Inertia\Response
  88. */
  89. public function show(Expense $expense)
  90. {
  91. return inertia('expense/Show', [
  92. 'expense' => [
  93. 'created_at' => $expense->created_at,
  94. 'amount' => $expense->amount,
  95. 'description' => $expense->description,
  96. 'user' => [
  97. 'name' => $expense->user->name,
  98. 'phone' => $expense->user->phone,
  99. 'email' => $expense->user->email,
  100. ],
  101. ],
  102. ]);
  103. }
  104. /**
  105. * Show the form for editing the specified resource.
  106. *
  107. * @param int $id
  108. * @return \Illuminate\Http\Response
  109. */
  110. public function edit($id)
  111. {
  112. //
  113. }
  114. /**
  115. * Update the specified resource in storage.
  116. *
  117. * @param \Illuminate\Http\Request $request
  118. * @param int $id
  119. * @return \Illuminate\Http\Response
  120. */
  121. public function update(Request $request, $id)
  122. {
  123. //
  124. }
  125. /**
  126. * Remove the specified resource from storage.
  127. *
  128. * @param int $id
  129. * @return \Illuminate\Http\Response
  130. */
  131. public function destroy($id)
  132. {
  133. //
  134. }
  135. }