Update besar apk finance

This commit is contained in:
Wian Drs
2026-09-11 16:03:00 +07:00
parent d42483b350
commit 4ef15c22ae
897 changed files with 98056 additions and 15979 deletions
@@ -1,155 +1,35 @@
<link rel="stylesheet" href="https://cdn.datatables.net/1.13.6/css/dataTables.bootstrap5.min.css">
<link rel="stylesheet" href="https://cdn.datatables.net/responsive/2.4.1/css/responsive.bootstrap5.min.css">
<style>
:root {
--tech-primary: #ff9800;
--tech-primary-light: #fff3e0;
--tech-primary-dark: #ff9800;
}
body {
background: #f5f7fb;
}
.tech-card {
border: none;
border-radius: 14px;
overflow: hidden;
box-shadow: 0 2px 12px rgba(0, 0, 0, 0.05);
background: #fff;
}
.tech-card .card-header-custom {
background: linear-gradient(135deg, var(--tech-primary), var(--tech-primary-dark));
color: #fff;
padding: 14px 20px;
font-weight: 600;
font-size: 15px;
}
.tech-card .card-body {
padding: 18px;
}
.table-tech thead th {
background: #f8f9fa;
font-weight: 600;
font-size: 12px;
text-transform: uppercase;
letter-spacing: .4px;
color: #495057;
border-bottom: 2px solid #ffcc80;
padding: 10px 8px;
white-space: nowrap;
}
.table-tech tbody td {
padding: 8px;
vertical-align: middle;
font-size: 13px;
}
.table-tech td .badge {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 65px;
padding: 0.35em 0.65em;
margin: 0 auto;
}
.table-tech tbody tr:hover {
background: #fff3e0;
}
</style>
<div class="container-fluid px-3 mt-3">
<div class="d-flex align-items-center gap-2 mb-3">
<div class="bg-warning text-white p-2 rounded-3 d-flex align-items-center justify-content-center" style="width:38px;height:38px;">
<i class="bi bi-journal-text fs-5"></i>
</div>
<div class="flex-grow-1">
<h5 class="mb-0 fw-bold" style="color:#1a1a2e;">Log Barang Teknisi</h5>
<small class="text-muted">Riwayat barang yang pernah dibawa oleh teknisi</small>
</div>
<div>
<a href="<?= base_url('teknisi'); ?>" class="btn btn-secondary">
<i class="bi bi-arrow-left me-1"></i> Kembali
</a>
</div>
</div>
<div class="row">
<div class="col-12">
<div class="card tech-card">
<div class="card-body">
<div class="table-responsive">
<table class="table table-tech table-striped w-100" id="tblLogBarang">
<thead>
<tr>
<th>No</th>
<th>Nama Teknisi</th>
<th>Kode Barang</th>
<th>Barcode</th>
<th>Nama Barang</th>
<th>Tanggal Dibawa</th>
<th>Tanggal Kembali</th>
<th>Status</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</div>
</div>
</div>
</div>
<?php
$inventory_title='Log Peralatan Teknisi';
$inventory_subtitle='Telusuri barang yang dibawa, dipasang pada customer, atau dikembalikan oleh teknisi.';
$perm=$equipment_permissions??array();
$active_panel='history';
$this->load->view('inventory_professional/_module_nav',get_defined_vars());
?>
<link rel="stylesheet" href="<?=base_url('assets/css/technician-equipment.css')?>?v=<?=filemtime(FCPATH.'assets/css/technician-equipment.css')?>">
<?php $this->load->view('peralatan_teknisi/_module_nav',get_defined_vars()); ?>
<section class="inventory-card">
<div class="inventory-card-head"><div><h5>Filter Riwayat Peralatan</h5><p>Tanggal mencakup tanggal dibawa, dipasang, atau dikembalikan.</p></div><a href="<?=base_url('teknisi')?>" class="btn btn-outline-secondary"><i class="bi bi-arrow-left me-1"></i>Kembali</a></div>
<form id="technicianLogFilter" class="row g-3 align-items-end p-3 border-bottom" data-ajax="true">
<div class="col-sm-6 col-xl-2"><label class="form-label">Dari Tanggal</label><input type="date" class="form-control" name="date_from"></div>
<div class="col-sm-6 col-xl-2"><label class="form-label">Sampai Tanggal</label><input type="date" class="form-control" name="date_to"></div>
<div class="col-md-6 col-xl-2"><label class="form-label">Customer</label><select class="form-select select-search" name="customer_id"><option value="">Semua customer</option><?php foreach($customers as$customer):?><option value="<?=$customer->id?>"><?=html_escape($customer->nama)?></option><?php endforeach?></select></div>
<div class="col-md-6 col-xl-2"><label class="form-label">Karyawan / Teknisi</label><select class="form-select select-search" name="user_id"><option value="">Semua teknisi</option><?php foreach($teknisi_list as$employee):?><option value="<?=$employee->id?>"><?=html_escape($employee->employee_code.' - '.$employee->full_name)?></option><?php endforeach?></select></div>
<div class="col-md-4 col-xl-2"><label class="form-label">Status</label><select class="form-select" name="status"><option value="">Semua</option><option value="carried">Dibawa</option><option value="installed">Dipasang</option><option value="removed">Dilepas</option><option value="returned">Dikembalikan</option></select></div>
<div class="col-md-4 col-xl-2"><label class="form-label">Kondisi</label><select class="form-select" name="condition"><option value="">Semua</option><option value="good">Baik</option><option value="inspection_required">Perlu Diperiksa</option><option value="repair_required">Perlu Perbaikan</option><option value="under_repair">Dalam Perbaikan</option><option value="damaged">Rusak</option><option value="lost">Hilang</option><option value="scrapped">Dihapuskan</option></select></div>
<div class="col-md-4 col-xl-2"><label class="form-label">Kepemilikan</label><select class="form-select" name="ownership"><option value="">Semua</option><option value="company">Perusahaan</option><option value="customer">Customer</option><option value="transferred_non_inventory">Non-Persediaan Diserahkan</option><option value="unknown">Belum Diketahui</option></select></div>
<div class="col-md-8 col-xl-4"><label class="form-label">Barang / Barcode / Serial</label><input class="form-control" name="query" placeholder="Cari identitas barang"></div>
<div class="col-md-4 col-xl-2 d-flex gap-2"><button type="submit" class="btn btn-primary flex-grow-1"><i class="bi bi-funnel me-1"></i>Tampilkan</button><?php if($can_export):?><button type="button" id="technicianLogPdf" class="btn btn-outline-danger" title="Export PDF"><i class="bi bi-file-earmark-pdf"></i></button><?php endif?></div>
</form>
<div class="table-responsive"><table class="table align-middle mb-0 w-100" id="tblLogBarang"><thead><tr><th>No</th><th>Dokumen</th><th>Teknisi</th><th>Barang</th><th>Barcode / SN</th><th>Pemilik</th><th>Qty</th><th>Customer</th><th>Posisi</th><th>Status</th><th>Kondisi</th><th>Keterangan</th><th>Aksi</th></tr></thead><tbody></tbody></table></div>
</section>
<div class="modal fade" id="technicianLogDetailModal" data-bs-backdrop="static" tabindex="-1"><div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable"><div class="modal-content"><div class="modal-header"><h5 class="modal-title">Detail Dokumen Peralatan</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body"></div><div class="modal-footer"><button class="btn btn-light" data-bs-dismiss="modal">Tutup</button></div></div></div></div>
<?php if($can_export):?><div class="modal fade" id="technicianLogPdfModal" tabindex="-1"><div class="modal-dialog modal-xl modal-dialog-centered"><div class="modal-content" style="height:min(90vh,900px)"><div class="modal-header"><h5 class="modal-title">PDF Log Peralatan Teknisi</h5><button type="button" class="btn-close" data-bs-dismiss="modal"></button></div><div class="modal-body p-0"><iframe title="PDF Log Peralatan Teknisi" style="width:100%;height:100%;border:0"></iframe></div></div></div></div><?php endif?>
<script>
$(function(){
$('#tblLogBarang').DataTable({
processing: true,
serverSide: false,
ajax: {
url: "<?= base_url('teknisi/get_log_data'); ?>",
dataSrc: 'data'
},
columns: [
{ data: 0 },
{ data: 1 },
{ data: 2 },
{ data: 3 },
{ data: 4 },
{ data: 5 },
{ data: 6 },
{ data: 7 }
],
pageLength: 25,
lengthMenu: [
[25, 50, 100, -1],
[25, 50, 100, 'All']
],
responsive: true,
searching: true,
paging: true,
ordering: true,
info: true,
language: {
search: "Cari:",
lengthMenu: "Tampilkan _MENU_ data",
info: "Menampilkan _START_ - _END_ dari _TOTAL_ data",
zeroRecords: "Tidak ada data",
paginate: {
first: "Awal",
last: "Akhir",
next: "&raquo;",
previous: "&laquo;"
}
}
});
const form=$('#technicianLogFilter'),table=$('#tblLogBarang').DataTable({processing:true,serverSide:false,ajax:{url:'<?=base_url('teknisi/get_log_data')?>',data:function(request){form.serializeArray().forEach(field=>request[field.name]=field.value)},dataSrc:'data',error:function(xhr){if(window.Swal)Swal.fire({toast:true,position:'top-end',icon:'error',title:(xhr.responseJSON&&xhr.responseJSON.message)||'Riwayat gagal dimuat.',showConfirmButton:false,timer:4000})}},columns:Array.from({length:13},(_,index)=>({data:index})),order:[[1,'desc']],pageLength:25,responsive:true,language:{search:'Cari:',lengthMenu:'Tampilkan _MENU_ data',info:'Menampilkan _START_ - _END_ dari _TOTAL_ data',zeroRecords:'Tidak ada riwayat sesuai filter',paginate:{next:'&raquo;',previous:'&laquo;'}}});
form.on('submit',function(event){event.preventDefault();table.ajax.reload()});
$('#technicianLogPdf').on('click',function(){const modal=document.getElementById('technicianLogPdfModal'),query=form.serialize();modal.querySelector('iframe').src='<?=base_url('teknisi/log_pdf')?>?'+query;bootstrap.Modal.getOrCreateInstance(modal).show()});
$('#technicianLogPdfModal').on('hidden.bs.modal',function(){$(this).find('iframe').attr('src','about:blank')});
$(document).on('click','.tech-log-detail',function(){const id=this.dataset.id,$modal=$('#technicianLogDetailModal'),esc=v=>$('<div>').text(v==null?'':v).html();$modal.find('.modal-body').html('<div class="text-center p-5"><span class="spinner-border text-primary"></span></div>');bootstrap.Modal.getOrCreateInstance($modal[0],{backdrop:'static'}).show();$.getJSON('<?=base_url('teknisi/equipment_document/')?>'+id).done(function(r){const d=r.result,lines=(d.lines||[]).map(l=>'<tr><td>'+esc(l.display_name)+'</td><td>'+esc(l.barcode_snapshot)+'</td><td>'+Number(l.qty).toLocaleString('id-ID',{maximumFractionDigits:4})+'</td><td>'+esc(l.from_custodian_type)+' &rarr; '+esc(l.to_custodian_type)+'</td><td>'+esc(l.from_condition_status)+' &rarr; '+esc(l.to_condition_status)+'</td></tr>').join('');$modal.find('.modal-body').html('<div class="row g-3 mb-3"><div class="col-md-4"><small>Nomor Dokumen</small><div class="fw-bold">'+esc(d.document_no)+'</div></div><div class="col-md-4"><small>Teknisi / Customer</small><div>'+esc(d.technician_name||'-')+' / '+esc(d.customer_name||'-')+'</div></div><div class="col-md-4"><small>Tanggal / Proses</small><div>'+esc(d.document_date)+' / '+esc(d.document_type)+'</div></div></div><div class="table-responsive"><table class="table"><thead><tr><th>Barang</th><th>Barcode</th><th>Qty</th><th>Posisi</th><th>Kondisi</th></tr></thead><tbody>'+lines+'</tbody></table></div><p><strong>Keterangan:</strong> '+esc(d.notes||'-')+'</p>')}).fail(function(){$modal.find('.modal-body').html('<div class="alert alert-danger">Detail gagal dimuat.</div>')})});
});
</script>
</script>