Browse Source

Update sidebar view

Restructure sidebar view partial
Update on progress/unfinished jobs query based on user/worker
pull/6/head
Nafies Luthfi 8 years ago
parent
commit
926d7626ce
  1. 18
      app/Entities/Projects/JobsRepository.php
  2. 2
      app/Http/Controllers/JobsController.php
  3. 1
      app/Providers/AuthServiceProvider.php
  4. 17
      app/Queries/AdminDashboardQuery.php
  5. 2
      resources/views/jobs/edit.blade.php
  6. 25
      resources/views/layouts/partials/lang-switcher.blade.php
  7. 31
      resources/views/layouts/partials/sidebar.blade.php
  8. 11
      tests/Unit/Queries/AdminDashboardQueryTest.php

18
app/Entities/Projects/JobsRepository.php

@ -3,6 +3,7 @@
namespace App\Entities\Projects;
use App\Entities\BaseRepository;
use App\Entities\Users\User;
use DB;
/**
@ -19,16 +20,19 @@ class JobsRepository extends BaseRepository
parent::__construct($model);
}
public function getUnfinishedJobs()
public function getUnfinishedJobs(User $user)
{
return $this->model->whereHas('tasks', function ($query) {
$jobsQuery = $this->model->whereHas('tasks', function ($query) {
return $query->where('progress', '<', 100);
})
->whereHas('project', function ($query) {
})->whereHas('project', function ($query) {
return $query->whereIn('status_id', [2, 3]);
})
->with(['tasks', 'project'])
->get();
})->with(['tasks', 'project']);
if ($user->hasRole('admin') == false) {
$jobsQuery->where('worker_id', $user->id);
}
return $jobsQuery->get();
}
public function requireProjectById($projectId)

2
app/Http/Controllers/JobsController.php

@ -24,7 +24,7 @@ class JobsController extends Controller
public function index()
{
$jobs = $this->repo->getUnfinishedJobs();
$jobs = $this->repo->getUnfinishedJobs(auth()->user());
return view('jobs.unfinished', compact('jobs'));
}

1
app/Providers/AuthServiceProvider.php

@ -51,7 +51,6 @@ class AuthServiceProvider extends ServiceProvider
{
return [
'manage_agency',
'manage_backups',
'manage_options',
'manage_payments',
'manage_subscriptions',

17
app/Queries/AdminDashboardQuery.php

@ -6,6 +6,7 @@ use App\Entities\Payments\Payment;
use App\Entities\Projects\Job;
use App\Entities\Projects\Project;
use App\Entities\Subscriptions\Subscription;
use App\Entities\Users\User;
use Carbon\Carbon;
/**
@ -99,14 +100,18 @@ class AdminDashboardQuery
*
* @return int
*/
public function onProgressJobCount()
public function onProgressJobCount(User $user)
{
return Job::whereHas('tasks', function ($query) {
$jobQuery = Job::whereHas('tasks', function ($query) {
return $query->where('progress', '<', 100);
})
->whereHas('project', function ($query) {
})->whereHas('project', function ($query) {
return $query->whereIn('status_id', [2, 3]);
})
->count();
});
if ($user->hasRole('admin') == false) {
$jobQuery->where('worker_id', $user->id);
}
return $jobQuery->count();
}
}

2
resources/views/jobs/edit.blade.php

@ -15,7 +15,7 @@
{!! FormField::price('price', ['label'=> trans('job.price')]) !!}
</div>
<div class="col-sm-4">
{!! FormField::select('worker_id', $workers, ['label'=> trans('job.worker'),'value' => 1]) !!}
{!! FormField::select('worker_id', $workers, ['label'=> trans('job.worker')]) !!}
</div>
<div class="col-sm-4">
{!! FormField::radios('type_id', [1 => 'Project','Tambahan'], ['value' => 1,'label'=> trans('job.type'),'list_style' => 'unstyled']) !!}

25
resources/views/layouts/partials/lang-switcher.blade.php

@ -0,0 +1,25 @@
<div class="text-center" style="border-bottom: 1px solid #e7e7e7; padding-bottom: 10px">
{{ trans('lang.lang') }} :
{!! FormField::formButton(
[
'route' => 'users.profile.switch-lang',
'method' => 'patch',
'title' => auth()->user()->lang != 'en' ? trans('lang.switch_tooltip', ['lang' => trans('lang.en')]) : ''
],
'EN',
['class' => 'btn btn-default btn-xs', 'id' => 'switch_lang_en']
+ (auth()->user()->lang == 'en' ? ['disabled' => 'disabled'] : []),
['lang' => 'en']
) !!}
{!! FormField::formButton(
[
'route' => 'users.profile.switch-lang',
'method' => 'patch',
'title' => auth()->user()->lang != 'id' ? trans('lang.switch_tooltip', ['lang' => trans('lang.id')]) : ''
],
'ID',
['class' => 'btn btn-default btn-xs', 'id' => 'switch_lang_id']
+ (auth()->user()->lang == 'id' ? ['disabled' => 'disabled'] : []),
['lang' => 'id']
) !!}
</div>

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

