This commit is contained in:
Dwi Swandhana
2026-02-21 18:58:12 +07:00
parent aed5885eb1
commit af2dd2f819
3 changed files with 297 additions and 29 deletions
@@ -122,9 +122,12 @@ class BiorepositoryController extends Controller
'slotnomor' => 'required|integer|min:1',
'boxnomor' => 'required|integer|min:1',
'tubenomor' => 'required|integer|min:1',
'nmbakteri' => 'required|max:200',
'strain' => 'required|in:Gram Negatif,Gram Positif',
'nmbakteri' => 'nullable|max:200',
'strain' => 'nullable|in:Gram Negatif,Gram Positif',
'stored_at' => 'required|date',
'volume' => 'nullable|numeric|min:0',
'volume_ambil' => 'nullable|numeric|min:0',
'existing_specimen_id' => 'nullable|integer',
]);
if ($validator->fails()) {
@@ -151,10 +154,36 @@ class BiorepositoryController extends Controller
$slotTaken = BioSpecimen::where('rack_id', $rack->id)
->where('shelf_number', $request->input('shelfnomor'))
->where('tube_number', $request->input('tubenomor'))
->exists();
->first();
if ($slotTaken) {
return back()->withErrors(['tubenomor' => 'Posisi tube pada shelf ini sudah terisi spesimen.'])->withInput();
$existingId = (int) $request->input('existing_specimen_id');
if ($existingId !== (int) $slotTaken->id) {
return back()->withErrors(['tubenomor' => 'Posisi tube pada shelf ini sudah terisi spesimen.'])->withInput();
}
$volumeAmbil = (float) $request->input('volume_ambil');
if ($volumeAmbil <= 0) {
return back()->withErrors(['volume_ambil' => 'Isi volume yang diambil dari spesimen.'])->withInput();
}
$volumeSekarang = (float) ($slotTaken->volume ?? 0);
if ($volumeAmbil > $volumeSekarang) {
return back()->withErrors(['volume_ambil' => 'Volume diambil melebihi sisa volume spesimen.'])->withInput();
}
$slotTaken->volume = (string) ($volumeSekarang - $volumeAmbil);
$slotTaken->save();
return redirect('/biorepository')->with('success', 'Pengambilan volume berhasil. Sisa volume diperbarui.');
}
if (!$request->filled('nmbakteri') || !$request->filled('strain')) {
return back()->withErrors(['nmbakteri' => 'Nama bakteri dan strain wajib diisi untuk spesimen baru.'])->withInput();
}
if (!$request->filled('volume')) {
return back()->withErrors(['volume' => 'Volume awal spesimen wajib diisi.'])->withInput();
}
$atccByUser = strtoupper(preg_replace('/[^A-Za-z0-9]/', '', Session::get('nama', 'UNKNOWN')));
@@ -195,6 +224,7 @@ class BiorepositoryController extends Controller
'input_by' => Session::get('nama'),
'stored_at' => $request->input('stored_at'),
'storage_condition' => $this->mapStorageCondition($request->input('kategorisimpan')),
'volume' => (string) $request->input('volume'),
'notes' => $request->input('notes'),
]);