Merge branch 'staging' into feature/senior-officer

This commit is contained in:
majid
2024-12-31 11:31:28 +07:00
17 changed files with 344 additions and 129 deletions

View File

@@ -31,11 +31,22 @@ class LaporanController extends Controller
/** /**
* Show the specified resource. * Show the specified resource.
*/ */
public function show($id) {} public function show($id) {
$permohonan = Permohonan::with([
'penilai'])->find($id);
return view('lpj::laporan.show', compact('permohonan'));
}
/** /**
* Store form inspeksi. * Store form inspeksi.
*/ */
public function store(Request $request) {} public function store(Request $request) {
$permohonan = Permohonan::find($request->permohonan_id);
if($request->nilai_liquidasi) {
$permohonan->nilai_liquidasi = $request->liquidasi;
$permohonan->save();
return redirect()->route('laporan.index')->with('success', 'Nilai Liquidasi updated successfully');
}
}
public function update(Request $request, $id) {} public function update(Request $request, $id) {}
@@ -46,7 +57,11 @@ class LaporanController extends Controller
} }
// Retrieve data from the database // Retrieve data from the database
$query = Permohonan::query()->whereIn('status',['proses-laporan','done']); $query = Permohonan::query()->whereIn('status',['proses-laporan','done'])->whereNotNull('approval_so_at')->whereNotNull('approval_eo_at')->where(function ($q) {
$q->whereIn('nilai_plafond_id', [1,4])
->whereNotNull('approval_dd_at')
->orWhereIn('nilai_plafond_id', [2,3]);
});
$query = $query->orderBy('nomor_registrasi', 'desc'); $query = $query->orderBy('nomor_registrasi', 'desc');
// Apply search filter if provided // Apply search filter if provided

View File

@@ -173,14 +173,30 @@
if ($request->keterangan) { if ($request->keterangan) {
$data['approve_keterangan_bayar'] = $request->keterangan; $data['approve_keterangan_bayar'] = $request->keterangan;
} }
$output['data'] = $data; $output['data'] = $data;
$modal = Permohonan::find($id); // Update the status of the related permohonan to 'spk'
$modal->update($data); $permohonan = Permohonan::find($id);
//
if ($permohonan) {
$data['status_bayar'] = 'sudah_bayar';
if($permohonan->jenis_penilaian_id == 2) {
$data['status'] = 'spk';
}
$permohonan->update($data);
if($permohonan->jenis_penilaian_id == 2) {
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => 'spk',
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
}
}
$output['status'] = 'success'; $output['status'] = 'success';
$output['message'] = ['Otorisasi' . $modal->nomor_registrasi . 'berhasil di lakukan']; $output['message'] = ['Otorisasi' . $permohonan->nomor_registrasi . 'berhasil di lakukan'];
} catch (Exception $e) { } catch (Exception $e) {
$output['status'] = 'error'; $output['status'] = 'error';
$output['message'] = ['Otorisasi gagal di lakukan.']; $output['message'] = ['Otorisasi gagal di lakukan.'];

View File

@@ -550,7 +550,7 @@ class PenilaianController extends Controller
$filteredRecords = $query->count(); $filteredRecords = $query->count();
// Ambil data dengan relasi // Ambil data dengan relasi
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'approveSo'])->get(); $data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'approveSo', 'approveEo', 'approveDd'])->get();
// Hitung jumlah halaman // Hitung jumlah halaman

View File

@@ -67,24 +67,6 @@
$persetujuanPenawaran->save(); $persetujuanPenawaran->save();
// Update the status of the related permohonan to 'spk'
$permohonan = Permohonan::find(request()->get('permohonan_id'));
if ($permohonan) {
$permohonan->status_bayar = request()->get('status_bayar');
$permohonan->status = 'noc';
$permohonan->save();
// andy add, update status penawaran.status='spk'
// $penawaran = PenawaranTender::where('nomor_registrasi',$permohonan->nomor_registrasi)->first();
PenawaranTender::where('nomor_registrasi', $permohonan->nomor_registrasi)->update([
'status' => 'noc',
'updated_by' => Auth::id(),
'updated_at' => now(),
]);
// andy add, update status penawaran.status='spk'
}
return redirect() return redirect()
->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.'); ->route('persetujuan-penawaran.index')->with('success', 'Persetujuan Penawaran berhasil disimpan.');
} }

