done -> testing besok
This commit is contained in:
parent
fb656e6aad
commit
3739cefbdd
@ -203,8 +203,8 @@ class DashboardController extends Controller
|
|||||||
|
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
$sheet->setCellValue('A1', "List Dokumen");
|
$sheet->setCellValue('A1', "List Dokumen Unit");
|
||||||
$sheet->mergeCells('A1:F1');
|
$sheet->mergeCells('A1:I1');
|
||||||
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
||||||
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
$headers = [
|
$headers = [
|
||||||
@ -213,11 +213,13 @@ class DashboardController extends Controller
|
|||||||
'Kategori',
|
'Kategori',
|
||||||
'Unit',
|
'Unit',
|
||||||
'Sub Unit',
|
'Sub Unit',
|
||||||
|
'Tanggal Terbit',
|
||||||
|
'Tanggal Expired',
|
||||||
'Tanggal Upload',
|
'Tanggal Upload',
|
||||||
'Pengunggah'
|
'Pengunggah'
|
||||||
];
|
];
|
||||||
$sheet->fromArray($headers, null, 'A4');
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
$sheet->getStyle('A4:G4')->applyFromArray([
|
$sheet->getStyle('A4:I4')->applyFromArray([
|
||||||
'font' => ['bold' => true],
|
'font' => ['bold' => true],
|
||||||
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
'borders' => [
|
'borders' => [
|
||||||
@ -226,9 +228,9 @@ class DashboardController extends Controller
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
]);
|
]);
|
||||||
$sheet->getStyle('A4:G4')->getFont()->setBold(true);
|
$sheet->getStyle('A4:I4')->getFont()->setBold(true);
|
||||||
$sheet->getStyle('A4:G4')->getAlignment()->setHorizontal('center');
|
$sheet->getStyle('A4:I4')->getAlignment()->setHorizontal('center');
|
||||||
$sheet->getStyle('A4:G4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
$sheet->getStyle('A4:I4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
$rowIdx = 5;
|
$rowIdx = 5;
|
||||||
foreach ($rows as $item) {
|
foreach ($rows as $item) {
|
||||||
$parts = array_values(array_filter(explode('/', (string) $item->file)));
|
$parts = array_values(array_filter(explode('/', (string) $item->file)));
|
||||||
@ -242,6 +244,8 @@ class DashboardController extends Controller
|
|||||||
$kategoriName,
|
$kategoriName,
|
||||||
$unitName,
|
$unitName,
|
||||||
$subUnitName,
|
$subUnitName,
|
||||||
|
$item->tanggal_terbit ? Carbon::parse($item->tanggal_terbit)->format('d/m/Y') : '-',
|
||||||
|
$item->tgl_expired ? Carbon::parse($item->tgl_expired)->format('d/m/Y') : '-',
|
||||||
$item->entry_at ? Carbon::parse($item->entry_at)->format('d/m/Y') : '-',
|
$item->entry_at ? Carbon::parse($item->entry_at)->format('d/m/Y') : '-',
|
||||||
$item->pegawai_nama_entry ?? '-'
|
$item->pegawai_nama_entry ?? '-'
|
||||||
], null, "A{$rowIdx}");
|
], null, "A{$rowIdx}");
|
||||||
@ -287,7 +291,7 @@ class DashboardController extends Controller
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach(range('A', 'G') as $col){
|
foreach(range('A', 'I') as $col){
|
||||||
$sheet->getColumnDimension($col)->setAutoSize(true);
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
}
|
}
|
||||||
$fileName = 'data-unit-' . now()->format('Ymd-His') . '.xlsx';
|
$fileName = 'data-unit-' . now()->format('Ymd-His') . '.xlsx';
|
||||||
@ -515,6 +519,46 @@ class DashboardController extends Controller
|
|||||||
], 200);
|
], 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function OptionUnitKerjaByMapping(){
|
||||||
|
$q = request()->get('q');
|
||||||
|
$pegawaiId = auth()->user()?->dataUser?->id;
|
||||||
|
$mapping = MappingUnitKerjaPegawai::where('statusenabled', true)
|
||||||
|
->where('objectpegawaifk', $pegawaiId)
|
||||||
|
->get(['objectunitkerjapegawaifk', 'objectsubunitkerjapegawaifk']);
|
||||||
|
|
||||||
|
$unitIds = $mapping->pluck('objectunitkerjapegawaifk')->filter()->unique()->values();
|
||||||
|
$subIds = $mapping->pluck('objectsubunitkerjapegawaifk')->filter()->unique()->values();
|
||||||
|
|
||||||
|
$units = UnitKerja::where('statusenabled', true)
|
||||||
|
->when($unitIds->isNotEmpty(), fn($q2) => $q2->whereIn('id', $unitIds))
|
||||||
|
->when($q, fn($q2) => $q2->where('name', 'ILIKE', '%' . $q . '%'))
|
||||||
|
->select('id', 'name')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
$subUnits = $subIds->isNotEmpty()
|
||||||
|
? SubUnitKerja::where('statusenabled', true)
|
||||||
|
->whereIn('id', $subIds)
|
||||||
|
->get(['id', 'name', 'objectunitkerjapegawaifk'])
|
||||||
|
: collect();
|
||||||
|
|
||||||
|
$subMap = $subUnits->groupBy('objectunitkerjapegawaifk')->map(function($items){
|
||||||
|
return $items->map(fn($s) => ['id' => $s->id, 'name' => $s->name])->values();
|
||||||
|
});
|
||||||
|
|
||||||
|
$data = $units->map(function($u) use ($subMap){
|
||||||
|
return [
|
||||||
|
'id' => $u->id,
|
||||||
|
'name' => $u->name,
|
||||||
|
'sub_unit_kerja' => $subMap[$u->id] ?? []
|
||||||
|
];
|
||||||
|
})->values();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'data' => $data
|
||||||
|
], 200);
|
||||||
|
}
|
||||||
|
|
||||||
public function deleteFile(string $id){
|
public function deleteFile(string $id){
|
||||||
DB::connection('dbDirectory')->beginTransaction();
|
DB::connection('dbDirectory')->beginTransaction();
|
||||||
try {
|
try {
|
||||||
@ -586,6 +630,27 @@ class DashboardController extends Controller
|
|||||||
'data' => $data,
|
'data' => $data,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function optionSubUnitKerjaByMapping(string $id){
|
||||||
|
$pegawaiId = auth()->user()?->dataUser?->id;
|
||||||
|
$subIds = MappingUnitKerjaPegawai::where('statusenabled', true)
|
||||||
|
->where('objectpegawaifk', $pegawaiId)
|
||||||
|
->where('objectunitkerjapegawaifk', $id)
|
||||||
|
->pluck('objectsubunitkerjapegawaifk')
|
||||||
|
->filter()
|
||||||
|
->unique()
|
||||||
|
->values();
|
||||||
|
|
||||||
|
$data = SubUnitKerja::where('statusenabled', true)
|
||||||
|
->where('objectunitkerjapegawaifk', $id)
|
||||||
|
->when($subIds->isNotEmpty(), fn($q) => $q->whereIn('id', $subIds))
|
||||||
|
->get();
|
||||||
|
|
||||||
|
return response()->json([
|
||||||
|
'status' => true,
|
||||||
|
'data' => $data,
|
||||||
|
]);
|
||||||
|
}
|
||||||
public function getFile($id_unit_kerja, $id_sub_unit_kerja, $master_kategori_directory_id){
|
public function getFile($id_unit_kerja, $id_sub_unit_kerja, $master_kategori_directory_id){
|
||||||
$klasifikasi = request('klasifikasi');
|
$klasifikasi = request('klasifikasi');
|
||||||
$klaArray = explode(',', $klasifikasi);
|
$klaArray = explode(',', $klasifikasi);
|
||||||
@ -834,26 +899,17 @@ class DashboardController extends Controller
|
|||||||
|
|
||||||
public function downloadDataUmumExcel()
|
public function downloadDataUmumExcel()
|
||||||
{
|
{
|
||||||
$user = auth()->user()?->dataUser;
|
$rows = FileDirectory::where('statusenabled', true)
|
||||||
$akses = AksesFile::where(['pegawai_id' => $user->id, 'statusenabled' => true])->first();
|
|
||||||
$keyword = request('keyword');
|
|
||||||
|
|
||||||
$query = FileDirectory::where('statusenabled', true)
|
|
||||||
->where('status_action', 'approved')
|
->where('status_action', 'approved')
|
||||||
->when($keyword, function ($q) use ($keyword) {
|
->where('permission_file', true)
|
||||||
$q->where(function ($sub) use ($keyword) {
|
->orderBy('entry_at', 'desc')->get();
|
||||||
$sub->where('nama_dokumen', 'ILIKE', "%{$keyword}%")
|
|
||||||
->orWhere('no_dokumen', 'ILIKE', "%{$keyword}%");
|
|
||||||
});
|
|
||||||
});
|
|
||||||
if (!$akses || !$akses->all_akses) {
|
|
||||||
$query->where('permission_file', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
$rows = $query->orderBy('entry_at', 'desc')->get();
|
|
||||||
|
|
||||||
$spreadsheet = new Spreadsheet();
|
$spreadsheet = new Spreadsheet();
|
||||||
$sheet = $spreadsheet->getActiveSheet();
|
$sheet = $spreadsheet->getActiveSheet();
|
||||||
|
$sheet->setCellValue('A1', "List Dokumen Umum");
|
||||||
|
$sheet->mergeCells('A1:H1');
|
||||||
|
$sheet->getStyle('A1')->getFont()->setBold(true)->setSize(14);
|
||||||
|
$sheet->getStyle('A1')->getAlignment()->setHorizontal('center');
|
||||||
$headers = [
|
$headers = [
|
||||||
'No Dokumen',
|
'No Dokumen',
|
||||||
'Nama Dokumen',
|
'Nama Dokumen',
|
||||||
@ -861,19 +917,28 @@ class DashboardController extends Controller
|
|||||||
'Unit',
|
'Unit',
|
||||||
'Sub Unit',
|
'Sub Unit',
|
||||||
'Tanggal Terbit',
|
'Tanggal Terbit',
|
||||||
|
'Tanggal Expired',
|
||||||
'Tanggal Upload',
|
'Tanggal Upload',
|
||||||
'Pengunggah',
|
|
||||||
'Akses'
|
|
||||||
];
|
];
|
||||||
$sheet->fromArray($headers, null, 'A1');
|
$sheet->fromArray($headers, null, 'A4');
|
||||||
|
$sheet->getStyle('A4:H4')->applyFromArray([
|
||||||
$rowIdx = 2;
|
'font' => ['bold' => true],
|
||||||
|
'alignment' => ['horizontal' => \PhpOffice\PhpSpreadsheet\Style\Alignment::HORIZONTAL_CENTER],
|
||||||
|
'borders' => [
|
||||||
|
'allBorders' => [
|
||||||
|
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]);
|
||||||
|
$sheet->getStyle('A4:H4')->getFont()->setBold(true);
|
||||||
|
$sheet->getStyle('A4:H4')->getAlignment()->setHorizontal('center');
|
||||||
|
$sheet->getStyle('A4:H4')->getBorders()->getAllBorders()->setBorderStyle(\PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN);
|
||||||
|
$rowIdx = 5;
|
||||||
foreach ($rows as $item) {
|
foreach ($rows as $item) {
|
||||||
$parts = array_values(array_filter(explode('/', (string) $item->file)));
|
$parts = array_values(array_filter(explode('/', (string) $item->file)));
|
||||||
$unitName = $parts[0] ?? '-';
|
$unitName = $parts[0] ?? '-';
|
||||||
$subName = $parts[1] ?? '-';
|
$subName = $parts[1] ?? '-';
|
||||||
$kategoriName = $parts[2] ?? '-';
|
$kategoriName = $parts[2] ?? '-';
|
||||||
$aksesLabel = $item->permission_file ? 'Umum' : 'Internal Unit';
|
|
||||||
|
|
||||||
$sheet->fromArray([
|
$sheet->fromArray([
|
||||||
$item->no_dokumen ?? '-',
|
$item->no_dokumen ?? '-',
|
||||||
@ -882,13 +947,14 @@ class DashboardController extends Controller
|
|||||||
$unitName,
|
$unitName,
|
||||||
$subName,
|
$subName,
|
||||||
$item->tanggal_terbit ? Carbon::parse($item->tanggal_terbit)->format('d/m/Y') : '-',
|
$item->tanggal_terbit ? Carbon::parse($item->tanggal_terbit)->format('d/m/Y') : '-',
|
||||||
$item->entry_at ? Carbon::parse($item->entry_at)->format('d/m/Y H:i') : '-',
|
$item->tgl_expired ? Carbon::parse($item->tgl_expired)->format('d/m/Y') : '-',
|
||||||
$item->pegawai_nama_entry ?? '-',
|
$item->entry_at ? Carbon::parse($item->entry_at)->format('d/m/Y') : '-'
|
||||||
$aksesLabel
|
|
||||||
], null, "A{$rowIdx}");
|
], null, "A{$rowIdx}");
|
||||||
$rowIdx++;
|
$rowIdx++;
|
||||||
}
|
}
|
||||||
|
foreach(range('A', 'H') as $col){
|
||||||
|
$sheet->getColumnDimension($col)->setAutoSize(true);
|
||||||
|
}
|
||||||
$fileName = 'data-umum-' . now()->format('Ymd-His') . '.xlsx';
|
$fileName = 'data-umum-' . now()->format('Ymd-His') . '.xlsx';
|
||||||
$tempPath = storage_path('app/temp');
|
$tempPath = storage_path('app/temp');
|
||||||
if (!is_dir($tempPath)) {
|
if (!is_dir($tempPath)) {
|
||||||
|
|||||||
@ -102,10 +102,10 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
const checked = selectedIds.has(id);
|
const checked = selectedIds.has(id);
|
||||||
const aksi = `
|
const aksi = `
|
||||||
<div class="d-flex gap-1">
|
<div class="d-flex gap-1">
|
||||||
<button class="btn btn-sm btn-success" onclick="approvePending('${item.file_directory_id}', '${item.fileName || ''}')">
|
<button class="btn btn-sm btn-success" onclick="approvePending('${item.file_directory_id}', '${item.nama_dokumen || ''}')">
|
||||||
<i class="fa-solid fa-check"></i>
|
<i class="fa-solid fa-check"></i>
|
||||||
</button>
|
</button>
|
||||||
<button class="btn btn-sm btn-danger" onclick="rejectPending('${item.file_directory_id}', '${item.fileName || ''}')">
|
<button class="btn btn-sm btn-danger" onclick="rejectPending('${item.file_directory_id}', '${item.nama_dokumen || ''}')">
|
||||||
<i class="fa-solid fa-xmark"></i>
|
<i class="fa-solid fa-xmark"></i>
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
@ -123,13 +123,13 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<td>${safeText(item.no_dokumen)}</td>
|
<td>${safeText(item.no_dokumen)}</td>
|
||||||
<td>${statusBadge(item?.status_action)}</td>
|
<td>${statusBadge(item?.status_action)}</td>
|
||||||
<td>${aksesBadge(item?.permission_file)}</td>
|
<td>${aksesBadge(item?.permission_file)}</td>
|
||||||
<td><a href="#" class="file-link doc-title text-decoration-none"
|
<td><a href="#" class="file-link"
|
||||||
data-file="${item.file}"
|
data-file="${item.file}"
|
||||||
data-fileName="${item.fileName}"
|
data-fileName="${item.nama_dokumen}"
|
||||||
data-id="${item.file_directory_id}"
|
data-id="${item.file_directory_id}"
|
||||||
data-no_dokumen="${safeText(item.no_dokumen)}"
|
data-no_dokumen="${item.no_dokumen || '-'}"
|
||||||
data-tanggal_terbit="${safeText(item.tanggal_terbit)}"
|
data-tanggal_terbit="${item.tanggal_terbit || '-'}"
|
||||||
data-permission_file="${safeText(item.permission_file)}"><span class="cell-wrap">${safeText(item.nama_dokumen)}</span></a></td>
|
data-permission_file="${item.permission_file || '-'}">${item.nama_dokumen}</a></td>
|
||||||
<td class="col-kategori"><div class="cell-wrap">${safeText(item.folder)}</div></td>
|
<td class="col-kategori"><div class="cell-wrap">${safeText(item.folder)}</div></td>
|
||||||
<td class="col-unit"><div class="cell-wrap">${safeText(item.part)}</div></td>
|
<td class="col-unit"><div class="cell-wrap">${safeText(item.part)}</div></td>
|
||||||
<td class="text-nowrap">${tanggalTerbit}</td>
|
<td class="text-nowrap">${tanggalTerbit}</td>
|
||||||
@ -443,6 +443,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
});
|
});
|
||||||
document.addEventListener('click', function(e){
|
document.addEventListener('click', function(e){
|
||||||
if(e.target.matches('.file-link')){
|
if(e.target.matches('.file-link')){
|
||||||
|
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
let fileUrl = e.target.getAttribute('data-file');
|
let fileUrl = e.target.getAttribute('data-file');
|
||||||
let noDokumen = e.target.getAttribute('data-no_dokumen')
|
let noDokumen = e.target.getAttribute('data-no_dokumen')
|
||||||
@ -471,7 +472,11 @@ document.addEventListener('click', function(e){
|
|||||||
permEl.className = 'badge ' + (publicDoc ? 'bg-success' : 'bg-secondary');
|
permEl.className = 'badge ' + (publicDoc ? 'bg-success' : 'bg-secondary');
|
||||||
}
|
}
|
||||||
let previewBox = document.getElementById('file-preview');
|
let previewBox = document.getElementById('file-preview');
|
||||||
previewBox.innerHTML = `<iframe src="/file-preview/${idDirectory}" width="100%" height="500px" style="border:none;"></iframe>`;
|
previewBox.innerHTML = `<div id="pdfWrap" style="height:500px; overflow:auto; background:#f7f7f7; padding:8px;">
|
||||||
|
<div id="pdfPages"></div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
openPreview(idDirectory);
|
||||||
$("#previewModal").modal('show')
|
$("#previewModal").modal('show')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -73,7 +73,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
<td>${aksesBadge(item?.permission_file)}</td>
|
<td>${aksesBadge(item?.permission_file)}</td>
|
||||||
<td><a href="#" class="file-link"
|
<td><a href="#" class="file-link"
|
||||||
data-file="${item.file}"
|
data-file="${item.file}"
|
||||||
data-fileName="${item.fileName}"
|
data-fileName="${item.nama_dokumen}"
|
||||||
data-id="${item.file_directory_id}"
|
data-id="${item.file_directory_id}"
|
||||||
data-no_dokumen="${item.no_dokumen || '-'}"
|
data-no_dokumen="${item.no_dokumen || '-'}"
|
||||||
data-tanggal_terbit="${item.tanggal_terbit || '-'}"
|
data-tanggal_terbit="${item.tanggal_terbit || '-'}"
|
||||||
@ -225,7 +225,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
width: '100%',
|
width: '100%',
|
||||||
dropdownParent: $('#modalEditPengajuanFile'),
|
dropdownParent: $('#modalEditPengajuanFile'),
|
||||||
ajax: {
|
ajax: {
|
||||||
url: '/select-unit-kerja',
|
url: '/select-unit-kerja-mapping',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
delay: 250,
|
delay: 250,
|
||||||
data: function (params) {
|
data: function (params) {
|
||||||
@ -266,7 +266,7 @@ document.addEventListener('DOMContentLoaded', () => {
|
|||||||
editSubUnitSelect.empty().append('<option value="" disabled selected>-- Pilih Sub Unit Kerja --</option>');
|
editSubUnitSelect.empty().append('<option value="" disabled selected>-- Pilih Sub Unit Kerja --</option>');
|
||||||
if (!unitId) return;
|
if (!unitId) return;
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `/select-sub-unit-kerja/${unitId}`,
|
url: `/select-sub-unit-kerja-mapping/${unitId}`,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
if (response?.data) {
|
if (response?.data) {
|
||||||
@ -437,8 +437,12 @@ document.addEventListener('click', function(e){
|
|||||||
permEl.textContent = publicDoc ? 'Umum' : 'Internal Unit';
|
permEl.textContent = publicDoc ? 'Umum' : 'Internal Unit';
|
||||||
permEl.className = 'badge ' + (publicDoc ? 'bg-success' : 'bg-secondary');
|
permEl.className = 'badge ' + (publicDoc ? 'bg-success' : 'bg-secondary');
|
||||||
}
|
}
|
||||||
let previewBox = document.getElementById('file-preview');
|
let previewBox = document.getElementById('file-preview');
|
||||||
previewBox.innerHTML = `<iframe src="/file-preview/${idDirectory}" width="100%" height="500px" style="border:none;"></iframe>`;
|
previewBox.innerHTML = `<div id="pdfWrap" style="height:500px; overflow:auto; background:#f7f7f7; padding:8px;">
|
||||||
|
<div id="pdfPages"></div>
|
||||||
|
</div>
|
||||||
|
`;
|
||||||
|
openPreview(idDirectory);
|
||||||
$("#previewModal").modal('show')
|
$("#previewModal").modal('show')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -273,6 +273,19 @@
|
|||||||
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getExpiryStatus(dateStr){
|
||||||
|
if (!dateStr) return false;
|
||||||
|
const d = new Date(dateStr);
|
||||||
|
if (Number.isNaN(d.getTime())) return null;
|
||||||
|
const today = new Date();
|
||||||
|
today.setHours(0, 0, 0, 0);
|
||||||
|
d.setHours(0, 0, 0, 0);
|
||||||
|
if (d < today) return 'expired';
|
||||||
|
const diffDays = Math.ceil((d - today) / 86400000);
|
||||||
|
if (diffDays <= 7) return 'soon';
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function buildRow(item){
|
function buildRow(item){
|
||||||
const parts = (item.file || '').split('/');
|
const parts = (item.file || '').split('/');
|
||||||
const fileName = parts.pop() || '-';
|
const fileName = parts.pop() || '-';
|
||||||
@ -281,6 +294,7 @@
|
|||||||
const unitName = parts[0] || '';
|
const unitName = parts[0] || '';
|
||||||
const subName = parts[1] || '';
|
const subName = parts[1] || '';
|
||||||
const kategoriName = parts[2] || '';
|
const kategoriName = parts[2] || '';
|
||||||
|
const expiryStatus = getExpiryStatus(item.tgl_expired);
|
||||||
let statusLabel = '';
|
let statusLabel = '';
|
||||||
let statusClass = '';
|
let statusClass = '';
|
||||||
let badge
|
let badge
|
||||||
@ -292,8 +306,12 @@
|
|||||||
statusClass = 'bg-secondary';
|
statusClass = 'bg-secondary';
|
||||||
}
|
}
|
||||||
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
||||||
|
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
|
||||||
|
const expiryBadge = expiryStatus === 'expired'
|
||||||
|
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
|
||||||
|
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
|
||||||
return `
|
return `
|
||||||
<tr>
|
<tr class="${rowClass}">
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
class="form-check-input row-check"
|
class="form-check-input row-check"
|
||||||
@ -328,6 +346,7 @@
|
|||||||
>
|
>
|
||||||
${item.nama_dokumen || '-'}
|
${item.nama_dokumen || '-'}
|
||||||
</a>
|
</a>
|
||||||
|
${expiryBadge}
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -588,7 +607,7 @@
|
|||||||
allowClear: true,
|
allowClear: true,
|
||||||
width: '100%',
|
width: '100%',
|
||||||
ajax: {
|
ajax: {
|
||||||
url : '/select-unit-kerja',
|
url : '/select-unit-kerja-mapping',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
delay: 250,
|
delay: 250,
|
||||||
data: function(params){
|
data: function(params){
|
||||||
@ -645,7 +664,7 @@
|
|||||||
$('.sub_unit_kerja').empty().append('<option value="" disabled>-- Pilih Sub Unit Kerja --</option>');
|
$('.sub_unit_kerja').empty().append('<option value="" disabled>-- Pilih Sub Unit Kerja --</option>');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `/select-sub-unit-kerja/${unitId}`,
|
url: `/select-sub-unit-kerja-mapping/${unitId}`,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
if (response?.data) {
|
if (response?.data) {
|
||||||
@ -813,7 +832,7 @@
|
|||||||
width: '100%',
|
width: '100%',
|
||||||
dropdownParent: selectUnit.parent(),
|
dropdownParent: selectUnit.parent(),
|
||||||
ajax:{
|
ajax:{
|
||||||
url : '/select-unit-kerja',
|
url : '/select-unit-kerja-mapping',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
delay: 250,
|
delay: 250,
|
||||||
data: function(params){
|
data: function(params){
|
||||||
@ -830,7 +849,7 @@
|
|||||||
},
|
},
|
||||||
cache: true,
|
cache: true,
|
||||||
},
|
},
|
||||||
minimumInputLength: 1,
|
minimumInputLength: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
selectSubUnit.select2({
|
selectSubUnit.select2({
|
||||||
|
|||||||
@ -216,6 +216,19 @@
|
|||||||
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
return val === '1' || val === 'true' || val === 'iya' || val === 'yes';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getExpiryStatus(dateStr){
|
||||||
|
if (!dateStr) return false;
|
||||||
|
const d = new Date(dateStr);
|
||||||
|
if (Number.isNaN(d.getTime())) return null;
|
||||||
|
const today = new Date();
|
||||||
|
today.setHours(0, 0, 0, 0);
|
||||||
|
d.setHours(0, 0, 0, 0);
|
||||||
|
if (d < today) return 'expired';
|
||||||
|
const diffDays = Math.ceil((d - today) / 86400000);
|
||||||
|
if (diffDays <= 7) return 'soon';
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
function buildRow(item){
|
function buildRow(item){
|
||||||
const parts = (item.file || '').split('/');
|
const parts = (item.file || '').split('/');
|
||||||
const fileName = parts.pop() || '-';
|
const fileName = parts.pop() || '-';
|
||||||
@ -224,6 +237,7 @@
|
|||||||
const unitName = parts[0] || '';
|
const unitName = parts[0] || '';
|
||||||
const subName = parts[1] || '';
|
const subName = parts[1] || '';
|
||||||
const kategoriName = parts[2] || '';
|
const kategoriName = parts[2] || '';
|
||||||
|
const expiryStatus = getExpiryStatus(item.tgl_expired);
|
||||||
let statusLabel = '';
|
let statusLabel = '';
|
||||||
let statusClass = '';
|
let statusClass = '';
|
||||||
|
|
||||||
@ -235,8 +249,12 @@
|
|||||||
statusClass = 'bg-secondary';
|
statusClass = 'bg-secondary';
|
||||||
}
|
}
|
||||||
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
const checked = selectedIds.has(String(item.file_directory_id)) ? 'checked' : '';
|
||||||
|
const rowClass = expiryStatus === 'expired' ? 'table-danger' : (expiryStatus === 'soon' ? 'table-warning' : '');
|
||||||
|
const expiryBadge = expiryStatus === 'expired'
|
||||||
|
? `<span class="badge bg-danger" style="font-size:10px;">Expired</span>`
|
||||||
|
: (expiryStatus === 'soon' ? `<span class="badge bg-warning text-dark" style="font-size:10px;">Akan Expired</span>` : '');
|
||||||
return `
|
return `
|
||||||
<tr>
|
<tr class="${rowClass}">
|
||||||
<td class="text-center">
|
<td class="text-center">
|
||||||
<input type="checkbox"
|
<input type="checkbox"
|
||||||
class="form-check-input row-check"
|
class="form-check-input row-check"
|
||||||
@ -259,6 +277,7 @@
|
|||||||
>
|
>
|
||||||
${item.nama_dokumen || '-'}
|
${item.nama_dokumen || '-'}
|
||||||
</a>
|
</a>
|
||||||
|
${expiryBadge}
|
||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
@ -517,7 +536,7 @@
|
|||||||
allowClear: true,
|
allowClear: true,
|
||||||
width: '100%',
|
width: '100%',
|
||||||
ajax: {
|
ajax: {
|
||||||
url : '/select-unit-kerja',
|
url : '/select-unit-kerja-mapping',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
delay: 250,
|
delay: 250,
|
||||||
data: function(params){
|
data: function(params){
|
||||||
@ -574,7 +593,7 @@
|
|||||||
$('.sub_unit_kerja').empty().append('<option value="" disabled>-- Pilih Sub Unit Kerja --</option>');
|
$('.sub_unit_kerja').empty().append('<option value="" disabled>-- Pilih Sub Unit Kerja --</option>');
|
||||||
|
|
||||||
$.ajax({
|
$.ajax({
|
||||||
url: `/select-sub-unit-kerja/${unitId}`,
|
url: `/select-sub-unit-kerja-mapping/${unitId}`,
|
||||||
method: 'GET',
|
method: 'GET',
|
||||||
success: function(response) {
|
success: function(response) {
|
||||||
if (response?.data) {
|
if (response?.data) {
|
||||||
@ -748,7 +767,7 @@
|
|||||||
width: '100%',
|
width: '100%',
|
||||||
dropdownParent: selectUnit.parent(),
|
dropdownParent: selectUnit.parent(),
|
||||||
ajax:{
|
ajax:{
|
||||||
url : '/select-unit-kerja',
|
url : '/select-unit-kerja-mapping',
|
||||||
dataType: 'json',
|
dataType: 'json',
|
||||||
delay: 250,
|
delay: 250,
|
||||||
data: function(params){
|
data: function(params){
|
||||||
@ -765,7 +784,7 @@
|
|||||||
},
|
},
|
||||||
cache: true,
|
cache: true,
|
||||||
},
|
},
|
||||||
minimumInputLength: 1,
|
minimumInputLength: 0,
|
||||||
});
|
});
|
||||||
|
|
||||||
selectSubUnit.select2({
|
selectSubUnit.select2({
|
||||||
|
|||||||
@ -39,7 +39,9 @@ Route::middleware(['auth'])->group(function(){
|
|||||||
});
|
});
|
||||||
|
|
||||||
Route::get('/select-unit-kerja', [DashboardController::class, 'OptionUnitKerja']);
|
Route::get('/select-unit-kerja', [DashboardController::class, 'OptionUnitKerja']);
|
||||||
|
Route::get('/select-unit-kerja-mapping', [DashboardController::class, 'OptionUnitKerjaByMapping']);
|
||||||
Route::get('/select-sub-unit-kerja/{id}', [DashboardController::class, 'optionSubUnitKerja']);
|
Route::get('/select-sub-unit-kerja/{id}', [DashboardController::class, 'optionSubUnitKerja']);
|
||||||
|
Route::get('/select-sub-unit-kerja-mapping/{id}', [DashboardController::class, 'optionSubUnitKerjaByMapping']);
|
||||||
Route::delete('/delete-file/{id}', [DashboardController::class, 'deleteFile']);
|
Route::delete('/delete-file/{id}', [DashboardController::class, 'deleteFile']);
|
||||||
Route::get('/getFile/{id_unit_kerja}/{id_sub_unit_kerja}/{master_kategori_directory_id}', [DashboardController::class, 'getFile']);
|
Route::get('/getFile/{id_unit_kerja}/{id_sub_unit_kerja}/{master_kategori_directory_id}', [DashboardController::class, 'getFile']);
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user