Fix mikro expertise auto-open and early warning target logic

This commit is contained in:
Dwi Swandhana
2026-05-09 05:47:10 +07:00
parent 4d942523d1
commit 49e94c3fb5
4 changed files with 62 additions and 22 deletions
@@ -691,7 +691,7 @@ class FrontpageController extends Controller
if (!Session::has('previlage')) {
return redirect('/login');
}
$periksa = Periksa::select('id', 'poli_id', 'daftar')->find($periksaId);
$periksa = Periksa::select('id', 'poli_id', 'daftar', 'nofoto')->find($periksaId);
if (!$periksa) {
abort(404);
}
@@ -706,9 +706,11 @@ class FrontpageController extends Controller
return view($this->mikroExpertiseViewName(), $this->buildMikroViewData($master, [
'focusPeriksaId' => (string) $periksaId,
'focusNoFoto' => (string) ($periksa->nofoto ?? ''),
'expertiseReturnUrl' => $returnUrl,
'openExpertiseOnLoad' => true,
'initialListMode' => 'searchbydate',
'initialListMode' => 'nofoto',
'initialSearchValue' => (string) ($periksa->nofoto ?? ''),
'initialStartDate' => $periksaDate,
'initialEndDate' => $periksaDate,
]));
+29 -9
View File
@@ -6,7 +6,6 @@ use App\Services\SimbhpStockService;
use App\SIMBHPJenis;
use App\SIMBHPReport;
use App\User;
use App\Ruangan;
use Carbon\Carbon;
use Livewire\Component;
use Livewire\Attributes\On;
@@ -18,7 +17,9 @@ class GudangPos extends Component
use WithPagination;
public string $tanggal = '';
public ?string $penerimaId = null;
public string $namaRuangan = '';
public string $penerimaId = '';
public string $penerimaManual = '';
public string $scan = '';
public string $selectedKode = '';
@@ -36,7 +37,8 @@ class GudangPos extends Component
public function mount(): void
{
$this->tanggal = date('Y-m-d');
$this->penerimaId = User::orderBy('nama', 'ASC')->value('nama');
$firstUserId = User::orderBy('nama', 'ASC')->value('id');
$this->penerimaId = $firstUserId ? (string) $firstUserId : '';
}
public function updatingSearch(): void
@@ -183,7 +185,7 @@ class GudangPos extends Component
return;
}
if (!$this->penerimaId) {
if ($this->penerimaId === '') {
$this->toast('error', 'Penerima wajib dipilih.');
return;
}
@@ -201,7 +203,26 @@ class GudangPos extends Component
return;
}
$penerima = $this->penerimaId;
$namaRuangan = trim((string) $this->namaRuangan);
if ($namaRuangan === '') {
$this->toast('error', 'Nama ruang wajib diisi.');
return;
}
if ($this->penerimaId === '__manual__') {
$penerima = trim((string) $this->penerimaManual);
if ($penerima === '') {
$this->toast('error', 'Nama penerima manual wajib diisi.');
return;
}
} else {
$user = User::select('id', 'nama')->find((int) $this->penerimaId);
if (!$user) {
$this->toast('error', 'Penerima tidak ditemukan.');
return;
}
$penerima = trim((string) ($user->nama ?? ''));
}
$service = app(SimbhpStockService::class);
@@ -253,7 +274,7 @@ class GudangPos extends Component
];
}
DB::transaction(function () use ($prepared, $date, $penerima) {
DB::transaction(function () use ($prepared, $date, $penerima, $namaRuangan) {
foreach ($prepared as $row) {
/** @var SIMBHPJenis $jenis */
$jenis = $row['jenis'];
@@ -261,7 +282,7 @@ class GudangPos extends Component
'tanggal' => (int) $date->format('d'),
'bulan' => (int) $date->format('m'),
'tahun' => (int) $date->format('Y'),
'deskripsi' => 'Diterima oleh ' . ($penerima ?? $penerimaId),
'deskripsi' => 'Ruangan: ' . $namaRuangan . ' | Diterima oleh ' . ($penerima !== '' ? $penerima : 'Unknown'),
'pemasukan' => null,
'pengeluaran' => (int) $row['qty'],
'qty_base' => (int) $row['qty_base'],
@@ -277,6 +298,7 @@ class GudangPos extends Component
$this->cart = [];
$this->qty = 1;
$this->keterangan = '';
$this->penerimaManual = '';
$this->toast('success', 'Barang keluar berhasil diproses.');
$this->dispatch('gudang-refresh');
$this->dispatch('gudangpos-close-modal');
@@ -322,7 +344,6 @@ class GudangPos extends Component
$service = app(SimbhpStockService::class);
$users = User::select('id', 'nama', 'previlage')->orderBy('nama', 'ASC')->get();
$ruangans = Ruangan::select('id', 'ruangan')->orderBy('ruangan', 'ASC')->get();
$query = SIMBHPJenis::query()->orderBy('jenis', 'ASC');
$search = trim((string) $this->search);
@@ -395,7 +416,6 @@ class GudangPos extends Component
return view('livewire.gudang-pos', [
'users' => $users,
'ruangans' => $ruangans,
'products' => $products,
'stockMap' => $stockMap,
'latestExpiredMap' => $latestExpiredMap,
@@ -4,9 +4,11 @@
<script type="text/javascript">
$(function () {
var focusPeriksaId = @json((string) ($focusPeriksaId ?? ''));
var focusNoFoto = @json((string) ($focusNoFoto ?? ''));
var returnUrl = @json($expertiseReturnUrl ?? url('/'));
var shouldOpenOnLoad = @json((bool) ($openExpertiseOnLoad ?? false));
var initialListMode = @json($initialListMode ?? 'searchbydate');
var initialSearchValue = @json($initialSearchValue ?? '');
var initialStartDate = @json($initialStartDate ?? '');
var initialEndDate = @json($initialEndDate ?? '');
var autoOpenAttempts = 0;
@@ -28,7 +30,7 @@
$('#master_set01').val(initialListMode);
}
if ($('#valcari').length) {
$('#valcari').val('');
$('#valcari').val(initialSearchValue);
}
}
@@ -83,10 +85,12 @@
var rows = $('#gridpemeriksaan').jqxGrid('getrows') || [];
var matchedRow = null;
var matchedRowIndex = -1;
for (var i = 0; i < rows.length; i++) {
if (String(rows[i].id) === focusPeriksaId) {
if (String(rows[i].id) === focusPeriksaId || (focusNoFoto !== '' && String(rows[i].nofoto) === focusNoFoto)) {
matchedRow = rows[i];
matchedRowIndex = i;
break;
}
}
@@ -99,12 +103,12 @@
return;
}
var boundIndex = matchedRow.boundindex;
$('#gridpemeriksaan').jqxGrid('selectrow', boundIndex);
$('#gridpemeriksaan').jqxGrid('ensurerowvisible', boundIndex);
var triggerRowIndex = matchedRowIndex >= 0 ? matchedRowIndex : matchedRow.boundindex;
$('#gridpemeriksaan').jqxGrid('selectrow', triggerRowIndex);
$('#gridpemeriksaan').jqxGrid('ensurerowvisible', triggerRowIndex);
setTimeout(function () {
if (triggerExpertiseButton(boundIndex)) {
if (triggerExpertiseButton(triggerRowIndex)) {
hasOpenedTarget = true;
return;
}
@@ -85,19 +85,33 @@
</div>
<div class="col-md-6">
<div class="form-group">
<label>Penerima</label>
<label>Nama Ruang</label>
<input type="text" class="form-control" wire:model.live="namaRuangan" placeholder="contoh: ICU / Lab Mikrobiologi / OK">
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div class="form-group">
<label>Nama Penerima Barang</label>
<select class="form-control" wire:model.live="penerimaId">
@foreach($users as $u)
<option value="{{ $u->nama }}">{{ $u->nama }}</option>
@endforeach
@foreach($ruangans as $ruang)
<option value="{{ $ruang->ruangan }}">{{ $ruang->ruangan }}</option>
<option value="{{ $u->id }}">{{ $u->nama }}</option>
@endforeach
<option value="__manual__">Lainnya, ketik manual</option>
</select>
</div>
</div>
</div>
@if($penerimaId === '__manual__')
<div class="form-group">
<label>Nama Penerima Manual</label>
<input type="text" class="form-control" wire:model.live="penerimaManual" placeholder="ketik nama penerima barang">
</div>
@endif
<div class="table-responsive">
<table class="table table-bordered table-striped m-b-0">
<thead>