main
Ilham Wara Nugroho 2026-02-13 10:48:56 +07:00
parent 503e4c8e30
commit 850b37c95d
8 changed files with 118 additions and 92 deletions

View File

@ -6,20 +6,23 @@ use Illuminate\Http\Request;
use App\Models\Master\Template; use App\Models\Master\Template;
use App\Models\Master\Topik; use App\Models\Master\Topik;
use App\Models\Master\Instansi; use App\Models\Master\Instansi;
use App\Models\TxDataset;
use App\Models\Dataset; use App\Models\Dataset;
use App\Models\DatasetTambahan; use App\Models\DatasetTambahan;
use App\Models\Master\TabelData;
use App\Models\Master\TabelDataKolom;
class FrontController extends Controller class FrontController extends Controller
{ {
function index() { function index() {
$data = []; $data = [];
// $data['template'] = Template::where('show_dashboard',1)->limit(4)->inRandomOrder()->get(); // $data['template'] = TabelData::where('show_dashboard',1)->limit(4)->inRandomOrder()->get();
$data['template'] = Template::limit(4)->inRandomOrder()->get(); $data['template'] = TabelData::limit(4)->inRandomOrder()->get();
$data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(4)->get(); $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(4)->get();
$data['count'] = [ $data['count'] = [
'dataset' => Dataset::count(), 'dataset' => Dataset::count(),
'resource' => Template::count(), 'resource' => TabelData::count(),
'instansi' => Instansi::count(), 'instansi' => Instansi::count(),
]; ];
@ -27,12 +30,15 @@ class FrontController extends Controller
} }
function resource() { function resource() {
$data = []; $data = [];
$data['template'] = Template::simplePaginate(12); $data['template'] = TabelData::simplePaginate(12);
return view('resource',$data); return view('resource',$data);
} }
function dataset_detail($id) { function dataset_detail($id) {
$keyId = decode_id($id); $keyId = decode_id($id);
$data['dataset'] = Dataset::find($keyId); $data['dataset'] = Dataset::find($keyId);
$template = TabelData::find($data['dataset']->ms_tabel_data_id);
$data['tabel'] = TabelDataKolom::where('ms_tabel_data_id',$template->MsTabelDataId)->orderBy('order','ASC')->get();
$data['lainnya'] = Dataset::with(['instansi'])->where('DatasetId','!=',$keyId)->limit(4)->get(); $data['lainnya'] = Dataset::with(['instansi'])->where('DatasetId','!=',$keyId)->limit(4)->get();
$data['keyId'] = $keyId; $data['keyId'] = $keyId;
@ -40,19 +46,45 @@ class FrontController extends Controller
} }
public function gridDetail(Request $request) public function gridDetail(Request $request)
{ {
// $id = $request->query('id');
// $keyId = $id;
// $item = Dataset::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
// ]);
$id = $request->query('id'); $id = $request->query('id');
$keyId = $id; $keyId = decode_id($id);
$item = Dataset::find($keyId); // atau pakai ->pluck(), ->find(), dll $item = Dataset::find($keyId); // atau pakai ->pluck(), ->find(), dll
//
$_data = [];
$data = TxDataset::where('dataset_id', $keyId)
->orderBy('row_id')
->orderBy('ms_tabel_data_kolom_id')
->get()
->groupBy('row_id');
$json = json_decode($item->data, true); foreach ($data as $rowId => $rows) {
$limit = $request->input('limit', 10);
$offset = $request->input('offset', 0);
$rows = array_slice($json, $offset, $limit); $rowData = [
return response()->json([ 'no' => $rowId
'total' => count($json), ];
'rows' => $rows
]); foreach ($rows as $cell) {
$rowData[$cell->ms_tabel_data_kolom_id] = $cell->value;
}
$_data[] = $rowData;
}
return response()->json($_data);
} }
function datasetTambahan_detail($id) { function datasetTambahan_detail($id) {
@ -94,7 +126,7 @@ class FrontController extends Controller
// $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->paginate(9); // $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->paginate(9);
// } // }
$data['dataset'] = $dataset->paginate(9); $data['dataset'] = $dataset->paginate(9);
$data['template'] = Template::all(); $data['template'] = TabelData::all();
$data['instansi'] = Instansi::all(); $data['instansi'] = Instansi::all();
return view('dataset',$data); return view('dataset',$data);
@ -135,13 +167,13 @@ class FrontController extends Controller
$data['dataset'] = $dataset->paginate(9); $data['dataset'] = $dataset->paginate(9);
$data['template'] = Template::all(); $data['template'] = TabelData::all();
$data['instansi'] = Instansi::all(); $data['instansi'] = Instansi::all();
return view('dataset-tambahan',$data); return view('dataset-tambahan',$data);
} }
function search() { function search() {
$data['topik'] = Topik::all(); $data['topik'] = Topik::all();
$data['template'] = Template::all(); $data['template'] = TabelData::all();
$data['instansi'] = Instansi::all(); $data['instansi'] = Instansi::all();
$data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(5)->get(); $data['dataset'] = Dataset::orderBy('DatasetId','DESC')->limit(5)->get();
return view('search',$data); return view('search',$data);

View File

@ -164,34 +164,18 @@ class DatasetController extends Controller
// dd(request()->all()); // dd(request()->all());
try { try {
$keyId = decode_id($request->secure_id); $keyId = decode_id($request->secure_id);
DB::beginTransaction();
if(@$keyId){ if(@$keyId){
Validator::make($request->all(), [ //INSERT DATASET;
// 'name' => 'required', $dataset = Dataset::find($keyId);
// 'instansi_id' => 'required', $dataset->tahun = $request->tahun;
// 'template_id' => 'required', $dataset->tahun_data = $request->tahun_data;
// 'publik' => 'required', $dataset->name = $request->name;
])->validate(); $dataset->deskripsi = $request->deskripsi;
$dataset->save();
}else{ }else{
// dd($request->all()); //INSERT DATASET;
// Validator::make($request->all(), [
// 'name' => 'required',
// 'instansi_id' => 'required',
// 'template_id' => 'required',
// 'publik' => 'required',
// 'template_id' => 'required',
// ])->validate();
}
// $template = Template::find(decode_id($request->template_id));
// $filename = pathinfo($tabelData->template_url, PATHINFO_FILENAME);
// $modelClass = "App\\Models\\Dataset\\Dataset" . ucfirst($filename);
// $importClass = "App\\Imports\\Dataset". ucfirst($filename)."Import";
DB::beginTransaction();
// dd($request->all());
try {
//INSERT DATASET;
$dataset = new Dataset; $dataset = new Dataset;
$dataset->instansi_id = decode_id($request->instansi_id); $dataset->instansi_id = decode_id($request->instansi_id);
$dataset->ms_tabel_data_id = decode_id($request->template_id); $dataset->ms_tabel_data_id = decode_id($request->template_id);
@ -205,51 +189,42 @@ class DatasetController extends Controller
$dataset->deskripsi = $request->deskripsi; $dataset->deskripsi = $request->deskripsi;
$dataset->created_by = auth()->user()->id; $dataset->created_by = auth()->user()->id;
$dataset->save(); $dataset->save();
}
$tabelData = TabelData::find(decode_id($request->template_id)); if(@$request->file){
$tabelData = TabelData::find(decode_id($request->template_id));
$import = new Import; $import = new Import;
Excel::import($import, $request->file('file')); Excel::import($import, $request->file('file'));
$data = $import->getData(); $data = $import->getData();
$count = 0; $count = 0;
// dd($data); // dd($data);
foreach ($data as $rowIndex => $row) { foreach ($data as $rowIndex => $row) {
$rowId = $row[str_replace(' ','_',strtolower($tabelData->name)).'_'.date('Y')-1]; $rowId = $row[preg_replace('/[^a-z0-9]+/', '_', strtolower($tabelData->name)).'_'.date('Y')-1];
unset($row[str_replace(' ','_',strtolower($tabelData->name)).'_'.date('Y')-1]); unset($row[preg_replace('/[^a-z0-9]+/', '_', strtolower($tabelData->name)).'_'.date('Y')-1]);
$count++; $count++;
foreach ($row as $columnIndex => $value) { foreach ($row as $columnIndex => $value) {
TxDataset::updateOrCreate([ TxDataset::updateOrCreate([
'dataset_id' => $dataset->DatasetId, 'dataset_id' => $dataset->DatasetId,
'row_id' => $rowIndex + 1, // nomor baris 'row_id' => $rowIndex + 1, // nomor baris
'ms_tabel_data_kolom_id' => $columnIndex, 'ms_tabel_data_kolom_id' => $columnIndex,
],[ ],[
'dataset_id' => $dataset->DatasetId, 'dataset_id' => $dataset->DatasetId,
'ms_tabel_data_id' => decode_id($request->template_id), 'ms_tabel_data_id' => decode_id($request->template_id),
'row_id' => $rowIndex + 1, 'row_id' => $rowIndex + 1,
'ms_tabel_data_kolom_id' => $columnIndex, 'ms_tabel_data_kolom_id' => $columnIndex,
'value' => $value, 'value' => $value,
]); ]);
}
} }
}
DB::commit(); DB::commit();
}
// $insert = $this->repository->createDatasetTable($modelClass,$importClass,$request->file('file'),$request->all());
// dd($insert); return redirect()->back()->with([
return redirect()->back()->with([
'message' => 'Berhasil update data', 'message' => 'Berhasil update data',
'type' => 'success', 'type' => 'success',
]); ]);
} catch (\Exception $e) {
DB::rollback();
dd($e->getMessage());
if ($e->getMessage() === "Start row (2) is beyond highest row (1)") {
return redirect()->back()->with([
'message' => $e->getMessage(),
'type' => "error"
], 400);
}
}
} catch (Exception $e) { } catch (Exception $e) {
DB::rollback(); DB::rollback();

View File

@ -16,7 +16,7 @@
<img src="{{ asset('logodki.png') }}" alt="" width="50" class=""> <img src="{{ asset('logodki.png') }}" alt="" width="50" class="">
{{-- <img src="{{ asset('uploads/'.@$dataset->instansi->logo) }}" alt="" width="50" class=""> --}} {{-- <img src="{{ asset('uploads/'.@$dataset->instansi->logo) }}" alt="" width="50" class=""> --}}
<h1 class="font-bold">{{ $dataset->instansi->name }}</h1> <h1 class="font-bold">{{ $dataset->instansi->name }}</h1>
<a href="{{asset('uploads/'.$dataset->file)}}" class="rounded-full text-[12px] bg-success text-white px-2 py-1">Download <i class="ri-download-line"></i></a> <a href="{{url('opendata/dataset/download/'.encode_id(@$dataset->DatasetId))}}" class="rounded-full text-[12px] bg-success text-white px-2 py-1">Download <i class="ri-download-line"></i></a>
</div> </div>
<div class="flex items-center justify-between w-3/4"> <div class="flex items-center justify-between w-3/4">
<div class="flex flex-col gap-3"> <div class="flex flex-col gap-3">
@ -28,7 +28,7 @@
</div> </div>
<div class="mt-1 flex flex-row gap-2 items-center"> <div class="mt-1 flex flex-row gap-2 items-center">
<span class="rounded-full text-[10px] bg-[#103760] text-white px-2 py-1">{{$dataset->tahun}}</span> <span class="rounded-full text-[10px] bg-[#103760] text-white px-2 py-1">{{$dataset->tahun}}</span>
<span class="rounded-full text-[10px] hidden lg:block bg-[#103760] text-white px-2 py-1">{{$dataset->template->name}}</span> <span class="rounded-full text-[10px] hidden lg:block bg-[#103760] text-white px-2 py-1">{{$dataset->tabelData->name}}</span>
</div> </div>
<div class="flex gap-1"> <div class="flex gap-1">
<span>Bagikan : </span> <span>Bagikan : </span>
@ -42,10 +42,26 @@
<?php <?php
$data = json_decode($dataset->data); $data = json_decode($dataset->data);
?> ?>
@if(@$data)
<div class="bg-white rounded-[20px] shadow-lg p-5 py-10 gap-6 flex"> <div class="bg-white rounded-[20px] shadow-lg p-5 py-10 gap-6 flex">
<div style="overflow-x:auto; width:100%!important;"> <div style="overflow-x:auto; width:100%!important;">
<table id="table" <table id="table"
data-toggle="table"
data-search="false"
data-pagination="true"
data-side-pagination="server"
data-url="{{ url('dataset/Griddetail?id='.encode_id($keyId)) }}">
<thead>
<tr class="bg-primary-light text-primary">
<th data-field="no" class="gridjs-td gridjs-th text-xs">No</th>
@foreach ($tabel as $k => $key)
<th data-field="{{$key->order}}" class="gridjs-td gridjs-th text-xs">{{ $key->name }}</th>
@endforeach
</tr>
</thead>
</table>
{{-- <table id="table"
data-toggle="table" data-toggle="table"
data-search="false" data-search="false"
data-pagination="true" data-pagination="true"
@ -61,10 +77,10 @@
@endif @endif
</tr> </tr>
</thead> </thead>
</table> </table> --}}
</div> </div>
</div> </div>
@endif
</div> </div>
</section> </section>
@ -93,7 +109,7 @@
</div> </div>
<div class="mt-1 flex flex-row gap-2 items-center"> <div class="mt-1 flex flex-row gap-2 items-center">
<span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span> <span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span>
<span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->template->name,0,25) }}...</span> <span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->tabelData->name,0,25) }}...</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -86,7 +86,7 @@
</div> </div>
<div class="mt-1 flex flex-row gap-2 items-center"> <div class="mt-1 flex flex-row gap-2 items-center">
<span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span> <span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span>
<span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->template->name,0,25) }}...</span> <span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->tabelData->name,0,25) }}...</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -209,7 +209,7 @@
</div> </div>
<div class="mt-1 flex flex-row gap-2 items-center"> <div class="mt-1 flex flex-row gap-2 items-center">
<span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span> <span class="rounded-full text-[10px] bg-[#E9811A] text-white px-2 py-1">{{$dataSet->tahun}}</span>
<span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->template->name,0,25) }}...</span> <span class="rounded-full text-[10px] hidden lg:block bg-[#E9811A] text-white px-2 py-1">{{ substr($dataSet->tabelData->name,0,25) }}...</span>
</div> </div>
</div> </div>
</div> </div>

