MemberController.php 8.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  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' => 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. * Store a newly created resource in storage.
  65. *
  66. * @param \Illuminate\Http\Request $request
  67. * @return \Illuminate\Http\Response
  68. */
  69. public function store(StoreMemberRequest $request)
  70. {
  71. DB::beginTransaction();
  72. try {
  73. $member = Member::create([
  74. 'name' => $request->name,
  75. 'phone' => $request->phone,
  76. 'exp_date' => now()->addDays(30),
  77. 'type_member_id' => $request->type_member_id,
  78. ]);
  79. foreach ($request->vehicles as $vehicle) {
  80. $member->vehicles()->create([
  81. 'plat_number' => $vehicle['platNumber'],
  82. 'type_vehicle_id' => $vehicle['typeVehicleId'],
  83. ]);
  84. }
  85. $topUp = $member->topUps()->create([
  86. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  87. 'exp_date' => now()->addDays(30),
  88. 'user_id' => auth()->user()->id,
  89. ]);
  90. $topUp->mutation()->create([
  91. 'type' => 1,
  92. 'amount' => TypeMember::find($request->type_member_id)->getRawOriginal('price'),
  93. ]);
  94. DB::commit();
  95. return back()->with('success', __('messages.success.store.member'));
  96. } catch (QueryException $qe) {
  97. DB::rollBack();
  98. return back()->with('error', __('messages.error.store.member'));
  99. }
  100. }
  101. /**
  102. * Display the specified resource.
  103. *
  104. * @param Member $member
  105. * @return \Inertia\Response
  106. */
  107. public function show(Member $member)
  108. {
  109. //
  110. }
  111. /**
  112. * Show the form for editing the specified resource.
  113. *
  114. * @param Member $member
  115. * @return \Inertia\Response
  116. */
  117. public function edit(Member $member)
  118. {
  119. if (request('id')) {
  120. $typeMember = $member->typeMember->filter(request('id'))->first();
  121. } else {
  122. $typeMember = $member->typeMember;
  123. }
  124. return inertia('member/Edit', [
  125. 'member' => [
  126. 'id' => $member->id,
  127. 'name' => $member->name,
  128. 'phone' => $member->phone,
  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,
  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($request->validated());
  196. $member->vehicles()->delete();
  197. foreach ($request->vehicles as $vehicle) {
  198. $member->vehicles()->create([
  199. 'plat_number' => $vehicle['platNumber'],
  200. 'type_vehicle_id' => $vehicle['typeVehicleId'],
  201. ]);
  202. }
  203. }
  204. DB::commit();
  205. return back()->with('success', __('messages.success.update.member'));
  206. } catch (QueryException $qe) {
  207. DB::rollBack();
  208. return back()->with('error', __('messages.error.update'));
  209. }
  210. }
  211. /**
  212. * Remove the specified resource from storage.
  213. *
  214. * @param int $id
  215. * @return \Illuminate\Http\Response
  216. */
  217. public function destroy($id)
  218. {
  219. //
  220. }
  221. }