diff --git a/htdocs/app/Http/Controllers/GudangController.php b/htdocs/app/Http/Controllers/GudangController.php index 30fd67e2..b4a3cc02 100644 --- a/htdocs/app/Http/Controllers/GudangController.php +++ b/htdocs/app/Http/Controllers/GudangController.php @@ -246,11 +246,16 @@ class GudangController extends Controller $jenis = $request->input('set02'); $satuan = $request->input('set03'); $idne = $request->input('set01'); - $satuanKecil = $set08; + $satuanKecil = trim((string) $set08); $konversiKecil = (int) $set09; if ($konversiKecil <= 0){ $konversiKecil = 1; } $stokMinimum = (int) $set10; if ($stokMinimum < 0){ $stokMinimum = 0; } + if ($satuanKecil === '') { + $konversiKecil = 1; + } elseif ($konversiKecil <= 1) { + return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Jika memakai satuan kecil, konversi harus lebih dari 1']); + } $kodejenis = preg_replace('/\s+/', '', $jenis); if ($idne == 'new' OR $idne == ''){ $ceksudah = SIMBHPJenis::where('kodejenis', $kodejenis)->where('satuan', $satuan)->count(); @@ -296,7 +301,11 @@ class GudangController extends Controller $tahun = $ahrf[0]; if(isset($ahrf[1])){ $wulan = (int)$ahrf[1]; } else { $wulan = (int)date("m"); } if(isset($ahrf[2])){ $dino = (int)$ahrf[2]; } else { $dino = (int)date("d"); } + $unitSetting = $this->getJenisUnitSetting($pos); if ($jenis == 'pemasukan'){ + if (($satuanTransaksi ?: 'besar') === 'kecil' && !$unitSetting['has_breakdown']) { + return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Barang ini belum memiliki setting pecah satuan']); + } $qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'besar'); $bayar = SIMBHPReport::create([ 'tanggal' => $dino, @@ -312,10 +321,13 @@ class GudangController extends Controller 'marking' => '', ]); } else if ($jenis == 'pengeluaran'){ + if (($satuanTransaksi ?: 'besar') === 'kecil' && !$unitSetting['has_breakdown']) { + return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Pengeluaran satuan kecil tidak tersedia untuk barang ini']); + } $getnama = User::where('id', $deskripsi)->first(); $nama = $getnama->nama ?? 'Unkown'; $deskripsi = 'Diterima oleh '.$nama; - $qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'kecil'); + $qtyBase = $this->calculateBaseQty($pos, $total, $satuanTransaksi ?: 'besar'); $stokSaatIni = $this->getStockBaseByJenis($pos); if ($qtyBase > $stokSaatIni){ return response()->json(['icon' => 'error', 'warna' => '#bf441d', 'status' => 'Gagal', 'message' => 'Nominal Melebihi Stok']); @@ -328,7 +340,7 @@ class GudangController extends Controller 'pemasukan' => null, 'pengeluaran' => $total, 'qty_base' => $qtyBase, - 'satuan_transaksi' => $satuanTransaksi ?: 'kecil', + 'satuan_transaksi' => $satuanTransaksi ?: 'besar', 'jenis' => $pos, 'keterangan' => '', 'marking' => '', @@ -484,8 +496,8 @@ class GudangController extends Controller { $qtyInput = (int) $qtyInput; if ($qtyInput < 0) { $qtyInput = 0; } - $jenis = SIMBHPJenis::where('jenis', $jenisNama)->first(); - $konversi = (int) ($jenis->konversi_kecil ?? 1); + $setting = $this->getJenisUnitSetting($jenisNama); + $konversi = (int) $setting['konversi']; if ($konversi <= 0) { $konversi = 1; } if ($satuanTransaksi === 'kecil') { @@ -495,6 +507,21 @@ class GudangController extends Controller return $qtyInput * $konversi; } + private function getJenisUnitSetting($jenisNama) + { + $jenis = SIMBHPJenis::where('jenis', $jenisNama)->first(); + $satuanKecil = trim((string) ($jenis->satuan_kecil ?? '')); + $konversi = (int) ($jenis->konversi_kecil ?? 1); + if ($konversi <= 0) { $konversi = 1; } + $hasBreakdown = ($satuanKecil !== '' && $konversi > 1); + + return [ + 'has_breakdown' => $hasBreakdown, + 'konversi' => $konversi, + 'satuan_kecil' => $satuanKecil, + ]; + } + private function getStockBaseByJenis($jenisNama) { $rows = SIMBHPReport::where('jenis', $jenisNama)->get(); diff --git a/htdocs/resources/views/admin/gudang.blade.php b/htdocs/resources/views/admin/gudang.blade.php index 1515e9a0..75451726 100644 --- a/htdocs/resources/views/admin/gudang.blade.php +++ b/htdocs/resources/views/admin/gudang.blade.php @@ -480,6 +480,21 @@ $(document).ready(function() { openedpage(); var token=document.getElementById('token').value; + + function syncOutSatuanMode(){ + var selected = $('#out_pos option:selected'); + var satuanKecil = (selected.data('satuan-kecil') || '').toString().trim(); + var konversi = parseInt(selected.data('konversi') || 1, 10); + var hasBreakdown = satuanKecil !== '' && konversi > 1; + $('#out_satuan_transaksi option[value="kecil"]').prop('disabled', !hasBreakdown); + if(!hasBreakdown){ + $('#out_satuan_transaksi').val('besar'); + } + } + + $('#out_pos').on('change', function(){ syncOutSatuanMode(); }); + syncOutSatuanMode(); + $("#topbtntambahjenis").click(function(){ $("#modaltambahjenisbrg").modal('show'); $("#jenis_idne").val('new'); }); $("#topbtnpemasukan").click(function(){ $("#modalpemasukan").modal('show'); }); $("#topbtnpengeluaran").click(function(){ $("#modalpengeluaran").modal('show'); }); diff --git a/htdocs/resources/views/base/partials/header-plain.blade.php b/htdocs/resources/views/base/partials/header-plain.blade.php index dcaf5476..b55f2877 100644 --- a/htdocs/resources/views/base/partials/header-plain.blade.php +++ b/htdocs/resources/views/base/partials/header-plain.blade.php @@ -66,9 +66,9 @@