View File

@ -19,7 +19,7 @@
<div class="grid lg:grid-cols-1 gap-3"> <div class="grid lg:grid-cols-1 gap-3">
<div class=""> <div class="">
<label class="mb-3 required">Instansi</label> <label class="mb-3 required">Instansi</label>
<select name="instansi_id" required class="form-input instansi_id select2 @error('instansi_id') is-invalid @enderror" id="instansi_id"> <select name="instansi_id" {{ @$item ? 'disabled' : 'required' }} class="form-input instansi_id select2 @error('instansi_id') is-invalid @enderror" id="instansi_id">
<option value="">-</option> <option value="">-</option>
@foreach($instansi as $dataInstansi) @foreach($instansi as $dataInstansi)
<option {{@$item->instansi_id == $dataInstansi->MsInstansiId ? 'selected' : ''}} value="{{encode_id($dataInstansi->MsInstansiId)}}">{{$dataInstansi->name}}</option> <option {{@$item->instansi_id == $dataInstansi->MsInstansiId ? 'selected' : ''}} value="{{encode_id($dataInstansi->MsInstansiId)}}">{{$dataInstansi->name}}</option>
@ -31,14 +31,15 @@
</div> </div>
<div class=""> <div class="">
<label class="mb-3 required">Resource Data</label> <label class="mb-3 required">Resource Data</label>
<select name="template_id" required class="form-input template_id select2 @error('template_id') is-invalid @enderror" id="template_id"> <select name="template_id" {{ @$item ? 'disabled' : 'required' }} class="form-input template_id select2 @error('template_id') is-invalid @enderror" id="template_id">
<option value="">Tabel {{@$item->tabelData->nomor_tabel}} - {{@$item->tabelData->name}}</option>
</select> </select>
@error('template_id') @error('template_id')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span> <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror @enderror
</div> </div>
</div> </div>
<a href="#" class="btn bg-success btnDownload text-white btn-md mt-3"><i class="ri-download-2-line"></i>&nbsp;Download Template Excel</a> <a href="{{ url('opendata/dataset/generateTemplate/'.encode_id(@$item->ms_tabel_data_id)); }}" class="btn bg-success btnDownload text-white btn-md mt-3"><i class="ri-download-2-line"></i>&nbsp;Download Template Excel</a>
</div> </div>
</div> </div>
@ -54,8 +55,8 @@
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label class="mb-3 required">Upload File</label> <label class="mb-3 {{ @$item ? '' : 'required' }} ">Upload File</label>
<input type="file" accept=".xls,.xlsx" value="{{@$item->file ? @$item->file : old('file')}}" name="file" class="form-input @error('file') is-invalid @enderror" placeholder="Masukan File Dataset" {{@$item->file ? '' : 'required'}}> <input type="file" accept=".xls,.xlsx" value="{{@$item->file ? @$item->file : old('file')}}" name="file" class="form-input @error('file') is-invalid @enderror" placeholder="Masukan File Dataset" {{ @$item ? 'disabled' : 'required' }} >
<small><i>Masukan Ekstensi File : .xls,.xlsx</i></small> <small><i>Masukan Ekstensi File : .xls,.xlsx</i></small>
@if(@$item->file) @if(@$item->file)
<br> <br>

