main
Ilham Wara Nugroho 2025-08-25 13:53:17 +07:00
parent 146df57870
commit 587bdaeb81
8 changed files with 232 additions and 3 deletions

View File

@ -5,6 +5,7 @@ namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Dataset; use App\Models\Dataset;
use App\Models\Master\Topik; use App\Models\Master\Topik;
use App\Models\Master\Instansi;
use App\Models\Master\Template; use App\Models\Master\Template;
use App\Models\Master\Group; use App\Models\Master\Group;
@ -37,7 +38,8 @@ class HomeController extends Controller
$data['dataset'] = Dataset::orderBy('DatasetId','DESC')->whereIn('instansi_id',[auth()->user()->ms_instansi_id])->limit(10)->get(); $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->whereIn('instansi_id',[auth()->user()->ms_instansi_id])->limit(10)->get();
} }
// $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(10)->get(); // $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(10)->get();
$data['group'] = Group::where('MsGroupId','!=',1)->get(); $data['group'] = Group::where('MsGroupId','!=',1)->where('name','!=','Balai')->get();
$data['resource'] = Template::with(['dataset'])->where('show_dashboard',1)->get();
$data['classDataset'] = Dataset::class; $data['classDataset'] = Dataset::class;
return view($this->template.'.dashboard',$data); return view($this->template.'.dashboard',$data);
@ -142,4 +144,25 @@ class HomeController extends Controller
return response()->json($_data); return response()->json($_data);
} }
function resource($id){
$keyId = decode_id($id);
$data['id'] = $id;
$data['title'] = 'Dashboard';
$data['dataset'] = Dataset::where('template_id',$keyId)->pluck('instansi_id')->toArray();
$data['instansi'] = Instansi::whereIn('MsInstansiId',$data['dataset'])->paginate(9);
return view($this->template.'.resource',$data);
}
function resource_instansi($instansi_id,$id){
$data['id'] = decode_id($id);
$data['instansi_id'] = decode_id($instansi_id);
$data['dataset'] = Dataset::with(['template'])->where('instansi_id',decode_id($instansi_id))->where('template_id',decode_id($id))->first();
$data['title'] = 'Dashboard '.@$data['dataset']->template->name;
return view($this->template.'.resource_detail',$data);
}
} }

View File

@ -57,9 +57,9 @@ class DatasetController extends Controller
public function grid(Request $request) public function grid(Request $request)
{ {
if(session('group_id') == 1){ if(session('group_id') == 1){
$data = Dataset::orderBy('DatasetId','DESC')->get(); $data = Dataset::with(['template'])->orderBy('DatasetId','DESC')->get();
}else{ }else{
$data = Dataset::orderBy('DatasetId','DESC')->whereIn('instansi_id',[auth()->user()->ms_instansi_id])->get(); $data = Dataset::with(['template'])->orderBy('DatasetId','DESC')->whereIn('instansi_id',[auth()->user()->ms_instansi_id])->get();
} }
// $data = User::with(['group'])->orderBy('id','DESC')->get(); // $data = User::with(['group'])->orderBy('id','DESC')->get();
$_data = []; $_data = [];
@ -99,6 +99,7 @@ class DatasetController extends Controller
'name' => @$row->name, 'name' => @$row->name,
'publik' => @$row->publik, 'publik' => @$row->publik,
'tahun' => @$row->tahun, 'tahun' => @$row->tahun,
'template' => @$row->template->name,
'created_at' => date('d-m-Y H:i:s',strtotime(@$row->created_at)), 'created_at' => date('d-m-Y H:i:s',strtotime(@$row->created_at)),
'instansi' => @$row->instansi->name, 'instansi' => @$row->instansi->name,
'action' => @$action, 'action' => @$action,

View File

@ -12,4 +12,8 @@ class Template extends Model
protected $table = 'ms_template'; protected $table = 'ms_template';
protected $primaryKey = 'MsTemplateId'; protected $primaryKey = 'MsTemplateId';
protected $guarded = []; protected $guarded = [];
function dataset(){
return $this->hasMany(\App\Models\Dataset::class, 'template_id');
}
} }

View File

