Browse Source

Merge branch 'project-deletion'

pull/37/head
Nafies Luthfi 7 years ago
parent
commit
424c4c9ebb
  1. 16
      app/Entities/Projects/Job.php
  2. 19
      app/Entities/Projects/Project.php
  3. 10
      resources/views/projects/jobs/add-from-other-project.blade.php
  4. 30
      tests/Unit/Models/JobTest.php
  5. 97
      tests/Unit/Models/ProjectTest.php

16
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;
@ -109,4 +110,19 @@ class Job extends Model
{
return $this->price * ($this->progress / 100);
}
/**
* Delete the model from the database.
*
* @return bool|null
*/
public function delete()
{
DB::beginTransaction();
$this->tasks()->delete();
$this->comments()->delete();
DB::commit();
return parent::delete();
}
}

19
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;
@ -244,4 +245,22 @@ class Project extends Model
return $workDuration.' Day(s)';
}
/**
* Delete the model from the database.
*
* @return bool|null
*/
public function delete()
{
DB::beginTransaction();
$this->jobs->each->delete();
$this->invoices()->delete();
$this->payments()->delete();
$this->subscriptions()->delete();
$this->comments()->delete();
DB::commit();
return parent::delete();
}
}

10
resources/views/projects/jobs/add-from-other-project.blade.php

@ -32,7 +32,7 @@
@foreach($job->tasks as $task)
<li>
<label for="{{ $job->id }}_task_id_{{ $task->id }}" style="font-weight:normal">
{{ Form::checkbox($job->id.'_task_ids['.$task->id.']', $task->id, null, ['id' => $job->id.'_task_id_'.$task->id]) }}
{{ Form::checkbox($job->id.'_task_ids['.$task->id.']', $task->id, null, ['id' => $job->id.'_task_id_'.$task->id, 'class' => 'job_id_'.$job->id.'_tasks']) }}
{{ $task->name }}</label>
</li>
@endforeach
@ -72,6 +72,14 @@
<script>
(function() {
$('select[name=project_id]').select2();
@if ($selectedProject)
@foreach ($selectedProject->jobs as $job)
$('#job_id_{{ $job->id }}').change(function () {
$('.job_id_{{ $job->id }}_tasks').prop('checked', this.checked);
});
@endforeach
@endif
})();
</script>
@endsection

30
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();
$task = 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();
@ -97,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,
]);
}
}

97
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;
@ -41,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();
@ -69,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();
@ -87,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();
@ -214,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([
@ -234,4 +306,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,
]);
}
}
Loading…
Cancel
Save