diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 63a0e5e..e8b8559 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -8,20 +8,17 @@ use App\Models\Master\Topik; use App\Models\Master\Instansi; use App\Models\Master\Template; use App\Models\Master\Group; +use App\Repositories\Eloquent\DatasetRepository; class HomeController extends Controller { protected $template = 'modules.dashboard'; protected $route = 'modules.dashboard'; + private $datasetRepository; - /** - * Create a new controller instance. - * - * @return void - */ - public function __construct() - { + public function __construct(DatasetRepository $datasetRepository){ $this->middleware('auth'); + $this->repository = $datasetRepository; } /** @@ -162,13 +159,22 @@ class HomeController extends Controller 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['template'] = Template::where('MsTemplateId',decode_id($id))->first(); $data['title'] = 'Dashboard '.@$data['dataset']->template->name; return view($this->template.'.resource_detail',$data); + } + function apiChart($templateId,$instansi_id){ + $template = Template::where('MsTemplateId',decode_id($templateId))->first(); + $dataset = Dataset::with(['template'])->where('instansi_id',decode_id($instansi_id))->where('template_id',decode_id($templateId))->first(); + $filename = pathinfo($template->template_url, PATHINFO_FILENAME); + $modelClass = "App\\Models\\Dataset\\Dataset" . ucfirst($filename); + $insert = $this->repository->getChartData($modelClass,$dataset->DatasetId,decode_id($templateId)); + + return $insert; } } diff --git a/app/Models/Dataset/DatasetTable11.php b/app/Models/Dataset/DatasetTable11.php index ab9ade2..0c4403c 100644 --- a/app/Models/Dataset/DatasetTable11.php +++ b/app/Models/Dataset/DatasetTable11.php @@ -10,13 +10,65 @@ use Illuminate\Database\Eloquent\Model; class DatasetTable11 extends Model { use HasFactory; -use SoftDeletes; + use SoftDeletes; + protected $table = 'dataset_table11'; protected $primaryKey = 'DatasetTable11Id'; protected $guarded = []; -function dataset() { + function dataset() { return $this->belongsTo('App\Models\Dataset','dataset_id'); } + + public static function dataChart($modelClass,$datasetId,$templateId){ + + $datasets = \App\Models\Dataset::where('template_id', $templateId) + ->orderBy('tahun', 'asc') + ->get() + ->map(function ($dataset) use ($modelClass) { + $dataset->items = (new $modelClass)->where('dataset_id', $dataset->id)->get(); + return $dataset; + }); + $years = $datasets->pluck('tahun')->toArray(); + $model = self::with('dataset')->whereHas('dataset',function($query) use ($years){ + $query->whereIn('tahun',$years); + })->where('dataset_id',$datasetId)->get(); + + $result = []; + foreach ($model as $row) { + $lokasi = $row->lokasi ?? 'Unknown'; + + if (!isset($result[$lokasi])) { + $result[$lokasi] = [ + 'luas' => [], + 'persen' => [] + ]; + } + + $result[$lokasi]['luas'][] = (float) $row->luas; + $result[$lokasi]['persen'][] = (float) $row->persentase_area_kerusakan; + } + + return [ + 'title' => 'Luas & Persentase Area Kerusakan per Wilayah', + 'years' => $years, + 'yTitle' => 'Luas (Ha)', + 'yOpposite' => 'Persentase (%)', + 'series' => collect($result)->flatMap(function ($item, $lokasi) { + return [ + [ + 'name' => "Luas - {$lokasi}", + 'type' => 'column', + 'data' => $item['luas'] + ], + [ + 'name' => "Persentase - {$lokasi}", + 'type' => 'line', + 'data' => $item['persen'] + ] + ]; + })->values() + ]; + } } diff --git a/app/Repositories/Eloquent/DatasetRepository.php b/app/Repositories/Eloquent/DatasetRepository.php index c1b11b0..c202c42 100644 --- a/app/Repositories/Eloquent/DatasetRepository.php +++ b/app/Repositories/Eloquent/DatasetRepository.php @@ -292,4 +292,10 @@ class DatasetRepository implements DatasetRepositoryInterface return $masterModel; }); } + + public function getChartData($modelClass,$datasetId,$templateId) + { + $data = $modelClass::dataChart($modelClass,$datasetId,$templateId); + return $data; + } } \ No newline at end of file diff --git a/resources/views/modules/dashboard/resource.blade.php b/resources/views/modules/dashboard/resource.blade.php index 2e2817a..4f796ef 100644 --- a/resources/views/modules/dashboard/resource.blade.php +++ b/resources/views/modules/dashboard/resource.blade.php @@ -11,7 +11,7 @@ MsInstansiId)->orderBy('tahun','ASC')->pluck('tahun')->toArray(); + $year = \App\Models\Dataset::where('template_id',decode_id($id))->where('instansi_id',$dataInstansi->MsInstansiId)->orderBy('tahun','ASC')->pluck('tahun')->toArray(); $bg = 'info'; if(@$dataInstansi->alias == 'dinas'){ @@ -46,7 +46,7 @@
{{$dataInstansi->name}}
- @foreach ($dataset as $tahun) + @foreach ($year as $tahun) {{ $tahun }} @endforeach
diff --git a/resources/views/modules/dashboard/resource_detail.blade.php b/resources/views/modules/dashboard/resource_detail.blade.php index 999bbee..a85e6e2 100644 --- a/resources/views/modules/dashboard/resource_detail.blade.php +++ b/resources/views/modules/dashboard/resource_detail.blade.php @@ -26,7 +26,6 @@ @endsection @section('js') - @@ -34,60 +33,29 @@ - + @endsection \ No newline at end of file diff --git a/routes/modules/modules.php b/routes/modules/modules.php index 310e9cf..4644021 100644 --- a/routes/modules/modules.php +++ b/routes/modules/modules.php @@ -20,6 +20,7 @@ Route::name('dashboard.')->prefix('dashboard')->group(function () { 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('/datasetGrid/{alias}',[HomeController::class,'datasetGrid'])->name('datasetGrid'); + Route::get('/api/chart/{template_id}/{instansi_id}',[HomeController::class,'apiChart'])->name('apiChart'); });