From 2a139a08446896e0873d6d3302e3a001bb45e165 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Sun, 10 Feb 2019 10:50:43 +0800 Subject: [PATCH 1/8] Update add jobs from other project UX Auto check task list on checked job Auto remove task list check on unchecked job --- resources/views/projects/jobs/add-from-other-project.blade.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/resources/views/projects/jobs/add-from-other-project.blade.php b/resources/views/projects/jobs/add-from-other-project.blade.php index 63a85b8..55f63cb 100755 --- a/resources/views/projects/jobs/add-from-other-project.blade.php +++ b/resources/views/projects/jobs/add-from-other-project.blade.php @@ -32,7 +32,7 @@ @foreach($job->tasks as $task)
  • @endforeach @@ -72,6 +72,14 @@ @endsection From 28c91e8476e66cf49dcff8a49ffba936d4ff9a4f Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:03:29 +0800 Subject: [PATCH 2/8] Project deletion will also deletes related invoices --- app/Entities/Projects/Project.php | 7 +++++++ tests/Unit/Models/ProjectTest.php | 24 ++++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index e64abce..aa0c956 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -244,4 +244,11 @@ class Project extends Model return $workDuration.' Day(s)'; } + + public function delete() + { + $this->invoices()->delete(); + + return parent::delete(); + } } diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 351c7d8..58438ab 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -5,6 +5,7 @@ namespace Tests\Unit\Models; use Tests\TestCase; use App\Entities\Projects\Job; use App\Entities\Projects\Task; +use App\Entities\Invoices\Invoice; use App\Entities\Payments\Payment; use App\Entities\Projects\Comment; use App\Entities\Projects\Project; @@ -234,4 +235,27 @@ class ProjectTest extends TestCase $this->assertEquals('2 Year(s) 3 Month(s)', $project->work_duration); } + + /** @test */ + public function a_project_has_many_invoices_relation() + { + $project = factory(Project::class)->create(); + $invoice = factory(Invoice::class)->create(['project_id' => $project->id]); + + $this->assertInstanceOf(Collection::class, $project->invoices); + $this->assertInstanceOf(Invoice::class, $project->invoices->first()); + } + + /** @test */ + public function project_deletion_also_deletes_related_invoices() + { + $project = factory(Project::class)->create(); + $invoice = factory(Invoice::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('invoices', [ + 'project_id' => $project->id, + ]); + } } From 269aec4c6fd63c522c372fdfd58ec8f80fd516ad Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:12:42 +0800 Subject: [PATCH 3/8] Job deletion will deletes related tasks Project deletion will also deletes related job tasks --- app/Entities/Projects/Job.php | 7 +++++++ app/Entities/Projects/Project.php | 2 ++ tests/Unit/Models/JobTest.php | 13 ++++++++++++ tests/Unit/Models/ProjectTest.php | 43 ++++++++++++++++++++++++++++++++++++++- 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/app/Entities/Projects/Job.php b/app/Entities/Projects/Job.php index 9987fc4..de2287e 100755 --- a/app/Entities/Projects/Job.php +++ b/app/Entities/Projects/Job.php @@ -109,4 +109,11 @@ class Job extends Model { return $this->price * ($this->progress / 100); } + + public function delete() + { + $this->tasks()->delete(); + + return parent::delete(); + } } diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index aa0c956..a07b229 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -247,7 +247,9 @@ class Project extends Model public function delete() { + $this->jobs->each->delete(); $this->invoices()->delete(); + $this->payments()->delete(); return parent::delete(); } diff --git a/tests/Unit/Models/JobTest.php b/tests/Unit/Models/JobTest.php index c2e96c0..b2b342e 100644 --- a/tests/Unit/Models/JobTest.php +++ b/tests/Unit/Models/JobTest.php @@ -55,6 +55,19 @@ class JobTest extends TestCase } /** @test */ + public function job_deletion_also_deletes_related_tasks() + { + $job = factory(Job::class)->create(); + $tasks = factory(Task::class)->create(['job_id' => $job->id]); + + $job->delete(); + + $this->dontSeeInDatabase('tasks', [ + 'job_id' => $job->id, + ]); + } + + /** @test */ public function a_job_has_progress_attribute() { $job = factory(Job::class)->create(); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 58438ab..733dbdd 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -42,6 +42,19 @@ class ProjectTest extends TestCase } /** @test */ + public function project_deletion_also_deletes_related_jobs() + { + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('jobs', [ + 'project_id' => $project->id, + ]); + } + + /** @test */ public function a_project_has_many_main_jobs() { $project = factory(Project::class)->create(); @@ -70,15 +83,43 @@ class ProjectTest extends TestCase } /** @test */ - public function a_project_has_many_payments() + public function project_deletion_also_deletes_related_job_tasks() + { + $project = factory(Project::class)->create(); + $job = factory(Job::class)->create(['project_id' => $project->id, 'type_id' => 2]); + $tasks = factory(Task::class, 2)->create(['job_id' => $job->id]); + + $project->delete(); + + $this->dontSeeInDatabase('tasks', [ + 'job_id' => $job->id, + ]); + } + + /** @test */ + public function a_project_has_many_payments_relation() { $project = factory(Project::class)->create(); $payment = factory(Payment::class)->create(['project_id' => $project->id]); + $this->assertInstanceOf(Collection::class, $project->payments); $this->assertInstanceOf(Payment::class, $project->payments->first()); } /** @test */ + public function project_deletion_also_deletes_related_payments() + { + $project = factory(Project::class)->create(); + $payment = factory(Payment::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('payments', [ + 'project_id' => $project->id, + ]); + } + + /** @test */ public function a_project_has_many_subscriptions() { $project = factory(Project::class)->create(); From fde8ed21cabeea185c4844fc3ce308abc4c3f2d8 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:13:41 +0800 Subject: [PATCH 4/8] Add database transaction on project deletion action --- app/Entities/Projects/Project.php | 3 +++ 1 file changed, 3 insertions(+) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index a07b229..8618c23 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -2,6 +2,7 @@ namespace App\Entities\Projects; +use DB; use App\Entities\Invoices\Invoice; use App\Entities\Payments\Payment; use App\Entities\Partners\Customer; @@ -247,9 +248,11 @@ class Project extends Model public function delete() { + DB::beginTransaction(); $this->jobs->each->delete(); $this->invoices()->delete(); $this->payments()->delete(); + DB::commit(); return parent::delete(); } From 28173114aaa2b27ca476a88f08e45af7056368a3 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:18:07 +0800 Subject: [PATCH 5/8] Job deletion will deletes related subscriptions --- app/Entities/Projects/Project.php | 1 + tests/Unit/Models/ProjectTest.php | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 8618c23..edf7640 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -252,6 +252,7 @@ class Project extends Model $this->jobs->each->delete(); $this->invoices()->delete(); $this->payments()->delete(); + $this->subscriptions()->delete(); DB::commit(); return parent::delete(); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 733dbdd..20f2db7 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -129,6 +129,19 @@ class ProjectTest extends TestCase } /** @test */ + public function project_deletion_also_deletes_related_subscriptions() + { + $project = factory(Project::class)->create(); + $subscription = factory(Subscription::class)->create(['project_id' => $project->id]); + + $project->delete(); + + $this->dontSeeInDatabase('subscriptions', [ + 'project_id' => $project->id, + ]); + } + + /** @test */ public function a_project_belongs_to_a_customer() { $customer = factory(Customer::class)->create(); From 45510fc1a3ea322d6a41c73024ddf41085054c9f Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 07:19:56 +0800 Subject: [PATCH 6/8] Job deletion will also deletes related comments --- app/Entities/Projects/Project.php | 1 + tests/Unit/Models/ProjectTest.php | 17 +++++++++++++++++ 2 files changed, 18 insertions(+) diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index edf7640..91742c2 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -253,6 +253,7 @@ class Project extends Model $this->invoices()->delete(); $this->payments()->delete(); $this->subscriptions()->delete(); + $this->comments()->delete(); DB::commit(); return parent::delete(); diff --git a/tests/Unit/Models/ProjectTest.php b/tests/Unit/Models/ProjectTest.php index 20f2db7..c8233e2 100644 --- a/tests/Unit/Models/ProjectTest.php +++ b/tests/Unit/Models/ProjectTest.php @@ -269,6 +269,23 @@ class ProjectTest extends TestCase } /** @test */ + public function project_deletion_also_deletes_related_comments() + { + $project = factory(Project::class)->create(); + $comment = factory(Comment::class)->create([ + 'commentable_type' => 'projects', + 'commentable_id' => $project->id, + ]); + + $project->delete(); + + $this->dontSeeInDatabase('comments', [ + 'commentable_type' => 'projects', + 'commentable_id' => $project->id, + ]); + } + + /** @test */ public function project_has_work_duration_attribute() { $project = factory(Project::class)->create([ From 2d95550024d0dd26a7603badef89f55fccf493c0 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 14:39:33 +0800 Subject: [PATCH 7/8] Job deletion also deletes job comments --- app/Entities/Projects/Job.php | 4 ++++ tests/Unit/Models/JobTest.php | 19 ++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/app/Entities/Projects/Job.php b/app/Entities/Projects/Job.php index de2287e..4418233 100755 --- a/app/Entities/Projects/Job.php +++ b/app/Entities/Projects/Job.php @@ -2,6 +2,7 @@ namespace App\Entities\Projects; +use DB; use App\Entities\Users\User; use Illuminate\Database\Eloquent\Model; use Laracasts\Presenter\PresentableTrait; @@ -112,7 +113,10 @@ class Job extends Model public function delete() { + DB::beginTransaction(); $this->tasks()->delete(); + $this->comments()->delete(); + DB::commit(); return parent::delete(); } diff --git a/tests/Unit/Models/JobTest.php b/tests/Unit/Models/JobTest.php index b2b342e..e049d77 100644 --- a/tests/Unit/Models/JobTest.php +++ b/tests/Unit/Models/JobTest.php @@ -58,7 +58,7 @@ class JobTest extends TestCase public function job_deletion_also_deletes_related_tasks() { $job = factory(Job::class)->create(); - $tasks = factory(Task::class)->create(['job_id' => $job->id]); + $task = factory(Task::class)->create(['job_id' => $job->id]); $job->delete(); @@ -110,4 +110,21 @@ class JobTest extends TestCase $this->assertInstanceOf(Collection::class, $job->comments); $this->assertInstanceOf(Comment::class, $job->comments->first()); } + + /** @test */ + public function job_deletion_also_deletes_related_comments() + { + $job = factory(Job::class)->create(); + $comment = factory(Comment::class)->create([ + 'commentable_type' => 'jobs', + 'commentable_id' => $job->id, + ]); + + $job->delete(); + + $this->dontSeeInDatabase('comments', [ + 'commentable_type' => 'jobs', + 'commentable_id' => $job->id, + ]); + } } From 2a96913005f0ae4146504e71f2781386f2d10cae Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Fri, 15 Feb 2019 14:40:58 +0800 Subject: [PATCH 8/8] Add docblocks on Job and Project model --- app/Entities/Projects/Job.php | 5 +++++ app/Entities/Projects/Project.php | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/app/Entities/Projects/Job.php b/app/Entities/Projects/Job.php index 4418233..14f1c27 100755 --- a/app/Entities/Projects/Job.php +++ b/app/Entities/Projects/Job.php @@ -111,6 +111,11 @@ class Job extends Model return $this->price * ($this->progress / 100); } + /** + * Delete the model from the database. + * + * @return bool|null + */ public function delete() { DB::beginTransaction(); diff --git a/app/Entities/Projects/Project.php b/app/Entities/Projects/Project.php index 91742c2..d2ed10c 100755 --- a/app/Entities/Projects/Project.php +++ b/app/Entities/Projects/Project.php @@ -246,6 +246,11 @@ class Project extends Model return $workDuration.' Day(s)'; } + /** + * Delete the model from the database. + * + * @return bool|null + */ public function delete() { DB::beginTransaction();