diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index ba2f23c..3db0142 100755 --- a/app/Entities/Projects/Project.php +++ b/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; diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 3044d93..764f273 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/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();