diff --git a/app/Http/Controllers/TaskController.php b/app/Http/Controllers/TaskController.php index e3fbe38ae2ed..785991a2a8f4 100644 --- a/app/Http/Controllers/TaskController.php +++ b/app/Http/Controllers/TaskController.php @@ -82,9 +82,9 @@ class TaskController extends BaseController * * @return \Illuminate\Http\JsonResponse */ - public function getDatatable($clientPublicId = null) + public function getDatatable($clientPublicId = null, $projectPublicId = null) { - return $this->taskService->getDatatable($clientPublicId, Input::get('sSearch')); + return $this->taskService->getDatatable($clientPublicId, $projectPublicId, Input::get('sSearch')); } /** diff --git a/app/Ninja/Datatables/ProjectDatatable.php b/app/Ninja/Datatables/ProjectDatatable.php index 84542dc0e960..2051aea3f2de 100644 --- a/app/Ninja/Datatables/ProjectDatatable.php +++ b/app/Ninja/Datatables/ProjectDatatable.php @@ -48,13 +48,13 @@ class ProjectDatatable extends EntityDatatable [ 'budgeted_hours', function ($model) { - return $model->budgeted_hours; + return $model->budgeted_hours ?: ''; }, ], [ 'task_rate', function ($model) { - return floatval($model->task_rate) ? Utils::roundSignificant($model->task_rate) : ''; + return floatval($model->task_rate) ? Utils::formatMoney($model->task_rate) : ''; } ], ]; diff --git a/app/Ninja/Datatables/ProjectTaskDatatable.php b/app/Ninja/Datatables/ProjectTaskDatatable.php new file mode 100644 index 000000000000..827036e0b128 --- /dev/null +++ b/app/Ninja/Datatables/ProjectTaskDatatable.php @@ -0,0 +1,15 @@ +project; } - return $model->project_public_id ? link_to("projects/{$model->project_public_id}/edit", $model->project)->toHtml() : ''; + return $model->project_public_id ? link_to("projects/{$model->project_public_id}", $model->project)->toHtml() : ''; }, ], [ diff --git a/app/Ninja/Repositories/TaskRepository.php b/app/Ninja/Repositories/TaskRepository.php index 54f3582e4ba3..305fc9498dab 100644 --- a/app/Ninja/Repositories/TaskRepository.php +++ b/app/Ninja/Repositories/TaskRepository.php @@ -18,7 +18,7 @@ class TaskRepository extends BaseRepository return 'App\Models\Task'; } - public function find($clientPublicId = null, $filter = null) + public function find($clientPublicId = null, $projectPublicId = null, $filter = null) { $query = DB::table('tasks') ->leftJoin('clients', 'tasks.client_id', '=', 'clients.id') @@ -61,7 +61,9 @@ class TaskRepository extends BaseRepository 'task_statuses.name as task_status' ); - if ($clientPublicId) { + if ($projectPublicId) { + $query->where('projects.public_id', '=', $projectPublicId); + } elseif ($clientPublicId) { $query->where('clients.public_id', '=', $clientPublicId); } else { $query->whereNull('clients.deleted_at'); diff --git a/app/Services/TaskService.php b/app/Services/TaskService.php index 832a5caed92b..585795cc24f6 100644 --- a/app/Services/TaskService.php +++ b/app/Services/TaskService.php @@ -2,6 +2,7 @@ namespace App\Services; +use App\Ninja\Datatables\ProjectTaskDatatable; use App\Ninja\Datatables\TaskDatatable; use App\Ninja\Repositories\TaskRepository; use Auth; @@ -41,10 +42,15 @@ class TaskService extends BaseService * * @return \Illuminate\Http\JsonResponse */ - public function getDatatable($clientPublicId, $search) + public function getDatatable($clientPublicId, $projectPublicId, $search) { - $datatable = new TaskDatatable(true, $clientPublicId); - $query = $this->taskRepo->find($clientPublicId, $search); + if ($projectPublicId) { + $datatable = new ProjectTaskDatatable(true, true); + } else { + $datatable = new TaskDatatable(true, $clientPublicId); + } + + $query = $this->taskRepo->find($clientPublicId, $projectPublicId, $search); if (! Utils::hasPermission('view_all')) { $query->where('tasks.user_id', '=', Auth::user()->id); diff --git a/resources/views/list.blade.php b/resources/views/list.blade.php index f91234c96ce1..5963845143b2 100644 --- a/resources/views/list.blade.php +++ b/resources/views/list.blade.php @@ -97,9 +97,9 @@ {!! Datatable::table() ->addColumn(Utils::trans($datatable->columnFields(), $datatable->entityType)) - ->setUrl(url('api/' . Utils::pluralizeEntityType($entityType) . '/' . (isset($clientId) ? $clientId : (isset($vendorId) ? $vendorId : '')))) + ->setUrl(url('api/' . Utils::pluralizeEntityType($entityType) . '/' . (isset($clientId) ? (isset($projectId) ? ($clientId . '/' . $projectId) : $clientId) : (isset($vendorId) ? $vendorId : '')))) ->setCustomValues('entityType', Utils::pluralizeEntityType($entityType)) - ->setCustomValues('clientId', isset($clientId) && $clientId) + ->setCustomValues('clientId', isset($clientId) && $clientId && empty($projectId)) ->setOptions('sPaginationType', 'bootstrap') ->setOptions('aaSorting', [[isset($clientId) ? ($datatable->sortCol-1) : $datatable->sortCol, 'desc']]) ->render('datatable') !!} diff --git a/resources/views/projects/show.blade.php b/resources/views/projects/show.blade.php index 0fc59eec0fb7..a44e8df76c73 100644 --- a/resources/views/projects/show.blade.php +++ b/resources/views/projects/show.blade.php @@ -20,7 +20,7 @@
- {!! Former::open('vendors/bulk')->addClass('mainForm') !!} + {!! Former::open('projects/bulk')->addClass('mainForm') !!}
{!! Former::text('action') !!} {!! Former::text('public_id')->value($project->public_id) !!} @@ -65,14 +65,24 @@

{{ trans('texts.details') }}

- - + @if ($project->due_date) + {{ trans('texts.due_date') . ': ' . Utils::fromSqlDate($project->due_date) }}
+ @endif + @if ($project->budgeted_hours) + {{ trans('texts.budgeted_hours') . ': ' . $project->budgeted_hours }}
+ @endif + @if (floatval($project->task_rate)) + {{ trans('texts.task_rate') . ': ' . Utils::formatMoney($project->task_rate) }}
+ @endif
+

{{ trans('texts.notes') }}

+ {{ $project->private_notes }}
+

{{ trans('texts.progress') }}

@@ -82,5 +92,53 @@
+
+ +
+
+ @include('list', [ + 'entityType' => ENTITY_TASK, + 'datatable' => new \App\Ninja\Datatables\ProjectTaskDatatable(true, true), + 'projectId' => $project->public_id, + 'clientId' => $project->client->public_id, + ]) +
+
+ + @stop diff --git a/routes/web.php b/routes/web.php index 9c51ea3351ce..a4d468075deb 100644 --- a/routes/web.php +++ b/routes/web.php @@ -149,7 +149,7 @@ Route::group(['middleware' => ['lookup:user', 'auth:user']], function () { Route::delete('task_statuses/{task_status_id}', 'TaskKanbanController@deleteStatus'); Route::put('task_status_order/{task_id}', 'TaskKanbanController@updateTask'); Route::resource('tasks', 'TaskController'); - Route::get('api/tasks/{client_id?}', 'TaskController@getDatatable'); + Route::get('api/tasks/{client_id?}/{project_id?}', 'TaskController@getDatatable'); Route::get('tasks/create/{client_id?}/{project_id?}', 'TaskController@create'); Route::post('tasks/bulk', 'TaskController@bulk'); Route::get('projects', 'ProjectController@index');