View File

@@ -46,12 +46,11 @@
} }
// Retrieve data from the database // Retrieve data from the database
$query = PenawaranTender::with(['permohonan', 'tujuanPenilaianKjpp'])->whereHas( $query =PenawaranTender::query()
'permohonan', ->select('penawaran.*', 'tujuan_penilaian_kjpp.name as tujuan_penilaian_kjpp_name')
function ($q) { ->leftJoin('tujuan_penilaian_kjpp', 'tujuan_penilaian_kjpp.id','=','penawaran.tujuan_penilaian_kjpp_id')
$q->where('status', '=', 'spk'); ->where('penawaran.status','=','spk')
}, ->withCount('penawarandetails');
)->withCount('penawarandetails');
// Apply search filter if provided // Apply search filter if provided
if ($request->has('search') && !empty($request->get('search'))) { if ($request->has('search') && !empty($request->get('search'))) {

View File

@@ -161,6 +161,10 @@
return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi'); return $this->belongsTo(Penilaian::class, 'nomor_registrasi', 'nomor_registrasi');
} }
public function penilai(){
return $this->belongsTo(Penilai::class, 'id', 'permohonan_id');
}
public function penawaranTender() public function penawaranTender()
{ {
return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi'); return $this->belongsTo(PenawaranTender::class, 'nomor_registrasi', 'nomor_registrasi');

View File

@@ -0,0 +1,28 @@
<?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::table('permohonan', function (Blueprint $table) {
$table->string('nilai_liquidasi')->nullable()->after('nilai_plafond_id');
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn('nilai_liquidasi');
});
}
};

View File

