This commit is contained in:
Dwi Swandhana
2026-04-23 13:55:32 +07:00
parent 1b41f3e6ee
commit 1a1d58e60a
6 changed files with 74 additions and 23 deletions
@@ -845,10 +845,12 @@ class GudangController extends Controller
$rows = $query->get();
$grouped = [];
$jenisNames = [];
foreach ($rows as $row) {
$jenis = $row->jenis ?: 'Tidak Diketahui';
if (!isset($grouped[$jenis])) {
$grouped[$jenis] = ['jenis' => $jenis, 'masuk' => 0, 'keluar' => 0];
$grouped[$jenis] = ['jenis' => $jenis, 'masuk' => 0, 'keluar' => 0, 'sisa' => 0];
$jenisNames[] = $jenis;
}
if (!is_null($row->pemasukan) && (int)$row->pemasukan > 0) {
$grouped[$jenis]['masuk'] += $this->extractBaseQty($row, 'pemasukan');
@@ -858,6 +860,14 @@ class GudangController extends Controller
}
}
if (!empty($jenisNames)) {
$stockMap = app(SimbhpStockService::class)->getStockBaseByJenisMany($jenisNames);
foreach ($grouped as $jenis => &$item) {
$item['sisa'] = (int) ($stockMap[$jenis] ?? 0);
}
unset($item);
}
return array_values($grouped);
}
@@ -868,14 +868,10 @@ class ReportController extends Controller
$bulan = str_replace('bulan=', '', $bulan);
$tahun = str_replace('tahun=', '', $tahun);
}
// Query Periksa
$query = Periksa::query()->where('dlp', 'Kultur')->whereNotNull('dokter_id')->whereYear('daftar', $tahun);
if ($bulan != 'ALL' && $bulan != 'Pick Month') {
$query->whereMonth('daftar', $bulan);
}
// Preview dibuat paginated agar aman saat filter setahun.
$orderbydate = $query->orderBy('daftar', 'ASC')->orderBy('id', 'ASC')->paginate(50);
$orderbydate->appends(['bulan' => $bulan, 'tahun' => $tahun]);
+23
View File
@@ -329,10 +329,30 @@ class GudangPos extends Component
$jenisNames = $products->getCollection()->pluck('jenis')->filter()->values()->all();
$stockMap = $service->getStockBaseByJenisMany($jenisNames);
$latestExpiredMap = [];
if (count($jenisNames) > 0) {
$expiredRows = SIMBHPReport::query()
->select('jenis', DB::raw('MAX(masa_expired) as latest_expired'))
->whereIn('jenis', $jenisNames)
->whereNotNull('masa_expired')
->whereNotNull('pemasukan')
->where('pemasukan', '>', 0)
->groupBy('jenis')
->get();
foreach ($expiredRows as $row) {
$jenisNama = (string) ($row->jenis ?? '');
$expired = (string) ($row->latest_expired ?? '');
if ($jenisNama !== '' && $expired !== '') {
$latestExpiredMap[$jenisNama] = Carbon::parse($expired)->format('d-m-Y');
}
}
}
$selectedJenis = null;
$selectedStockDisplay = null;
$selectedSetting = null;
$selectedLatestExpired = null;
$kode = $service->sanitizeKode($this->selectedKode);
if ($kode !== '') {
$selectedJenis = $service->getJenisByKode($kode);
@@ -345,6 +365,7 @@ class GudangPos extends Component
(string) ($selectedJenis->satuan_kecil ?? ''),
(int) ($selectedJenis->konversi_kecil ?? 1),
);
$selectedLatestExpired = $latestExpiredMap[(string) $selectedJenis->jenis] ?? null;
}
}
@@ -352,9 +373,11 @@ class GudangPos extends Component
'users' => $users,
'products' => $products,
'stockMap' => $stockMap,
'latestExpiredMap' => $latestExpiredMap,
'selectedJenis' => $selectedJenis,
'selectedStockDisplay' => $selectedStockDisplay,
'selectedSetting' => $selectedSetting,
'selectedLatestExpired' => $selectedLatestExpired,
]);
}
}
+14 -13
View File
@@ -124,9 +124,6 @@
<div class="form-group">
<button type="button" class="btn btn-success btn-block" id="btn_op_in_addline">Tambah ke Daftar</button>
</div>
<div class="form-group m-b-0">
<button type="button" class="btn btn-custom btn-block" id="btn_op_in_commit">Simpan Semua Barang Masuk</button>
</div>
</div>
</div>
<div class="col-lg-8">
@@ -150,6 +147,9 @@
</table>
</div>
<small class="text-muted d-block m-t-10">Catatan: sistem akan menyimpan per-item menjadi baris transaksi (mirip stok opname).</small>
<div class="text-right m-t-15">
<button type="button" class="btn btn-custom" id="btn_op_in_commit">Simpan Semua Barang Masuk</button>
</div>
</div>
</div>
</div>
@@ -207,12 +207,12 @@
<hr>
<div class="table-responsive">
<table class="table table-sm table-bordered m-b-0">
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th></tr></thead>
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th><th>Sisa Stok</th></tr></thead>
<tbody id="stat_perjenis_harian_body">
@forelse($stat_perjenis_harian ?? [] as $row)
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td></tr>
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['sisa'] ?? 0,0,'.',',') }}</td></tr>
@empty
<tr><td colspan="3" class="text-center">Belum ada transaksi</td></tr>
<tr><td colspan="4" class="text-center">Belum ada transaksi</td></tr>
@endforelse
</tbody>
</table>
@@ -227,12 +227,12 @@
<hr>
<div class="table-responsive">
<table class="table table-sm table-bordered m-b-0">
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th></tr></thead>
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th><th>Sisa Stok</th></tr></thead>
<tbody id="stat_perjenis_bulanan_body">
@forelse($stat_perjenis_bulanan ?? [] as $row)
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td></tr>
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['sisa'] ?? 0,0,'.',',') }}</td></tr>
@empty
<tr><td colspan="3" class="text-center">Belum ada transaksi</td></tr>
<tr><td colspan="4" class="text-center">Belum ada transaksi</td></tr>
@endforelse
</tbody>
</table>
@@ -247,12 +247,12 @@
<hr>
<div class="table-responsive">
<table class="table table-sm table-bordered m-b-0">
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th></tr></thead>
<thead><tr><th>Jenis</th><th>Masuk</th><th>Keluar</th><th>Sisa Stok</th></tr></thead>
<tbody id="stat_perjenis_tahunan_body">
@forelse($stat_perjenis_tahunan ?? [] as $row)
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td></tr>
<tr><td>{{ $row['jenis'] }}</td><td class="text-right">{{ number_format($row['masuk'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['keluar'],0,'.',',') }}</td><td class="text-right">{{ number_format($row['sisa'] ?? 0,0,'.',',') }}</td></tr>
@empty
<tr><td colspan="3" class="text-center">Belum ada transaksi</td></tr>
<tr><td colspan="4" class="text-center">Belum ada transaksi</td></tr>
@endforelse
</tbody>
</table>
@@ -869,10 +869,11 @@
'<td>' + escapeHtml(r.jenis || '-') + '</td>' +
'<td class="text-right">' + formatInt(r.masuk || 0) + '</td>' +
'<td class="text-right">' + formatInt(r.keluar || 0) + '</td>' +
'<td class="text-right">' + formatInt(r.sisa || 0) + '</td>' +
'</tr>';
});
if(!html){
html = '<tr><td colspan="3" class="text-center">Belum ada transaksi</td></tr>';
html = '<tr><td colspan="4" class="text-center">Belum ada transaksi</td></tr>';
}
$(tbodyId).html(html);
}
@@ -24,6 +24,7 @@
@php
$saldoBase = (int) ($stockMap[$p->jenis] ?? 0);
$warning = $saldoBase <= (int) ($p->stok_minimum ?? 0);
$latestExpired = $latestExpiredMap[$p->jenis] ?? null;
@endphp
<div class="col-lg-4 col-md-6">
<div class="card-box" style="border:1px solid #eee; cursor:pointer;" wire:click="selectProduct('{{ $p->kodejenis }}')">
@@ -46,6 +47,9 @@
<div class="m-t-5">
<small class="text-muted">Satuan: {{ $p->satuan }} @if(($p->satuan_kecil ?? '') !== '') / {{ $p->satuan_kecil }} @endif</small>
</div>
<div class="m-t-5">
<small class="text-muted">Expired terakhir: {{ $latestExpired ?: '-' }}</small>
</div>
</div>
</div>
@empty
@@ -139,6 +143,7 @@
<div class="alert alert-info">
<div><b>{{ $selectedJenis->jenis }}</b></div>
<div>Stok: <b>{{ $selectedStockDisplay }}</b></div>
<div>Expired terakhir: <b>{{ $selectedLatestExpired ?: '-' }}</b></div>
</div>
@endif
<div class="form-group">