EmployeeController.php 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. <?php
  2. namespace App\Http\Controllers\Admin;
  3. use App\Shop\Admins\Requests\CreateEmployeeRequest;
  4. use App\Shop\Admins\Requests\UpdateEmployeeRequest;
  5. use App\Shop\Employees\Repositories\EmployeeRepository;
  6. use App\Shop\Employees\Repositories\Interfaces\EmployeeRepositoryInterface;
  7. use App\Shop\Roles\Repositories\RoleRepositoryInterface;
  8. use App\Http\Controllers\Controller;
  9. use Illuminate\Support\Facades\Hash;
  10. class EmployeeController extends Controller
  11. {
  12. /**
  13. * @var EmployeeRepositoryInterface
  14. */
  15. private $employeeRepo;
  16. /**
  17. * @var RoleRepositoryInterface
  18. */
  19. private $roleRepo;
  20. /**
  21. * EmployeeController constructor.
  22. *
  23. * @param EmployeeRepositoryInterface $employeeRepository
  24. * @param RoleRepositoryInterface $roleRepository
  25. */
  26. public function __construct(
  27. EmployeeRepositoryInterface $employeeRepository,
  28. RoleRepositoryInterface $roleRepository
  29. ) {
  30. $this->employeeRepo = $employeeRepository;
  31. $this->roleRepo = $roleRepository;
  32. }
  33. /**
  34. * Display a listing of the resource.
  35. *
  36. * @return \Illuminate\Http\Response
  37. */
  38. public function index()
  39. {
  40. $list = $this->employeeRepo->listEmployees('created_at', 'desc');
  41. return view('admin.employees.list', [
  42. 'employees' => $this->employeeRepo->paginateArrayResults($list->all())
  43. ]);
  44. }
  45. /**
  46. * Show the form for creating a new resource.
  47. *
  48. * @return \Illuminate\Http\Response
  49. */
  50. public function create()
  51. {
  52. $roles = $this->roleRepo->listRoles();
  53. return view('admin.employees.create', compact('roles'));
  54. }
  55. /**
  56. * Store a newly created resource in storage.
  57. *
  58. * @param CreateEmployeeRequest $request
  59. *
  60. * @return \Illuminate\Http\Response
  61. */
  62. public function store(CreateEmployeeRequest $request)
  63. {
  64. $employee = $this->employeeRepo->createEmployee($request->all());
  65. if ($request->has('role')) {
  66. $employeeRepo = new EmployeeRepository($employee);
  67. $employeeRepo->syncRoles([$request->input('role')]);
  68. }
  69. return redirect()->route('admin.employees.index');
  70. }
  71. /**
  72. * Display the specified resource.
  73. *
  74. * @param int $id
  75. *
  76. * @return \Illuminate\Http\Response
  77. */
  78. public function show(int $id)
  79. {
  80. $employee = $this->employeeRepo->findEmployeeById($id);
  81. return view('admin.employees.show', ['employee' => $employee]);
  82. }
  83. /**
  84. * Show the form for editing the specified resource.
  85. *
  86. * @param int $id
  87. *
  88. * @return \Illuminate\Http\Response
  89. */
  90. public function edit(int $id)
  91. {
  92. $employee = $this->employeeRepo->findEmployeeById($id);
  93. $roles = $this->roleRepo->listRoles('created_at', 'desc');
  94. $isCurrentUser = $this->employeeRepo->isAuthUser($employee);
  95. return view(
  96. 'admin.employees.edit',
  97. [
  98. 'employee' => $employee,
  99. 'roles' => $roles,
  100. 'isCurrentUser' => $isCurrentUser,
  101. 'selectedIds' => $employee->roles()->pluck('role_id')->all()
  102. ]
  103. );
  104. }
  105. /**
  106. * Update the specified resource in storage.
  107. *
  108. * @param UpdateEmployeeRequest $request
  109. * @param int $id
  110. *
  111. * @return \Illuminate\Http\Response
  112. */
  113. public function update(UpdateEmployeeRequest $request, $id)
  114. {
  115. $employee = $this->employeeRepo->findEmployeeById($id);
  116. $isCurrentUser = $this->employeeRepo->isAuthUser($employee);
  117. $empRepo = new EmployeeRepository($employee);
  118. $empRepo->updateEmployee($request->except('_token', '_method', 'password'));
  119. if ($request->has('password') && !empty($request->input('password'))) {
  120. $employee->password = Hash::make($request->input('password'));
  121. $employee->save();
  122. }
  123. if ($request->has('roles') and !$isCurrentUser) {
  124. $employee->roles()->sync($request->input('roles'));
  125. } elseif (!$isCurrentUser) {
  126. $employee->roles()->detach();
  127. }
  128. return redirect()->route('admin.employees.edit', $id)
  129. ->with('message', 'Update successful');
  130. }
  131. /**
  132. * Remove the specified resource from storage.
  133. *
  134. * @param int $id
  135. *
  136. * @return \Illuminate\Http\Response
  137. * @throws \Exception
  138. */
  139. public function destroy(int $id)
  140. {
  141. $employee = $this->employeeRepo->findEmployeeById($id);
  142. $employeeRepo = new EmployeeRepository($employee);
  143. $employeeRepo->deleteEmployee();
  144. return redirect()->route('admin.employees.index')->with('message', 'Delete successful');
  145. }
  146. /**
  147. * @param $id
  148. *
  149. * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
  150. */
  151. public function getProfile($id)
  152. {
  153. $employee = $this->employeeRepo->findEmployeeById($id);
  154. return view('admin.employees.profile', ['employee' => $employee]);
  155. }
  156. /**
  157. * @param UpdateEmployeeRequest $request
  158. * @param $id
  159. *
  160. * @return \Illuminate\Http\RedirectResponse
  161. */
  162. public function updateProfile(UpdateEmployeeRequest $request, $id)
  163. {
  164. $employee = $this->employeeRepo->findEmployeeById($id);
  165. $update = new EmployeeRepository($employee);
  166. $update->updateEmployee($request->except('_token', '_method', 'password'));
  167. if ($request->has('password') && $request->input('password') != '') {
  168. $update->updateEmployee($request->only('password'));
  169. }
  170. return redirect()->route('admin.employee.profile', $id)
  171. ->with('message', 'Update successful');
  172. }
  173. }