This commit is contained in:
Dwi Swandhana
2026-05-19 20:19:36 +07:00
parent a9c6cf12ca
commit 714b6ab26d
6 changed files with 77 additions and 62 deletions

No files matched your search

@@ -200,12 +200,12 @@ class GudangController extends Controller
'bulan' => $rdata->bulan, 'bulan' => $rdata->bulan,
'tahun' => $rdata->tahun, 'tahun' => $rdata->tahun,
'deskripsi' => $deskripsiGabungan, 'deskripsi' => $deskripsiGabungan,
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ), 'pemasukan' => $rdata->pemasukan ?? 0,
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ), 'pengeluaran' => $rdata->pengeluaran ?? 0,
'jenis' => $rdata->jenis, 'jenis' => $rdata->jenis,
'masa_expired' => $rdata->masa_expired, 'masa_expired' => $rdata->masa_expired,
'keterangan' => $rdata->keterangan, 'keterangan' => $rdata->keterangan,
'tgllengkap' => $tgllengkap, 'tgllengkap' => $rdata->created_at->format('m/d/Y'),
'total' => $total, 'total' => $total,
); );
} }
@@ -270,13 +270,13 @@ class GudangController extends Controller
} }
public function jsonReportbhpPaginated(Request $request) { public function jsonReportbhpPaginated(Request $request) {
$tanggal = $request->input('tanggal'); $tanggal = $request->input('tanggal');
$deskripsi = $request->input('deskripsi'); $deskripsi = $request->input('deskripsi');
$kategori = $request->input('kategori'); $kategori = $request->input('kategori');
$lm = 10; $lm = 10;
$limit = ($request->input('limit') == null ? $lm : $request->input('limit')); $limit = ($request->input('limit') == null ? $lm : $request->input('limit'));
$order = ($request->input('order') == null ? 'id desc' : $request->input('order')); $order = ($request->input('order') == null ? 'id desc' : $request->input('order'));
$data = new SIMBHPReport; $data = new SIMBHPReport;
if ($kategori != null AND $kategori != '') $data = $data->where('jenis', $kategori); if ($kategori != null AND $kategori != '') $data = $data->where('jenis', $kategori);
if ($tanggal != null AND $tanggal != '') $data = $data->where('created_at', 'LIKE', '%'.$tanggal.'%'); if ($tanggal != null AND $tanggal != '') $data = $data->where('created_at', 'LIKE', '%'.$tanggal.'%');
if ($deskripsi != null AND $deskripsi != '') $data = $data->where('deskripsi', 'LIKE', '%'.$deskripsi.'%'); if ($deskripsi != null AND $deskripsi != '') $data = $data->where('deskripsi', 'LIKE', '%'.$deskripsi.'%');
@@ -287,60 +287,54 @@ class GudangController extends Controller
$kredit = 0; $kredit = 0;
if (!empty($data)){ if (!empty($data)){
foreach($data as $rdata){ foreach($data as $rdata){
$dd = $rdata->tanggal;
$mm = $rdata->bulan; $pengeluaran = $rdata->pengeluaran;
$yy = $rdata->tahun; $pemasukan = $rdata->pemasukan;
$pengeluaran = $rdata->pengeluaran; $deskripsi = $rdata->deskripsi;
$pemasukan = $rdata->pemasukan; $jenis = $rdata->jenis;
$deskripsi = $rdata->deskripsi; $debet = $debet + $pemasukan;
$jenis = $rdata->jenis; $kredit = $kredit + $pengeluaran;
$debet = $debet + $pemasukan; $cekjenis = SIMBHPJenis::where('kodejenis', $jenis)->first();
$kredit = $kredit + $pengeluaran;
$cekjenis = SIMBHPJenis::where('kodejenis', $jenis)->first();
if (isset($cekjenis->id)){ if (isset($cekjenis->id)){
$kodejenis = $cekjenis->kodejenis; $kodejenis = $cekjenis->kodejenis;
$jenis = $cekjenis->jenis; $jenis = $cekjenis->jenis;
$satuan = $cekjenis->satuan; $satuan = $cekjenis->satuan;
} else { } else {
$kodejenis = $jenis; $kodejenis = $jenis;
$jenis = ''; $jenis = '';
$satuan = ''; $satuan = '';
} }
if ($jenis != ''){ if ($jenis != ''){
$deskripsi = '<strong>'.$jenis.'</strong><br />'.$deskripsi; $deskripsi = '<strong>'.$jenis.'</strong><br />'.$deskripsi;
} }
if ($mm < 10){
$tgllengkap = $yy.'-0'.$mm.'-'.$dd;
} else {
$tgllengkap = $yy.'-'.$mm.'-'.$dd;
}
if ($pengeluaran == '' OR $pengeluaran == 0) { if ($pengeluaran == '' OR $pengeluaran == 0) {
$total = $pemasukan; $total = $pemasukan;
$jentrans = 'PEMASUKAN'; $jentrans = 'PEMASUKAN';
} }
else { else {
$total = $pengeluaran; $total = $pengeluaran;
$jentrans = 'PENGELUARAN'; $jentrans = 'PENGELUARAN';
} }
$hasil[] = array( $hasil[] = array(
'id' => $rdata->id, 'id' => $rdata->id,
'tanggal' => $rdata->tanggal, 'tanggal' => $rdata->tanggal,
'bulan' => $rdata->bulan, 'bulan' => $rdata->bulan,
'tahun' => $rdata->tahun, 'tahun' => $rdata->tahun,
'tlsdeskripsi' => $deskripsi, 'tlsdeskripsi' => $deskripsi,
'deskripsi' => $rdata->deskripsi, 'deskripsi' => $rdata->deskripsi,
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ), 'pemasukan' => $rdata->pemasukan ?? 0,
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ), 'pengeluaran' => $rdata->pengeluaran ?? 0,
'jenis' => $kodejenis, 'jenis' => $kodejenis,
'masa_expired' => $rdata->masa_expired, 'masa_expired' => $rdata->masa_expired,
'keterangan' => $rdata->keterangan, 'keterangan' => $rdata->keterangan,
'tgllengkap' => $tgllengkap, 'tgllengkap' => $rdata->created_at->format('m/d/Y'),
'created_at' => $rdata->created_at, 'created_at' => $rdata->created_at,
'nominal' => $total.' '.$satuan, 'nominal' => $total.' '.$satuan,
'jentrans' => $jentrans, 'jentrans' => $jentrans,
); );
} }
} }
@@ -782,7 +782,7 @@
{ name: 'jenis',type: 'text'}, { name: 'jenis',type: 'text'},
{ name: 'masa_expired',type: 'text'}, { name: 'masa_expired',type: 'text'},
{ name: 'keterangan',type: 'text'}, { name: 'keterangan',type: 'text'},
{ name: 'tgllengkap',type: 'text'}, { name: 'tgllengkap',type: 'date'},
{ name: 'total',type: 'text'}, { name: 'total',type: 'text'},
], ],
type: 'POST', type: 'POST',
@@ -800,15 +800,17 @@
autoheight: true, autoheight: true,
theme: "energyblue", theme: "energyblue",
source: dataAdapter, source: dataAdapter,
showaggregates: true,
showstatusbar: true,
statusbarheight: 50,
altrows: true,
selectionmode: 'multiplecellsextended', selectionmode: 'multiplecellsextended',
columns: [ columns: [
{ text: 'dd', columngroup: 'tglinput', filtertype: 'checkedlist', datafield: 'tanggal', width: '5%', cellsalign: 'center', align: 'center' }, { text: 'Tanggal', cellsformat: 'dd-MMMM-yyyy', filtertype: 'date', datafield: 'tgllengkap', width: '15%', cellsalign: 'center', align: 'center' },
{ text: 'mm', columngroup: 'tglinput', filtertype: 'checkedlist', datafield: 'bulan', width: '5%', cellsalign: 'center', align: 'center' },
{ text: 'yy', columngroup: 'tglinput', filtertype: 'checkedlist', datafield: 'tahun', width: '5%', cellsalign: 'center', align: 'center' },
{ text: 'Jenis', datafield: 'jenis', filtertype: 'checkedlist', width: '10%', cellsalign: 'center', align: 'center' }, { text: 'Jenis', datafield: 'jenis', filtertype: 'checkedlist', width: '10%', cellsalign: 'center', align: 'center' },
{ text: 'Deskripsi', datafield: 'deskripsi', width: '25%', cellsalign: 'left', align: 'center' }, { text: 'Deskripsi', datafield: 'deskripsi', width: '25%', cellsalign: 'left', align: 'center' },
{ text: 'MASUK', datafield: 'pemasukan', width: '10%', cellsalign: 'right', align: 'center' }, { text: 'MASUK', cellsformat: 'n2',aggregates: ['sum'], datafield: 'pemasukan', width: '10%', cellsalign: 'right', align: 'center' },
{ text: 'KELUAR', datafield: 'pengeluaran', width: '10%', cellsalign: 'right', align: 'center' }, { text: 'KELUAR', cellsformat: 'n2', aggregates: ['sum'], datafield: 'pengeluaran', width: '10%', cellsalign: 'right', align: 'center' },
{ text: 'Masa Expired', datafield: 'masa_expired', width: '12%', cellsalign: 'center', align: 'center' }, { text: 'Masa Expired', datafield: 'masa_expired', width: '12%', cellsalign: 'center', align: 'center' },
{ text: 'Keterangan', datafield: 'keterangan', width: '8%', cellsalign: 'right', align: 'center' }, { text: 'Keterangan', datafield: 'keterangan', width: '8%', cellsalign: 'right', align: 'center' },
{ text: 'Edit', columntype: 'button', width: '10%', cellsrenderer: function () { return "Edit"; { text: 'Edit', columntype: 'button', width: '10%', cellsrenderer: function () { return "Edit";
@@ -2121,12 +2121,12 @@
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="#tabel_manual1" data-toggle="tab" aria-expanded="true" class="nav-link"> <a href="#tabel_manual1" data-toggle="tab" aria-expanded="true" class="nav-link">
<i class="fi-monitor mr-2"></i> Bakteri Manual I <i class="fi-monitor mr-2"></i> MALDITOF
</a> </a>
</li> </li>
<li class="nav-item"> <li class="nav-item">
<a href="#tabel_manual2" data-toggle="tab" aria-expanded="true" class="nav-link"> <a href="#tabel_manual2" data-toggle="tab" aria-expanded="true" class="nav-link">
<i class="fi-monitor mr-2"></i> Bakteri Manual II <i class="fi-monitor mr-2"></i> Bakteri Manual I
</a> </a>
</li> </li>
</ul> </ul>
@@ -5514,7 +5514,7 @@
{ text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Jenis', filtertype: 'checkedlist', datafield: 'diagnosa2', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Kelompok', filtertype: 'checkedlist', datafield: 'kd_spesimen', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'}, { text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'},
{ text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' }, { text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' },
+1 -1
View File
@@ -5549,7 +5549,7 @@
{ text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Jenis', filtertype: 'checkedlist', datafield: 'diagnosa2', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Kelompok', filtertype: 'checkedlist', datafield: 'kd_spesimen', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'}, { text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'},
{ text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' }, { text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' },
@@ -5540,7 +5540,7 @@
{ text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Service', filtertype: 'checkedlist', datafield: 'tlsreques', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Status', filtertype: 'checkedlist', datafield: 'tlsstatus', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Themeplate', filtertype: 'checkedlist', datafield: 'dlp', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Jenis', filtertype: 'checkedlist', datafield: 'diagnosa2', width: 75, cellsalign: 'left', align: 'center'}, { text: 'Kelompok', filtertype: 'checkedlist', datafield: 'kd_spesimen', width: 75, cellsalign: 'left', align: 'center'},
{ text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'}, { text: 'Specimen', filtertype: 'checkedlist', datafield: 'nm_spesimen', width: 230, cellsalign: 'left', align: 'center'},
{ text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'}, { text: 'Updated_at', datafield: 'updated_at', filtertype: 'date', width: 150, cellsalign: 'left', align: 'center'},
{ text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' }, { text: 'Duration', cellsrenderer: tlsdurasi, width: 100, cellsalign: 'left', align: 'center' },
+20 -1
View File
@@ -30,10 +30,25 @@ log_handler = TimedRotatingFileHandler(
) )
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(threadName)s - %(message)s') formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(threadName)s - %(message)s')
log_handler.setFormatter(formatter) log_handler.setFormatter(formatter)
logging.basicConfig(level=logging.INFO, handlers=[log_handler]) log_handler.setLevel(logging.ERROR)
logging.basicConfig(level=logging.ERROR, handlers=[log_handler])
logging.getLogger().setLevel(logging.ERROR)
logging.getLogger("werkzeug").setLevel(logging.ERROR)
THREAD_LOG_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "thread_logs") THREAD_LOG_DIR = os.path.join(os.path.dirname(os.path.abspath(__file__)), "thread_logs")
thread_log_lock = threading.Lock() thread_log_lock = threading.Lock()
ERROR_LOG_KEYWORDS = (
"critical",
"crash",
"error",
"exception",
"failed",
"failure",
"gagal",
"corrupt",
"ditolak",
"traceback",
)
# ========================================== # ==========================================
# 1. KONFIGURASI SISTEM # 1. KONFIGURASI SISTEM
@@ -260,6 +275,10 @@ def _sanitize_thread_log_name(thread_name):
return safe_name or "main" return safe_name or "main"
def _write_thread_log(message): def _write_thread_log(message):
text = str(message or "")
if not any(keyword in text.lower() for keyword in ERROR_LOG_KEYWORDS):
return
try: try:
os.makedirs(THREAD_LOG_DIR, exist_ok=True) os.makedirs(THREAD_LOG_DIR, exist_ok=True)
thread_name = threading.current_thread().name thread_name = threading.current_thread().name