9 changed files with 249 additions and 100 deletions
-
37app/Entities/Projects/Status.php
-
62app/Entities/ReferenceAbstract.php
-
11app/Http/Kernel.php
-
29app/Http/Middleware/GlobalViewVariables.php
-
82resources/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