Browse Source

Add user current job progress statistic

Set on progress project list as default on user project list tab
Set on progress job count on user progress tab number
pull/6/head
Nafies Luthfi 8 years ago
parent
commit
cb4417df51
  1. 3
      app/Entities/Users/User.php
  2. 4
      app/Http/Controllers/Users/ProjectsController.php
  3. 7
      app/Http/Controllers/Users/UsersController.php
  4. 2
      resources/lang/en/user.php
  5. 2
      resources/lang/id/user.php
  6. 7
      resources/views/layouts/user.blade.php
  7. 12
      resources/views/users/partials/nav-tabs.blade.php
  8. 4
      resources/views/users/projects.blade.php
  9. 84
      resources/views/users/show.blade.php
  10. 4
      tests/Unit/Models/UserTest.php

3
app/Entities/Users/User.php

@ -2,7 +2,6 @@
namespace App\Entities\Users; namespace App\Entities\Users;
use App\Entities\Projects\Job;
use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable; use Illuminate\Notifications\Notifiable;
@ -128,7 +127,7 @@ class User extends Authenticatable
public function jobs() public function jobs()
{ {
return $this->hasMany(Job::class, 'worker_id');
return $this->hasMany('App\Entities\Projects\Job', 'worker_id');
} }
public function projects() public function projects()

4
app/Http/Controllers/Users/ProjectsController.php

@ -17,9 +17,7 @@ class ProjectsController extends Controller
$projects = $user->projects() $projects = $user->projects()
->where(function ($query) { ->where(function ($query) {
$query->where('projects.name', 'like', '%'.request('q').'%'); $query->where('projects.name', 'like', '%'.request('q').'%');
if (request('status')) {
$query->where('status_id', request('status'));
}
$query->where('status_id', request('status', 2));
}) })
->latest() ->latest()
->with(['customer']) ->with(['customer'])

7
app/Http/Controllers/Users/UsersController.php

@ -61,7 +61,12 @@ class UsersController extends Controller
public function show(User $user) public function show(User $user)
{ {
return view('users.show', compact('user'));
$userCurrentJobs = $user->jobs()
->whereHas('project', function ($query) {
$query->whereIn('status_id', [2, 3]);
})->with('tasks')->get();
return view('users.show', compact('user', 'userCurrentJobs'));
} }
public function edit(User $user) public function edit(User $user)

2
resources/lang/en/user.php

@ -6,6 +6,7 @@ return [
'list' => 'User List', 'list' => 'User List',
'user_id' => 'User ID', 'user_id' => 'User ID',
'profile' => 'Profile', 'profile' => 'Profile',
'current_jobs' => 'Current Jobs',
'search' => 'Search User: ketik nama', 'search' => 'Search User: ketik nama',
'search' => 'Type user name then hit Enter..', 'search' => 'Type user name then hit Enter..',
'found' => 'User found.', 'found' => 'User found.',
@ -41,5 +42,6 @@ return [
// Relations // Relations
'jobs' => 'Job List', 'jobs' => 'Job List',
'jobs_count' => 'Job Count',
'projects' => 'Project List', 'projects' => 'Project List',
]; ];

2
resources/lang/id/user.php

@ -6,6 +6,7 @@ return [
'list' => 'Daftar User', 'list' => 'Daftar User',
'user_id' => 'User ID', 'user_id' => 'User ID',
'profile' => 'Profil', 'profile' => 'Profil',
'current_jobs' => 'Job on progress',
'search' => 'Cari User: ketik nama', 'search' => 'Cari User: ketik nama',
'search' => 'Ketik nama user lalu tekan Enter..', 'search' => 'Ketik nama user lalu tekan Enter..',
'found' => 'User ditemukan', 'found' => 'User ditemukan',
@ -40,5 +41,6 @@ return [
// Relations // Relations
'jobs' => 'Daftar Job', 'jobs' => 'Daftar Job',
'jobs_count' => 'Jumlah Job',
'projects' => 'Daftar Project', 'projects' => 'Daftar Project',
]; ];

