Browse Source

Merge branch 'convert-task-to-job'

pull/16/head
Nafies Luthfi 7 years ago
parent
commit
e3233934ab
  1. 27
      app/Http/Controllers/Projects/TasksController.php
  2. 4
      resources/lang/id/task.php
  3. 18
      resources/views/jobs/partials/job-tasks-operation.blade.php
  4. 1
      routes/web/projects.php
  5. 36
      tests/Feature/ManageJobsTest.php

27
app/Http/Controllers/Projects/TasksController.php

@ -2,6 +2,7 @@
namespace App\Http\Controllers\Projects; namespace App\Http\Controllers\Projects;
use DB;
use App\Entities\Projects\Job; use App\Entities\Projects\Job;
use App\Entities\Projects\Task; use App\Entities\Projects\Task;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
@ -68,4 +69,30 @@ class TasksController extends Controller
return redirect()->route('jobs.show', $task->job_id); return redirect()->route('jobs.show', $task->job_id);
} }
/**
* Set a task to become a job.
*
* @param \App\Entities\Projects\Task $task
* @return \Illuminate\Routing\Redirector
*/
public function setAsJob(Task $task)
{
$oldJob = $task->job;
$job = new Job;
$job->name = $task->name;
$job->description = $task->description;
$job->project_id = $oldJob->project_id;
$job->worker_id = $oldJob->worker_id;
DB::beginTransaction();
$job->save();
$task->delete();
DB::commit();
flash(__('task.upgraded_as_job'), 'success');
return redirect()->route('jobs.edit', $job);
}
} }

4
resources/lang/id/task.php

@ -22,6 +22,10 @@ return [
'deleted' => 'Hapus data Task telah berhasil.', 'deleted' => 'Hapus data Task telah berhasil.',
'undeleted' => 'Data Task gagal dihapus.', 'undeleted' => 'Data Task gagal dihapus.',
'set_as_job' => 'Set Menjadi Job',
'set_as_job_confirm' => 'Anda yakin mengubah task ini menjadi sebuah Job?',
'upgraded_as_job' => 'Task telah menjadi Job.',
// Attributes // Attributes
'name' => 'Nama Task', 'name' => 'Nama Task',
'progress' => 'Progress', 'progress' => 'Progress',

18
resources/views/jobs/partials/job-tasks-operation.blade.php

@ -1,8 +1,20 @@
@if (Request::get('action') == 'task_edit' && $editableTask) @if (Request::get('action') == 'task_edit' && $editableTask)
@can('update', $editableTask) @can('update', $editableTask)
{{ Form::model($editableTask, ['route' => ['tasks.update', $editableTask], 'method' => 'patch']) }}
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ __('task.edit') }}</h3></div>
<div class="panel-heading">
<div class="pull-right" style="margin-top: -2px;margin-right: -8px">
{!! FormField::formButton(
[
'route' => ['tasks.set-as-job', $editableTask],
'onsubmit' => __('task.set_as_job_confirm'),
],
__('task.set_as_job'),
['class' => 'btn btn-success btn-xs', 'id' => 'set-as-job-'.$editableTask->id]
) !!}
</div>
<h3 class="panel-title">{{ __('task.edit') }}</h3>
</div>
{{ Form::model($editableTask, ['route' => ['tasks.update', $editableTask], 'method' => 'patch']) }}
<div class="panel-body"> <div class="panel-body">
<div class="row"> <div class="row">
<div class="col-sm-6">{!! FormField::text('name') !!}</div> <div class="col-sm-6">{!! FormField::text('name') !!}</div>
@ -29,8 +41,8 @@
{{ link_to_route('jobs.show', __('app.cancel'), [$job], ['class' => 'btn btn-default']) }} {{ link_to_route('jobs.show', __('app.cancel'), [$job], ['class' => 'btn btn-default']) }}
</div> </div>
</div> </div>
{{ Form::close() }}
</div> </div>
{{ Form::close() }}
</div> </div>
@endcan @endcan
@endif @endif

1
routes/web/projects.php

@ -52,6 +52,7 @@ Route::group(['middleware' => ['auth'], 'namespace' => 'Projects'], function ()
Route::post('jobs/{job}/tasks', ['as' => 'tasks.store', 'uses' => 'TasksController@store']); Route::post('jobs/{job}/tasks', ['as' => 'tasks.store', 'uses' => 'TasksController@store']);
Route::patch('tasks/{task}', ['as' => 'tasks.update', 'uses' => 'TasksController@update']); Route::patch('tasks/{task}', ['as' => 'tasks.update', 'uses' => 'TasksController@update']);
Route::delete('tasks/{task}', ['as' => 'tasks.destroy', 'uses' => 'TasksController@destroy']); Route::delete('tasks/{task}', ['as' => 'tasks.destroy', 'uses' => 'TasksController@destroy']);
Route::post('tasks/{task}/set-as-job', ['as' => 'tasks.set-as-job', 'uses' => 'TasksController@setAsJob']);
/* /*
* Files Routes * Files Routes

36
tests/Feature/ManageJobsTest.php

@ -203,4 +203,40 @@ class ManageJobsTest extends TestCase
$this->visit(route('jobs.index')); $this->visit(route('jobs.index'));
$this->seePageIs(route('jobs.index')); $this->seePageIs(route('jobs.index'));
} }
/** @test */
public function admin_can_upgrade_a_task_to_become_job()
{
$user = $this->adminUserSigningIn();
$project = factory(Project::class)->create();
$job = factory(Job::class)->create([
'project_id' => $project->id,
'type_id' => 1,
'worker_id' => $user->id,
]);
$task = factory(Task::class)->create([
'name' => 'This is a Task',
'job_id' => $job->id,
'description' => 'Task description.',
]);
$this->visitRoute('jobs.show', [$job, 'action' => 'task_edit', 'task_id' => $task->id]);
$this->seeRouteIs('jobs.show', [$job, 'action' => 'task_edit', 'task_id' => $task->id]);
$this->seeElement('button', ['id' => 'set-as-job-'.$task->id]);
$this->press('set-as-job-'.$task->id);
$newJob = Job::where('name', 'This is a Task')->first();
$this->seeRouteIs('jobs.edit', $newJob);
$this->seeInDatabase('jobs', [
'id' => $newJob->id,
'name' => 'This is a Task',
'description' => 'Task description.',
]);
$this->dontSeeInDatabase('tasks', [
'id' => $task->id,
]);
}
} }
Loading…
Cancel
Save