Browse Source

Set proper project list query for worker user

Update dashboard home page for worker and admin
pull/6/head
Nafies Luthfi 8 years ago
parent
commit
52e65c551e
  1. 19
      app/Entities/Projects/ProjectsRepository.php
  2. 2
      app/Http/Controllers/Api/ProjectsController.php
  3. 12
      app/Http/Controllers/PagesController.php
  4. 6
      app/Http/Controllers/Projects/ProjectsController.php
  5. 4
      app/Http/Requests/Tasks/UpdateRequest.php
  6. 6
      resources/views/layouts/partials/sidebar.blade.php
  7. 84
      resources/views/pages/home.blade.php
  8. 2
      resources/views/projects/index.blade.php

19
app/Entities/Projects/ProjectsRepository.php

@ -4,6 +4,7 @@ namespace App\Entities\Projects;
use App\Entities\BaseRepository;
use App\Entities\Partners\Customer;
use App\Entities\Users\User;
use DB;
use ProjectStatus;
@ -19,18 +20,32 @@ class ProjectsRepository extends BaseRepository
parent::__construct($model);
}
public function getProjects($q, $statusId)
public function getProjects($q, $statusId, User $user)
{
$statusIds = array_keys(ProjectStatus::toArray());
if ($user->hasRole('admin') == false) {
return $user->projects()
->where(function ($query) use ($q, $statusId, $statusIds) {
$query->where('projects.name', 'like', '%'.$q.'%');
if ($statusId && in_array($statusId, $statusIds)) {
$query->where('status_id', $statusId);
}
})
->latest()
->with(['customer'])
->paginate($this->_paginate);
}
return $this->model->latest()
->where(function ($query) use ($q, $statusId, $statusIds) {
$query->where('name', 'like', '%'.$q.'%');
if ($statusId && in_array($statusId, $statusIds)) {
$query->where('status_id', $statusId);
}
})
->withCount('payments')
->with('customer')
->paginate($this->_paginate);
}

2
app/Http/Controllers/Api/ProjectsController.php

@ -22,7 +22,7 @@ class ProjectsController extends Controller
public function index(Request $request)
{
return $this->repo->getProjects($request->get('q'), $request->get('status_id'));
return $this->repo->getProjects($request->get('q'), $request->get('status_id'), auth()->user());
}
public function show($id)

12
app/Http/Controllers/PagesController.php

@ -6,9 +6,15 @@ class PagesController extends Controller
{
public function home()
{
return view('pages.home', [
'queriedYear' => request('year', date('Y')),
]);
$user = auth()->user();
$queriedYear = request('year', date('Y'));
$userCurrentJobs = $user->jobs()
->whereHas('project', function ($query) {
$query->whereIn('status_id', [2, 3]);
})->with('tasks')->get();
return view('pages.home', compact('queriedYear', 'user', 'userCurrentJobs'));
}
public function about()

6
app/Http/Controllers/Projects/ProjectsController.php

@ -26,14 +26,14 @@ class ProjectsController extends Controller
public function index(Request $request)
{
$status = null;
$statusId = $request->get('status');
$statusId = $request->get('status_id', 2);
if ($statusId) {
$status = $this->repo->getStatusName($statusId);
}
$projects = $this->repo->getProjects($request->get('q'), $statusId);
$projects = $this->repo->getProjects($request->get('q'), $statusId, auth()->user());
return view('projects.index', compact('projects', 'status'));
return view('projects.index', compact('projects', 'status', 'statusId'));
}
public function create()

4
app/Http/Requests/Tasks/UpdateRequest.php

@ -2,6 +2,7 @@
namespace App\Http\Requests\Tasks;
use App\Entities\Projects\Task;
use App\Http\Requests\Request;
class UpdateRequest extends Request
@ -13,7 +14,8 @@ class UpdateRequest extends Request
*/
public function authorize()
{
return auth()->user()->can('manage_agency');
$task = Task::findOrFail($this->segment(2));
return auth()->user()->can('update', $task);
}
/**

6
resources/views/layouts/partials/sidebar.blade.php

@ -17,11 +17,11 @@
<ul class="nav" id="side-menu">
<li>{!! html_link_to_route('home', trans('nav_menu.dashboard'), [], ['icon' => 'dashboard']) !!}</li>
<li>{!! html_link_to_route('jobs.index', trans('job.on_progress').' <span class="badge pull-right">'.AdminDashboard::onProgressJobCount(auth()->user()).'</span>', [], ['icon' => 'tasks']) !!}</li>
@can('manage_agency')
<li>
{!! html_link_to_route('projects.index', trans('project.projects') . ' <span class="fa arrow"></span>', [], ['icon' => 'table']) !!}
{!! html_link_to_route('projects.index', trans('project.projects').' <span class="fa arrow"></span>', [], ['icon' => 'table']) !!}
@include('view-components.sidebar-project-list-links')
</li>
@can('manage_agency')
<li>{!! html_link_to_route('reports.payments.yearly', trans('dashboard.yearly_earnings'), [], ['icon' => 'line-chart']) !!}</li>
<li>{!! html_link_to_route('reports.current-credits', trans('dashboard.receiveable_earnings'), [], ['icon' => 'money']) !!}</li>
<li>{!! html_link_to_route('users.calendar', trans('nav_menu.calendar'), [], ['icon' => 'calendar']) !!}</li>
@ -31,6 +31,8 @@
<li>{!! html_link_to_route('customers.index', trans('customer.list'), [], ['icon' => 'users']) !!}</li>
<li>{!! html_link_to_route('vendors.index', trans('vendor.list'), [], ['icon' => 'users']) !!}</li>
<li>{!! html_link_to_route('backups.index', trans('backup.list'), [], ['icon' => 'refresh']) !!}</li>
@else
<li>{!! html_link_to_route('projects.index', trans('project.projects'), [], ['icon' => 'table']) !!}</li>
@endcan
<li>{!! html_link_to_route('auth.change-password', trans('auth.change_password'), [], ['icon' => 'lock']) !!}</li>
<li>{!! html_link_to_route('auth.logout', trans('auth.logout'), [], ['icon' => 'sign-out']) !!}</li>

84
resources/views/pages/home.blade.php

@ -3,7 +3,7 @@
@section('title', trans('nav_menu.dashboard'))
@section('content-dashboard')
@if (auth()->user()->hasRole('admin'))
<div class="row">
<div class="col-lg-5">
<legend style="border-bottom: none" class="text-center">{{ trans('dashboard.project_status_stats') }}</legend>
@ -86,4 +86,86 @@
</div>
</div>
</div>
@else
<div class="row">
<div class="col-md-4 col-md-offset-3">
<div class="panel panel-default">
<div class="panel-heading"><h3 class="panel-title">{{ 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>
@endif
@endsection

2
resources/views/projects/index.blade.php

@ -12,7 +12,7 @@
<div class="well well-sm text-right">
<div class="pull-left hidden-xs">{{ $projects->appends(Request::except('page'))->render() }}</div>
{!! Form::open(['method' => 'get', 'class' => 'form-inline']) !!}
{!! FormField::select('status', ProjectStatus::toArray(), ['value' => Request::get('status'), 'placeholder' => trans('project.all')]) !!}
{!! FormField::select('status_id', ProjectStatus::toArray(), ['value' => $statusId, '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']) !!}
{!! Form::submit(trans('project.search'), ['class' => 'btn btn-info btn-sm']) !!}
{!! link_to_route('projects.index', 'Reset', [], ['class' => 'btn btn-default btn-sm']) !!}

Loading…
Cancel
Save