MemberController.php 8.4KB

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