@ -59,6 +59,37 @@
</div> </div>
<div class="grid xl:grid-cols-1 lg:grid-cols-1 grid-cols-1 gap-6 mb-6"> <div class="grid xl:grid-cols-1 lg:grid-cols-1 grid-cols-1 gap-6 mb-6">
<div class="card">
<div class="p-6">
<div>
<div id="toolbar">
<h5 class="text-md font-bold">10 Data Update Terakhir</h5>
</div>
<table class="gridjs-table" >
<thead class="gridjs-thead">
<tr class="gridjs-tr bg-primary-light">
<th class="gridjs-td gridjs-th text-sm">#</th>
<th class="gridjs-td gridjs-th text-sm">No</th>
<th class="gridjs-td gridjs-th text-sm">Resource Data</th>
<th class="gridjs-td gridjs-th text-sm">Jumlah Upload Dataset</th>
</tr>
</thead>
<tbody class="gridjs-tbody">
@foreach ($resource as $k => $res)
<tr class="gridjs-tr">
<td class="gridjs-td gridjs-th text-sm"><a href="{{ url('dashboard/dataset/resource/'.encode_id($res->MsTemplateId)) }}" class="btn bg-success text-white">Lihat Data</a></td>
<td class="gridjs-td gridjs-th text-sm">{{$k+1}}</td>
<td class="gridjs-td gridjs-th text-sm">{{ $res->name }}</td>
<td class="gridjs-td gridjs-th text-sm text-center">{{ $res->dataset->count() }}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
</div>
</div>
<div class="grid xl:grid-cols-1 lg:grid-cols-1 grid-cols-1 gap-6 mb-6 hidden">
<div class="card"> <div class="card">
<div class="p-6"> <div class="p-6">
<div> <div>

View File

@ -0,0 +1,78 @@
@extends('layouts.master')
@section('content')
<!-- Page Title Start -->
<div class="flex justify-between items-center mb-6">
<h4 class="text-slate-900 dark:text-slate-200 text-lg font-medium">{{ $title }}</h4>
<a href="{{ url('dashboard') }}" class="btn bg-primary text-white"><i class="ri-arrow-left-line"></i> Kembali</a>
</div>
<!-- Page Title End -->
<div class="grid xl:grid-cols-4 lg:grid-cols-2 grid-cols-1 gap-6 mb-6">
@foreach($instansi as $dataInstansi)
<a href="{{url('dashboard/dataset/resource/instansi/'.encode_id($dataInstansi->MsInstansiId).'/'.$id)}}">
<?php
$tahun = '';
$dataset = \App\Models\Dataset::where('instansi_id',$dataInstansi->MsInstansiId)->orderBy('tahun','ASC')->pluck('tahun')->toArray();
$bg = 'info';
if(@$dataInstansi->alias == 'dinas'){
$bg = 'success';
}elseif(@$dataInstansi->alias == 'biro'){
$bg = 'warning';
}elseif(@$dataInstansi->alias == 'badan'){
$bg = 'danger';
}elseif(@$dataInstansi->alias == 'deputi'){
$bg = 'info';
}
?>
<div class="card border-top-{{$bg}}">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full hidden">
{{-- <div class="flex justify-between">
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div> --}}
<div class="flex items-center justify-between">
<div class="px-4 py-3 rounded-full bg-{{$bg}}-light">
<i class="ri-database-2-line text-lg text-{{$bg}}"></i>
</div>
<div>
<h2 class="text-3xl bold my-3 py-0.5">0</h2>
</div>
</div>
</div>
<div class="w-full">
<div class="">
<div class="mb-2"><h5 class="text-sm font-bold mt-0 truncate">{{$dataInstansi->name}}</h5></div>
<div class="mb-2">
@foreach ($dataset as $tahun)
<span class="p-1 bg-info-light rounded text-white">{{ $tahun }}</span>
@endforeach
</div>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
</a>
@endforeach
</div>
<div class="grid grid-cols-1 gap-6 mb-6">
{{ $instansi->render() }}
</div>
<!-- end row -->
@endsection
@section('js')
<script src="{{asset('assets/js/pages/dashboard-analytics.js')}}"></script>
<!-- Apex Charts js -->
<script src="{{asset('assets/libs/apexcharts/apexcharts.min.js')}}"></script>
<!-- Vector Map Js -->
<script src="{{asset('assets/libs/jsvectormap/js/jsvectormap.min.js')}}"></script>
<script src="{{asset('assets/libs/jsvectormap/maps/world-merc.js')}}"></script>
<script src="{{asset('assets/libs/jsvectormap/maps/world.js')}}"></script>
@endsection

View File

