Browse Source

Update progress job overall progress calculation

Project job overall progress returns average job
progress if job total price is 0
pull/6/head
Nafies Luthfi 8 years ago
parent
commit
31db32cd65
  1. 9
      app/Entities/Projects/Project.php
  2. 18
      tests/Unit/Models/ProjectTest.php

9
app/Entities/Projects/Project.php

@ -92,10 +92,13 @@ class Project extends Model
$this->load('jobs.tasks');
$totalPrice = $this->jobs->sum('price');
if ($totalPrice == 0) {
return $this->jobs->avg('progress');
}
foreach ($this->jobs as $job) {
$progress = $job->tasks->avg('progress');
$index = $totalPrice ? ($job->price / $totalPrice) : 1;
$overalProgress += $progress * $index;
$index = $job->price / $totalPrice;
$overalProgress += $job->progress * $index;
}
return $overalProgress;

18
tests/Unit/Models/ProjectTest.php

@ -130,6 +130,24 @@ class ProjectTest extends TestCase
}
/** @test */
public function project_job_overall_progress_returns_average_job_progress_if_job_prices_is_zero()
{
$project = factory(Project::class)->create();
$job = factory(Job::class)->create(['project_id' => $project->id, 'type_id' => 1, 'price' => 0]);
factory(Task::class)->create(['job_id' => $job->id, 'progress' => 20]);
factory(Task::class)->create(['job_id' => $job->id, 'progress' => 30]);
$job = factory(Job::class)->create(['project_id' => $project->id, 'type_id' => 1, 'price' => 0]);
factory(Task::class)->create(['job_id' => $job->id, 'progress' => 100]);
$job = factory(Job::class)->create(['project_id' => $project->id, 'type_id' => 1, 'price' => 0]);
factory(Task::class)->create(['job_id' => $job->id, 'progress' => 100]);
$this->assertEquals(75, $project->getJobOveralProgress());
}
/** @test */
public function a_project_returns_0_on_job_overall_progress_method_if_all_job_is_free()
{
$project = factory(Project::class)->create();

Loading…
Cancel
Save