diff --git a/app/Http/Controllers/Api/StatuslabelsController.php b/app/Http/Controllers/Api/StatuslabelsController.php index b2522a8a5..c4058f79c 100644 --- a/app/Http/Controllers/Api/StatuslabelsController.php +++ b/app/Http/Controllers/Api/StatuslabelsController.php @@ -9,6 +9,8 @@ use App\Http\Transformers\StatuslabelsTransformer; use App\Models\Asset; use App\Models\Statuslabel; use Illuminate\Http\Request; +use App\Http\Transformers\PieChartTransformer; +use Illuminate\Support\Arr; class StatuslabelsController extends Controller { @@ -188,43 +190,54 @@ class StatuslabelsController extends Controller * * @author [A. Gianotto] [] * @since [v3.0] - * @return \Illuminate\Http\Response + * @return array */ public function getAssetCountByStatuslabel() { $this->authorize('view', Statuslabel::class); - $statuslabels = Statuslabel::withCount('assets')->get(); - $labels = []; - $points = []; - $default_color_count = 0; - $colors_array = []; - foreach ($statuslabels as $statuslabel) { - if ($statuslabel->assets_count > 0) { - $labels[] = $statuslabel->name.' ('.number_format($statuslabel->assets_count).')'; - $points[] = $statuslabel->assets_count; - if ($statuslabel->color != '') { - $colors_array[] = $statuslabel->color; - } else { - $colors_array[] = Helper::defaultChartColors($default_color_count); - } - $default_color_count++; + $total[$statuslabel->name]['label'] = $statuslabel->name; + $total[$statuslabel->name]['count'] = $statuslabel->assets_count; + + if ($statuslabel->color != '') { + $total[$statuslabel->name]['color'] = $statuslabel->color; } } - $result = [ - 'labels' => $labels, - 'datasets' => [[ - 'data' => $points, - 'backgroundColor' => $colors_array, - 'hoverBackgroundColor' => $colors_array, - ]], - ]; + return (new PieChartTransformer())->transformPieChartDate($total); - return $result; + } + + /** + * Show a count of assets by meta status type for pie chart + * + * @author [A. Gianotto] [] + * @since [v6.0.11] + * @return array + */ + public function getAssetCountByMetaStatus() + { + $this->authorize('view', Statuslabel::class); + + $total['rtd']['label'] = trans('general.ready_to_deploy'); + $total['rtd']['count'] = Asset::RTD()->count(); + + $total['deployed']['label'] = trans('general.deployed'); + $total['deployed']['count'] = Asset::Deployed()->count(); + + $total['archived']['label'] = trans('general.archived'); + $total['archived']['count'] = Asset::Archived()->count(); + + $total['pending']['label'] = trans('general.pending'); + $total['pending']['count'] = Asset::Pending()->count(); + + $total['undeployable']['label'] = trans('general.undeployable'); + $total['undeployable']['count'] = Asset::Undeployable()->count(); + + return (new PieChartTransformer())->transformPieChartDate($total); } /** diff --git a/app/Http/Controllers/SettingsController.php b/app/Http/Controllers/SettingsController.php index 33afd47f8..14d090422 100755 --- a/app/Http/Controllers/SettingsController.php +++ b/app/Http/Controllers/SettingsController.php @@ -349,6 +349,7 @@ class SettingsController extends Controller $setting->privacy_policy_link = $request->input('privacy_policy_link'); $setting->depreciation_method = $request->input('depreciation_method'); + $setting->dash_chart_type = $request->input('dash_chart_type'); if ($request->input('per_page') != '') { $setting->per_page = $request->input('per_page'); diff --git a/app/Http/Transformers/PieChartTransformer.php b/app/Http/Transformers/PieChartTransformer.php new file mode 100644 index 000000000..855a12511 --- /dev/null +++ b/app/Http/Transformers/PieChartTransformer.php @@ -0,0 +1,54 @@ +] + */ +class PieChartTransformer +{ + public function transformPieChartDate($totals) + { + + $labels = []; + $counts = []; + $default_color_count = 0; + $colors_array = []; + + foreach ($totals as $total) { + + if ($total['count'] > 0) { + + $labels[] = $total['label']; + $counts[] = $total['count']; + + if (isset($total['color'])) { + $colors_array[] = $total['color']; + } else { + $colors_array[] = Helper::defaultChartColors($default_color_count); + $default_color_count++; + } + } + } + + $results = [ + 'labels' => $labels, + 'datasets' => [[ + 'data' => $counts, + 'backgroundColor' => $colors_array, + 'hoverBackgroundColor' => $colors_array, + ]], + ]; + + + return $results; + } +} diff --git a/database/migrations/2022_09_29_040231_add_chart_type_to_settings.php b/database/migrations/2022_09_29_040231_add_chart_type_to_settings.php new file mode 100644 index 000000000..1e69b66f2 --- /dev/null +++ b/database/migrations/2022_09_29_040231_add_chart_type_to_settings.php @@ -0,0 +1,34 @@ +string('dash_chart_type')->nullable()->default('name'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('settings', function (Blueprint $table) { + if (Schema::hasColumn('settings', 'dash_chart_type')) { + $table->dropColumn('dash_chart_type'); + } + }); + } +} diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index 029b74d19..ba2cb77a6 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -373,6 +373,9 @@ return [ 'bulk_checkin_success' => 'The items for the selected users have been checked in.', 'set_to_null' => 'Delete values for this asset|Delete values for all :asset_count assets ', 'na_no_purchase_date' => 'N/A - No purchase date provided', + 'assets_by_status' => 'Assets by Status', + 'assets_by_status_type' => 'Assets by Status Type', + 'pie_chart_type' => 'Dashboard Pie Chart Type', ]; \ No newline at end of file diff --git a/resources/views/dashboard.blade.php b/resources/views/dashboard.blade.php index 241ec597b..fe6f2ac0d 100755 --- a/resources/views/dashboard.blade.php +++ b/resources/views/dashboard.blade.php @@ -248,7 +248,9 @@
-

{{ trans('general.assets') }} {{ trans('general.bystatus') }}

+

+ {{ (\App\Models\Setting::getSettings()->dash_chart_type == 'name') ? trans('general.assets_by_status') : trans('general.assets_by_status_type') }} +

+ + + +
+
+ {{ Form::label('show_in_model_list', + trans('general.pie_chart_type')) }} +
+
+ {{ Form::select('dash_chart_type', array( + 'name' => 'Status Label Name', + 'type' => 'Status Label Type'), Request::old('dash_chart_type', $setting->dash_chart_type), ['class' =>'select2', 'style' => 'width: 80%']) }} +
+
+
diff --git a/routes/api.php b/routes/api.php index 25b3a8bc9..d27f14601 100644 --- a/routes/api.php +++ b/routes/api.php @@ -859,11 +859,18 @@ Route::group(['prefix' => 'v1', 'middleware' => ['api', 'throttle:api']], functi ] )->name('api.statuslabels.selectlist'); - Route::get('assets', + Route::get('assets/name', [ Api\StatuslabelsController::class, 'getAssetCountByStatuslabel' ] + )->name('api.statuslabels.assets.byname'); + + Route::get('assets/type', + [ + Api\StatuslabelsController::class, + 'getAssetCountByMetaStatus' + ] )->name('api.statuslabels.assets.bytype'); Route::get('{id}/assetlist',