@ -0,0 +1,89 @@
@extends('layouts.master')
@section('content')
<!-- Page Title Start -->
<div class="flex justify-between items-center mb-6">
<h4 class="text-slate-900 dark:text-slate-200 text-lg font-medium">{{ $title }}</h4>
<a href="{{ url('dashboard/dataset/resource/'.encode_id($id)) }}" class="btn bg-primary text-white"><i class="ri-arrow-left-line"></i> Kembali</a>
</div>
<!-- Page Title End -->
<div class="grid xl:grid-cols-1 lg:grid-cols-1 grid-cols-1 gap-6 mb-6">
<div class="card">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full">
<h5 class="text-lg bold mb-5">{{@$dataset->instansi->name}}</h5>
<p>Ini adalah data {{$dataset->template->name}} 5 tahun terakhir, berdasarkan data yang sudah di upload sebelumnya</p>
<div id="chart"></div>
</div>
</div>
</div>
</div>
</div>
<!-- end row -->
@endsection
@section('js')
<script src="{{asset('assets/js/pages/dashboard-analytics.js')}}"></script>
<!-- Apex Charts js -->
<script src="{{asset('assets/libs/apexcharts/apexcharts.min.js')}}"></script>
<!-- Vector Map Js -->
<script src="{{asset('assets/libs/jsvectormap/js/jsvectormap.min.js')}}"></script>
<script src="{{asset('assets/libs/jsvectormap/maps/world-merc.js')}}"></script>
<script src="{{asset('assets/libs/jsvectormap/maps/world.js')}}"></script>
<script>
var options = {
series: [{
name: 'Luas Kawasan',
data: [41176, 13176, 38176, 55176, 42176]
}, {
name: 'Kawasan Hutan Lindung',
data: [31176, 23176, 58176, 65176, 42176]
}, {
name: 'Kawasan Air',
data: [11176, 23176, 58176, 25176, 12176]
}],
chart: {
type: 'bar',
height: 350
},
plotOptions: {
bar: {
horizontal: false,
columnWidth: '55%',
borderRadius: 5,
borderRadiusApplication: 'end'
},
},
dataLabels: {
enabled: false
},
stroke: {
show: true,
width: 2,
colors: ['transparent']
},
xaxis: {
categories: ['2020', '2021', '2022', '2023', '2024'],
},
yaxis: {
title: {
text: ''
}
},
fill: {
opacity: 1
},
tooltip: {
y: {
formatter: function (val) {
return " " + val + " "
}
}
}
};
var chart = new ApexCharts(document.querySelector("#chart"), options);
chart.render();
</script>
@endsection

View File

@ -34,6 +34,7 @@
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-width="10" data-field="no">No</th> <th class="gridjs-td gridjs-th text-sm text-gray-500" data-width="10" data-field="no">No</th>
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="instansi">Nama Instansi</th> <th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="instansi">Nama Instansi</th>
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="name">Nama Dataset</th> <th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="name">Nama Dataset</th>
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="template">Resource Data</th>
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="tahun">Tahun</th> <th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="tahun">Tahun</th>
<th class="gridjs-td gridjs-th text-sm text-center text-gray-500" data-field="status">Status</th> <th class="gridjs-td gridjs-th text-sm text-center text-gray-500" data-field="status">Status</th>
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="created_at">Tanggal Dibuat</th> <th class="gridjs-td gridjs-th text-sm text-gray-500" data-field="created_at">Tanggal Dibuat</th>

View File

@ -16,6 +16,8 @@ use App\Http\Controllers\Opendata\DatasetTambahanController;
Route::name('dashboard.')->prefix('dashboard')->group(function () { Route::name('dashboard.')->prefix('dashboard')->group(function () {
Route::get('/',[HomeController::class,'dashboard'])->name('dashboard'); Route::get('/',[HomeController::class,'dashboard'])->name('dashboard');
Route::get('/dataset/{alias}',[HomeController::class,'dataset'])->name('dataset'); Route::get('/dataset/{alias}',[HomeController::class,'dataset'])->name('dataset');
Route::get('/dataset/resource/{id}',[HomeController::class,'resource'])->name('resource');
Route::get('/dataset/resource/instansi/{instansi_id}/{id}',[HomeController::class,'resource_instansi'])->name('resource_instansi');
Route::get('/grid',[HomeController::class,'grid'])->name('grid'); Route::get('/grid',[HomeController::class,'grid'])->name('grid');
Route::get('/datasetGrid/{alias}',[HomeController::class,'datasetGrid'])->name('datasetGrid'); Route::get('/datasetGrid/{alias}',[HomeController::class,'datasetGrid'])->name('datasetGrid');
}); });