芝麻web文件管理V1.00
编辑当前文件:/home/sditechnicalteam/public_html/app/Models/Project.php
belongsTo(ProjectCategory::class, 'category_id'); } public function client(): BelongsTo { return $this->belongsTo(User::class, 'client_id')->withoutGlobalScope(ActiveScope::class); } public function clientdetails(): BelongsTo { return $this->belongsTo(ClientDetails::class, 'client_id', 'user_id'); } public function members(): HasMany { return $this->hasMany(ProjectMember::class, 'project_id'); } public function projectMembers(): BelongsToMany { return $this->belongsToMany(User::class, 'project_members')->using(ProjectMember::class); } public function tasks(): HasMany { return $this->hasMany(Task::class, 'project_id')->orderBy('id', 'desc'); } public function files(): HasMany { return $this->hasMany(ProjectFile::class, 'project_id')->orderBy('id', 'desc'); } public function invoices(): HasMany { return $this->hasMany(Invoice::class, 'project_id')->orderBy('id', 'desc'); } public function issues(): HasMany { return $this->hasMany(Issue::class, 'project_id')->orderBy('id', 'desc'); } public function times(): HasMany { return $this->hasMany(ProjectTimeLog::class, 'project_id')->with('breaks')->orderBy('id', 'desc'); } public function milestones(): HasMany { return $this->hasMany(ProjectMilestone::class, 'project_id')->orderBy('id', 'desc'); } public function expenses(): HasMany { return $this->hasMany(Expense::class, 'project_id')->orderBy('id', 'desc'); } public function notes(): HasMany { return $this->hasMany(ProjectNote::class, 'project_id')->orderBy('id', 'desc'); } public function payments(): HasMany { return $this->hasMany(Payment::class, 'project_id')->orderBy('id', 'desc'); } public function currency(): BelongsTo { return $this->belongsTo(Currency::class, 'currency_id'); } public function discussions(): HasMany { return $this->hasMany(Discussion::class, 'project_id')->orderBy('id', 'desc'); } public function rating(): HasOne { return $this->hasOne(ProjectRating::class); } /** * @return bool */ public function checkProjectUser() { $project = ProjectMember::where('project_id', $this->id) ->where('user_id', auth()->user()->id) ->count(); if ($project > 0) { return true; } else { return false; } } /** * @return bool */ public function checkProjectClient() { $project = Project::where('id', $this->id) ->where('client_id', auth()->user()->id) ->count(); if ($project > 0) { return true; } else { return false; } } public static function clientProjects($clientId) { return Project::where('client_id', $clientId)->get(); } public static function allProjects() { $projects = Project::leftJoin('project_members', 'project_members.project_id', 'projects.id') ->select('projects.*') ->orderBy('project_name', 'asc'); if (!isRunningInConsoleOrSeeding()) { if (user()->permission('view_projects') == 'added') { $projects->where('projects.added_by', user()->id); } if (user()->permission('view_projects') == 'owned' && in_array('employee', user_roles())) { $projects->where('project_members.user_id', user()->id); } if (user()->permission('view_projects') == 'owned' && in_array('client', user_roles())) { $projects->where('projects.client_id', user()->id); } } return $projects->groupBy('projects.id')->get(); } public static function allProjectsHavingClient() { $projects = Project::with('currency')->leftJoin('project_members', 'project_members.project_id', 'projects.id') ->whereNotNull('client_id') ->select('projects.*') ->orderBy('project_name', 'asc'); if (!isRunningInConsoleOrSeeding()) { if (user()->permission('view_projects') == 'added') { $projects->where('projects.added_by', user()->id); } if (user()->permission('view_projects') == 'owned' && in_array('employee', user_roles())) { $projects->where('project_members.user_id', user()->id); } if (user()->permission('view_projects') == 'owned' && in_array('client', user_roles())) { $projects->where('projects.client_id', user()->id); } } return $projects->groupBy('projects.id')->get(); } public static function byEmployee($employeeId) { return Project::join('project_members', 'project_members.project_id', '=', 'projects.id') ->where('project_members.user_id', $employeeId) ->select('projects.*') ->get(); } public function scopeCompleted($query) { return $query->where('completion_percent', '100'); } public function scopeInProcess($query) { return $query->where('status', 'in progress'); } public function scopeOnHold($query) { return $query->where('status', 'on hold'); } public function scopeFinished($query) { return $query->where('status', 'finished'); } public function scopeNotStarted($query) { return $query->where('status', 'not started'); } public function scopeCanceled($query) { return $query->where('status', 'canceled'); } public function scopeOverdue($query) { $setting = company(); return $query->where('completion_percent', '<>', '100') ->where('deadline', '<', Carbon::today()->timezone($setting->timezone)); } public function getIsProjectAdminAttribute() { if (auth()->user() && $this->project_admin == auth()->user()->id) { return true; } return false; } public function pinned() { $pin = Pinned::where('user_id', user()->id)->where('project_id', $this->id)->first(); if (!is_null($pin)) { return true; } return false; } }