update
							parent
							
								
									867a4d60c7
								
							
						
					
					
						commit
						3529cc882e
					
				| 
						 | 
					@ -226,7 +226,7 @@ class DatasetController extends Controller
 | 
				
			||||||
                $insert->instansi_id        = decode_id($request->instansi_id);
 | 
					                $insert->instansi_id        = decode_id($request->instansi_id);
 | 
				
			||||||
                $insert->template_id        = decode_id($request->template_id);
 | 
					                $insert->template_id        = decode_id($request->template_id);
 | 
				
			||||||
                $insert->template_default   = $request->template_default;
 | 
					                $insert->template_default   = $request->template_default;
 | 
				
			||||||
                $insert->tahun              = date('Y');
 | 
					                $insert->tahun              = $request->tahun;
 | 
				
			||||||
                $insert->name               = $request->name;
 | 
					                $insert->name               = $request->name;
 | 
				
			||||||
                $insert->publik             = $request->publik;
 | 
					                $insert->publik             = $request->publik;
 | 
				
			||||||
                $insert->tags               = json_encode($request->tags);
 | 
					                $insert->tags               = json_encode($request->tags);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,337 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Http\Controllers\Opendata;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use App\Http\Controllers\Controller;
 | 
				
			||||||
 | 
					use Illuminate\Http\Request;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Validator;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\File;
 | 
				
			||||||
 | 
					use Carbon\Carbon;
 | 
				
			||||||
 | 
					use PhpOffice\PhpSpreadsheet\IOFactory;
 | 
				
			||||||
 | 
					use App\Models\Master\Instansi;
 | 
				
			||||||
 | 
					use App\Models\Master\Topik;
 | 
				
			||||||
 | 
					use App\Models\Master\Template;
 | 
				
			||||||
 | 
					use App\Models\DatasetTambahan;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DatasetTambahanController extends Controller
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected $title = 'Dataset Tambahan';
 | 
				
			||||||
 | 
					    protected $template = 'modules.opendata.dataset-tambahan';
 | 
				
			||||||
 | 
					    protected $route = 'modules.opendata.dataset-tambahan';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Display a listing of the resource.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function index()
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        permission('is_read', $this->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 .= '<div class="flex gap-3 justify-center items-center flex-row">';
 | 
				
			||||||
 | 
					                if($row->created_by == auth()->user()->id){
 | 
				
			||||||
 | 
					                    $action .= '<a href="'.url('opendata/dataset-tambahan/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-tambahan/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){
 | 
				
			||||||
 | 
					                    // $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>';
 | 
				
			||||||
 | 
					                    if($row->status == 1){
 | 
				
			||||||
 | 
					                        $action .= '<a href="#" data-href="'.url('opendata/dataset-tambahan/delete/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Hapus Data" class="remove_data btn btn-sm btn-block bg-danger"><i class="ri-delete-bin-line text-white"></i></a>';
 | 
				
			||||||
 | 
					                    }else{
 | 
				
			||||||
 | 
					                        $action .= '<a href="#" data-href="'.url('opendata/dataset-tambahan/aktif/'.encode_id($row->DatasetId)).'" data-toggle="tooltip" title="Aktifkan Data" class="aktif_data btn btn-sm btn-block bg-success"><i class="ri-check-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);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 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']);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,25 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					namespace App\Models;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Database\Eloquent\Factories\HasFactory;
 | 
				
			||||||
 | 
					use Illuminate\Database\Eloquent\Model;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DatasetTambahan extends Model
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    protected $table = 'dataset-tambahan';
 | 
				
			||||||
 | 
					    protected $primaryKey = 'DatasetTambahanId';
 | 
				
			||||||
 | 
					    protected $guarded = [];
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function instansi() {
 | 
				
			||||||
 | 
					        return $this->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');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,41 @@
 | 
				
			||||||
 | 
					<?php
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					use Illuminate\Database\Migrations\Migration;
 | 
				
			||||||
 | 
					use Illuminate\Database\Schema\Blueprint;
 | 
				
			||||||
 | 
					use Illuminate\Support\Facades\Schema;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return new class extends Migration
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * Run the migrations.
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    public function up(): void
 | 
				
			||||||
 | 
					    {
 | 
				
			||||||
 | 
					        Schema::create('dataset-tambahan', function (Blueprint $table) {
 | 
				
			||||||
 | 
					            $table->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');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					@ -24,7 +24,7 @@
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    <div class="mb-3">
 | 
					                    <div class="mb-3">
 | 
				
			||||||
                        <label class="mb-3">Nama</label>
 | 
					                        <label class="mb-3">Nama</label>
 | 
				
			||||||
                        <input type="text" value="{{@$item->name ? @$item->name :  old('name')}}" name="name"  class="form-input @error('name') is-invalid @enderror" placeholder="Masukan Nama Sekolah" required>
 | 
					                        <input type="text" value="{{@$item->name ? @$item->name :  old('name')}}" name="name"  class="form-input @error('name') is-invalid @enderror" placeholder="Masukan Nama" required>
 | 
				
			||||||
                        @error('name')
 | 
					                        @error('name')
 | 
				
			||||||
                        <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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,6 +11,11 @@
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
        </div>
 | 
					        </div>
 | 
				
			||||||
        <div class="p-6">
 | 
					        <div class="p-6">
 | 
				
			||||||
 | 
					            <div id="toolbar">
 | 
				
			||||||
 | 
					                @if(permission('is_create', $route.'.*','module',false) || permission('is_update', $route.'.*','module',false))
 | 
				
			||||||
 | 
					                <a href="{{route($route.'.update')}}" class="btn bg-success text-white"><i class="ri-add-line"></i> Tambah Data</a>
 | 
				
			||||||
 | 
					                @endif
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
            <table class="gridjs-table" 
 | 
					            <table class="gridjs-table" 
 | 
				
			||||||
                    data-search="true"
 | 
					                    data-search="true"
 | 
				
			||||||
                    data-toggle="table"
 | 
					                    data-toggle="table"
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,203 @@
 | 
				
			||||||
 | 
					@extends('layouts.master')
 | 
				
			||||||
 | 
					@section('content')
 | 
				
			||||||
 | 
					<div class="flex flex-col gap-6">
 | 
				
			||||||
 | 
					    <div class="card">
 | 
				
			||||||
 | 
					        <div class="card-header">
 | 
				
			||||||
 | 
					            <div class="flex justify-between items-center">
 | 
				
			||||||
 | 
					                <h4 class="card-title">{{$title}}</h4>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <form action="{{route($route.'.store')}}" method="POST" class="" enctype="multipart/form-data">
 | 
				
			||||||
 | 
					            {{csrf_field()}}
 | 
				
			||||||
 | 
					            <input type="hidden" name="secure_id" value="{{@$keyId}}">
 | 
				
			||||||
 | 
					            <div class="p-6">
 | 
				
			||||||
 | 
					                <div class="card border rounded mb-5">
 | 
				
			||||||
 | 
					                    <div class="card-header">
 | 
				
			||||||
 | 
					                        <h5 class="font-bold text-md">Informasi Instansi Dataset</h5>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="card-body p-5">
 | 
				
			||||||
 | 
					                        <div class="grid lg:grid-cols-1 gap-3">
 | 
				
			||||||
 | 
					                            <div class="">
 | 
				
			||||||
 | 
					                                <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="">
 | 
				
			||||||
 | 
					                                    <option value="">-</option>
 | 
				
			||||||
 | 
					                                    @foreach($instansi as $dataInstansi)
 | 
				
			||||||
 | 
					                                    <option {{@$item->instansi_id == $dataInstansi->MsInstansiId ? 'selected' : ''}} value="{{encode_id($dataInstansi->MsInstansiId)}}">{{$dataInstansi->name}}</option>
 | 
				
			||||||
 | 
					                                    @endforeach
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                                @error('instansi_id')
 | 
				
			||||||
 | 
					                                <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                                @enderror
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                            <div class="">
 | 
				
			||||||
 | 
					                                <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="">
 | 
				
			||||||
 | 
					                                    <option value="">-</option>
 | 
				
			||||||
 | 
					                                    @foreach($template as $dataTemplate)
 | 
				
			||||||
 | 
					                                        <option {{@$item->template_id == $dataTemplate->MsTemplateId ? 'selected' : ''}} data-template="{{asset($dataTemplate->template_url)}}" value="{{encode_id($dataTemplate->MsTemplateId)}}">{{$dataTemplate->name}}</option>
 | 
				
			||||||
 | 
					                                    @endforeach
 | 
				
			||||||
 | 
					                                </select>
 | 
				
			||||||
 | 
					                                @error('template_id')
 | 
				
			||||||
 | 
					                                <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                                @enderror
 | 
				
			||||||
 | 
					                            </div>
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="grid lg:grid-cols-2 gap-3">
 | 
				
			||||||
 | 
					                    <div class="mb-3">
 | 
				
			||||||
 | 
					                        <label class="mb-3 required">Nama Dataset</label>
 | 
				
			||||||
 | 
					                        <input type="text" value="{{@$item->name ? @$item->name :  old('name')}}" name="name" class="form-input @error('name') is-invalid @enderror" placeholder="Masukan Nama Dataset" required>
 | 
				
			||||||
 | 
					                        <small><i>*Harap perhatikan nama dataset yang Anda buat. Pastikan tidak ada duplikasi dataset dengan menekan tombol Cek Data.</i></small>
 | 
				
			||||||
 | 
					                        @error('name')
 | 
				
			||||||
 | 
					                        <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                        @enderror
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="mb-3">
 | 
				
			||||||
 | 
					                        <label class="mb-3 required">Sifat Dataset</label>
 | 
				
			||||||
 | 
					                        <select name="publik" required class="form-input @error('publik') is-invalid @enderror" id="">
 | 
				
			||||||
 | 
					                            <option {{@$item->publik == 1 ? 'selected' : ''}} value="1">Terbuka/Publik</option>
 | 
				
			||||||
 | 
					                            <option {{@$item->publik == 0 ? 'selected' : ''}} value="0">Rahasia/Private</option>
 | 
				
			||||||
 | 
					                        </select>
 | 
				
			||||||
 | 
					                        @error('publik')
 | 
				
			||||||
 | 
					                        <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                        @enderror
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                    <div class="mb-3">
 | 
				
			||||||
 | 
					                        <label class="mb-3 required">Tags / Kata Kunci</label>
 | 
				
			||||||
 | 
					                        <div id="tag-container" class="flex flex-wrap gap-2 p-2 form-input rounded bg-white focus-within:ring-2 ring-blue-500">
 | 
				
			||||||
 | 
					                            <?php
 | 
				
			||||||
 | 
					                                $tag = @json_decode(@$item->tags);
 | 
				
			||||||
 | 
					                            ?>
 | 
				
			||||||
 | 
					                            @if(@$tag)
 | 
				
			||||||
 | 
					                            @foreach($tag as $dataTags)
 | 
				
			||||||
 | 
					                                @if(@$dataTags)
 | 
				
			||||||
 | 
					                                    <span class="inline-flex items-center px-2 py-1 bg-primary text-white text-sm rounded">{{@$dataTags}} <button type="button" class="ml-1 text-blue-500 hover:text-red-600">×</button><input type="hidden" name="tags[]" value="{{@$dataTags}}"></span>
 | 
				
			||||||
 | 
					                                @endif
 | 
				
			||||||
 | 
					                            @endforeach
 | 
				
			||||||
 | 
					                            @endif
 | 
				
			||||||
 | 
					                            <input id="tag-input" type="text" value="" name="tags[]" placeholder="Tambah tag..."  class="flex-grow border-none p-1 text-sm" />
 | 
				
			||||||
 | 
					                        </div>
 | 
				
			||||||
 | 
					                        <small><i>*Sesuaikan kata kunci dengan dataset Anda</i></small>
 | 
				
			||||||
 | 
					                        @error('tags')
 | 
				
			||||||
 | 
					                        <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                        @enderror
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                    <div class="mb-3">
 | 
				
			||||||
 | 
					                        <label class="mb-3 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'}}>
 | 
				
			||||||
 | 
					                        <small><i>Masukan Ekstensi File : .xls,.xlsx</i></small>
 | 
				
			||||||
 | 
					                        @if(@$item->file)
 | 
				
			||||||
 | 
					                            <br>
 | 
				
			||||||
 | 
					                            <a href="{{asset('uploads/'.$item->file)}}" class="btn bg-success text-white mt-3"><i class="ri-download-line"></i> Download File</a>
 | 
				
			||||||
 | 
					                        @endif
 | 
				
			||||||
 | 
					                        @error('file')
 | 
				
			||||||
 | 
					                        <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                        @enderror
 | 
				
			||||||
 | 
					                    </div>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div class="mb-3">
 | 
				
			||||||
 | 
					                    <label class="mb-3 required">Deskripsi Dataset</label>
 | 
				
			||||||
 | 
					                    <textarea name="deskripsi" rows="10" required class="form-input @error('deskripsi') is-invalid @enderror" id="">{{@$item->deskripsi}}</textarea>
 | 
				
			||||||
 | 
					                    @error('deskripsi')
 | 
				
			||||||
 | 
					                    <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
				
			||||||
 | 
					                    @enderror
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					                <div class="mb-3">
 | 
				
			||||||
 | 
					                    <label class="mb-3">Data Tahun</label>
 | 
				
			||||||
 | 
					                    <select name="tahun" class="form-input" id="">
 | 
				
			||||||
 | 
					                        @for($i = (date('Y')-5); date('Y') >= $i ;  $i++)
 | 
				
			||||||
 | 
					                        <option {{ (@$item ? (@$item->tahun == $i ? 'selected' : '') : ($i == date('Y') ? 'selected' : '') )}} value="{{$i}}">{{$i}}</option>
 | 
				
			||||||
 | 
					                        @endfor
 | 
				
			||||||
 | 
					                    </select>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <div class="p-6">
 | 
				
			||||||
 | 
					                <a href="{{route($route.'.index')}}" class="btn bg-danger text-white"><i class="ri-close-line"></i> Batal</a>
 | 
				
			||||||
 | 
					                <button type="submit" class="btn bg-success text-white"><i class="ri-save-line"></i> Simpan</button>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </form>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
 | 
					@section('js')
 | 
				
			||||||
 | 
					    <script>
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
 | 
					        const input = document.getElementById('tag-input');
 | 
				
			||||||
 | 
					        const container = document.getElementById('tag-container');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        input.addEventListener('keydown', function (e) {
 | 
				
			||||||
 | 
					            if (e.key === 'Enter' && this.value.trim() !== '') {
 | 
				
			||||||
 | 
					            e.preventDefault();
 | 
				
			||||||
 | 
					            const tagText = this.value.trim();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Buat tag baru
 | 
				
			||||||
 | 
					            const tag = document.createElement('span');
 | 
				
			||||||
 | 
					            tag.className = 'inline-flex items-center px-2 py-1 bg-primary text-white text-sm rounded';
 | 
				
			||||||
 | 
					            tag.innerHTML = `${tagText} <button type="button" class="ml-1 text-blue-500 hover:text-red-600">×</button>`;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Hidden input untuk dikirim ke server
 | 
				
			||||||
 | 
					                const hiddenInput = document.createElement('input');
 | 
				
			||||||
 | 
					                hiddenInput.type = 'hidden';
 | 
				
			||||||
 | 
					                hiddenInput.name = 'tags[]';
 | 
				
			||||||
 | 
					                hiddenInput.value = tagText;
 | 
				
			||||||
 | 
					            
 | 
				
			||||||
 | 
					            // Tempelkan ke tag
 | 
				
			||||||
 | 
					            tag.appendChild(hiddenInput);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Tambahkan tag ke container sebelum input
 | 
				
			||||||
 | 
					            container.insertBefore(tag, input);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Reset input
 | 
				
			||||||
 | 
					            this.value = '';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // Hapus tag saat tombol × ditekan
 | 
				
			||||||
 | 
					            tag.querySelector('button').addEventListener('click', () => tag.remove());
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        </script>
 | 
				
			||||||
 | 
						<script type="text/javascript">
 | 
				
			||||||
 | 
					        $('.template_id').on('change',function(){
 | 
				
			||||||
 | 
					            var template = $(this).find(':selected').attr('data-template');
 | 
				
			||||||
 | 
					            $('.btnDownload').attr('href',template);
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        $('#template_default').on('change',function(){
 | 
				
			||||||
 | 
					            var instansi_id = $('.instansi_id').find(':selected').val();
 | 
				
			||||||
 | 
					            var val = $(this).find(':selected').val();
 | 
				
			||||||
 | 
					            var template = $('.template_id').find(':selected').attr('data-template');
 | 
				
			||||||
 | 
					            if(instansi_id == ''){
 | 
				
			||||||
 | 
					                toastr.error("Data instansi_id Belum Dipilih", 'Error!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
 | 
				
			||||||
 | 
					                $('#template_default').val('');
 | 
				
			||||||
 | 
					            }else{
 | 
				
			||||||
 | 
					                if(val == 1){
 | 
				
			||||||
 | 
					                    $('.btnDownload').attr('href',template);
 | 
				
			||||||
 | 
					                    $('.btnDownload').removeClass('hidden');
 | 
				
			||||||
 | 
					                }else{
 | 
				
			||||||
 | 
					                    $('.btnDownload').attr('href',"#");
 | 
				
			||||||
 | 
					                    $('.btnDownload').addClass('hidden');
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					        $(document).ready(function() {
 | 
				
			||||||
 | 
					            $('.numberInput').on('input', function() {
 | 
				
			||||||
 | 
					                this.value = this.value.replace(/[^0-9]/g, ''); // Hanya angka 0-9
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					            $('#togglePassword').on('click', function() {
 | 
				
			||||||
 | 
					                let passwordField = $('#password');
 | 
				
			||||||
 | 
					                let icon = $(this).find('i');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                // Cek apakah input saat ini bertipe password
 | 
				
			||||||
 | 
					                if (passwordField.attr('type') === 'password') {
 | 
				
			||||||
 | 
					                    passwordField.attr('type', 'text'); // Ubah ke teks
 | 
				
			||||||
 | 
					                    icon.removeClass('fa-eye').addClass('fa-eye-slash'); // Ganti ikon
 | 
				
			||||||
 | 
					                } else {
 | 
				
			||||||
 | 
					                    passwordField.attr('type', 'password'); // Ubah ke password
 | 
				
			||||||
 | 
					                    icon.removeClass('fa-eye-slash').addClass('fa-eye'); // Kembalikan ikon
 | 
				
			||||||
 | 
					                }
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					        });   
 | 
				
			||||||
 | 
					    </script>
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,131 @@
 | 
				
			||||||
 | 
					@extends('layouts.master')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@section('css')
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
 | 
					@section('content')
 | 
				
			||||||
 | 
					<div class="flex flex-col gap-6">
 | 
				
			||||||
 | 
					    <div class="card">
 | 
				
			||||||
 | 
					        <div class="card-header">
 | 
				
			||||||
 | 
					            <div class="flex justify-between items-center">
 | 
				
			||||||
 | 
					                <h4 class="card-title">Data {{$title}}</h4>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="p-6">
 | 
				
			||||||
 | 
					            <div id="toolbar">
 | 
				
			||||||
 | 
					                @if(permission('is_create', $route.'.*','module',false) || permission('is_update', $route.'.*','module',false))
 | 
				
			||||||
 | 
					                <a href="{{route($route.'.update')}}" class="btn bg-success text-white"><i class="ri-add-line"></i> Tambah Data</a>
 | 
				
			||||||
 | 
					                @endif
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					            <table class="gridjs-table" 
 | 
				
			||||||
 | 
					                    data-search="true"
 | 
				
			||||||
 | 
					                    data-toggle="table"
 | 
				
			||||||
 | 
					                    data-pagination="true"
 | 
				
			||||||
 | 
					                    data-toolbar="#toolbar"
 | 
				
			||||||
 | 
					                    data-show-refresh="false"
 | 
				
			||||||
 | 
					                    data-url="{{route($route.'.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>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
 | 
					@section('js')
 | 
				
			||||||
 | 
					<script type="text/javascript">
 | 
				
			||||||
 | 
					$("#grid-data").on("click", ".remove_data", function() {
 | 
				
			||||||
 | 
					var base_url = $(this).attr('data-href');
 | 
				
			||||||
 | 
					var id = $(this).attr('data-id');
 | 
				
			||||||
 | 
					    swal({
 | 
				
			||||||
 | 
					         title: "Hapus Data!",
 | 
				
			||||||
 | 
					         text: "Apa anda yakin ingin menghapus data ini ?",
 | 
				
			||||||
 | 
					         type: "warning",
 | 
				
			||||||
 | 
					         showCancelButton: true,
 | 
				
			||||||
 | 
					         confirmButtonColor: "#DD6B55",
 | 
				
			||||||
 | 
					         confirmButtonText: "Ya Hapus Sekarang",
 | 
				
			||||||
 | 
					         cancelButtonText: "Tidak",
 | 
				
			||||||
 | 
					         closeOnConfirm: true,
 | 
				
			||||||
 | 
					         closeOnCancel: true
 | 
				
			||||||
 | 
					     },
 | 
				
			||||||
 | 
					     function(isConfirm) {
 | 
				
			||||||
 | 
					        if(isConfirm){
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          request = $.ajax({
 | 
				
			||||||
 | 
					              url: base_url,
 | 
				
			||||||
 | 
					              type: "GET",
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Callback handler that will be called on success
 | 
				
			||||||
 | 
					          request.done(function(response, textStatus, jqXHR){
 | 
				
			||||||
 | 
					              console.log(response);
 | 
				
			||||||
 | 
					              toastr.success("Berhasil Menhapus Data", 'Berhasil!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
 | 
				
			||||||
 | 
					              $('#grid-data').bootstrapTable('refresh');
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Callback handler that will be called on failure
 | 
				
			||||||
 | 
					          request.fail(function (jqXHR, textStatus, errorThrown){
 | 
				
			||||||
 | 
					              toastr.error(
 | 
				
			||||||
 | 
					                  "Gagal "+textStatus, errorThrown
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					     }); 
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					$("#grid-data").on("click", ".aktif_data", function() {
 | 
				
			||||||
 | 
					var base_url = $(this).attr('data-href');
 | 
				
			||||||
 | 
					var id = $(this).attr('data-id');
 | 
				
			||||||
 | 
					    swal({
 | 
				
			||||||
 | 
					         title: "Aktifkan Data!",
 | 
				
			||||||
 | 
					         text: "Apa anda yakin ingin aktifkan data ini ?",
 | 
				
			||||||
 | 
					         type: "warning",
 | 
				
			||||||
 | 
					         showCancelButton: true,
 | 
				
			||||||
 | 
					         confirmButtonColor: "#2dad62",
 | 
				
			||||||
 | 
					         confirmButtonText: "Ya Aktifkan Sekarang",
 | 
				
			||||||
 | 
					         cancelButtonText: "Tidak",
 | 
				
			||||||
 | 
					         closeOnConfirm: true,
 | 
				
			||||||
 | 
					         closeOnCancel: true
 | 
				
			||||||
 | 
					     },
 | 
				
			||||||
 | 
					     function(isConfirm) {
 | 
				
			||||||
 | 
					        if(isConfirm){
 | 
				
			||||||
 | 
					          
 | 
				
			||||||
 | 
					          request = $.ajax({
 | 
				
			||||||
 | 
					              url: base_url,
 | 
				
			||||||
 | 
					              type: "GET",
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Callback handler that will be called on success
 | 
				
			||||||
 | 
					          request.done(function(response, textStatus, jqXHR){
 | 
				
			||||||
 | 
					              console.log(response);
 | 
				
			||||||
 | 
					              toastr.success("Berhasil Mengaktifkan Data", 'Berhasil!', {positionClass: 'toast-bottom-right', containerId: 'toast-bottom-right'});
 | 
				
			||||||
 | 
					              $('#grid-data').bootstrapTable('refresh');
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					          // Callback handler that will be called on failure
 | 
				
			||||||
 | 
					          request.fail(function (jqXHR, textStatus, errorThrown){
 | 
				
			||||||
 | 
					              toastr.error(
 | 
				
			||||||
 | 
					                  "Gagal "+textStatus, errorThrown
 | 
				
			||||||
 | 
					              );
 | 
				
			||||||
 | 
					          });
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					     }); 
 | 
				
			||||||
 | 
					    return false;
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					</script>
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,86 @@
 | 
				
			||||||
 | 
					@extends('layouts.master')
 | 
				
			||||||
 | 
					@section('css')
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
 | 
					@section('content')
 | 
				
			||||||
 | 
					<div class="flex flex-col gap-6">
 | 
				
			||||||
 | 
					    <div class="card">
 | 
				
			||||||
 | 
					        <div class="card-header">
 | 
				
			||||||
 | 
					            <div class="flex justify-between items-center">
 | 
				
			||||||
 | 
					                <h4 class="card-title">{{$title}}</h4>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div class="p-6">
 | 
				
			||||||
 | 
					            <div class="grid lg:grid-cols-1 gap-3">
 | 
				
			||||||
 | 
					                <table class="gridjs-table">
 | 
				
			||||||
 | 
					                    <tbody class="gridjs-tbody">
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Instansi</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{{$item->instansi->name}}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Resource Data</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{{$item->template->name}}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Nama Dataset</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{{$item->name}}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Sifat Dataset</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">
 | 
				
			||||||
 | 
					                                @if($item->publik == 1)
 | 
				
			||||||
 | 
					                                    <span class="p-1 text-xs text-white rounded  bg-success">Terbuka/Publik</span>
 | 
				
			||||||
 | 
					                                @else
 | 
				
			||||||
 | 
					                                    <span class="p-1 text-xs text-white rounded bg-primary">Rahasia/Private</span>
 | 
				
			||||||
 | 
					                                @endif
 | 
				
			||||||
 | 
					                            </td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Tags</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{!!tags($item->tags)!!}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">File : </td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs"><a href="{{asset('uploads/'.@$item->file)}}" class="btn bg-primary text-white text-xs"><i class="ri-download-line"></i> Download File</a></td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Topik</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{!! topikByDataset($item->topik)!!}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                        <tr class="gridjs-tr">
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">Deskripsi</td>
 | 
				
			||||||
 | 
					                            <td class="gridjs-td border-none text-xs">{{$item->deskripsi}}</td>
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                    </tbody>
 | 
				
			||||||
 | 
					                </table>
 | 
				
			||||||
 | 
					                <?php 
 | 
				
			||||||
 | 
					                    $data = json_decode($item->data);
 | 
				
			||||||
 | 
					                ?>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <div style="overflow-x:auto;">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                <table id="table"
 | 
				
			||||||
 | 
					                    data-toggle="table"
 | 
				
			||||||
 | 
					                    data-search="false"
 | 
				
			||||||
 | 
					                    data-pagination="true"
 | 
				
			||||||
 | 
					                    data-side-pagination="server"
 | 
				
			||||||
 | 
					                    data-url="{{ route($route.'.gridDetail', ['id' => $keyId]) }}"
 | 
				
			||||||
 | 
					                    >
 | 
				
			||||||
 | 
					                    <thead>
 | 
				
			||||||
 | 
					                        <tr class="bg-secondary text-white">
 | 
				
			||||||
 | 
					                            @if (!empty($data))
 | 
				
			||||||
 | 
					                                @foreach ($data[0] as $k => $key)
 | 
				
			||||||
 | 
					                                    <th data-field="{{$k}}" class="gridjs-td gridjs-th text-xs">{{ ucwords(str_replace('_', ' ', $k)) }}</th>
 | 
				
			||||||
 | 
					                                @endforeach
 | 
				
			||||||
 | 
					                            @endif
 | 
				
			||||||
 | 
					                        </tr>
 | 
				
			||||||
 | 
					                    </thead>
 | 
				
			||||||
 | 
					                </table>
 | 
				
			||||||
 | 
					                </div>
 | 
				
			||||||
 | 
					            </div>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
 | 
					@section('js')
 | 
				
			||||||
 | 
					@endsection
 | 
				
			||||||
| 
						 | 
					@ -41,19 +41,8 @@
 | 
				
			||||||
                                <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 class="mb-3">
 | 
					 | 
				
			||||||
                                <label class="mb-3 required">Apakah Menggunakan Template Yang Disediakan ?</label>
 | 
					 | 
				
			||||||
                                <select name="template_default" {{@$item->template_default ? 'disabled' : 'required'}} class="form-input {{@$item->template_default ? 'bg-secondary/50 text-white' : ''}} @error('template_default') is-invalid @enderror" id="template_default">
 | 
					 | 
				
			||||||
                                    <option value="">-</option>
 | 
					 | 
				
			||||||
                                    <option {{@$item->template_default == 1 ? 'selected' : ''}} value="1">Ya</option>
 | 
					 | 
				
			||||||
                                    <option {{@$item->template_default == 0 ? 'selected' : ''}} value="0">Tidak</option>
 | 
					 | 
				
			||||||
                                </select>
 | 
					 | 
				
			||||||
                                @error('template_default')
 | 
					 | 
				
			||||||
                                <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
					 | 
				
			||||||
                                @enderror
 | 
					 | 
				
			||||||
                            </div>
 | 
					 | 
				
			||||||
                        </div>
 | 
					                        </div>
 | 
				
			||||||
                        <a href="#" class="btn bg-success btnDownload hidden text-white btn-md"><i class="ri-download-2-line"></i> Download Template Excel</a>
 | 
					                        <a href="#" class="btn bg-success btnDownload text-white btn-md mt-3"><i class="ri-download-2-line"></i> Download Template Excel</a>
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                    
 | 
					                    
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
| 
						 | 
					@ -110,22 +99,6 @@
 | 
				
			||||||
                        @enderror
 | 
					                        @enderror
 | 
				
			||||||
                    </div>
 | 
					                    </div>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="mb-3">
 | 
					 | 
				
			||||||
                        <label class="mb-3 required">Topik</label>
 | 
					 | 
				
			||||||
                        <select required name="topik[]" class="form-input select2 @error('topik') is-invalid @enderror" multiple>
 | 
					 | 
				
			||||||
                            @foreach($topik as $dataTopik)
 | 
					 | 
				
			||||||
                            @php
 | 
					 | 
				
			||||||
                                if(@$item){
 | 
					 | 
				
			||||||
                                    $isSelected = is_array(json_decode($item->topik) ?? []) && in_array(encode_id($dataTopik->MsTopikId), json_decode($item->topik));
 | 
					 | 
				
			||||||
                                }
 | 
					 | 
				
			||||||
                            @endphp
 | 
					 | 
				
			||||||
                            <option {{ @$isSelected ? 'selected' : '' }} value="{{encode_id($dataTopik->MsTopikId)}}">{{$dataTopik->name}}</option>
 | 
					 | 
				
			||||||
                            @endforeach
 | 
					 | 
				
			||||||
                        </select>
 | 
					 | 
				
			||||||
                        @error('topik')
 | 
					 | 
				
			||||||
                        <span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
 | 
					 | 
				
			||||||
                        @enderror
 | 
					 | 
				
			||||||
                    </div>
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                <div class="mb-3">
 | 
					                <div class="mb-3">
 | 
				
			||||||
                    <label class="mb-3 required">Deskripsi Dataset</label>
 | 
					                    <label class="mb-3 required">Deskripsi Dataset</label>
 | 
				
			||||||
| 
						 | 
					@ -136,7 +109,11 @@
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
                <div class="mb-3">
 | 
					                <div class="mb-3">
 | 
				
			||||||
                    <label class="mb-3">Data Tahun</label>
 | 
					                    <label class="mb-3">Data Tahun</label>
 | 
				
			||||||
                    <input type="text" class="form-input bg-secondary/50 text-white" value="{{date('Y')}}" disabled>
 | 
					                    <select name="tahun" class="form-input" id="">
 | 
				
			||||||
 | 
					                        @for($i = (date('Y')-5); date('Y') >= $i ;  $i++)
 | 
				
			||||||
 | 
					                        <option {{ (@$item ? (@$item->tahun == $i ? 'selected' : '') : ($i == date('Y') ? 'selected' : '') )}} value="{{$i}}">{{$i}}</option>
 | 
				
			||||||
 | 
					                        @endfor
 | 
				
			||||||
 | 
					                    </select>
 | 
				
			||||||
                </div>
 | 
					                </div>
 | 
				
			||||||
            </div>
 | 
					            </div>
 | 
				
			||||||
            <div class="p-6">
 | 
					            <div class="p-6">
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -10,6 +10,7 @@ use App\Http\Controllers\Management\UserController;
 | 
				
			||||||
use App\Http\Controllers\Management\RoleController;
 | 
					use App\Http\Controllers\Management\RoleController;
 | 
				
			||||||
use App\Http\Controllers\Management\AksesController;
 | 
					use App\Http\Controllers\Management\AksesController;
 | 
				
			||||||
use App\Http\Controllers\Opendata\DatasetController;
 | 
					use App\Http\Controllers\Opendata\DatasetController;
 | 
				
			||||||
 | 
					use App\Http\Controllers\Opendata\DatasetTambahanController;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Route::name('dashboard.')->prefix('dashboard')->group(function () {
 | 
					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('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::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 () {
 | 
					Route::name('master.')->prefix('master')->group(function () {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue