DepartmentController.php 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. <?php
  2. namespace App\Http\Controllers\API;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\API\Department\CreateOrUpdateRequest;
  5. use App\Http\Resources\API\DepartmentResource;
  6. use App\Models\Department;
  7. use Illuminate\Http\Request;
  8. use Illuminate\Support\Facades\Auth;
  9. class DepartmentController extends Controller
  10. {
  11. public function index(Request $request)
  12. {
  13. return $this->getDepartments($request);
  14. }
  15. public function publicSearch(Request $request)
  16. {
  17. return $this->getDepartments($request);
  18. }
  19. protected function getDepartments(Request $request)
  20. {
  21. $sort = $request->input('sort', 'desc');
  22. $pageSize = $request->get('page_size') ?? 10;
  23. $departments = Department::filter($request->all())->orderBy('created_at', $sort)->paginate($pageSize);
  24. $departmentTree = !empty(make_tree($departments->toArray()['data'])) ? make_tree($departments->toArray()['data']) : $departments->toArray()['data'];
  25. return [
  26. 'data' => $departmentTree,
  27. 'total' => $departments->total(),
  28. ];
  29. }
  30. public function store(CreateOrUpdateRequest $request)
  31. {
  32. $department=new Department();
  33. $department->mergeFillable([
  34. 'company_id'
  35. ]);
  36. $department->fill([
  37. ...$request->all(),
  38. 'company_id' => Auth::user()->company_id,
  39. ]);
  40. $department->save();
  41. return $this->created();
  42. }
  43. public function show(string $id)
  44. {
  45. $department=Department::query()->findOrFail($id);
  46. return new DepartmentResource($department);
  47. }
  48. public function update(CreateOrUpdateRequest $request,string $id)
  49. {
  50. $department=Department::findOrFail($id);
  51. $department->fill($request->all());
  52. $department->save();
  53. return $this->noContent();
  54. }
  55. public function destroy(string $id)
  56. {
  57. $department = Department::findOrFail($id);
  58. if(!empty($department->children()->first())){
  59. throw new \Exception("Please remove the sub-level departments.");
  60. }
  61. $department->delete();
  62. return $this->noContent();
  63. }
  64. public function departmentUserIndex(){
  65. $companyId=Auth::user()->company_id;
  66. $department=Department::query()->where('company_id',$companyId)->with(['users'=>function($query){
  67. $query->select('id','name','department_id');
  68. }])->get(['id','name','parent_id']);
  69. return $this->success([
  70. 'data' => make_tree($department->toArray())
  71. ]);
  72. }
  73. }