MemberController.php 8.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Requests\Member\StoreMemberRequest;
  4. use App\Http\Requests\Member\UpdateMemberRequest;
  5. use App\Models\Member;
  6. use App\Models\TypeMember;
  7. use Illuminate\Database\QueryException;
  8. use Illuminate\Support\Facades\DB;
  9. use Inertia\Inertia;
  10. class MemberController extends Controller
  11. {
  12. /**
  13. * Display a listing of the resource.
  14. *
  15. * @return \Inertia\Response
  16. */
  17. public function index()
  18. {
  19. return inertia('member/Index', [
  20. 'initialSearch' => request('search'),
  21. 'members' => Member::filter(request()->only('search'))
  22. ->latest()
  23. ->paginate(10)
  24. ->withQueryString()
  25. ->through(fn($member) => [
  26. 'id' => $member->id,
  27. 'updatedAt' => $member->updated_at,
  28. 'name' => $member->name,
  29. 'platNumber' => $member->vehicleDetail(),
  30. 'type' => $member->typeMember->type,
  31. 'price' => $member->topUps()->latest()->first()->amount,
  32. 'expDate' => $member->exp_date,
  33. ]),
  34. ]);
  35. }
  36. /**
  37. * Show the form for creating a new resource.
  38. *
  39. * @return \Inertia\Response
  40. */
  41. public function create()
  42. {
  43. return inertia('member/Create', [
  44. 'typeMembers' => TypeMember::get()->transform(fn($typeMember) => [
  45. 'label' => $typeMember->type,
  46. 'value' => $typeMember->id,
  47. ]),
  48. 'typeMember' => Inertia::lazy(
  49. fn() => TypeMember::filter(request('id'))->get()->transform(fn($typeMember) => [
  50. 'type' => $typeMember->type,
  51. 'description' => $typeMember->description,
  52. 'price' => $typeMember->price,
  53. 'max' => $typeMember->maxVehicleDetail(),
  54. 'maxVehicles' => $typeMember->fresh()->maxVehicles->transform(fn($maxVehicle) => [
  55. 'value' => $maxVehicle->id,
  56. 'label' => $maxVehicle->typeVehicle->type,
  57. 'maxVehicle' => $maxVehicle->max,
  58. 'typeVehicleId' => $maxVehicle->typeVehicle->id,
  59. ]),
  60. ])->first(),
  61. ),
  62. ]);
  63. }
  64. /**
  65. * Store a newly created resource in storage.
  66. *
  67. * @param \Illuminate\Http\Request $request
  68. * @return \Illuminate\Http\Response
  69. */
  70. public function store(StoreMemberRequest $request)
  71. {
  72. DB::beginTransaction();
  73. try {
  74. $member = Member::create([
  75. 'name' => $request->name,
  76. 'phone' => $request->phone,
  77. 'exp_date' => now()->addDays(30),
  78. 'type_member_id' => $request->type_member_id,
  79. ]);
  80. foreach ($request->vehicles as $vehicle) {
  81. $member->vehicles()->create([
  82. 'plat_number' => $vehicle['platNumber'],
  83. 'type_vehicle_id' => $vehicle['typeVehicleId'],
  84. ]);
  85. }
  86. $topUp = $member->topUps()->create([
  87. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  88. 'exp_date' => now()->addDays(30),
  89. 'user_id' => auth()->user()->id,
  90. ]);
  91. $topUp->mutation()->create([
  92. 'type' => 1,
  93. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  94. ]);
  95. DB::commit();
  96. return back()->with('success', __('messages.success.store.member'));
  97. } catch (QueryException $qe) {
  98. DB::rollBack();
  99. return back()->with('error', __('messages.error.store.member'));
  100. }
  101. }
  102. /**
  103. * Display the specified resource.
  104. *
  105. * @param Member $member
  106. * @return \Inertia\Response
  107. */
  108. public function show(Member $member)
  109. {
  110. //
  111. }
  112. /**
  113. * Show the form for editing the specified resource.
  114. *
  115. * @param Member $member
  116. * @return \Inertia\Response
  117. */
  118. public function edit(Member $member)
  119. {
  120. if (request('id')) {
  121. $typeMember = $member->typeMember->filter(request('id'))->first();
  122. } else {
  123. $typeMember = $member->typeMember;
  124. }
  125. return inertia('member/Edit', [
  126. 'member' => [
  127. 'id' => $member->id,
  128. 'name' => $member->name,
  129. 'typeMemberId' => $member->type_member_id,
  130. ],
  131. 'initialVehicles' => $member->vehicles->transform(fn($vehicle) => [
  132. 'platNumber' => $vehicle->plat_number,
  133. 'typeVehicle' => $vehicle->typeVehicle->type,
  134. 'typeVehicleId' => $vehicle->typeVehicle->id,
  135. 'maxVehicleId' => $member->typeMember->maxVehicles
  136. ->where('type_vehicle_id', $vehicle->typeVehicle->id)
  137. ->pluck('id')[0],
  138. 'maxVehicle' => $member->typeMember->maxVehicles
  139. ->where('type_vehicle_id', $vehicle->typeVehicle->id)
  140. ->pluck('max')[0],
  141. ]),
  142. 'typeMembers' => TypeMember::get()->transform(fn($typeMember) => [
  143. 'label' => $typeMember->type,
  144. 'value' => $typeMember->id,
  145. ]),
  146. 'typeMember' => fn() => [
  147. 'type' => $typeMember->type,
  148. 'description' => $typeMember->description,
  149. 'price' => $typeMember->price,
  150. 'max' => $typeMember->maxVehicleDetail(),
  151. 'maxVehicles' => $typeMember->fresh()->maxVehicles->transform(fn($maxVehicle) => [
  152. 'value' => $maxVehicle->id,
  153. 'label' => $maxVehicle->typeVehicle->type,
  154. 'maxVehicle' => $maxVehicle->max,
  155. 'typeVehicleId' => $maxVehicle->typeVehicle->id,
  156. ]),
  157. ],
  158. ]);
  159. }
  160. /**
  161. * Update the specified resource in storage.
  162. *
  163. * @param \Illuminate\Http\Request $request
  164. * @param Member $member
  165. * @return \Illuminate\Http\Response
  166. */
  167. public function update(UpdateMemberRequest $request, Member $member)
  168. {
  169. DB::beginTransaction();
  170. try {
  171. if ($member->type_member_id !== $request->type_member_id) {
  172. $member->update([
  173. 'name' => $request->name,
  174. 'phone' => $request->phone ?? $member->phone,
  175. 'exp_date' => now()->addDays(30),
  176. 'type_member_id' => $request->type_member_id,
  177. ]);
  178. $member->vehicles()->delete();
  179. foreach ($request->vehicles as $vehicle) {
  180. $member->vehicles()->create([
  181. 'plat_number' => $vehicle['platNumber'],
  182. 'type_vehicle_id' => $vehicle['typeVehicleId'],
  183. ]);
  184. }
  185. $topUp = $member->topUps()->create([
  186. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  187. 'exp_date' => now()->addDays(30),
  188. 'user_id' => auth()->user()->id,
  189. ]);
  190. $topUp->mutation()->create([
  191. 'type' => 1,
  192. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  193. ]);
  194. } else {
  195. $member->update([
  196. 'name' => $request->name,
  197. 'phone' => $request->phone ?? $member->phone,
  198. 'type_member_id' => $request->type_member_id,
  199. ]);
  200. $member->vehicles()->delete();
  201. foreach ($request->vehicles as $vehicle) {
  202. $member->vehicles()->create([
  203. 'plat_number' => $vehicle['platNumber'],
  204. 'type_vehicle_id' => $vehicle['typeVehicleId'],
  205. ]);
  206. }
  207. }
  208. DB::commit();
  209. return back()->with('success', __('messages.success.update.member'));
  210. } catch (QueryException $qe) {
  211. DB::rollBack();
  212. return back()->with('error', __('messages.error.update'));
  213. }
  214. }
  215. /**
  216. * Remove the specified resource from storage.
  217. *
  218. * @param int $id
  219. * @return \Illuminate\Http\Response
  220. */
  221. public function destroy($id)
  222. {
  223. //
  224. }
  225. }