From 3529cc882e5f49a91bcf439ffccadb73341ebcab Mon Sep 17 00:00:00 2001 From: ilhamwara Date: Tue, 29 Jul 2025 12:02:37 +0700 Subject: [PATCH] update --- .../Opendata/DatasetController.php | 2 +- .../Opendata/DatasetTambahanController.php | 337 ++++++++++++++++++ app/Models/DatasetTambahan.php | 25 ++ ..._044951_create_dataset_tambahans_table.php | 41 +++ .../modules/management/user/form.blade.php | 2 +- .../modules/management/user/index.blade.php | 5 + .../opendata/dataset-tambahan/form.blade.php | 203 +++++++++++ .../opendata/dataset-tambahan/index.blade.php | 131 +++++++ .../opendata/dataset-tambahan/view.blade.php | 86 +++++ .../modules/opendata/dataset/form.blade.php | 35 +- routes/modules/modules.php | 11 + 11 files changed, 847 insertions(+), 31 deletions(-) create mode 100644 app/Http/Controllers/Opendata/DatasetTambahanController.php create mode 100644 app/Models/DatasetTambahan.php create mode 100644 database/migrations/2025_07_29_044951_create_dataset_tambahans_table.php create mode 100644 resources/views/modules/opendata/dataset-tambahan/form.blade.php create mode 100644 resources/views/modules/opendata/dataset-tambahan/index.blade.php create mode 100644 resources/views/modules/opendata/dataset-tambahan/view.blade.php diff --git a/app/Http/Controllers/Opendata/DatasetController.php b/app/Http/Controllers/Opendata/DatasetController.php index 04e38ee..c6363f8 100644 --- a/app/Http/Controllers/Opendata/DatasetController.php +++ b/app/Http/Controllers/Opendata/DatasetController.php @@ -226,7 +226,7 @@ class DatasetController extends Controller $insert->instansi_id = decode_id($request->instansi_id); $insert->template_id = decode_id($request->template_id); $insert->template_default = $request->template_default; - $insert->tahun = date('Y'); + $insert->tahun = $request->tahun; $insert->name = $request->name; $insert->publik = $request->publik; $insert->tags = json_encode($request->tags); diff --git a/app/Http/Controllers/Opendata/DatasetTambahanController.php b/app/Http/Controllers/Opendata/DatasetTambahanController.php new file mode 100644 index 0000000..a5d40b0 --- /dev/null +++ b/app/Http/Controllers/Opendata/DatasetTambahanController.php @@ -0,0 +1,337 @@ +route, 'module',true); + + $data['breadcrumbs'] = [ + ['name' => 'Dashboard','url' => url('dashboard')], + ['name' => 'Open Data'], + ['name' => 'Dataset Tambahan','active' => true], + ]; + $data['title'] = $this->title; + $data['route'] = $this->route; + return view($this->template.'.index',$data); + } + + public function gridDetail(Request $request) + { + $id = $request->query('id'); + $keyId = decode_id($id); + $item = DatasetTambahan::find($keyId); // atau pakai ->pluck(), ->find(), dll + + $json = json_decode($item->data, true); + $limit = $request->input('limit', 10); + $offset = $request->input('offset', 0); + + $rows = array_slice($json, $offset, $limit); + return response()->json([ + 'total' => count($json), + 'rows' => $rows + ]); + + } + + public function grid(Request $request) + { + if(session('group_id') == 1){ + $data = DatasetTambahan::orderBy('DatasetId','DESC')->get(); + }else{ + $data = DatasetTambahan::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 = ''; + + if((permission('is_create', $this->route.'.*','module',false)) || (permission('is_update', $this->route.'.*','module',false))){ + $action .= '
'; + if($row->created_by == auth()->user()->id){ + $action .= ''; + } + $action .= ''; + if(session('group_id') == 1){ + // $action .= ''; + if($row->status == 1){ + $action .= ''; + }else{ + $action .= ''; + } + } + $action .= '
'; + } + $status = ''; + if($row->status == 1){ + $status = ''; + }else{ + $status = ''; + } + + $_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); + + } + + /** + * Show the form for creating a new resource. + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + */ + public function store(Request $request) + { + // dd(request()->all()); + try { + $keyId = decode_id($request->secure_id); + $data = []; + $filePath = null; + if(@$request->file){ + $file = $request->file('file'); + $path = $file->getRealPath(); + $spreadsheet = IOFactory::load($path); + $sheet = $spreadsheet->getActiveSheet(); + $rows = $sheet->toArray(); + $header = $rows[4]; // Baris pertama sebagai header + if (@$request->hasFile('file')) { + $file = $request->file('file'); + $destinationPath = public_path('uploads/dataset'); + $current = Carbon::now()->format('Y/m/d'); + $path = $destinationPath . '/' . $current; + $fileName = $file->getClientOriginalName(); + $fileMime = $file->getClientMimeType(); + $fileExtension = $file->getClientOriginalExtension(); + $fileSize = $file->getSize(); + if(($fileExtension != 'xls') && ($fileExtension != 'xlsx')){ + return redirect()->back()->with([ + 'message' => 'Maaf File Harus Berupa xls,xlsx!', + 'type' => "error" + ]); + } + $newFilename = session('id').'_'.uniqid('file_') . '.' . $fileExtension; + + if (!File::exists($path)) { + File::isDirectory($path) or File::makeDirectory($path, 0777, true, true); + } + + $filePath = 'dataset/' . $current . '/' . $newFilename; + $uploaded = $file->move($path, $newFilename); + + + + for ($i = 5; $i < count($rows); $i++) { + $row = $rows[$i]; + + // Skip baris kosong + if (collect($row)->filter()->isEmpty()) continue; + + $assoc = []; + foreach ($header as $j => $columnName) { + if($columnName != null){ + $assoc[strtolower(str_replace(' ','_',$columnName))] = $row[$j] ?? null; + } + } + + $data[] = $assoc; + } + + } + } + + + if(@$keyId){ + Validator::make($request->all(), [ + 'name' => 'required', + 'instansi_id' => 'required', + 'template_id' => 'required', + // 'template_default' => 'required', + 'publik' => 'required', + 'tags' => 'required', + 'topik' => 'required', + ])->validate(); + + $insert = DatasetTambahan::find($keyId); + $insert->instansi_id = decode_id($request->instansi_id); + $insert->template_id = decode_id($request->template_id); + // $insert->template_default = $request->template_default; + $insert->name = $request->name; + $insert->publik = $request->publik; + $insert->tags = json_encode($request->tags); + if(@$request->hasFile('file')){ + $insert->file = $filePath; + } + $insert->deskripsi = $request->deskripsi; + $insert->tahun = $request->tahun; + $insert->save(); + }else{ + // dd($request->all()); + Validator::make($request->all(), [ + // 'name' => 'required', + // 'instansi_id' => 'required', + // 'template_id' => 'required', + // 'template_default' => 'required', + // 'publik' => 'required', + // 'tags' => 'required', + // 'file' => 'required|file', + // 'topik' => 'required', + ])->validate(); + + + $insert = new Dataset; + $insert->instansi_id = decode_id($request->instansi_id); + $insert->template_id = decode_id($request->template_id); + $insert->template_default = $request->template_default; + $insert->tahun = $request->tahun; + $insert->name = $request->name; + $insert->publik = $request->publik; + $insert->tags = json_encode($request->tags); + $insert->file = $filePath; + $insert->deskripsi = $request->deskripsi; + $insert->created_by = auth()->user()->id; + $insert->save(); + } + + return redirect()->back()->with([ + 'message' => 'Berhasil update data', + 'type' => 'success', + ]); + } catch (Exception $e) { + return redirect()->back()->with([ + 'message' => $e->getMessage(), + 'type' => "error" + ]); + } + } + + /** + * Display the specified resource. + */ + public function show(string $id) + { + // + } + + /** + * Show the form for editing the specified resource. + */ + public function edit(string $id) + { + // + } + + /** + * Update the specified resource in storage. + */ + public function update($id = null) + { + $data['breadcrumbs'] = [ + ['name' => 'Dashboard','url' => url('dashboard')], + ['name' => 'Open Data'], + ['name' => 'Dataset Tambahan','active' => true], + ]; + $keyId = decode_id($id); + $data['title'] = $this->title; + $data['route'] = $this->route; + $data['keyId'] = $id; + $data['item'] = DatasetTambahan::find($keyId); + if(session('group_alias') == 'administrator'){ + $data['instansi'] = Instansi::all(); + }else{ + $data['instansi'] = Instansi::where('MsInstansiId',session('instansi_id'))->get(); + } + + $data['topik'] = Topik::all(); + $data['template'] = Template::all(); + return view($this->template.'.form',$data); + } + + public function view($id = null) + { + $data['breadcrumbs'] = [ + ['name' => 'Dashboard','url' => url('dashboard')], + ['name' => 'Open Data'], + ['name' => 'Dataset Tambahan','active' => true], + ]; + $keyId = decode_id($id); + $data['title'] = $this->title; + $data['route'] = $this->route; + $data['keyId'] = $id; + $data['item'] = DatasetTambahan::find($keyId); + $data['instansi'] = Instansi::all(); + $data['topik'] = Topik::all(); + $data['template'] = Template::all(); + + return view($this->template.'.view',$data); + } + + /** + * Remove the specified resource from storage. + */ + public function destroy(string $id) + { + // + } + + public function delete($id) + { + $keyId = decode_id($id); + $dataset = DatasetTambahan::find($keyId); + $dataset->status = 0; + $dataset->save(); + + return response()->json(['success' => true,'message' => 'Berhasil update data','type' => 'success']); + } + public function aktif($id) + { + $keyId = decode_id($id); + $dataset = DatasetTambahan::find($keyId); + $dataset->status = 1; + $dataset->save(); + + return response()->json(['success' => true,'message' => 'Berhasil update data','type' => 'success']); + } +} diff --git a/app/Models/DatasetTambahan.php b/app/Models/DatasetTambahan.php new file mode 100644 index 0000000..35831b5 --- /dev/null +++ b/app/Models/DatasetTambahan.php @@ -0,0 +1,25 @@ +belongsTo('App\Models\Master\Instansi','instansi_id'); + } + + function user() { + return $this->belongsTo('App\Models\User','created_by'); + } + + function template() { + return $this->belongsTo('App\Models\Master\Template','template_id'); + } +} diff --git a/database/migrations/2025_07_29_044951_create_dataset_tambahans_table.php b/database/migrations/2025_07_29_044951_create_dataset_tambahans_table.php new file mode 100644 index 0000000..e223b54 --- /dev/null +++ b/database/migrations/2025_07_29_044951_create_dataset_tambahans_table.php @@ -0,0 +1,41 @@ +id('DatasetTambahanId'); + $table->integer('instansi_id'); + $table->integer('template_id'); + $table->integer('template_default'); + $table->string('name'); + $table->integer('publik'); + $table->json('tags')->nullable(); + $table->string('file')->nullable(); + $table->text('deskripsi')->nullable(); + $table->year('tahun')->nullable(); + $table->integer('status')->default(1); + $table->integer('created_by'); + $table->timestampsTz(); + + $table->foreign('instansi_id')->references('MsInstansiId')->on('ms_instansi')->cascadeOnDelete(); + $table->foreign('created_by')->references('id')->on('users')->cascadeOnDelete(); + }); + } + + /** + * Reverse the migrations. + */ + public function down(): void + { + Schema::dropIfExists('dataset_tambahans'); + } +}; diff --git a/resources/views/modules/management/user/form.blade.php b/resources/views/modules/management/user/form.blade.php index 24aecf4..e30c961 100644 --- a/resources/views/modules/management/user/form.blade.php +++ b/resources/views/modules/management/user/form.blade.php @@ -24,7 +24,7 @@
- + @error('name') {{$message}} @enderror diff --git a/resources/views/modules/management/user/index.blade.php b/resources/views/modules/management/user/index.blade.php index b87d1a5..f8731eb 100644 --- a/resources/views/modules/management/user/index.blade.php +++ b/resources/views/modules/management/user/index.blade.php @@ -11,6 +11,11 @@
+
+ @if(permission('is_create', $route.'.*','module',false) || permission('is_update', $route.'.*','module',false)) +  Tambah Data + @endif +
+
+
+
+

{{$title}}

+
+
+
+ {{csrf_field()}} + +
+
+
+
Informasi Instansi Dataset
+
+
+
+
+ + + @error('instansi_id') + {{$message}} + @enderror +
+
+ + + @error('template_id') + {{$message}} + @enderror +
+
+
+ +
+
+
+ + + *Harap perhatikan nama dataset yang Anda buat. Pastikan tidak ada duplikasi dataset dengan menekan tombol Cek Data. + @error('name') + {{$message}} + @enderror +
+
+ + + @error('publik') + {{$message}} + @enderror +
+
+ +
+ tags); + ?> + @if(@$tag) + @foreach($tag as $dataTags) + @if(@$dataTags) + {{@$dataTags}} + @endif + @endforeach + @endif + +
+ *Sesuaikan kata kunci dengan dataset Anda + @error('tags') + {{$message}} + @enderror +
+ +
+ + file ? '' : 'required'}}> + Masukan Ekstensi File : .xls,.xlsx + @if(@$item->file) +
+  Download File + @endif + @error('file') + {{$message}} + @enderror +
+
+ +
+ + + @error('deskripsi') + {{$message}} + @enderror +
+
+ + +
+
+
+  Batal + +
+ +
+ +@endsection +@section('js') + + +@endsection \ No newline at end of file diff --git a/resources/views/modules/opendata/dataset-tambahan/index.blade.php b/resources/views/modules/opendata/dataset-tambahan/index.blade.php new file mode 100644 index 0000000..f534d8d --- /dev/null +++ b/resources/views/modules/opendata/dataset-tambahan/index.blade.php @@ -0,0 +1,131 @@ +@extends('layouts.master') + +@section('css') +@endsection +@section('content') +
+
+
+
+

