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. 6
      resources/lang/en/user.php
  5. 6
      resources/lang/id/user.php
  6. 11
      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. 86
      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;
use App\Entities\Projects\Job;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
@ -128,7 +127,7 @@ class User extends Authenticatable
public function jobs()
{
return $this->hasMany(Job::class, 'worker_id');
return $this->hasMany('App\Entities\Projects\Job', 'worker_id');
}
public function projects()

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

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

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

@ -61,7 +61,12 @@ class UsersController extends Controller
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)

6
resources/lang/en/user.php

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

6
resources/lang/id/user.php

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

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

@ -6,13 +6,10 @@
@section('content')
@include('users.partials.breadcrumb')
<h1 class="page-header">
<div class="pull-right">
{!! 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']) !!}
</div>
{{ $user->name }} <small>@yield('subtitle', trans('user.profile'))</small>
</h1>
<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.index', trans('user.back_to_index'), [], ['class' => 'btn btn-default']) !!}
</div>
@include('users.partials.nav-tabs')
@yield('content-user')
@endsection

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

@ -4,10 +4,18 @@
{!! link_to_route('users.show', trans('user.profile'), [$user]) !!}
</li>
<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 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>
</ul>
<br>

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

@ -5,8 +5,8 @@
@section('content-user')
<div class="well well-sm text-right">
{!! 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']) !!}
{!! link_to_route('users.projects', trans('app.reset'), [$user], ['class' => 'btn btn-default btn-sm']) !!}
{!! Form::close() !!}

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

@ -4,6 +4,11 @@
<div class="row">
<div class="col-md-6">
<div class="panel panel-default">
<div class="panel-heading">
<h3 class="panel-title">
{{ $user->name }} | {{ trans('user.profile') }}
</h3>
</div>
<table class="table">
<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>
@ -11,10 +16,83 @@
<tr><th>{{ trans('user.role') }}</th><td>{!! $user->roleList() !!}</td></tr>
<tr><th>{{ trans('lang.lang') }}</th><td>{{ trans('lang.'.$user->lang) }}</td></tr>
</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 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>

4
tests/Unit/Models/UserTest.php

@ -20,9 +20,7 @@ class UserTest extends TestCase
{
$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 */

Loading…
Cancel
Save