Project.php 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <?php
  2. namespace App\Models;
  3. use Illuminate\Support\Facades\Auth;
  4. use Illuminate\Http\Request;
  5. use Illuminate\Support\Facades\Validator;
  6. use Illuminate\Database\Eloquent\Model;
  7. use Illuminate\Database\Eloquent\SoftDeletes;
  8. class Project extends BaseModel
  9. {
  10. use SoftDeletes;
  11. public function getValidator(Request $request, $type)
  12. {
  13. $validator = Validator::make($request->input('data'), [
  14. 'name' => 'required'
  15. ], [
  16. 'name.required' => '名称必填'
  17. ]);
  18. $validator->after(function ($validator) use($request) {
  19. $data = $request->input('data');
  20. if (isset($data['name']) && mb_strlen($data['name']) > 16) {
  21. $validator->errors()->add('name', '名称长度不能超过16');
  22. }
  23. });
  24. return $validator;
  25. }
  26. public function getTwoLevelOptions()
  27. {
  28. $projects = Project::select('name as text', 'id as value')->where('id','!=',1)->get();
  29. $projects = $projects->prepend($this->transObject(['text' => '选择项目', 'value' => '']));
  30. foreach ($projects as $project) {
  31. $work_points = WorkPoint::where('project_id', $project->value)->select('name as text', 'id as value')->get();
  32. $project->work_points = $work_points->prepend($this->transObject(['text' => '选择工点', 'value' => '']));
  33. }
  34. return $projects;
  35. }
  36. public function transObject($items)
  37. {
  38. return json_decode(json_encode($items));
  39. }
  40. public function project_user(){
  41. return $this->hasMany(ProjectUser::class,'project_id','id');
  42. }
  43. public function getManager()
  44. {
  45. $role = ProjectRole::getByKey('manager');
  46. if(!$role) return null;
  47. $res = ProjectUser::where([
  48. ['project_id', '=', $this['id']],
  49. ['project_role_id', '=', $role->id]
  50. ])->first();
  51. if($res) return User::find($res['user_id']);
  52. return false;
  53. }
  54. public function user()
  55. {
  56. return $this->belongsTo('App\Models\User', 'user_id');
  57. }
  58. public function getUserProjectRole()
  59. {
  60. $user = Auth::guard('mini')->user();
  61. $project_user = ProjectUser::where([
  62. ['project_id', '=', $this['id']],
  63. ['user_id', '=', $user->id]
  64. ])->first();
  65. if($project_user) {
  66. return ProjectRole::find($project_user->project_role_id);
  67. }
  68. return null;
  69. }
  70. public function isTopLevel($user)
  71. {
  72. $current_role = ProjectUser::where([
  73. ['project_id', '=', $this['id']],
  74. ['user_id', '=', $user->id]
  75. ])->first();
  76. if(empty($current_role)) return false;
  77. $res = ProjectUser::where([
  78. ['project_id', '=', $this['id']],
  79. ['project_role_id', '>', $current_role['project_role_id']]
  80. ])->first();
  81. return $res ? false : true;
  82. }
  83. /**
  84. * @param User $user
  85. * @param $type: current/next
  86. * @return ProjectUser
  87. */
  88. public function getProjectUser(User $user, $type = 'current')
  89. {
  90. $current = ProjectUser::where([
  91. ['project_id', '=', $this['id']],
  92. ['user_id', '=', $user['id']]
  93. ])->first();
  94. if($type == 'current' || !$current) return $current;
  95. $next = ProjectUser::where([
  96. ['project_id', '=', $this['id']],
  97. ['project_role_id', '>', $current['project_role_id']]
  98. ])->first();
  99. return $next ? $next : $current;
  100. }
  101. public function getCreateProjectRoleId(User $user, $is_draft)
  102. {
  103. $project_user = $this->getProjectUser($user, $is_draft == 1 ? 'current' : 'next');
  104. return $project_user ? $project_user['project_role_id'] : '';
  105. }
  106. public static function getOptions()
  107. {
  108. return self::where('id', '>', 0)->get()->toArray();
  109. }
  110. public static function getNotOneProjectOptions(){
  111. return self::where('id','!=',1)->get();
  112. }
  113. public function createDefaultUser()
  114. {
  115. $user_id = $this['user_id'];
  116. ProjectUser::where('project_id', $this['id'])->delete();
  117. ProjectUser::create([
  118. 'project_id' => $this['id'],
  119. 'user_id' => $user_id,
  120. 'project_role_id' => ProjectRole::getByKey('manager', 'id')
  121. ]);
  122. $project_user = ProjectUser::where('project_role_id', ProjectRole::getByKey('admin', 'id'))->first();
  123. if($project_user) {
  124. ProjectUser::create([
  125. 'project_id' => $this['id'],
  126. 'user_id' => $project_user->user_id,
  127. 'project_role_id' => $project_user->project_role_id
  128. ]);
  129. }
  130. }
  131. }