From 9ebf4f7519a1dee9a0c1081ed6be1328d749e6a3 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 3 Oct 2018 22:09:42 +0800 Subject: [PATCH 1/3] Add work_duration on project model --- app/Entities/Projects/Project.php | 5 +++++ app/Entities/Projects/ProjectPresenter.php | 15 ++++++++++----- tests/Unit/Models/ProjectTest.php | 22 ++++++++++++++++++++++ 3 files changed, 37 insertions(+), 5 deletions(-) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 38f86f3..d01cbfd 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -224,4 +224,9 @@ class Project extends Model ->with('worker', 'tasks') ->get(); } + + public function getWorkDurationAttribute() + { + return $this->present()->workDuration; + } } diff --git a/app/Entities/Projects/ProjectPresenter.php b/app/Entities/Projects/ProjectPresenter.php index f48ca05..e0253e9 100644 --- a/app/Entities/Projects/ProjectPresenter.php +++ b/app/Entities/Projects/ProjectPresenter.php @@ -24,15 +24,20 @@ class ProjectPresenter extends Presenter public function workDuration() { - if (is_null($this->entity->end_date)) { + $startDate = $this->entity->start_date; + $endDate = $this->entity->end_date; + + if (is_null($endDate)) { return '-'; } - $workDuration = dateDifference($this->entity->start_date, $this->entity->end_date); - if ((int) $workDuration > 30) { - return dateDifference($this->entity->start_date, $this->entity->end_date, '%m Bulan %d Hari'); + $workDuration = dateDifference($startDate, $endDate); + if ((int) $workDuration > 365) { + return dateDifference($startDate, $endDate, '%y Year(s) %m Month(s) %d Day(s)'); + } elseif ((int) $workDuration > 30) { + return dateDifference($startDate, $endDate, '%m Month(s) %d Day(s)'); } - return $workDuration.' Hari'; + return $workDuration.' Day(s)'; } } diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 5811409..b1af1cd 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -209,4 +209,26 @@ class ProjectTest extends TestCase $this->assertInstanceOf(Collection::class, $project->comments); $this->assertInstanceOf(Comment::class, $project->comments->first()); } + + /** @test */ + public function project_has_work_duration_attribute() + { + $project = factory(Project::class)->create([ + 'start_date' => '2016-06-10', + 'end_date' => '2016-07-21', + ]); + + $this->assertEquals('1 Month(s) 11 Day(s)', $project->work_duration); + } + + /** @test */ + public function project_work_duration_attribute_returns_proper_multi_years_work_duration() + { + $project = factory(Project::class)->create([ + 'start_date' => '2015-04-10', + 'end_date' => '2017-07-21', + ]); + + $this->assertEquals('2 Year(s) 3 Month(s) 11 Day(s)', $project->work_duration); + } } From f3af0a2f37501564bf65d35f8e42f6bbd2ea65d1 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 3 Oct 2018 22:20:41 +0800 Subject: [PATCH 2/3] Update project views to use work_duration attribute --- resources/views/customers/projects.blade.php | 2 +- resources/views/projects/index.blade.php | 2 +- resources/views/users/projects.blade.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/resources/views/customers/projects.blade.php b/resources/views/customers/projects.blade.php index 04ba086..3da94f7 100755 --- a/resources/views/customers/projects.blade.php +++ b/resources/views/customers/projects.blade.php @@ -20,7 +20,7 @@ {{ 1 + $key }} {{ $project->nameLink() }} {{ $project->start_date }} - {{ $project->present()->workDuration }} + {{ $project->work_duration }} {{ formatRp($project->project_value) }} {{ $project->present()->status }} diff --git a/resources/views/projects/index.blade.php b/resources/views/projects/index.blade.php index a9c1556..f5027bd 100755 --- a/resources/views/projects/index.blade.php +++ b/resources/views/projects/index.blade.php @@ -42,7 +42,7 @@ {{ $projects->firstItem() + $key }} {{ $project->nameLink() }} {{ $project->start_date }} - {{ $project->present()->workDuration }} + {{ $project->work_duration }} @if (request('status_id') == 2) {{ formatDecimal($project->getJobOveralProgress()) }} % {{ $project->due_date }} diff --git a/resources/views/users/projects.blade.php b/resources/views/users/projects.blade.php index 671dce4..34e1075 100755 --- a/resources/views/users/projects.blade.php +++ b/resources/views/users/projects.blade.php @@ -29,7 +29,7 @@ {{ $projects->firstItem() + $key }} {{ $project->nameLink() }} {{ $project->start_date }} - {{ $project->present()->workDuration }} + {{ $project->work_duration }} {{ formatRp($project->project_value) }} {{ $project->present()->status }} {{ $project->customer->name }} From b7305f17536d8e76d5f2501006a1240efd611a5c Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Wed, 3 Oct 2018 22:22:08 +0800 Subject: [PATCH 3/3] Move work_duration calculation to Project model Remove days count on multi-years worjk_duration --- app/Entities/Projects/Project.php | 17 ++++++++++++++++- app/Entities/Projects/ProjectPresenter.php | 19 ------------------- tests/Unit/Models/ProjectTest.php | 2 +- 3 files changed, 17 insertions(+), 21 deletions(-) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index d01cbfd..7dfc082 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -227,6 +227,21 @@ class Project extends Model public function getWorkDurationAttribute() { - return $this->present()->workDuration; + $startDate = $this->start_date; + $endDate = $this->end_date; + + if (is_null($endDate)) { + return '-'; + } + + $workDuration = dateDifference($startDate, $endDate); + + if ((int) $workDuration > 365) { + return dateDifference($startDate, $endDate, '%y Year(s) %m Month(s)'); + } elseif ((int) $workDuration > 30) { + return dateDifference($startDate, $endDate, '%m Month(s) %d Day(s)'); + } + + return $workDuration.' Day(s)'; } } diff --git a/app/Entities/Projects/ProjectPresenter.php b/app/Entities/Projects/ProjectPresenter.php index e0253e9..0678ba7 100644 --- a/app/Entities/Projects/ProjectPresenter.php +++ b/app/Entities/Projects/ProjectPresenter.php @@ -21,23 +21,4 @@ class ProjectPresenter extends Presenter { return ProjectStatus::getNameById($this->entity->status_id); } - - public function workDuration() - { - $startDate = $this->entity->start_date; - $endDate = $this->entity->end_date; - - if (is_null($endDate)) { - return '-'; - } - - $workDuration = dateDifference($startDate, $endDate); - if ((int) $workDuration > 365) { - return dateDifference($startDate, $endDate, '%y Year(s) %m Month(s) %d Day(s)'); - } elseif ((int) $workDuration > 30) { - return dateDifference($startDate, $endDate, '%m Month(s) %d Day(s)'); - } - - return $workDuration.' Day(s)'; - } } diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index b1af1cd..6fb19d3 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -229,6 +229,6 @@ class ProjectTest extends TestCase 'end_date' => '2017-07-21', ]); - $this->assertEquals('2 Year(s) 3 Month(s) 11 Day(s)', $project->work_duration); + $this->assertEquals('2 Year(s) 3 Month(s)', $project->work_duration); } }