View File

@ -41,7 +41,7 @@ Route::name('opendata.')->prefix('opendata')->group(function () {
Route::get('delete/{id?}',[DatasetController::class,'delete'])->name('delete'); Route::get('delete/{id?}',[DatasetController::class,'delete'])->name('delete');
Route::get('aktif/{id?}',[DatasetController::class,'aktif'])->name('aktif'); Route::get('aktif/{id?}',[DatasetController::class,'aktif'])->name('aktif');
Route::get('generateTemplate/{id?}',[DatasetController::class,'generateTemplate'])->name('generateTemplate'); Route::get('generateTemplate/{id?}',[DatasetController::class,'generateTemplate'])->name('generateTemplate');
Route::get('download/{id?}',[DatasetController::class,'download'])->name('download'); // Route::get('download/{id?}',[DatasetController::class,'download'])->name('download');
}); });
Route::name('dataset-tambahan.')->prefix('dataset-tambahan')->group(function () { Route::name('dataset-tambahan.')->prefix('dataset-tambahan')->group(function () {

View File

@ -6,6 +6,7 @@ use App\Http\Controllers\FrontController;
use App\Http\Controllers\Auth\CustomLoginController; use App\Http\Controllers\Auth\CustomLoginController;
use App\Http\Controllers\Auth\CustomRegisterController; use App\Http\Controllers\Auth\CustomRegisterController;
use App\Http\Controllers\AjaxController; use App\Http\Controllers\AjaxController;
use App\Http\Controllers\Opendata\DatasetController;
/* /*
|-------------------------------------------------------------------------- |--------------------------------------------------------------------------
@ -34,6 +35,7 @@ Route::get('/login', [CustomLoginController::class,'index'])->name('login');
Route::post('login',[CustomLoginController::class,'post_login'])->name('post_login'); Route::post('login',[CustomLoginController::class,'post_login'])->name('post_login');
Route::get('register',[CustomRegisterController::class,'index'])->name('register'); Route::get('register',[CustomRegisterController::class,'index'])->name('register');
Route::post('register',[CustomRegisterController::class,'post_register'])->name('post_register'); Route::post('register',[CustomRegisterController::class,'post_register'])->name('post_register');
Route::get('opendata/dataset/download/{id?}',[DatasetController::class,'download'])->name('download');
Route::get('getInstansi/{type}',[AjaxController::class,'getInstansi'])->name('getInstansi'); Route::get('getInstansi/{type}',[AjaxController::class,'getInstansi'])->name('getInstansi');