| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 | 
							- <?php
 
- namespace App\Http\Controllers\Admin;
 
- use App\Shop\Admins\Requests\CreateEmployeeRequest;
 
- use App\Shop\Admins\Requests\UpdateEmployeeRequest;
 
- use App\Shop\Employees\Repositories\EmployeeRepository;
 
- use App\Shop\Employees\Repositories\Interfaces\EmployeeRepositoryInterface;
 
- use App\Shop\Roles\Repositories\RoleRepositoryInterface;
 
- use App\Http\Controllers\Controller;
 
- use Illuminate\Support\Facades\Hash;
 
- class EmployeeController extends Controller
 
- {
 
-     /**
 
-      * @var EmployeeRepositoryInterface
 
-      */
 
-     private $employeeRepo;
 
-     /**
 
-      * @var RoleRepositoryInterface
 
-      */
 
-     private $roleRepo;
 
-     /**
 
-      * EmployeeController constructor.
 
-      *
 
-      * @param EmployeeRepositoryInterface $employeeRepository
 
-      * @param RoleRepositoryInterface $roleRepository
 
-      */
 
-     public function __construct(
 
-         EmployeeRepositoryInterface $employeeRepository,
 
-         RoleRepositoryInterface $roleRepository
 
-     ) {
 
-         $this->employeeRepo = $employeeRepository;
 
-         $this->roleRepo = $roleRepository;
 
-     }
 
-     /**
 
-      * Display a listing of the resource.
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function index()
 
-     {
 
-         $list = $this->employeeRepo->listEmployees('created_at', 'desc');
 
-         return view('admin.employees.list', [
 
-             'employees' => $this->employeeRepo->paginateArrayResults($list->all())
 
-         ]);
 
-     }
 
-     /**
 
-      * Show the form for creating a new resource.
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function create()
 
-     {
 
-         $roles = $this->roleRepo->listRoles();
 
-         return view('admin.employees.create', compact('roles'));
 
-     }
 
-     /**
 
-      * Store a newly created resource in storage.
 
-      *
 
-      * @param  CreateEmployeeRequest $request
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function store(CreateEmployeeRequest $request)
 
-     {
 
-         $employee = $this->employeeRepo->createEmployee($request->all());
 
-         if ($request->has('role')) {
 
-             $employeeRepo = new EmployeeRepository($employee);
 
-             $employeeRepo->syncRoles([$request->input('role')]);
 
-         }
 
-         return redirect()->route('admin.employees.index');
 
-     }
 
-     /**
 
-      * Display the specified resource.
 
-      *
 
-      * @param  int $id
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function show(int $id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         return view('admin.employees.show', ['employee' => $employee]);
 
-     }
 
-     /**
 
-      * Show the form for editing the specified resource.
 
-      *
 
-      * @param  int $id
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function edit(int $id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         $roles = $this->roleRepo->listRoles('created_at', 'desc');
 
-         $isCurrentUser = $this->employeeRepo->isAuthUser($employee);
 
-         return view(
 
-             'admin.employees.edit',
 
-             [
 
-                 'employee' => $employee,
 
-                 'roles' => $roles,
 
-                 'isCurrentUser' => $isCurrentUser,
 
-                 'selectedIds' => $employee->roles()->pluck('role_id')->all()
 
-             ]
 
-         );
 
-     }
 
-     /**
 
-      * Update the specified resource in storage.
 
-      *
 
-      * @param UpdateEmployeeRequest $request
 
-      * @param  int $id
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      */
 
-     public function update(UpdateEmployeeRequest $request, $id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         $isCurrentUser = $this->employeeRepo->isAuthUser($employee);
 
-         $empRepo = new EmployeeRepository($employee);
 
-         $empRepo->updateEmployee($request->except('_token', '_method', 'password'));
 
-         if ($request->has('password') && !empty($request->input('password'))) {
 
-             $employee->password = Hash::make($request->input('password'));
 
-             $employee->save();
 
-         }
 
-         if ($request->has('roles') and !$isCurrentUser) {
 
-             $employee->roles()->sync($request->input('roles'));
 
-         } elseif (!$isCurrentUser) {
 
-             $employee->roles()->detach();
 
-         }
 
-         return redirect()->route('admin.employees.edit', $id)
 
-             ->with('message', 'Update successful');
 
-     }
 
-     /**
 
-      * Remove the specified resource from storage.
 
-      *
 
-      * @param  int $id
 
-      *
 
-      * @return \Illuminate\Http\Response
 
-      * @throws \Exception
 
-      */
 
-     public function destroy(int $id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         $employeeRepo = new EmployeeRepository($employee);
 
-         $employeeRepo->deleteEmployee();
 
-         return redirect()->route('admin.employees.index')->with('message', 'Delete successful');
 
-     }
 
-     /**
 
-      * @param $id
 
-      *
 
-      * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 
-      */
 
-     public function getProfile($id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         return view('admin.employees.profile', ['employee' => $employee]);
 
-     }
 
-     /**
 
-      * @param UpdateEmployeeRequest $request
 
-      * @param $id
 
-      *
 
-      * @return \Illuminate\Http\RedirectResponse
 
-      */
 
-     public function updateProfile(UpdateEmployeeRequest $request, $id)
 
-     {
 
-         $employee = $this->employeeRepo->findEmployeeById($id);
 
-         $update = new EmployeeRepository($employee);
 
-         $update->updateEmployee($request->except('_token', '_method', 'password'));
 
-         if ($request->has('password') && $request->input('password') != '') {
 
-             $update->updateEmployee($request->only('password'));
 
-         }
 
-         return redirect()->route('admin.employee.profile', $id)
 
-             ->with('message', 'Update successful');
 
-     }
 
- }
 
 
  |