main
Ilham Wara Nugroho 2026-06-15 15:55:16 +07:00
parent 47b5ba5a2c
commit c980a4c95e
5 changed files with 386 additions and 152 deletions

View File

@ -4,9 +4,62 @@ use Illuminate\Support\Str;
use App\Models\Master\Menu; use App\Models\Master\Menu;
use App\Models\Master\AccessMenu; use App\Models\Master\AccessMenu;
use App\Models\User; use App\Models\User;
use App\Models\Agency;
use App\Models\Master\Group; use App\Models\Master\Group;
use App\Models\UnitKonversi; use App\Models\UnitKonversi;
use App\Models\GWP; use App\Models\GWP;
use App\Services\DashboardMitigationService;
use App\Services\DashboardAdaptationService;
use App\Models\KegiatanMitigasi;
use App\Models\KegiatanAdaptasi;
if (!function_exists('sumberData')) {
/**
* @param $val
*
* @return string
*/
function sumberData($data,$type)
{
$res = "";
$res = [];
$d = '';
if($type == 'mitigasi'){
$dashboardData = KegiatanMitigasi::whereIn('id',$data)->get();
foreach ($dashboardData as $key => $value) {
$d .= $value->nama_kegiatan;
}
}elseif($type == 'adaptasi'){
$dashboardData = KegiatanAdaptasi::whereIn('id',$data)->get();
foreach ($dashboardData as $key => $value) {
$d .= $value->nama_kegiatan;
}
}elseif($type == 'inventory'){
$d .= $value;
}
array_push($res, $d);
$res = implode(",", $res);
return $res;
}
}
if (!function_exists('getAgency')) {
/**
* @param $val
*
* @return string
*/
function getAgency($val)
{
$data = Agency::where('id',$val)->first();
return $data;
}
}
if (!function_exists('taskLabel')) { if (!function_exists('taskLabel')) {
/** /**

View File

@ -50,7 +50,7 @@ class LembarPengesahanController extends Controller
} }
if(auth()->user()->ms_group_id == 1){ if(auth()->user()->ms_group_id == 1){
if($row->status == 0){ if($row->status == 0){
$btn .= '<a href="#" data-href="' . url('pengesahan/verifikasi/').'/'.encode_id($row->LembarPengesahanId). '" class="btn btn-sm w-100 mb-1 btn-success verifikasi">Verifikasi</a>'; $btn .= '<a href="#" data-secure="'.encode_id($row->LembarPengesahanId).'" class="btn btn-sm w-100 mb-1 btn-success upload">Upload Berkas</a>';
$btn .= '<a href="#" data-href="' . url('pengesahan/tolak-verifikasi/').'/'.encode_id($row->LembarPengesahanId). '" class="btn btn-sm w-100 mb-1 btn-warning tolak-verifikasi">Tolak Verifikasi</a>'; $btn .= '<a href="#" data-href="' . url('pengesahan/tolak-verifikasi/').'/'.encode_id($row->LembarPengesahanId). '" class="btn btn-sm w-100 mb-1 btn-warning tolak-verifikasi">Tolak Verifikasi</a>';
} }
} }
@ -293,4 +293,80 @@ class LembarPengesahanController extends Controller
{ {
// //
} }
function generate(Request $request) {
// dd($request->all());
$phpWord = new \PhpOffice\PhpWord\PhpWord();
$templateProcessor = new \PhpOffice\PhpWord\TemplateProcessor(asset('assets/dokumen_pengesahan.docx'));
$templateProcessor->setValue('tahun_dokumen', date('Y'));
$templateProcessor->setValue('tahun_data', date('Y')-1);
$templateProcessor->setValue('pengampu_data', $request->nama_instansi);
$templateProcessor->setValue('sektor', \Str::title($request->type));
$templateProcessor->setValue('jenis_data', $request->jenis_data);
if($request->type == 'mitigasi'){
$templateProcessor->setValue('sumber_data', sumberData($request->kegiatan_mitigasi,$request->type));
}elseif($request->type == 'adaptasi'){
$templateProcessor->setValue('sumber_data', sumberData($request->kegiatan_adaptasi,$request->type));
}elseif($request->type == 'inventory'){
$templateProcessor->setValue('sumber_data', sumberData($request->sektor,$request->type));
}
$templateProcessor->setValue('kepala_pengampu_data', $request->kepala_pengampu_data);
$templateProcessor->setValue('nama_instansi', $request->nama_instansi);
// Simpan hasil sementara
// $tempDocx = public_path('123.docx');
// Buat file temporary
$tempFile = tempnam(sys_get_temp_dir(), 'dokumen_') . '.docx';
$templateProcessor->saveAs($tempFile);
// Nama file saat didownload
$downloadName = 'dokumen_pengesahan_' . date('YmdHis') . '.docx';
return response()
->download($tempFile, $downloadName)
->deleteFileAfterSend(true);
}
function upload(Request $request){
if (@$request->hasFile('file')) {
$file = $request->file('file');
$destinationPath = public_path('uploads/pengesahan');
$current = Carbon::now()->format('Y/m/d');
$path = $destinationPath . '/' . $current;
$fileExtension = $file->getClientOriginalExtension();
$fileSize = $file->getSize();
if($fileExtension != 'pdf'){
return redirect()->back()->with([
'message' => 'Maaf File Harus Berupa PDF!',
'type' => "error"
]);
}
$newFilename = session('id').'_'.uniqid('file_') . '.' . $fileExtension;
if (!File::exists($path)) {
File::isDirectory($path) or File::makeDirectory($path, 0777, true, true);
}
$filePathTim = 'pengesahan/' . $current . '/' . $newFilename;
$uploaded = $file->move($path, $newFilename);
$ag = LembarPengesahan::find(decode_id(@$request->secure_id));
$ag->file = $filePathTim;
// if(auth()->user()->ms_group_id != 1){
$ag->status = 1;
// }
$ag->save();
return redirect()->route($this->route.'.index')->with('success', 'Lembar Pengesahan berhasil diverifikasi.');
}else{
return back()->withErrors(['error' => 'Lembar Pengesahan gagal disimpan. Silakan coba lagi']);
}
}
} }

View File

@ -15,161 +15,11 @@
<div class="col-md-12"> <div class="col-md-12">
<input type="hidden" name="secure_id" value="{{@$keyId}}"> <input type="hidden" name="secure_id" value="{{@$keyId}}">
</div> </div>
{{--
<div class="col-12 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Jenis Pengesahan</label>
<div class="col-12 ">
<select name="type" class="form-control select2 type" disabled>
<option value="">-- PILIH JENIS PENGESAHAN --</option>
@foreach (getRoles() as $role)
<option {{@$item->type == $role->alias ? 'selected' : ''}} value="{{ $role->alias }}">{{ $role->name }}</option>
@endforeach
</select>
@error('type')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 mb-3 {{ @$item->type == 'inventory' ? '' : 'd-none' }} inventory">
<div class="form-group">
<label class="col-xl-12 form-label">Sektor</label>
<div class="col-12 ">
@php
$selectedSektor = json_decode(@$item->sektor, true) ?? [];
$options = [
'Energi' => [
'Pembangkit Listrik',
'Industri Manufaktur',
'Transportasi',
'Komersial',
'Rumah Tangga',
'Energi Lainnya',
'Penggunaan Listrik PLN',
'Transmisi & Distribusi',
'Penyulingan',
'Penggunaan Listrik',
'Bahan Bakar Listrik',
'Emisi Fugitive Batu Bara',
'Emisi Fugitive Migas',
],
'IPPU' => [
'Produksi',
'Pelumas & Parafin',
'Karbonat Kaca',
'Karbonat Keramik',
'Karbonat Lainnya',
'Karbonat Pulp Paper',
'Karbonat Makanan & Minuman',
'Penggunaan AC',
],
'Pertanian & Lahan' => [
'Pengelolaan Kotoran Ternak',
'Populasi Ternak',
'Sawah',
'Tanaman Pangan',
'Konsumsi Pupuk',
'Hortikultura',
'Pengairan Sawah',
'Sistem Air Sebelum Penananman Padi Sawah',
'Matriks Transisi Pertumbuhan Tutupan Lahan',
'Kehilangan Kayu',
'Perubahan Lahan Pemukiman',
],
'Limbah' => [
'Kependudukan',
'Timbulan Sampah',
'Distribusi Sampah Domestik',
'Sarana Air Limbah Domestik',
'Limbah Cair Industri',
]
];
@endphp
<select name="sektor[]" class="form-control select2" multiple>
@foreach($options as $group => $items)
<optgroup label="{{ $group }}">
@foreach($items as $opt)
<option value="{{ $opt }}" {{ in_array($opt, $selectedSektor) ? 'selected' : '' }}>
{{ $opt }}
</option>
@endforeach
</optgroup>
@endforeach
</select>
@error('type')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
--}}
<?php
// $selectedForm = json_decode(@$item->form_id, true) ?? [];
?>
{{--
<div class="col-12 mb-3 {{ @$item->type == 'adaptasi' ? '' : 'd-none' }} adaptasi">
<div class="form-group">
<label class="col-xl-12 form-label">Kegiatan Adaptasi</label>
<div class="col-12 ">
<select name="kegiatan_adaptasi[]" class="form-control select2" multiple>
<option value="">-- PILIH KEGIATAN ADAPTASI --</option>
@foreach($kegiatanAdaptasi as $a)
<option {{ in_array($a->id, $selectedForm) ? 'selected' : '' }} value="{{ $a->id }}">
{{ $a->nama_kegiatan }} >>
{{ $a->sektor }} >>
{{ $a->sub_sektor }}
</option>
@endforeach
</select>
@error('kegiatan')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 mb-3 {{ @$item->type == 'mitigasi' ? '' : 'd-none' }} mitigasi">
<div class="form-group">
<label class="col-xl-12 form-label">Kegiatan Mitigasi</label>
<div class="col-12 ">
<select name="kegiatan_mitigasi[]" class="form-control select2" multiple>
<option value="">-- PILIH KEGIATAN MITIGASI --</option>
@foreach($kegiatanMitigasi as $m)
<option {{ in_array($m->id, $selectedForm) ? 'selected' : '' }} value="{{ $m->id }}">
{{ Str::limit($m->nama_kegiatan, 60) }} >>
{{ $m->sektor }} >>
{{ $m->sub_sektor }}
</option>
@endforeach
</select>
@error('kegiatan')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Keterangan (Opsional)</label>
<div class="col-12 ">
<textarea name="keterangan" class="form-control" cols="10" rows="5">{{@$item->keterangan}}</textarea>
@error('keterangan')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
--}}
<div class="col-12 mb-3"> <div class="col-12 mb-3">
<div class="form-group"> <div class="form-group">
<label class="col-xl-12 form-label">File Lembar Pengesahan Data IGRK</label> <label class="col-xl-12 form-label">File Lembar Pengesahan Data IGRK</label>
<div class="col-12 "> <div class="col-12 ">
<a href="{{ asset('assets/dokumen_pengesahan.docx') }}" class="btn btn-primary">Unduh Template</a> <a href="#" onclick="showActivityUserModal()" class="btn btn-primary">Generate Dokumen Pengesahan</a>
</div> </div>
</div> </div>
</div> </div>
@ -201,9 +51,227 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" id="userActivityModal" tabindex="-1" role="dialog" aria-labelledby="userActivityModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="userActivityModalLabel">Generate Dokumen Pengesahan</h5>
</div>
<form action="{{ route($route.'.generate') }}" method="POST">
{{ csrf_field() }}
<div class="modal-body row">
<div class="col-12 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Jenis Pengesahan</label>
<div class="col-12 ">
<select name="type" class="form-control select2 type" required>
<option value="">-- PILIH JENIS PENGESAHAN --</option>
@foreach (getRoles() as $role)
<option {{@$item->type == $role->alias ? 'selected' : ''}} value="{{ $role->alias }}">{{ $role->name }}</option>
@endforeach
</select>
@error('type')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 mb-3 {{ @$item->type == 'inventory' ? '' : 'd-none' }} inventory">
<div class="form-group">
<label class="col-xl-12 form-label">Sektor</label>
<div class="col-12 ">
@php
$selectedSektor = json_decode(@$item->sektor, true) ?? [];
$options = [
// 'Energi' => [
'Pembangkit Listrik',
'Industri Manufaktur',
'Transportasi',
'Komersial',
'Rumah Tangga',
'Energi Lainnya',
'Penggunaan Listrik PLN',
'Transmisi & Distribusi',
'Penyulingan',
'Penggunaan Listrik',
'Bahan Bakar Listrik',
'Emisi Fugitive Batu Bara',
'Emisi Fugitive Migas',
// ],
// 'IPPU' => [
'Produksi',
'Pelumas & Parafin',
'Karbonat Kaca',
'Karbonat Keramik',
'Karbonat Lainnya',
'Karbonat Pulp Paper',
'Karbonat Makanan & Minuman',
'Penggunaan AC',
// ],
// 'Pertanian & Lahan' => [
'Pengelolaan Kotoran Ternak',
'Populasi Ternak',
'Sawah',
'Tanaman Pangan',
'Konsumsi Pupuk',
'Hortikultura',
'Pengairan Sawah',
'Sistem Air Sebelum Penananman Padi Sawah',
'Matriks Transisi Pertumbuhan Tutupan Lahan',
'Kehilangan Kayu',
'Perubahan Lahan Pemukiman',
// ],
// 'Limbah' => [
'Kependudukan',
'Timbulan Sampah',
'Distribusi Sampah Domestik',
'Sarana Air Limbah Domestik',
'Limbah Cair Industri',
// ]
];
@endphp
<select name="sektor[]" class="form-control select2" multiple>
{{-- @foreach($options as $group => $items) --}}
{{-- <optgroup label="{{ $group }}"> --}}
@foreach($options as $opt)
<option value="{{ $opt }}" {{ in_array($opt, $selectedSektor) ? 'selected' : '' }}>
{{ $opt }}
</option>
@endforeach
{{-- </optgroup> --}}
{{-- @endforeach --}}
</select>
@error('type')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<?php $selectedForm = json_decode(@$item->form_id, true) ?? []; ?>
<div class="col-12 mb-3 {{ @$item->type == 'adaptasi' ? '' : 'd-none' }} adaptasi">
<div class="form-group">
<label class="col-xl-12 form-label">Sumber Data Adaptasi</label>
<div class="col-12 ">
<select name="kegiatan_adaptasi[]" class="form-control select2" multiple>
<option value="">-- PILIH SUMBER DATA ADAPTASI --</option>
@foreach($kegiatanAdaptasi as $a)
<option {{ in_array($a->id, $selectedForm) ? 'selected' : '' }} value="{{ $a->id }}">
{{ $a->nama_kegiatan }} >>
{{ $a->sektor }} >>
{{ $a->sub_sektor }}
</option>
@endforeach
</select>
@error('kegiatan')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 mb-3 {{ @$item->type == 'mitigasi' ? '' : 'd-none' }} mitigasi">
<div class="form-group">
<label class="col-xl-12 form-label">Sumber Data Mitigasi</label>
<div class="col-12 ">
<select name="kegiatan_mitigasi[]" class="form-control select2" multiple>
<option value="">-- PILIH SUMBER DATA MITIGASI --</option>
@foreach($kegiatanMitigasi as $m)
<option {{ in_array($m->id, $selectedForm) ? 'selected' : '' }} value="{{ $m->id }}">
{{ Str::limit($m->nama_kegiatan, 60) }} >>
{{ $m->sektor }} >>
{{ $m->sub_sektor }}
</option>
@endforeach
</select>
@error('kegiatan')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Tahun Dokumen</label>
<div class="col-12 ">
<input type="text" name="tahun_dokumen" readonly class="form-control bg-secondary" value="{{ date('Y') }}"/>
@error('tahun_dokumen')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Tahun Data</label>
<div class="col-12 ">
<input type="text" name="tahun_data" readonly class="form-control bg-secondary" value="{{ date('Y')-1 }}"/>
@error('tahun_data')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 col-md-12 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Jenis Data</label>
<div class="col-12 ">
<input type="text" name="jenis_data" value="" class="form-control" required placeholder="Masukan Jenis Data"/>
@error('jenis_data')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Nama Instansi Pengampu Data</label>
<div class="col-12 ">
<input type="text" name="nama_instansi" value="{{ getAgency(session('agency_id'))->name }}" class="form-control" required placeholder="Masukan Nama Instansi Pengampu Data"/>
@error('nama_instansi')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">Nama Kepala Pengampu Data</label>
<div class="col-12 ">
<input type="text" name="kepala_pengampu_data" class="form-control" value="" required placeholder="Masukan Nama Kepala Pengampu Data"/>
@error('kepala_pengampu_data')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" id="btnDownload" class="btn btn-primary submit d-flex justify-content-center align-items-center"><i class="bx bx-note icon nav-icon"></i>&nbsp;Generate Dokumen</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
</div>
</form>
</div>
</div>
</div>
@endsection @endsection
@section('js') @section('js')
<script> <script>
document.getElementById('btnDownload').addEventListener('click', function() {
setTimeout(() => {
location.reload();
}, 3000); // refresh setelah 3 detik
});
function showActivityUserModal() {
$('#userActivityModal').modal('show');
}
$('.type').on('change',function(){ $('.type').on('change',function(){
var val = $(this).val(); var val = $(this).val();
if(val == 'inventory'){ if(val == 'inventory'){

View File

@ -46,9 +46,44 @@
</div> </div>
</div> </div>
</div> </div>
<div class="modal fade" id="UploadModal" tabindex="-1" role="dialog" aria-labelledby="userActivityModalLabel" aria-hidden="true">
<div class="modal-dialog modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="userActivityModalLabel">Upload Dokumen Pengesahan</h5>
</div>
<form action="{{ route($route.'.upload') }}" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<input type="hidden" name="secure_id" id="secure_id">
<div class="modal-body">
<div class="col-12 mb-3">
<div class="form-group">
<label class="col-xl-12 form-label">File Dokumen</label>
<div class="col-12 ">
<input type="file" name="file" accept=".pdf" class="form-control">
@error('file')
<span class="invalid-feedback" style="display: block!important;"><strong>{{$message}}</strong></span>
@enderror
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="submit" id="btnDownload" class="btn btn-primary submit d-flex justify-content-center align-items-center"><i class="bx bx-upload icon nav-icon"></i>&nbsp;Upload Dokumen</button>
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button>
</div>
</form>
</div>
</div>
</div>
@endsection @endsection
@section('js') @section('js')
<script type="text/javascript"> <script type="text/javascript">
$("#grid-data").on("click", ".upload", function() {
$('#UploadModal').modal('show');
$('#secure_id').val($(this).attr('data-secure'));
});
$("#grid-data").on("click", ".remove_data", function() { $("#grid-data").on("click", ".remove_data", function() {
var base_url = $(this).attr('data-href'); var base_url = $(this).attr('data-href');
var id = $(this).attr('data-id'); var id = $(this).attr('data-id');

View File

@ -66,6 +66,8 @@ Route::name('pengesahan.')->prefix('pengesahan')->group(function () {
Route::get('delete/{id?}',[LembarPengesahanController::class,'delete'])->name('delete'); Route::get('delete/{id?}',[LembarPengesahanController::class,'delete'])->name('delete');
Route::get('verifikasi/{id?}',[LembarPengesahanController::class,'verifikasi'])->name('verifikasi'); Route::get('verifikasi/{id?}',[LembarPengesahanController::class,'verifikasi'])->name('verifikasi');
Route::get('tolak-verifikasi/{id?}',[LembarPengesahanController::class,'tolakverifikasi'])->name('tolakverifikasi'); Route::get('tolak-verifikasi/{id?}',[LembarPengesahanController::class,'tolakverifikasi'])->name('tolakverifikasi');
Route::post('generate/{id?}',[LembarPengesahanController::class,'generate'])->name('generate');
Route::post('upload/{id?}',[LembarPengesahanController::class,'upload'])->name('upload');
}); });
Route::name('dashboard.')->prefix('dashboard')->group(function () { Route::name('dashboard.')->prefix('dashboard')->group(function () {
Route::name('inventory.')->prefix('inventory')->group(function () { Route::name('inventory.')->prefix('inventory')->group(function () {