From 5a84fb6990d83f6561510706f7d879678c03f4d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Wed, 12 May 2021 16:39:29 +0200 Subject: [PATCH 1/2] Tasks module in the client portal --- .../ClientPortal/TaskController.php | 31 +++++++++ app/Http/Livewire/TasksTable.php | 39 +++++++++++ .../ClientPortal/Tasks/ShowTasksRequest.php | 30 +++++++++ app/Http/ViewComposers/PortalComposer.php | 4 +- .../components/livewire/tasks-table.blade.php | 67 +++++++++++++++++++ .../portal/ninja2020/tasks/index.blade.php | 8 +++ routes/client.php | 4 +- 7 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 app/Http/Controllers/ClientPortal/TaskController.php create mode 100644 app/Http/Livewire/TasksTable.php create mode 100644 app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php create mode 100644 resources/views/portal/ninja2020/components/livewire/tasks-table.blade.php create mode 100644 resources/views/portal/ninja2020/tasks/index.blade.php diff --git a/app/Http/Controllers/ClientPortal/TaskController.php b/app/Http/Controllers/ClientPortal/TaskController.php new file mode 100644 index 000000000000..e4fd9c70a734 --- /dev/null +++ b/app/Http/Controllers/ClientPortal/TaskController.php @@ -0,0 +1,31 @@ +where('client_id', auth('contact')->user()->client->id) + ->whereNotNull('invoice_id') + ->orderBy($this->sort_field, $this->sort_asc ? 'asc' : 'desc') + ->paginate($this->per_page); + + return render('components.livewire.tasks-table', [ + 'tasks' => $query, + ]); + } +} diff --git a/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php new file mode 100644 index 000000000000..de4aa00fd991 --- /dev/null +++ b/app/Http/Requests/ClientPortal/Tasks/ShowTasksRequest.php @@ -0,0 +1,30 @@ +user('contact')->client->getSetting('enable_client_portal_tasks'); + } + + /** + * Get the validation rules that apply to the request. + * + * @return array + */ + public function rules() + { + return [ + // + ]; + } +} diff --git a/app/Http/ViewComposers/PortalComposer.php b/app/Http/ViewComposers/PortalComposer.php index fd0ebd4d6804..13daffd3ae81 100644 --- a/app/Http/ViewComposers/PortalComposer.php +++ b/app/Http/ViewComposers/PortalComposer.php @@ -82,9 +82,7 @@ class PortalComposer $data[] = ['title' => ctrans('texts.subscriptions'), 'url' => 'client.subscriptions.index', 'icon' => 'calendar']; if (auth()->user('contact')->client->getSetting('enable_client_portal_tasks')) { - $data[] = ['title' => ctrans('texts.tasks'), 'url' => 'client.dashboard', 'icon' => 'clock']; - - // TODO: Update when 'tasks' module is available in client portal. + $data[] = ['title' => ctrans('texts.tasks'), 'url' => 'client.tasks.index', 'icon' => 'clock']; } return $data; diff --git a/resources/views/portal/ninja2020/components/livewire/tasks-table.blade.php b/resources/views/portal/ninja2020/components/livewire/tasks-table.blade.php new file mode 100644 index 000000000000..db25d31225b8 --- /dev/null +++ b/resources/views/portal/ninja2020/components/livewire/tasks-table.blade.php @@ -0,0 +1,67 @@ +
+
+
+ + +
+
+
+
+ + + + + + + + + + @forelse($tasks as $task) + + + + + + @empty + + + + @endforelse + +
+ + {{ ctrans('texts.description') }} + + + + {{ ctrans('texts.status') }} + + + + {{ ctrans('texts.duration') }} + +
+ {{ \Illuminate\Support\Str::limit($task->description, 80) }} + + {{ optional($task->status)->name }} + + {{ \Carbon\CarbonInterval::seconds($task->calcDuration())->cascade()->forHumans() }} +
+ {{ ctrans('texts.no_results') }} +
+
+
+
+ @if($tasks->total() > 0) + + @endif + {{ $tasks->links('portal/ninja2020/vendor/pagination') }} +
+
diff --git a/resources/views/portal/ninja2020/tasks/index.blade.php b/resources/views/portal/ninja2020/tasks/index.blade.php new file mode 100644 index 000000000000..783e325a25b3 --- /dev/null +++ b/resources/views/portal/ninja2020/tasks/index.blade.php @@ -0,0 +1,8 @@ +@extends('portal.ninja2020.layout.app') +@section('meta_title', ctrans('texts.tasks')) + +@section('body') +
+ @livewire('tasks-table') +
+@endsection diff --git a/routes/client.php b/routes/client.php index f0602b260e30..8d288b9d71f1 100644 --- a/routes/client.php +++ b/routes/client.php @@ -55,7 +55,7 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence Route::get('payment_methods/{payment_method}/verification', 'ClientPortal\PaymentMethodController@verify')->name('payment_methods.verification'); Route::post('payment_methods/{payment_method}/verification', 'ClientPortal\PaymentMethodController@processVerification'); - Route::resource('payment_methods', 'ClientPortal\PaymentMethodController')->except(['edit', 'update']); + Route::resource('payment_methods', 'ClientPortal\PaymentMethodController')->except(['edit', 'update']); Route::match(['GET', 'POST'], 'quotes/approve', 'ClientPortal\QuoteController@bulk')->name('quotes.bulk'); Route::get('quotes', 'ClientPortal\QuoteController@index')->name('quotes.index')->middleware('portal_enabled'); @@ -77,6 +77,8 @@ Route::group(['middleware' => ['auth:contact', 'locale', 'check_client_existence Route::resource('subscriptions', 'ClientPortal\SubscriptionController')->middleware('portal_enabled')->only(['index']); + Route::resource('tasks', 'ClientPortal\TaskController')->only(['index']); + Route::post('upload', 'ClientPortal\UploadController')->name('upload.store'); Route::get('logout', 'Auth\ContactLoginController@logout')->name('logout'); }); From fad1743e308be8ca10bb3db542089a3263504685 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Benjamin=20Beganovi=C4=87?= Date: Tue, 18 May 2021 11:08:26 +0200 Subject: [PATCH 2/2] Update Carbon locale before rendering the tasks page --- app/Http/Controllers/ClientPortal/TaskController.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/ClientPortal/TaskController.php b/app/Http/Controllers/ClientPortal/TaskController.php index e4fd9c70a734..1319bda3d6ff 100644 --- a/app/Http/Controllers/ClientPortal/TaskController.php +++ b/app/Http/Controllers/ClientPortal/TaskController.php @@ -14,7 +14,6 @@ namespace App\Http\Controllers\ClientPortal; use App\Http\Controllers\Controller; use App\Http\Requests\ClientPortal\Tasks\ShowTasksRequest; -use Illuminate\Http\Request; class TaskController extends Controller { @@ -26,6 +25,10 @@ class TaskController extends Controller */ public function index(ShowTasksRequest $request) { + \Carbon\Carbon::setLocale( + auth('contact')->user()->preferredLocale() + ); + return render('tasks.index'); } }