main
ilhamwara 2025-07-09 14:31:08 +07:00
parent ec88468fb7
commit 8d97b52c88
7 changed files with 273 additions and 122 deletions

View File

@ -3,9 +3,16 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use App\Models\Dataset;
use App\Models\Master\Topik;
use App\Models\Master\Template;
use App\Models\Master\Group;
class HomeController extends Controller class HomeController extends Controller
{ {
protected $template = 'modules.dashboard';
protected $route = 'modules.dashboard';
/** /**
* Create a new controller instance. * Create a new controller instance.
* *
@ -24,6 +31,110 @@ class HomeController extends Controller
public function dashboard() public function dashboard()
{ {
$data['title'] = 'Dashboard'; $data['title'] = 'Dashboard';
return view('dashboard',$data); $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(10)->get();
$data['group'] = Group::where('MsGroupId','!=',1)->get();
$data['classDataset'] = Dataset::class;
return view($this->template.'.dashboard',$data);
}
public function dataset($alias)
{
$data['title'] = 'Dashboard';
$data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(10)->get();
$data['group'] = Group::where('MsGroupId','!=',1)->get();
$data['alias'] = $alias;
return view($this->template.'.dataset',$data);
}
public function grid(Request $request)
{
if(session('group_id') == 1){
$data = Dataset::orderBy('DatasetId','DESC')->limit(10)->get();
}else{
$data = Dataset::orderBy('DatasetId','DESC')->limit(10)->whereIn('created_by',[auth()->user()->id,1])->get();
}
// $data = User::with(['group'])->orderBy('id','DESC')->get();
$_data = [];
foreach ($data as $key => $row) {
$action = '';
$action .= '<div class="flex gap-3 justify-center items-center flex-row">';
$action .= '<a href="'.url('opendata/dataset/view/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Lihat Data" class="btn btn-sm btn-block bg-info"><i class="ri-eye-line text-white"></i></a>';
$action .= '</div>';
$status = '';
if($row->status == 1){
$status = '<small class="p-1 w-full bg-success text-white rounded" title="Aktif"><i class="ri-check-line"></i></small>';
}else{
$status = '<small class="p-1 w-full bg-danger text-white rounded" title="Tidak Aktif"><i class="ri-close-line"></i></small>';
}
$_data[] = [
'no' => $key+1,
'id' => encode_id($row->id),
'name' => @$row->name,
'publik' => @$row->publik,
'tahun' => @$row->tahun,
'created_at' => date('d-m-Y H:i:s',strtotime(@$row->created_at)),
'instansi' => @$row->instansi->name,
'action' => @$action,
'status' => @$status,
];
}
// return response()->json($_data); // Return the data as a JSON response
return response()->json($_data);
}
public function datasetGrid($alias,Request $request)
{
if(session('group_id') == 1){
$data = Dataset::whereHas('instansi',function($query) use ($alias){
$query->where('parent','ilike','%'.$alias.'%');
})->orderBy('DatasetId','DESC')->get();
}else{
$data = Dataset::whereHas('instansi',function($query) use ($alias){
$query->where('parent','ilike','%'.$alias.'%');
})->orderBy('DatasetId','DESC')->whereIn('created_by',[auth()->user()->id,1])->get();
}
// $data = User::with(['group'])->orderBy('id','DESC')->get();
$_data = [];
foreach ($data as $key => $row) {
$action = '';
$action .= '<div class="flex gap-3 justify-center items-center flex-row">';
$action .= '<a href="'.url('opendata/dataset/view/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Lihat Data" class="btn btn-sm btn-block bg-info"><i class="ri-eye-line text-white"></i></a>';
$action .= '</div>';
$status = '';
if($row->status == 1){
$status = '<small class="p-1 w-full bg-success text-white rounded" title="Aktif"><i class="ri-check-line"></i></small>';
}else{
$status = '<small class="p-1 w-full bg-danger text-white rounded" title="Tidak Aktif"><i class="ri-close-line"></i></small>';
}
$_data[] = [
'no' => $key+1,
'id' => encode_id($row->id),
'name' => @$row->name,
'publik' => @$row->publik,
'tahun' => @$row->tahun,
'created_at' => date('d-m-Y H:i:s',strtotime(@$row->created_at)),
'instansi' => @$row->instansi->name,
'action' => @$action,
'status' => @$status,
];
}
// return response()->json($_data); // Return the data as a JSON response
return response()->json($_data);
} }
} }

View File

@ -56,8 +56,11 @@ class DatasetController extends Controller
public function grid(Request $request) public function grid(Request $request)
{ {
if(session('group_id') == 1){
$data = Dataset::orderBy('DatasetId','DESC')->get(); $data = Dataset::orderBy('DatasetId','DESC')->get();
}else{
$data = Dataset::orderBy('DatasetId','DESC')->whereIn('created_by',[auth()->user()->id,1])->get();
}
// $data = User::with(['group'])->orderBy('id','DESC')->get(); // $data = User::with(['group'])->orderBy('id','DESC')->get();
$_data = []; $_data = [];
@ -69,7 +72,9 @@ class DatasetController extends Controller
if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){ if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){
$action .= '<div class="flex gap-3 justify-center items-center flex-row">'; $action .= '<div class="flex gap-3 justify-center items-center flex-row">';
if($row->created_by == auth()->user()->id){
$action .= '<a href="'.url('opendata/dataset/update/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Ubah Data" class="btn btn-sm btn-block bg-primary"><i class="ri-pencil-line text-white"></i></a>'; $action .= '<a href="'.url('opendata/dataset/update/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Ubah Data" class="btn btn-sm btn-block bg-primary"><i class="ri-pencil-line text-white"></i></a>';
}
$action .= '<a href="'.url('opendata/dataset/view/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Lihat Data" class="btn btn-sm btn-block bg-info"><i class="ri-eye-line text-white"></i></a>'; $action .= '<a href="'.url('opendata/dataset/view/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Lihat Data" class="btn btn-sm btn-block bg-info"><i class="ri-eye-line text-white"></i></a>';
if(session('group_id') == 1){ if(session('group_id') == 1){
// $action .= '<a href="#" data-href="'.url('management/user/forcelogin/'.encode_id($row->id)).'" data-toggle="tooltip" title="Force Login" class="forcelogin btn btn-sm btn-block bg-success"><i class="ri-user-2-line text-white"></i></a>'; // $action .= '<a href="#" data-href="'.url('management/user/forcelogin/'.encode_id($row->id)).'" data-toggle="tooltip" title="Force Login" class="forcelogin btn btn-sm btn-block bg-success"><i class="ri-user-2-line text-white"></i></a>';

View File

@ -17,6 +17,10 @@ class Dataset extends Model
return $this->belongsTo('App\Models\Master\Instansi','instansi_id'); return $this->belongsTo('App\Models\Master\Instansi','instansi_id');
} }
function user() {
return $this->belongsTo('App\Models\User','created_by');
}
function template() { function template() {
return $this->belongsTo('App\Models\Master\Template','template_id'); return $this->belongsTo('App\Models\Master\Template','template_id');
} }

View File

@ -1,116 +0,0 @@
@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">Dashboard</h4>
</div>
<!-- Page Title End -->
<div class="grid xl:grid-cols-4 lg:grid-cols-2 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">
<div class="flex justify-between">
<div><h5 class="uppercase text-sm font-bold mt-0 truncate">Data Biro</h5></div>
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div>
<h2 class="text-3xl bold my-3 py-0.5">825</h2>
</div>
<div class="w-full">
<div class="">
<a href="{{url('dashboard/dataset/')}}" class="text-primary">Lihat Selengkapnya&nbsp;<i class="ri-arrow-right-line"></i></a>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
<div class="card">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full">
<div class="flex justify-between">
<div><h5 class="uppercase text-sm font-bold mt-0 truncate">Data Badan</h5></div>
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div>
<h2 class="text-3xl bold my-3 py-0.5">825</h2>
</div>
<div class="w-full">
<div class="">
<a href="{{url('dashboard/dataset/')}}" class="text-primary">Lihat Selengkapnya&nbsp;<i class="ri-arrow-right-line"></i></a>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
<div class="card">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full">
<div class="flex justify-between">
<div><h5 class="uppercase text-sm font-bold mt-0 truncate">Data Deputi</h5></div>
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div>
<h2 class="text-3xl bold my-3 py-0.5">825</h2>
</div>
<div class="w-full">
<div class="">
<a href="{{url('dashboard/dataset/')}}" class="text-primary">Lihat Selengkapnya&nbsp;<i class="ri-arrow-right-line"></i></a>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
<div class="card">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full">
<div class="flex justify-between">
<div><h5 class="uppercase text-sm font-bold mt-0 truncate">Data Dinas</h5></div>
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div>
<h2 class="text-3xl bold my-3 py-0.5">825</h2>
</div>
<div class="w-full">
<div class="">
<a href="{{url('dashboard/dataset/')}}" class="text-primary">Lihat Selengkapnya&nbsp;<i class="ri-arrow-right-line"></i></a>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
</div>
<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-row">
<h5 class="font-bold">Data Update Terakhir</h5>
</div>
<div>
<table class="table">
<tr>
<th>No</th>
<th>OPD</th>
</tr>
</table>
</div>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Illum ipsum amet recusandae animi atque? Dolore doloremque maiores libero, laborum error incidunt neque dolorem recusandae provident quam obcaecati corporis necessitatibus odio?</p>
</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>
@endsection

View File

@ -0,0 +1,86 @@
@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">Dashboard</h4>
</div>
<!-- Page Title End -->
<div class="grid xl:grid-cols-4 lg:grid-cols-2 grid-cols-1 gap-6 mb-6">
@foreach($group as $dataGroup)
<div class="card">
<div class="p-6">
<div class="flex flex-col items-center">
<div class="w-full">
<div class="flex justify-between">
<div><h5 class="uppercase text-sm font-bold mt-0 truncate">Data {{$dataGroup->name}}</h5></div>
<div class="p-1 bg-primary text-white rounded text-xs">{{date('Y')}}</div>
</div>
<?php
$count = $classDataset::where('tahun',date('Y'))->whereHas('instansi',function($query) use ($dataGroup){
$query->where('parent','ilike','%'.$dataGroup->alias.'%');
})->count();
?>
<h2 class="text-3xl bold my-3 py-0.5">{{$count}}</h2>
</div>
<div class="w-full">
<div class="">
<a href="{{url('dashboard/dataset/'.$dataGroup->alias)}}" class="text-primary">Lihat Selengkapnya&nbsp;<i class="ri-arrow-right-line"></i></a>
</div>
</div>
</div> <!-- end row-->
</div> <!-- end p-6 -->
</div> <!-- end card -->
@endforeach
</div>
<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"
data-search="true"
data-toggle="table"
data-pagination="true"
data-toolbar="#toolbar"
data-show-refresh="false"
data-url="{{route('modules.dashboard.grid')}}"
data-sort-name="ids"
data-sort-order="desc"
data-page-size="10"
data-id-field="id"
id="grid-data">
<thead class="gridjs-thead">
<tr class="gridjs-tr bg-secondary/10">
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-width="10" data-field="action">#</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="name">Nama Dataset</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-gray-500" data-field="created_at">Tanggal Dibuat</th>
</tr>
</thead>
<tbody class="gridjs-tbody"></tbody>
</table>
</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>
@endsection

View File

@ -0,0 +1,55 @@
@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">Dashboard</h4>
</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>
<div id="toolbar">
<a href="{{url('dashboard')}}" class="btn border-primary text-primary"><i class="ri-arrow-left-line"></i>&nbsp;Kembali</a>
</div>
<table class="gridjs-table"
data-search="true"
data-toggle="table"
data-pagination="true"
data-toolbar="#toolbar"
data-show-refresh="false"
data-url="{{route('modules.dashboard.datasetGrid',['alias' => $alias])}}"
data-sort-name="ids"
data-sort-order="desc"
data-page-size="10"
data-id-field="id"
id="grid-data">
<thead class="gridjs-thead">
<tr class="gridjs-tr bg-secondary/10">
<th class="gridjs-td gridjs-th text-sm text-gray-500" data-width="10" data-field="action">#</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="name">Nama Dataset</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-gray-500" data-field="created_at">Tanggal Dibuat</th>
</tr>
</thead>
<tbody class="gridjs-tbody"></tbody>
</table>
</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>
@endsection

View File

@ -10,7 +10,13 @@ use App\Http\Controllers\Management\AksesController;
use App\Http\Controllers\Opendata\DatasetController; use App\Http\Controllers\Opendata\DatasetController;
Route::get('dashboard',[HomeController::class,'dashboard'])->name('dashboard'); Route::name('dashboard.')->prefix('dashboard')->group(function () {
Route::get('/',[HomeController::class,'dashboard'])->name('dashboard');
Route::get('/dataset/{alias}',[HomeController::class,'dataset'])->name('dataset');
Route::get('/grid',[HomeController::class,'grid'])->name('grid');
Route::get('/datasetGrid/{alias}',[HomeController::class,'datasetGrid'])->name('datasetGrid');
});
Route::name('opendata.')->prefix('opendata')->group(function () { Route::name('opendata.')->prefix('opendata')->group(function () {
Route::name('dataset.')->prefix('dataset')->group(function () { Route::name('dataset.')->prefix('dataset')->group(function () {