7
resources/views/layouts/user.blade.php

@ -6,13 +6,10 @@
@section('content') @section('content')
@include('users.partials.breadcrumb') @include('users.partials.breadcrumb')
<h1 class="page-header">
<div class="pull-right">
<div class="pull-right" style="margin-top: -8px">
{!! link_to_route('users.edit', trans('user.edit'), [$user], ['id' => 'edit-user-' . $user->id, 'class' => 'btn btn-warning']) !!} {!! link_to_route('users.edit', trans('user.edit'), [$user], ['id' => 'edit-user-' . $user->id, 'class' => 'btn btn-warning']) !!}
{!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!} {!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
</div>
{{ $user->name }} <small>@yield('subtitle', trans('user.profile'))</small>
</h1>
</div>
@include('users.partials.nav-tabs') @include('users.partials.nav-tabs')
@yield('content-user') @yield('content-user')
@endsection @endsection

12
resources/views/users/partials/nav-tabs.blade.php

@ -4,10 +4,18 @@
{!! link_to_route('users.show', trans('user.profile'), [$user]) !!} {!! link_to_route('users.show', trans('user.profile'), [$user]) !!}
</li> </li>
<li class="{{ Request::segment(3) == 'jobs' ? 'active' : '' }}"> <li class="{{ Request::segment(3) == 'jobs' ? 'active' : '' }}">
{!! link_to_route('users.jobs', trans('user.jobs').' ('.$user->jobs()->count().')', [$user]) !!}
@php
$onProgressJobsCount = AdminDashboard::onProgressJobCount($user);
@endphp
{!! link_to_route(
'users.jobs',
trans('user.jobs').' ('.$onProgressJobsCount.')',
[$user],
['title' => $onProgressJobsCount.' '.trans('user.current_jobs')]
) !!}
</li> </li>
<li class="{{ Request::segment(3) == 'projects' ? 'active' : '' }}"> <li class="{{ Request::segment(3) == 'projects' ? 'active' : '' }}">
{!! link_to_route('users.projects', trans('user.projects').' ('.$user->projects->count().')', [$user]) !!}
{!! link_to_route('users.projects', trans('user.projects'), [$user]) !!}
</li> </li>
</ul> </ul>
<br> <br>

4
resources/views/users/projects.blade.php

@ -5,8 +5,8 @@
@section('content-user') @section('content-user')
<div class="well well-sm text-right"> <div class="well well-sm text-right">
{!! Form::open(['method' => 'get', 'class' => 'form-inline']) !!} {!! Form::open(['method' => 'get', 'class' => 'form-inline']) !!}
{!! FormField::select('status', ProjectStatus::toArray(), ['value' => Request::get('status'), 'placeholder' => trans('project.all')]) !!}
{!! Form::text('q', Request::get('q'), ['class' => 'form-control index-search-field', 'placeholder' => trans('project.search'), 'style' => 'width:100%;max-width:350px']) !!}
{!! FormField::select('status', ProjectStatus::toArray(), ['value' => request('status', 2), 'placeholder' => trans('project.all')]) !!}
{!! Form::text('q', request('q'), ['class' => 'form-control index-search-field', 'placeholder' => trans('project.search'), 'style' => 'width:100%;max-width:350px']) !!}
{!! Form::submit(trans('project.search'), ['class' => 'btn btn-info btn-sm']) !!} {!! Form::submit(trans('project.search'), ['class' => 'btn btn-info btn-sm']) !!}
{!! link_to_route('users.projects', trans('app.reset'), [$user], ['class' => 'btn btn-default btn-sm']) !!} {!! link_to_route('users.projects', trans('app.reset'), [$user], ['class' => 'btn btn-default btn-sm']) !!}
{!! Form::close() !!} {!! Form::close() !!}

84
resources/views/users/show.blade.php

@ -4,6 +4,11 @@
<div class="row"> <div class="row">
<div class="col-md-6"> <div class="col-md-6">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{{ $user->name }} | {{ trans('user.profile') }}
</h3>
</div>
<table class="table"> <table class="table">
<tr><th class="col-xs-3">{{ trans('user.user_id') }}</th><td>{{ $user->id }}</td></tr> <tr><th class="col-xs-3">{{ trans('user.user_id') }}</th><td>{{ $user->id }}</td></tr>
<tr><th>{{ trans('user.name') }}</th><td>{{ $user->name }}</td></tr> <tr><th>{{ trans('user.name') }}</th><td>{{ $user->name }}</td></tr>
@ -11,11 +16,84 @@
<tr><th>{{ trans('user.role') }}</th><td>{!! $user->roleList() !!}</td></tr> <tr><th>{{ trans('user.role') }}</th><td>{!! $user->roleList() !!}</td></tr>
<tr><th>{{ trans('lang.lang') }}</th><td>{{ trans('lang.'.$user->lang) }}</td></tr> <tr><th>{{ trans('lang.lang') }}</th><td>{{ trans('lang.'.$user->lang) }}</td></tr>
</table> </table>
<div class="panel-footer">
{!! link_to_route('users.edit', trans('user.edit'), [$user->id], ['class' => 'btn btn-warning']) !!}
{!! link_to_route('users.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
</div> </div>
</div> </div>
<div class="col-md-3">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{$user->name}} | {{ trans('user.current_jobs') }}</h3></div>
<table class="table table-condensed">
<tbody>
@php
$currentJobTotal = 0;
@endphp
<tr>
<th class="text-center">{{ trans('job.progress') }}</th>
<th class="text-center">{{ trans('user.jobs_count') }}</th>
</tr>
<tr>
<td class="text-center">0 - 10%</td>
<td class="text-center">
{{ $count = $userCurrentJobs->filter(function ($job) {
return $job->progress == 0;
})->count() }}
@php
$currentJobTotal += $count;
@endphp
</td>
</tr>
<tr>
<td class="text-center">11 - 50%</td>
<td class="text-center">
{{ $count = $userCurrentJobs->filter(function ($job) {
return $job->progress > 10 && $job->progress <= 50;
})->count() }}
@php
$currentJobTotal += $count;
@endphp
</td>
</tr>
<tr>
<td class="text-center">51 - 75%</td>
<td class="text-center">
{{ $count = $userCurrentJobs->filter(function ($job) {
return $job->progress > 50 && $job->progress <= 75;
})->count() }}
@php
$currentJobTotal += $count;
@endphp
</td>
</tr>
<tr>
<td class="text-center">76 - 99%</td>
<td class="text-center">
{{ $count = $userCurrentJobs->filter(function ($job) {
return $job->progress > 75 && $job->progress <= 99;
})->count() }}
@php
$currentJobTotal += $count;
@endphp
</td>
</tr>
<tr>
<td class="text-center">100%</td>
<td class="text-center">
{{ $count = $userCurrentJobs->filter(function ($job) {
return $job->progress == 100;
})->count() }}
@php
$currentJobTotal += $count;
@endphp
</td>
</tr>
</tbody>
<tfoot>
<tr style="border-top: 4px solid #ccc">
<th class="text-center">{{ trans('app.total') }}</th>
<th class="text-center">{{ $currentJobTotal }}</th>
</tr>
</tfoot>
</table>
</div>
</div> </div>
</div> </div>
@endsection @endsection

4
tests/Unit/Models/UserTest.php

@ -20,9 +20,7 @@ class UserTest extends TestCase
{ {
$user = factory(User::class)->create(); $user = factory(User::class)->create();
$this->assertEquals(link_to_route('users.show', $user->name, [$user->id], [
'target' => '_blank',
]), $user->nameLink());
$this->assertEquals(link_to_route('users.show', $user->name, [$user]), $user->nameLink());
} }
/** @test */ /** @test */

Loading…
Cancel
Save