@ -13,35 +13,11 @@
{{ appLogoImage(['class' => 'sidebar-logo']) }}
<div class="small" style="margin-top:10px">{{ config('app.name') }}</div>
</a>
<div class="text-center" style="border-bottom: 1px solid #e7e7e7; padding-bottom: 10px">
{{ trans('lang.lang') }} :
{!! FormField::formButton(
[
'route' => 'users.profile.switch-lang',
'method' => 'patch',
'title' => auth()->user()->lang != 'en' ? trans('lang.switch_tooltip', ['lang' => trans('lang.en')]) : ''
],
'EN',
['class' => 'btn btn-default btn-xs', 'id' => 'switch_lang_en']
+ (auth()->user()->lang == 'en' ? ['disabled' => 'disabled'] : []),
['lang' => 'en']
) !!}
{!! FormField::formButton(
[
'route' => 'users.profile.switch-lang',
'method' => 'patch',
'title' => auth()->user()->lang != 'id' ? trans('lang.switch_tooltip', ['lang' => trans('lang.id')]) : ''
],
'ID',
['class' => 'btn btn-default btn-xs', 'id' => 'switch_lang_id']
+ (auth()->user()->lang == 'id' ? ['disabled' => 'disabled'] : []),
['lang' => 'id']
) !!}
</div>
@include('layouts.partials.lang-switcher')
<ul class="nav" id="side-menu">
<li>{!! html_link_to_route('home', trans('nav_menu.dashboard'), [], ['icon' => 'dashboard']) !!}</li>
@can('manage_agency')
<li>{!! html_link_to_route('jobs.index', trans('job.on_progress').' <span class="badge pull-right">'.AdminDashboard::onProgressJobCount().'</span>', [], ['icon' => 'tasks']) !!}</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>
<li>
{!! html_link_to_route('projects.index', trans('project.projects') . ' <span class="fa arrow"></span>', [], ['icon' => 'table']) !!}
@include('view-components.sidebar-project-list-links')
@ -54,8 +30,7 @@
<li>{!! html_link_to_route('payments.index', trans('payment.payments'), [], ['icon' => 'money']) !!}</li>
<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>
@endcan
@can('manage_backups')
<li>{!! html_link_to_route('backups.index', trans('backup.list'), [], ['icon' => 'refresh']) !!}</li>
<li><a href="{{ route('backups.index') }}"><i class="fa fa-refresh fa-fw"></i> {{ trans('backup.list') }}</a></li>
@endcan
<li>{!! html_link_to_route('auth.change-password', trans('auth.change_password'), [], ['icon' => 'lock']) !!}</li>

11
tests/Unit/Queries/AdminDashboardQueryTest.php

@ -72,27 +72,28 @@ class AdminDashboardQueryTest extends TestCase
/** @test */
public function retrieve_job_on_progress_count()
{
$worker = $this->createUser('worker');
$project1 = factory(Project::class)->create(['status_id' => 2]);
$project1job1 = factory(Job::class)->create(['project_id' => $project1->id]);
$project1job1 = factory(Job::class)->create(['project_id' => $project1->id, 'worker_id' => $worker->id]);
$project1job1Task1 = factory(Task::class)->create(['job_id' => $project1job1->id, 'progress' => 50]);
$project1job1Task2 = factory(Task::class)->create(['job_id' => $project1job1->id, 'progress' => 100]);
$project1job2 = factory(Job::class)->create(['project_id' => $project1->id]);
$project1job2 = factory(Job::class)->create(['project_id' => $project1->id, 'worker_id' => $worker->id]);
$project1job2Task1 = factory(Task::class)->create(['job_id' => $project1job2->id, 'progress' => 100]);
$project1job2Task2 = factory(Task::class)->create(['job_id' => $project1job2->id, 'progress' => 100]);
$project2 = factory(Project::class)->create(['status_id' => 2]);
$project2job1 = factory(Job::class)->create(['project_id' => $project2->id]);
$project2job1 = factory(Job::class)->create(['project_id' => $project2->id, 'worker_id' => $worker->id]);
$project2job1Task1 = factory(Task::class)->create(['job_id' => $project2job1->id, 'progress' => 50]);
$project2job1Task2 = factory(Task::class)->create(['job_id' => $project2job1->id, 'progress' => 100]);
$project2job2 = factory(Job::class)->create(['project_id' => $project2->id]);
$project2job2 = factory(Job::class)->create(['project_id' => $project2->id, 'worker_id' => $worker->id]);
$project2job2Task1 = factory(Task::class)->create(['job_id' => $project2job2->id, 'progress' => 50]);
$project2job2Task2 = factory(Task::class)->create(['job_id' => $project2job2->id, 'progress' => 100]);
$this->assertCount(2, Project::all());
$this->assertCount(4, Job::all());
$this->assertCount(8, Task::all());
$this->assertEquals(3, (new AdminDashboardQuery())->onProgressJobCount());
$this->assertEquals(3, (new AdminDashboardQuery())->onProgressJobCount($worker));
}
}
Loading…
Cancel
Save