@@ -14,7 +14,7 @@
"menu": { "menu": {
"otorisator": [ "otorisator": [
{ {
"title": "Permohonan", "title": "Otorisasi Permohonan",
"path": "authorization", "path": "authorization",
"icon": "ki-filled ki-security-user text-lg text-info", "icon": "ki-filled ki-security-user text-lg text-info",
"classes": "", "classes": "",
@@ -25,6 +25,19 @@
"pemohon-eo" "pemohon-eo"
] ]
}, },
{
"title": "Otorisasi Pembatalan Permohonan",
"path": "otorisator.pembatalan",
"icon": "ki-filled ki-file-deleted text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"pemohon-eo"
]
},
{ {
"title": "Otorisasi Penawaran", "title": "Otorisasi Penawaran",
"path": "otorisasitender.penawaran", "path": "otorisasitender.penawaran",
@@ -40,7 +53,7 @@
] ]
}, },
{ {
"title": "Pembayaran", "title": "Otorisasi Pembayaran",
"path": "pembayaran.approval", "path": "pembayaran.approval",
"icon": "ki-filled ki-ensure text-lg text-info", "icon": "ki-filled ki-ensure text-lg text-info",
"classes": "", "classes": "",
@@ -49,12 +62,11 @@
"roles": [ "roles": [
"administrator", "administrator",
"admin", "admin",
"EO Appraisal", "pemohon-eo"
"DD Appraisal"
] ]
}, },
{ {
"title": "Pelaporan", "title": "Otorisasi Pelaporan",
"path": "otorisator.pelaporan", "path": "otorisator.pelaporan",
"icon": "ki-filled ki-filter-tablet text-lg text-info", "icon": "ki-filled ki-filter-tablet text-lg text-info",
"classes": "", "classes": "",
@@ -68,21 +80,7 @@
] ]
}, },
{ {
"title": "Pembatalan", "title": "Otorisasi SLA",
"path": "otorisator.pembatalan",
"icon": "ki-filled ki-file-deleted text-lg text-info",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"senior-officer",
"EO Appraisal",
"DD Appraisal"
]
},
{
"title": "SLA",
"path": "otorisator.sla", "path": "otorisator.sla",
"icon": "ki-filled ki-calendar-tick text-lg text-info", "icon": "ki-filled ki-calendar-tick text-lg text-info",
"classes": "", "classes": "",
@@ -522,17 +520,6 @@
"admin" "admin"
] ]
}, },
{
"title": "SLA",
"path": "basicdata.sla",
"classes": "",
"attributes": [],
"permission": "",
"roles": [
"administrator",
"admin"
]
},
{ {
"title": "Bentuk", "title": "Bentuk",
"path": "basicdata.bentuk-tanah", "path": "basicdata.bentuk-tanah",

View File

@@ -94,7 +94,7 @@
<div class="card-body"> <div class="card-body">
<div class="scrollable-x-auto"> <div class="scrollable-x-auto">
<table <table
class="table table-auto align-middle text-gray-700 font-medium text-sm my-4" class="table table-auto align-middle text-gray-700 font-medium text-sm mb-4"
data-datatable-table="true"> data-datatable-table="true">
<thead> <thead>
<tr> <tr>

View File

@@ -186,18 +186,32 @@
actions: { actions: {
title: 'Actions', title: 'Actions',
render: (item, data) => { render: (item, data) => {
const inspeksiId = data.debiture?.documents[0]?.inspeksi[0].id || '-'; const inspeksiId = data.debiture?.documents[0]?.inspeksi[0]?.id || '-';
const dokumenID = data.debiture?.documents[0]?.id || '-'; const dokumenID = data.debiture?.documents[0]?.id || '-';
const jenisJaminanID = data.debiture?.documents[0]?.jenis_jaminan_id || '-'; const jenisJaminanID = data.debiture?.documents[0]?.jenis_jaminan_id || '-';
return ` let laporanButton = '';
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0}}" class="btn btn-sm btn-success"> const resumeButton = `
Resume <a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-success">
</a> Resume
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" </a>`;
class="btn btn-sm btn-dark">
Laporan if(data.nilai_liquidasi==null) {
</a> laporanButton = `
`; <a href="laporan/${data.id}" class="btn btn-sm btn-dark">
Input NL
</a>`;
}
console.log(data.nilai_liquidasi);
if(data.status_bayar=="sudah_bayar" && data.nilai_liquidasi >0) {
laporanButton = `
<a href="{{ route('penilai.print-out') }}?permohonanId=${data.id}&documentId=${dokumenID}&inspeksiId=${inspeksiId}&jaminanId=${jenisJaminanID}&statusLpj=0" class="btn btn-sm btn-dark">
Laporan
</a>`;
}
return `${resumeButton} ${laporanButton}`;
}, },
} }
}, },

View File

@@ -0,0 +1,114 @@
@extends('layouts.main')
@section('content')
<div class="w-full grid gap-5 lg:gap-7.5 mx-auto">
<div class="card border border-agi-100 pb-2.5">
<div class="card-header bg-agi-50" id="basic_settings">
<div class="card-title flex flex-row gap-1.5">
Input Nilai Liquidasi (LPJ)
</div>
<div class="flex items-center gap-2">
<a href="{{ route('pembayaran.index') }}" class="btn btn-xs btn-info"><i class="ki-filled ki-exit-left"></i> Back</a>
</div>
</div>
<div class="card-body">
@php
$lpj = json_decode($permohonan->penilai->lpj);
@endphp
<form action="{{ route('laporan.store') }}" method="POST" class="grid gap-5" enctype="multipart/form-data">
@csrf
<input type="hidden" name="permohonan_id" value="{{ $permohonan->id }}">
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nomor Registrasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="nomor_registrasi" id="nomor_registrasi" class="input w-full @error('nomor_registrasi') border-danger bg-danger-light @enderror" value="{{ old('nomor_registrasi', $permohonan->nomor_registrasi ?? '') }}" placeholder="Nomor Registrasi">
@error('nomor_registrasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Debitur
</label>
<div class="flex flex-wrap items-baseline w-full">
<input readonly type="text" name="debitur" id="debitur" class="input w-full @error('debitur') border-danger bg-danger-light @enderror" value="{{ old('debitur', $permohonan->debiture->name ?? '') }}" placeholder="Debitur">
@error('debitur')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Total Nilai Pasar Wajar
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="total_niilai_pasar_wajar" id="total_niilai_pasar_wajar" class="currency input w-full @error('total_niilai_pasar_wajar') border-danger bg-danger-light @enderror" value="{{ old('total_niilai_pasar_wajar', $lpj->total_nilai_pasar_wajar ?? '') }}" placeholder="Masukkan Nilai Pasar Wajar">
@error('total_niilai_pasar_wajar')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Liquidasi (%)
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="liquidasi" max="100" min="0" id="liquidasi" class="persen input w-full @error('liquidasi') border-danger bg-danger-light @enderror" value="{{ old('liquidasi', $lpj->liquidasi ?? '') }}" placeholder="Masukkan Persentase Liquidasi">
@error('liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex items-baseline flex-wrap lg:flex-nowrap gap-2.5">
<label class="form-label max-w-56">
Nilai Liquidasi
</label>
<div class="flex flex-wrap items-baseline w-full">
<input type="text" name="nilai_liquidasi" id="nilai_liquidasi" class="currency input w-full @error('nilai_liquidasi') border-danger bg-danger-light @enderror" placeholder="Nilai Liquidasi">
@error('nilai_liquidasi')
<em class="alert text-danger text-sm">{{ $message }}</em>
@enderror
</div>
</div>
<div class="flex justify-end">
<button type="submit" class="btn btn-primary">
Proses
</button>
</div>
</form>
</div>
</div>
</div>
@endsection
@push('scripts')
<script>
function calculateNilaiLiquidasi() {
const totalNilaiPasarWajar = parseFloat(document.getElementById('total_niilai_pasar_wajar').value.replace(/\./g, '').replace(',', '.'));
const liquidasiPercentage = parseFloat(document.getElementById('liquidasi').value);
const nilaiLiquidasiInput = document.getElementById('nilai_liquidasi');
if (!isNaN(totalNilaiPasarWajar) && !isNaN(liquidasiPercentage)) {
const nilaiLiquidasi = totalNilaiPasarWajar * (liquidasiPercentage / 100);
nilaiLiquidasiInput.value = nilaiLiquidasi.toLocaleString('id-ID', {maximumFractionDigits: 0});
} else {
nilaiLiquidasiInput.value = '';
}
}
// Calculate initially in case values are pre-filled
document.addEventListener('DOMContentLoaded', calculateNilaiLiquidasi);
// Ensure the calculation happens when Total Nilai Pasar Wajar changes as well
document.getElementById('liquidasi').addEventListener('change', calculateNilaiLiquidasi);
</script>
@endpush

View File

@@ -67,12 +67,8 @@
<span class="sort"> <span class="sort-label"> Nominal bayar </span> <span class="sort"> <span class="sort-label"> Nominal bayar </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="bukti_ksl"> <th class="min-w-[150px]" data-datatable-column="bukti_bayar">
<span class="sort"> <span class="sort-label"> Bukti KSL </span> <span class="sort"> <span class="sort-label"> Bukti Bayar </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="tanggal_penyelesaian">
<span class="sort"> <span class="sort-label"> Tanggal Penyelesaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="approval_by"> <th class="min-w-[150px]" data-datatable-column="approval_by">
@@ -80,6 +76,11 @@
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="approve_keterangan_bayar">
<span class="sort"> <span class="sort-label"> Keterangan </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th> <th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
</tr> </tr>
</thead> </thead>
@@ -190,8 +191,11 @@
render: (item, data) => { render: (item, data) => {
if (data.permohonan) { if (data.permohonan) {
return `${data.permohonan.nomor_registrasi}`; return `${data.permohonan.nomor_registrasi}`;
} else if(data.penawaran) {
return `${data.penawaran.permohonan.nomor_registrasi}`;
} }
return `${data.penawaran.permohonan.nomor_registrasi}`; return "";
}, },
}, },
tanggal_permohonan: { tanggal_permohonan: {
@@ -199,8 +203,10 @@
render: (item, data) => { render: (item, data) => {
if (data.permohonan) { if (data.permohonan) {
return `${data.permohonan.tanggal_permohonan}`; return `${data.permohonan.tanggal_permohonan}`;
} else if(data.penawaran) {
return `${data.penawaran.permohonan.tanggal_permohonan}`;
} }
return `${data.penawaran.permohonan.tanggal_permohonan}`; return "";
}, },
}, },
user_id: { user_id: {
@@ -209,7 +215,11 @@
if (data.permohonan) { if (data.permohonan) {
return `${data.permohonan.user.name}`; return `${data.permohonan.user.name}`;
} }
return `${data.penawaran.permohonan.user.name}`; else if(data.penawaran) {
return `${data.penawaran.permohonan.user.name}`;
}
return "";
}, },
}, },
branch_id: { branch_id: {
@@ -218,7 +228,11 @@
if (data.permohonan) { if (data.permohonan) {
return `${data.permohonan.branch.name}`; return `${data.permohonan.branch.name}`;
} }
return `${data.penawaran.permohonan.branch.name}`; else if(data.penawaran) {
return `${data.penawaran.permohonan.branch.name}`;
}
return "";
}, },
}, },
debitur_id: { debitur_id: {
@@ -227,7 +241,11 @@
if (data.permohonan) { if (data.permohonan) {
return `${data.permohonan.debiture.name}`; return `${data.permohonan.debiture.name}`;
} }
return `${data.penawaran.permohonan.debiture.name}`; else if(data.penawaran) {
return `${data.penawaran.permohonan.debiture.name}`;
}
return "";
}, },
}, },
status_bayar: { status_bayar: {
@@ -235,17 +253,22 @@
render: (item, data) => { render: (item, data) => {
if(data.permohonan){ if(data.permohonan){
var permohonan = data.permohonan; var permohonan = data.permohonan;
} else { } else if(data.penawaran){
var permohonan = data.penawaran.permohonan; var permohonan = data.penawaran.permohonan;
} }
const status = permohonan.status_bayar.replace(/_/g, if(permohonan) {
' ');
const statusClass = permohonan.status_bayar === 'belum_bayar' ? 'text-red-600' : const status = permohonan.status_bayar.replace(/_/g,
'text-green-600'; ' ');
return `<span class="text-md font-bold ${statusClass} uppercase"> const statusClass = permohonan.status_bayar === 'belum_bayar' ? 'text-red-600' :
'text-green-600';
return `<span class="text-md font-bold ${statusClass} uppercase">
${status} ${status}
</span>`; </span>`;
}
return "-";
}, },
}, },
tanggal_setor: { tanggal_setor: {
@@ -260,11 +283,11 @@
return `${window.formatRupiah(data.nominal_bayar)}`; return `${window.formatRupiah(data.nominal_bayar)}`;
}, },
}, },
bukti_ksl: { bukti_bayar:{
title: 'Bukti KSL', title: 'Bukti Bayar',
render: (item, data) => { render: (item, data) => {
if (data.bukti_ksl) { if (data.bukti_bayar) {
return `<a href="storage/${data.bukti_ksl}" download="storage/${data.bukti_ksl}" target="_blank" class="badge badge-sm badge-outline"> return `<a href="storage/${data.bukti_bayar}" download="storage/${data.bukti_bayar}" target="_blank" class="badge badge-sm badge-outline">
Download <i class="ki-filled ki-cloud-download"></i> Download <i class="ki-filled ki-cloud-download"></i>
</a>`; </a>`;
} else { } else {
@@ -272,47 +295,62 @@
} }
}, },
}, },
tanggal_penyelesaian: {
title: 'Tanggal Penyelesaian',
render: (item, data) => {
if(data.status==1) {
return `${window.formatTanggalIndonesia(data.updated_at)}`;
}
return "-";
},
},
approve_bayar_by: { approve_bayar_by: {
title: 'Status Approve', title: 'Status Approve',
render: (item, data) => { render: (item, data) => {
if(data.permohonan){ if(data.permohonan){
var permohonan = data.permohonan; var permohonan = data.permohonan;
} else { } else if(data.penawaran){
var permohonan = data.penawaran.permohonan; var permohonan = data.penawaran.permohonan;
} }
if(permohonan.approve_bayar_by) { if(permohonan) {
return `${permohonan.approve_bayar.name}`; if(permohonan.approve_bayar) {
return `${permohonan.approve_bayar.name}`;
}
return "";
} }
return "Menunggu Approval"; return "Menunggu Approval";
}, },
}, },
approve_keterangan_bayar: {
title: 'Status Approve',
render: (item, data) => {
if(data.permohonan){
var permohonan = data.permohonan;
} else if(data.penawaran){
var permohonan = data.penawaran.permohonan;
}
if(permohonan) {
return `${permohonan.approve_keterangan_bayar}`;
}
return "";
},
},
actions: { actions: {
title: 'Status', title: 'Status',
render: (item, data) => { render: (item, data) => {
var iconPembayaranOtorisator = ''; if(data.permohonan){
if (!data.approve_bayar_by) { var permohonan = data.permohonan;
iconPembayaranOtorisator = `<a class="btn btn-sm btn-icon btn-clear btn-primary " onclick="pembayaranOtorisator(${data.id})"> } else if(data.penawaran){
<i class="ki-filled ki-double-check"></i> var permohonan = data.penawaran.permohonan;
</a>`;
} }
return `<div class="flex flex-nowrap justify-center"> if(permohonan) {
<a class="btn btn-sm btn-icon btn-clear btn-warning " href="#"> var iconPembayaranOtorisator = '';
<i class="ki-outline ki-eye"></i> if (!permohonan.approve_bayar_by) {
</a>` iconPembayaranOtorisator = `<a class="btn btn-sm btn-icon btn-clear btn-primary " onclick="pembayaranOtorisator(${permohonan.id})">
+ iconPembayaranOtorisator + ` <i class="ki-filled ki-double-check"></i>
</div>`; </a>`;
}
return `<div class="flex flex-nowrap justify-center">` + iconPembayaranOtorisator + `</div>`;
}
return "";
}, },
} }

View File

@@ -57,6 +57,10 @@
<span class="sort"> <span class="sort-label"> Tujuan Penilaian </span> <span class="sort"> <span class="sort-label"> Tujuan Penilaian </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
</th> </th>
<th class="min-w-[150px]" data-datatable-column="jenis_penilaian_id">
<span class="sort"> <span class="sort-label"> Jenis Penilaian </span>
<span class="sort-icon"> </span> </span>
</th>
<th class="min-w-[150px]" data-datatable-column="status"> <th class="min-w-[150px]" data-datatable-column="status">
<span class="sort"> <span class="sort-label"> Status </span> <span class="sort"> <span class="sort-label"> Status </span>
<span class="sort-icon"> </span> </span> <span class="sort-icon"> </span> </span>
@@ -135,6 +139,12 @@
return `${data.tujuan_penilaian.name}`; return `${data.tujuan_penilaian.name}`;
}, },
}, },
jenis_penilaian_id: {
title: 'Jenis Penilaian',
render: (item, data) => {
return `${data.jenis_penilaian.name}`;
},
},
status: { status: {
title: 'Status' title: 'Status'
}, },

View File

@@ -259,7 +259,7 @@
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>
</a> </a>
`; `;
} else if ((isAdmin || userRoles.includes('DD Appraisal')) && data.approval_eo && !data.approval_dd) { } else if ((isAdmin || userRoles.includes('DD Appraisal')) && data.approval_eo && !data.approval_dd && [1, 4].includes(data.nilai_plafond_id)) {
buttons += ` buttons += `
<a class="btn btn-sm btn-icon btn-clear btn-primary" onclick="otorisatorData(${data.id})"> <a class="btn btn-sm btn-icon btn-clear btn-primary" onclick="otorisatorData(${data.id})">
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>

View File

@@ -85,16 +85,20 @@
<td>{{ getUser($permohonan->approval_so)->name ?? 'N/A' }}</td> <td>{{ getUser($permohonan->approval_so)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_so_at ? formatTanggalIndonesia($permohonan->approval_so_at,1) : 'N/A' }}</td> <td>{{ $permohonan->approval_so_at ? formatTanggalIndonesia($permohonan->approval_so_at,1) : 'N/A' }}</td>
</tr> </tr>
@if($permohonan->approval_eo!=null)
<tr> <tr>
<td>Disetujui Oleh (EO)</td> <td>Disetujui Oleh (EO)</td>
<td>{{ getUser($permohonan->approval_eo)->name ?? 'N/A' }}</td> <td>{{ getUser($permohonan->approval_eo)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_eo_at ? formatTanggalIndonesia($permohonan->approval_eo_at,1) : 'N/A' }}</td> <td>{{ $permohonan->approval_eo_at ? formatTanggalIndonesia($permohonan->approval_eo_at,1) : 'N/A' }}</td>
</tr> </tr>
@endif
@if(in_array($permohonan->nilai_plafond_id,[1,4]) && $permohonan->approval_dd!=null)
<tr> <tr>
<td>Disetujui Oleh (DD)</td> <td>Disetujui Oleh (DD)</td>
<td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td> <td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_dd_at ? formatTanggalIndonesia($permohonan->approval_dd_at,1) : 'N/A' }}</td> <td>{{ $permohonan->approval_dd_at ? formatTanggalIndonesia($permohonan->approval_dd_at,1) : 'N/A' }}</td>
</tr> </tr>
@endif
</tbody> </tbody>
</table> </table>
</div> </div>
@@ -137,7 +141,7 @@
</button> </button>
@endif @endif
@if(Auth::user()->hasAnyRole(['administrator','DD Appraisal']) && $permohonan->approval_eo && $permohonan->approval_dd==null) @if(Auth::user()->hasAnyRole(['administrator','DD Appraisal']) && $permohonan->approval_eo && $permohonan->approval_dd==null && in_array($permohonan->nilai_plafond_id,[1,4]))
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary"> <button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
<i class="ki-filled ki-double-check"></i> <i class="ki-filled ki-double-check"></i>
Otorisator {{ $header ?? '' }} Otorisator {{ $header ?? '' }}

View File

@@ -125,7 +125,11 @@
tujuan_penilaian_kjpp_name: { tujuan_penilaian_kjpp_name: {
title: 'Tujuan Penilaian', title: 'Tujuan Penilaian',
render: (item, data) => { render: (item, data) => {
return `${data.tujuan_penilaian_kjpp.name || ''}`; if(data.tujuan_penilaian_kjpp) {
return `${data.tujuan_penilaian_kjpp.name || ''}`;
}
return "-";
}, },
}, },
nama_kjpp_sebelumnya: { nama_kjpp_sebelumnya: {

View File

@@ -405,19 +405,19 @@
<tr> <tr>
<td class="px-4 py-2">Harga</td> <td class="px-4 py-2">Harga</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="harga" class="input currency-format" <input type="text" name="harga" class="input currency"
value="{{ $inspectionData['asset']['harga'] ?? '' }}"> value="{{ $inspectionData['asset']['harga'] ?? '' }}">
</td> </td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="harga_pembanding[]" <input type="text" name="harga_pembanding[]"
class="input currency-format"> class="input currency">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="px-4 py-2">Diskon</td> <td class="px-4 py-2">Diskon</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<div class="input"> <div class="input">
<input type="text" name="diskon" class=" currency-format" <input type="text" name="diskon" class=" currency"
value="{{ $inspectionData['asset']['diskon'] ?? '' }}"> value="{{ $inspectionData['asset']['diskon'] ?? '' }}">
<span class="btn btn-icon"> <span class="btn btn-icon">
<i class="ki-outline ki-percentage"></i> <i class="ki-outline ki-percentage"></i>
@@ -440,23 +440,23 @@
<tr style="display: none;"> <tr style="display: none;">
<td class="px-4 py-2">Total</td> <td class="px-4 py-2">Total</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="total" class="input currency-format" <input type="text" name="total" class="input currency"
value="{{ $inspectionData['asset']['total'] ?? '' }}"> value="{{ $inspectionData['asset']['total'] ?? '' }}">
</td> </td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="total_pembanding[]" <input type="text" name="total_pembanding[]"
class="input currency-format"> class="input currency">
</td> </td>
</tr> </tr>
<tr> <tr>
<td class="px-4 py-2">Harga Setelah Diskon</td> <td class="px-4 py-2">Harga Setelah Diskon</td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="harga_diskon" class="input currency-format" readonly <input type="text" name="harga_diskon" class="input currency" readonly
value="{{ $inspectionData['asset']['harga_diskon'] ?? '' }}"> value="{{ $inspectionData['asset']['harga_diskon'] ?? '' }}">
</td> </td>
<td class="px-4 py-2"> <td class="px-4 py-2">
<input type="text" name="harga_diskon_pembanding[]" readonly <input type="text" name="harga_diskon_pembanding[]" readonly
class="input currency-format"> class="input currency">
</td> </td>
</tr> </tr>
</tbody> </tbody>