Browse Source

Add Project model docblock

pull/15/head
Nafies Luthfi 7 years ago
parent
commit
0e1373efae
  1. 89
      app/Entities/Projects/Project.php

89
app/Entities/Projects/Project.php

@ -18,10 +18,21 @@ class Project extends Model
{
use PresentableTrait;
/**
* @var \App\Entities\Projects\ProjectPresenter
*/
protected $presenter = ProjectPresenter::class;
/**
* @var array
*/
protected $guarded = ['id', 'created_at', 'updated_at'];
// protected $dates = ['start_date','end_date'];
/**
* Show project name with link to project detail.
*
* @return Illuminate\Support\HtmlString
*/
public function nameLink()
{
return link_to_route('projects.show', $this->name, [$this->id], [
@ -32,51 +43,101 @@ class Project extends Model
]);
}
/**
* Project has many Jobs relation.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function jobs()
{
return $this->hasMany(Job::class)->orderBy('position');
}
/**
* Project has many Tasks relation through Job model.
*
* @return \Illuminate\Database\Eloquent\Relations\HasManyThrough
*/
public function tasks()
{
return $this->hasManyThrough(Task::class, Job::class);
}
/**
* Project has many main Jobs relation (based on job_type_id).
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function mainJobs()
{
return $this->hasMany(Job::class)->orderBy('position')->whereTypeId(1);
}
/**
* Project has many additioanl Jobs relation (based on job_type_id).
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function additionalJobs()
{
return $this->hasMany(Job::class)->orderBy('position')->whereTypeId(2);
}
/**
* Project has many Subscriptions relation.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function subscriptions()
{
return $this->hasMany(Subscription::class);
}
/**
* Project has many Invoices relation.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function invoices()
{
return $this->hasMany(Invoice::class);
}
/**
* Project has many Payments relation.
*
* @return \Illuminate\Database\Eloquent\Relations\HasMany
*/
public function payments()
{
return $this->hasMany(Payment::class)->orderBy('date', 'desc');
}
/**
* Project has many Comments relation.
*
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function comments()
{
return $this->morphMany(Comment::class, 'commentable');
}
/**
* Project belongs to a Customer relation.
*
* @return \Illuminate\Database\Eloquent\Concerns\belongsTo
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
/**
* Project cash in (income) total.
*
* @return int
*/
public function cashInTotal()
{
return $this->payments->sum(function ($payment) {
@ -84,6 +145,11 @@ class Project extends Model
});
}
/**
* Project cash out (spending) total.
*
* @return int
*/
public function cashOutTotal()
{
return $this->payments->sum(function ($payment) {
@ -91,6 +157,11 @@ class Project extends Model
});
}
/**
* Get project overal job progress in percent.
*
* @return float
*/
public function getJobOveralProgress()
{
$overalProgress = 0;
@ -109,11 +180,21 @@ class Project extends Model
return $overalProgress;
}
/**
* Project has many Files relation.
*
* @return \Illuminate\Database\Eloquent\Relations\MorphMany
*/
public function files()
{
return $this->morphMany(File::class, 'fileable');
}
/**
* Get project collectible earnings, based on job progress.
*
* @return float
*/
public function getCollectibeEarnings()
{
// Collectible earnings is total of (price * avg task progress of each job)
@ -128,6 +209,12 @@ class Project extends Model
return $collectibeEarnings;
}
/**
* Get project job list based on job tipe.
*
* @param string $jobType
* @return \Illuminate\Database\Eloquent\Collection
*/
public function getJobList($jobType)
{
$jobType = (int) $jobType;

Loading…
Cancel
Save