Data {{$title}}

+
+
+
+
+ @if(permission('is_create', $route.'.*','module',false) || permission('is_update', $route.'.*','module',false)) +  Tambah Data + @endif +
+
+ + + + + + + + + + + + +
#NoNama InstansiNama DatasetTahunStatusTanggal Dibuat
+
+ + + +@endsection +@section('js') + +@endsection \ No newline at end of file diff --git a/resources/views/modules/opendata/dataset-tambahan/view.blade.php b/resources/views/modules/opendata/dataset-tambahan/view.blade.php new file mode 100644 index 0000000..fb0b3fb --- /dev/null +++ b/resources/views/modules/opendata/dataset-tambahan/view.blade.php @@ -0,0 +1,86 @@ +@extends('layouts.master') +@section('css') +@endsection +@section('content') +
+
+
+
+

{{$title}}

+
+
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Instansi{{$item->instansi->name}}
Resource Data{{$item->template->name}}
Nama Dataset{{$item->name}}
Sifat Dataset + @if($item->publik == 1) + Terbuka/Publik + @else + Rahasia/Private + @endif +
Tags{!!tags($item->tags)!!}
File :  Download File
Topik{!! topikByDataset($item->topik)!!}
Deskripsi{{$item->deskripsi}}
+ data); + ?> + +
+ + + + + @if (!empty($data)) + @foreach ($data[0] as $k => $key) + + @endforeach + @endif + + +
{{ ucwords(str_replace('_', ' ', $k)) }}
+
+
+
+
+
+@endsection +@section('js') +@endsection \ No newline at end of file diff --git a/resources/views/modules/opendata/dataset/form.blade.php b/resources/views/modules/opendata/dataset/form.blade.php index b4f61a6..f67eea3 100644 --- a/resources/views/modules/opendata/dataset/form.blade.php +++ b/resources/views/modules/opendata/dataset/form.blade.php @@ -41,19 +41,8 @@ {{$message}} @enderror -
- - - @error('template_default') - {{$message}} - @enderror -
- +  Download Template Excel @@ -110,22 +99,6 @@ @enderror -
- - - @error('topik') - {{$message}} - @enderror -
@@ -136,7 +109,11 @@
- +
diff --git a/routes/modules/modules.php b/routes/modules/modules.php index 88dc03f..2ce130e 100644 --- a/routes/modules/modules.php +++ b/routes/modules/modules.php @@ -10,6 +10,7 @@ use App\Http\Controllers\Management\UserController; use App\Http\Controllers\Management\RoleController; use App\Http\Controllers\Management\AksesController; use App\Http\Controllers\Opendata\DatasetController; +use App\Http\Controllers\Opendata\DatasetTambahanController; Route::name('dashboard.')->prefix('dashboard')->group(function () { @@ -30,6 +31,16 @@ Route::name('opendata.')->prefix('opendata')->group(function () { Route::get('delete/{id?}',[DatasetController::class,'delete'])->name('delete'); Route::get('aktif/{id?}',[DatasetController::class,'aktif'])->name('aktif'); }); + + Route::name('dataset-tambahan.')->prefix('dataset-tambahan')->group(function () { + Route::resource('/',DatasetTambahanController::class); + Route::get('grid',[DatasetTambahanController::class,'grid'])->name('grid'); + Route::get('gridDetail',[DatasetTambahanController::class,'gridDetail'])->name('gridDetail'); + Route::get('update/{id?}',[DatasetTambahanController::class,'update'])->name('update'); + Route::get('view/{id?}',[DatasetTambahanController::class,'view'])->name('view'); + Route::get('delete/{id?}',[DatasetTambahanController::class,'delete'])->name('delete'); + Route::get('aktif/{id?}',[DatasetTambahanController::class,'aktif'])->name('aktif'); + }); }); Route::name('master.')->prefix('master')->group(function () {