9 changed files with 249 additions and 100 deletions
-
37app/Entities/Projects/Status.php
-
62app/Entities/ReferenceAbstract.php
-
1app/Http/Kernel.php
-
29app/Http/Middleware/GlobalViewVariables.php
-
8resources/lang/id/project.php
-
49resources/views/layouts/partials/sidebar.blade.php
-
28resources/views/pages/home.blade.php
-
14resources/views/view-components/sidebar-project-list-links.blade.php
-
37tests/Unit/References/ProjectStatusTest.php
@ -0,0 +1,37 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\Entities\Projects; |
||||
|
|
||||
|
use App\Entities\ReferenceAbstract; |
||||
|
|
||||
|
class Status extends ReferenceAbstract |
||||
|
{ |
||||
|
protected static $lists = [ |
||||
|
1 => 'planned', |
||||
|
2 => 'progress', |
||||
|
3 => 'done', |
||||
|
4 => 'closed', |
||||
|
5 => 'canceled', |
||||
|
6 => 'on_hold', |
||||
|
]; |
||||
|
|
||||
|
public static function getNameById($singleId) |
||||
|
{ |
||||
|
return trans('project.'.static::$lists[$singleId]); |
||||
|
} |
||||
|
|
||||
|
public static function toArray() |
||||
|
{ |
||||
|
$lists = []; |
||||
|
foreach (static::$lists as $key => $value) { |
||||
|
$lists[$key] = trans('project.'.$value); |
||||
|
} |
||||
|
|
||||
|
return $lists; |
||||
|
} |
||||
|
|
||||
|
public static function all() |
||||
|
{ |
||||
|
return collect($this->toArray()); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,62 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\Entities; |
||||
|
|
||||
|
use Illuminate\Support\Arr; |
||||
|
|
||||
|
abstract class ReferenceAbstract |
||||
|
{ |
||||
|
protected static $lists = []; |
||||
|
|
||||
|
protected static $colors = []; |
||||
|
|
||||
|
public static function get() |
||||
|
{ |
||||
|
return collect(static::$lists); |
||||
|
} |
||||
|
|
||||
|
public static function toArray() |
||||
|
{ |
||||
|
return static::$lists; |
||||
|
} |
||||
|
|
||||
|
public static function all() |
||||
|
{ |
||||
|
return static::toArray(); |
||||
|
} |
||||
|
|
||||
|
public static function getById($singleId) |
||||
|
{ |
||||
|
return static::$lists[$singleId]; |
||||
|
} |
||||
|
|
||||
|
public static function only(array $singleIds) |
||||
|
{ |
||||
|
return Arr::only(static::$lists, $singleIds); |
||||
|
} |
||||
|
|
||||
|
public static function except(array $singleIds) |
||||
|
{ |
||||
|
return Arr::except(static::$lists, $singleIds); |
||||
|
} |
||||
|
|
||||
|
public static function colors() |
||||
|
{ |
||||
|
return static::$colors; |
||||
|
} |
||||
|
|
||||
|
public static function getColorById($colorId) |
||||
|
{ |
||||
|
return isset(static::$lists[$colorId]) ? static::$colors[$colorId] : null; |
||||
|
} |
||||
|
|
||||
|
public static function colorsExcept(array $colorIds) |
||||
|
{ |
||||
|
return Arr::except(static::$colors, $colorIds); |
||||
|
} |
||||
|
|
||||
|
public static function colorsOnly(array $colorIds) |
||||
|
{ |
||||
|
return Arr::only(static::$colors, $colorIds); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace App\Http\Middleware; |
||||
|
|
||||
|
use App\Entities\Projects\Project; |
||||
|
use Closure; |
||||
|
use DB; |
||||
|
|
||||
|
class GlobalViewVariables |
||||
|
{ |
||||
|
/** |
||||
|
* Handle an incoming request. |
||||
|
* |
||||
|
* @param \Illuminate\Http\Request $request |
||||
|
* @param \Closure $next |
||||
|
* @return mixed |
||||
|
*/ |
||||
|
public function handle($request, Closure $next) |
||||
|
{ |
||||
|
$projectsCount = Project::select(DB::raw('status_id, count(id) as count')) |
||||
|
->groupBy('status_id') |
||||
|
->pluck('count', 'status_id') |
||||
|
->all(); |
||||
|
|
||||
|
view()->share('sidebarProjectStats', $projectsCount); |
||||
|
|
||||
|
return $next($request); |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,14 @@ |
|||||
|
@inject('projectStatuses', 'App\Entities\Projects\Status') |
||||
|
|
||||
|
<ul class="nav nav-second-level"> |
||||
|
@foreach($projectStatuses::get() as $statusId => $status) |
||||
|
|
||||
|
<?php |
||||
|
$projectCount = array_key_exists($statusId, $sidebarProjectStats) ? $sidebarProjectStats[$statusId] : 0; |
||||
|
$status .= '<span class="badge pull-right">'.$projectCount.'</span>'; |
||||
|
?>
|
||||
|
|
||||
|
<li>{!! html_link_to_route('projects.index', $status, ['status' => $statusId]) !!}</li> |
||||
|
|
||||
|
@endforeach |
||||
|
</ul> |
||||
@ -0,0 +1,37 @@ |
|||||
|
<?php |
||||
|
|
||||
|
namespace Tests\Unit\Reference; |
||||
|
|
||||
|
use App\Entities\Projects\Status; |
||||
|
use Tests\TestCase; |
||||
|
|
||||
|
class ProjectStatusTest extends TestCase |
||||
|
{ |
||||
|
/** @test */ |
||||
|
public function retrieve_project_status_list() |
||||
|
{ |
||||
|
$projectStatus = new Status; |
||||
|
|
||||
|
$this->assertEquals([ |
||||
|
1 => trans('project.planned'), |
||||
|
2 => trans('project.progress'), |
||||
|
3 => trans('project.done'), |
||||
|
4 => trans('project.closed'), |
||||
|
5 => trans('project.canceled'), |
||||
|
6 => trans('project.on_hold'), |
||||
|
], $projectStatus->toArray()); |
||||
|
} |
||||
|
|
||||
|
/** @test */ |
||||
|
public function retrieve_project_status_by_id() |
||||
|
{ |
||||
|
$projectStatus = new Status; |
||||
|
|
||||
|
$this->assertEquals(trans('project.planned'), $projectStatus->getNameById(1)); |
||||
|
$this->assertEquals(trans('project.progress'), $projectStatus->getNameById(2)); |
||||
|
$this->assertEquals(trans('project.done'), $projectStatus->getNameById(3)); |
||||
|
$this->assertEquals(trans('project.closed'), $projectStatus->getNameById(4)); |
||||
|
$this->assertEquals(trans('project.canceled'), $projectStatus->getNameById(5)); |
||||
|
$this->assertEquals(trans('project.on_hold'), $projectStatus->getNameById(6)); |
||||
|
} |
||||
|
} |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue