UserController.php 6.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\User\ChangePasswordRequest;
  5. use App\Http\Requests\User\StoreUserRequest;
  6. use App\Http\Requests\User\UpdateUserRequest;
  7. use App\Models\Outlet;
  8. use App\Models\Role;
  9. use App\Models\User;
  10. use Illuminate\Support\Facades\Hash;
  11. class UserController extends Controller
  12. {
  13. /**
  14. * Create the controller instance.
  15. *
  16. * @return void
  17. */
  18. public function __construct()
  19. {
  20. $this->authorizeResource(User::class);
  21. }
  22. /**
  23. * Display a listing of the resource.
  24. *
  25. * @return \Inertia\Response
  26. */
  27. public function index()
  28. {
  29. return inertia('user/Index', [
  30. 'filters' => request()->all('search'),
  31. 'users' => User::filter(request()->only('search'))
  32. ->latest()
  33. ->paginate(10)
  34. ->withQueryString()
  35. ->through(fn($user) => [
  36. 'id' => $user->id,
  37. 'name' => $user->name,
  38. 'phone' => $user->phone,
  39. 'email' => $user->email,
  40. 'gender' => $user->gender_id,
  41. 'role' => $user->role->name,
  42. 'outlet' => $user->outlet->name ?? '',
  43. 'status' => $user->status,
  44. ]),
  45. ]);
  46. }
  47. /**
  48. * Show the form for creating a new resource.
  49. *
  50. * @return \Inertia\Response
  51. */
  52. public function create()
  53. {
  54. return inertia('user/Create', [
  55. 'roles' => Role::whereNotIn('id', [1])
  56. ->get()
  57. ->transform(fn($role) => [
  58. 'label' => $role->name,
  59. 'value' => $role->id,
  60. ]),
  61. 'outlets' => Outlet::get()
  62. ->transform(fn($outlet) => [
  63. 'label' => $outlet->name,
  64. 'value' => $outlet->id,
  65. ]),
  66. 'genders' => [
  67. ['label' => 'Perempuan', 'value' => 1],
  68. ['label' => 'Laki-laki', 'value' => 2],
  69. ],
  70. ]);
  71. }
  72. /**
  73. * Store a newly created resource in storage.
  74. *
  75. * @param \Illuminate\Http\Request $request
  76. * @return \Illuminate\Http\Response
  77. */
  78. public function store(StoreUserRequest $request)
  79. {
  80. User::create($request->validated());
  81. return back()->with('success', __('messages.success.store.user'));
  82. }
  83. /**
  84. * Display the specified resource.
  85. *
  86. * @param User $user
  87. * @return \Inertia\Response
  88. */
  89. public function show(User $user)
  90. {
  91. return inertia('user/Show', [
  92. 'user' => [
  93. 'id' => $user->id,
  94. 'name' => $user->name,
  95. 'phone' => $user->phone,
  96. 'email' => $user->email,
  97. 'gender_id' => (int) $user->getRawOriginal('gender_id'),
  98. 'outlet_id' => $user->outlet_id,
  99. 'role_id' => $user->role_id,
  100. ],
  101. 'roles' => Role::whereNotIn('id', [1])
  102. ->get()
  103. ->transform(fn($role) => [
  104. 'label' => $role->name,
  105. 'value' => $role->id,
  106. ]),
  107. 'outlets' => Outlet::get()
  108. ->transform(fn($outlet) => [
  109. 'label' => $outlet->name,
  110. 'value' => $outlet->id,
  111. ]),
  112. 'genders' => [
  113. ['label' => 'Perempuan', 'value' => 1],
  114. ['label' => 'Laki-laki', 'value' => 2],
  115. ],
  116. ]);
  117. }
  118. /**
  119. * Show the form for editing the specified resource.
  120. *
  121. * @param User $user
  122. * @return \Inertia\Response
  123. */
  124. public function edit(User $user)
  125. {
  126. return inertia('user/Edit', [
  127. 'user' => [
  128. 'id' => $user->id,
  129. 'name' => $user->name,
  130. 'phone' => $user->phone,
  131. 'email' => $user->email,
  132. 'gender_id' => (int) $user->getRawOriginal('gender_id'),
  133. 'outlet_id' => $user->outlet_id,
  134. 'role_id' => $user->role_id,
  135. 'relation' => $user->expenses()->exists() || $user->transactions()->exists(),
  136. ],
  137. 'roles' => Role::whereNotIn('id', [1])
  138. ->get()
  139. ->transform(fn($role) => [
  140. 'label' => $role->name,
  141. 'value' => $role->id,
  142. ]),
  143. 'outlets' => Outlet::get()
  144. ->transform(fn($outlet) => [
  145. 'label' => $outlet->name,
  146. 'value' => $outlet->id,
  147. ]),
  148. 'genders' => [
  149. ['label' => 'Perempuan', 'value' => 1],
  150. ['label' => 'Laki-laki', 'value' => 2],
  151. ],
  152. ]);
  153. }
  154. /**
  155. * Update the specified resource in storage.
  156. *
  157. * @param \Illuminate\Http\Request $request
  158. * @param User $user
  159. * @return \Illuminate\Http\Response
  160. */
  161. public function update(UpdateUserRequest $request, User $user)
  162. {
  163. $user->update($request->validated());
  164. return back()->with('success', __('messages.success.update.user'));
  165. }
  166. /**
  167. * Remove the specified resource from storage.
  168. *
  169. * @param User $user
  170. * @return \Illuminate\Http\Response
  171. */
  172. public function destroy(User $user)
  173. {
  174. $user->delete();
  175. return to_route('users.index')->with('success', __('messages.success.destroy.user'));
  176. }
  177. /**
  178. * Block user
  179. *
  180. * @param User $user
  181. * @return \Illuminate\Http\Response
  182. */
  183. public function block(User $user)
  184. {
  185. $user->status = !$user->getRawOriginal('status');
  186. $user->update();
  187. if ($user->getRawOriginal('status')) {
  188. $msg = __('messages.user.active_user');
  189. } else {
  190. $msg = __('messages.user.no_active_user');
  191. }
  192. return back()->with('success', $msg);
  193. }
  194. /**
  195. * Change Password
  196. *
  197. * @param \Illuminate\Http\Request $request
  198. * @return \Illuminate\Http\Response
  199. */
  200. public function changePassword(ChangePasswordRequest $request)
  201. {
  202. if (!Hash::check($request->old_password, $request->user()->password)) {
  203. return back()->with('error', __('messages.error.store.change-password'));
  204. }
  205. $request->user()->update(['password' => bcrypt($request->new_password)]);
  206. return back()->with('success', __('messages.success.update.change-password'));
  207. }
  208. }