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 @@
+
+
+
+@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')
+
+
+
+
+
+
+
+
+ # |
+ No |
+ Nama Instansi |
+ Nama Dataset |
+ Tahun |
+ Status |
+ Tanggal 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')
+
+
+
+
+
+
+
+
+ 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)
+ {{ ucwords(str_replace('_', ' ', $k)) }} |
+ @endforeach
+ @endif
+
+
+
+
+
+
+
+
+@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
+ 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 () {