Enhanced data fetching to include 'permohonan' and 'debiture' relations. Improved error messaging and validations in multiple methods, ensuring more robust data processing. Removed unnecessary whitespace for code clarity.
195 lines
8.8 KiB
PHP
195 lines
8.8 KiB
PHP
@extends('layouts.main')
|
|
|
|
@section('breadcrumbs')
|
|
{{ Breadcrumbs::render('tender.prosespenawaran') }}
|
|
@endsection
|
|
|
|
@section('content')
|
|
<div class="grid">
|
|
<div class="card card-grid min-w-full" data-datatable="false" data-datatable-page-size="5"
|
|
data-datatable-state-save="false" id="prosespenawaran-table"
|
|
data-api-url="{{ route('tender.prosespenawaran.datatables') }}">
|
|
<div class="card-header py-5 flex-wrap">
|
|
<h3 class="card-title">
|
|
Daftar Proses Penawaran
|
|
</h3>
|
|
<div class="flex flex-wrap gap-2 lg:gap-5">
|
|
<div class="flex">
|
|
<label class="input input-sm"> <i class="ki-filled ki-magnifier"> </i>
|
|
<input placeholder="Search Proses penawaran" id="search" type="text" value="">
|
|
</label>
|
|
</div>
|
|
<div class="flex flex-wrap gap-2.5">
|
|
<div class="h-[24px] border border-r-gray-200"></div>
|
|
<a class="btn btn-sm btn-light" href="#"> Export to Excel </a>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="card-body">
|
|
<div class="scrollable-x-auto">
|
|
<table class="table table-auto table-border align-middle text-gray-700 font-medium text-sm"
|
|
data-datatable-table="true">
|
|
<thead>
|
|
<tr>
|
|
<th class="w-14">
|
|
<input class="checkbox checkbox-sm" data-datatable-check="true" type="checkbox" />
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="nomor_registrasi">
|
|
<span class="sort"> <span class="sort-label"> Nomor Registrasi </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="debiture">
|
|
<span class="sort"> <span class="sort-label"> Nama Debitur </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="start_date">
|
|
<span class="sort"> <span class="sort-label"> Tanggal Penawaran </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="tujuan_penilaian_kjpp_id">
|
|
<span class="sort"> <span class="sort-label"> Tujuan Penilaian KJPP </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="penawarandetails_count">
|
|
<span class="sort"> <span class="sort-label"> Total KJPP </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[150px]" data-datatable-column="status">
|
|
<span class="sort"> <span class="sort-label"> Status </span>
|
|
<span class="sort-icon"> </span> </span>
|
|
</th>
|
|
<th class="min-w-[50px] text-center" data-datatable-column="actions">Action</th>
|
|
</tr>
|
|
</thead>
|
|
</table>
|
|
</div>
|
|
<div
|
|
class="card-footer justify-center md:justify-between flex-col md:flex-row gap-3 text-gray-600 text-2sm font-medium">
|
|
<div class="flex items-center gap-2">
|
|
Show
|
|
<select class="select select-sm w-16" data-datatable-size="true" name="perpage"> </select> per page
|
|
</div>
|
|
<div class="flex items-center gap-4">
|
|
<span data-datatable-info="true"> </span>
|
|
<div class="pagination" data-datatable-pagination="true">
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
@endsection
|
|
|
|
@push('scripts')
|
|
<script type="text/javascript">
|
|
function formatDate(date) {
|
|
const day = date.getDate().toString().padStart(2, '0');
|
|
const month = (date.getMonth() + 1).toString().padStart(2, '0');
|
|
// Months are 0-indexed
|
|
const year = date.getFullYear();
|
|
|
|
return `${day} ${getIndonesianMonth(month)} ${year}`;
|
|
}
|
|
|
|
function getIndonesianMonth(month) {
|
|
const months = ['Januari', 'Februari', 'Maret', 'April', 'Mei', 'Juni',
|
|
'Juli', 'Agustus', 'September', 'Oktober', 'November', 'Desember'
|
|
];
|
|
return months[month -
|
|
1];
|
|
}
|
|
|
|
function capitalizeWords(str) {
|
|
return str.replace(/\b\w/g, function(char) {
|
|
return char.toUpperCase();
|
|
});
|
|
}
|
|
|
|
function showPenawaranData(regId) {
|
|
var url = "{{ url('tender/prosespenawaran') }}/" + regId;
|
|
$(location).attr('href', url);
|
|
}
|
|
</script>
|
|
<script type="module">
|
|
const element = document.querySelector('#prosespenawaran-table');
|
|
const searchInput = document.getElementById('search');
|
|
|
|
const apiUrl = element.getAttribute('data-api-url');
|
|
const dataTableOptions = {
|
|
apiEndpoint: apiUrl,
|
|
pageSize: 5,
|
|
columns: {
|
|
select: {
|
|
render: (item, data, context) => {
|
|
const checkbox = document.createElement('input');
|
|
checkbox.className = 'checkbox checkbox-sm';
|
|
checkbox.type = 'checkbox';
|
|
checkbox.value = data.id.toString();
|
|
checkbox.setAttribute('data-datatable-row-check', 'true');
|
|
return checkbox.outerHTML.trim();
|
|
},
|
|
},
|
|
'nomor_registrasi': {
|
|
title: 'Nomor Registrasi',
|
|
},
|
|
debiture: {
|
|
title: 'Nama Debitur',
|
|
render: (item, data) => {
|
|
if(data.permohonan) {
|
|
return `${data.permohonan.debiture.name}`;
|
|
}
|
|
return "-";
|
|
}
|
|
|
|
|
|
},
|
|
start_date: {
|
|
title: 'Tanggal Penawaran',
|
|
render: (item, data) => {
|
|
return `${formatDate(new Date(data.start_date))} - ${formatDate(new Date(data.end_date))}`
|
|
}
|
|
},
|
|
tujuan_penilaian_k_j_p_p: {
|
|
title: 'Tujuan Penilaian KJPP',
|
|
render: (item, data) => {
|
|
return data.tujuan_penilaian_k_j_p_p[0].name
|
|
}
|
|
},
|
|
penawarandetails_count: {
|
|
title: 'Total KJPP',
|
|
createdCell(cell) {
|
|
cell.classList.add('text-center');
|
|
},
|
|
},
|
|
status: {
|
|
title: 'Status',
|
|
render: (item, data) => {
|
|
return capitalizeWords(data.status)
|
|
}
|
|
},
|
|
actions: {
|
|
title: 'Status',
|
|
render: (item, data) => {
|
|
return `<div class="flex flex-nowrap justify-center">
|
|
<a onclick="showPenawaranData(${data.id})" class="btn btn-sm btn-icon btn-clear btn-primary" title="Detail">
|
|
<i class="ki-outline ki-eye"></i>
|
|
</a>
|
|
<a class="btn btn-sm btn-icon btn-clear btn-info" title="Proses Penawaran" href="tender/prosespenawaran/${data.id}/edit">
|
|
<i class="ki-outline ki-notepad-edit"></i>
|
|
</a>
|
|
</div>`;
|
|
},
|
|
}
|
|
},
|
|
};
|
|
|
|
let dataTable = new KTDataTable(element, dataTableOptions);
|
|
// Custom search functionality
|
|
searchInput.addEventListener('input', function() {
|
|
const searchValue = this.value.trim();
|
|
dataTable.search(searchValue, true);
|
|
|
|
});
|
|
</script>
|
|
@endpush
|