diff --git a/app/Entities/Projects/JobsRepository.php b/app/Entities/Projects/JobsRepository.php index 5f206dd..b8fdd6c 100755 --- a/app/Entities/Projects/JobsRepository.php +++ b/app/Entities/Projects/JobsRepository.php @@ -49,13 +49,15 @@ class JobsRepository extends BaseRepository $newJob->project_id = $projectId; $newJob->save(); - $selectedTasks = $job->tasks()->whereIn('id', $jobsData[$job->id.'_task_ids'])->get(); - - foreach ($selectedTasks as $task) { - $newTask = $task->replicate(); - $newTask->progress = 0; - $newTask->job_id = $newJob->id; - $newTask->save(); + if (isset($jobsData[$job->id.'_task_ids'])) { + $selectedTasks = $job->tasks()->whereIn('id', $jobsData[$job->id.'_task_ids'])->get(); + + foreach ($selectedTasks as $task) { + $newTask = $task->replicate(); + $newTask->progress = 0; + $newTask->job_id = $newJob->id; + $newTask->save(); + } } } DB::commit(); 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 55f63cb..c2d9290 100755 --- a/resources/views/projects/jobs/add-from-other-project.blade.php +++ b/resources/views/projects/jobs/add-from-other-project.blade.php @@ -75,9 +75,31 @@ @if ($selectedProject) @foreach ($selectedProject->jobs as $job) + $('#job_id_{{ $job->id }}').change(function () { $('.job_id_{{ $job->id }}_tasks').prop('checked', this.checked); }); + + @foreach($job->tasks as $task) + + $('#{{ $job->id }}_task_id_{{ $task->id }}').change(function () { + + var condition = false; + + $.each($(".job_id_{{ $job->id }}_tasks"), function( key, value ) { + if(value.checked == true){ + condition = true + } + }); + + + if(condition == true){ + $('#job_id_{{ $job->id }}').prop('checked', true); + } + }); + + @endforeach + @endforeach @endif })(); diff --git a/tests/Feature/ManageJobsTest.php b/tests/Feature/ManageJobsTest.php index 55569bd..18dbf73 100644 --- a/tests/Feature/ManageJobsTest.php +++ b/tests/Feature/ManageJobsTest.php @@ -242,4 +242,36 @@ class ManageJobsTest extends TestCase 'id' => $task->id, ]); } + + /** @test */ + public function admin_can_clone_jobs_without_tasks() + { + $user = $this->adminUserSigningIn(); + $customer = factory(Customer::class)->create(); + $projects = factory(Project::class, 2)->create(['customer_id' => $customer->id]); + $jobs = factory(Job::class, 3)->create(['project_id' => $projects[0]->id]); + $tasks1 = factory(Task::class, 3)->create(['job_id' => $jobs[0]->id]); + $tasks2 = factory(Task::class, 3)->create(['job_id' => $jobs[1]->id]); + + $this->visitRoute('projects.jobs.add-from-other-project', [$projects[1]->id, 'project_id' => $projects[0]->id]); + + $this->submitForm(trans('job.add'), [ + 'job_ids['.$jobs[0]->id.']' => $jobs[0]->id, + 'job_ids['.$jobs[1]->id.']' => $jobs[1]->id, + ]); + + $this->seeInDatabase('jobs', [ + 'name' => $jobs[0]->name, + 'price' => $jobs[0]->price, + 'project_id' => $projects[1]->id, + 'worker_id' => $jobs[0]->worker_id, + ]); + + $this->seeInDatabase('jobs', [ + 'name' => $jobs[1]->name, + 'price' => $jobs[1]->price, + 'project_id' => $projects[1]->id, + 'worker_id' => $jobs[1]->worker_id, + ]); + } }