Auto-generate RFID/NFC tags based on settings
This commit is contained in:
@@ -36,6 +36,7 @@ class AssetService
|
||||
return DB::transaction(function () use ($data) {
|
||||
$data['code'] = $this->generateCode();
|
||||
$data['qr_token'] = $data['qr_token'] ?? Str::uuid()->toString();
|
||||
$this->maybeAutoTag($data);
|
||||
|
||||
// Hitung warranty_end jika ada warranty dan purchase_date
|
||||
if (!empty($data['purchase_date']) && empty($data['warranty_end'])) {
|
||||
@@ -64,6 +65,7 @@ class AssetService
|
||||
public function update(Asset $asset, array $data): Asset
|
||||
{
|
||||
return DB::transaction(function () use ($asset, $data) {
|
||||
$this->maybeAutoTag($data, $asset);
|
||||
$asset->update($data);
|
||||
if ($this->settings->get('asset.qr_enabled', true)) {
|
||||
$this->generateQr($asset);
|
||||
@@ -309,4 +311,35 @@ class AssetService
|
||||
'payload' => $payload,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Generate RFID/NFC tag otomatis sesuai setting jika belum diisi.
|
||||
*/
|
||||
private function maybeAutoTag(array &$data, ?Asset $existing = null): void
|
||||
{
|
||||
$code = $data['code'] ?? $existing?->code ?? null;
|
||||
if (!$code) {
|
||||
return;
|
||||
}
|
||||
if ($this->settings->get('asset.rfid_auto_generate', false) && empty($data['rfid_tag'])) {
|
||||
$data['rfid_tag'] = $this->uniqueTag("RFID-{$code}", 'rfid_tag', $existing?->id);
|
||||
}
|
||||
if ($this->settings->get('asset.nfc_auto_generate', false) && empty($data['nfc_tag'])) {
|
||||
$data['nfc_tag'] = $this->uniqueTag("NFC-{$code}", 'nfc_tag', $existing?->id);
|
||||
}
|
||||
}
|
||||
|
||||
private function uniqueTag(string $base, string $column, ?string $exceptId = null): string
|
||||
{
|
||||
$candidate = $base;
|
||||
$counter = 1;
|
||||
while (
|
||||
Asset::where($column, $candidate)
|
||||
->when($exceptId, fn($q) => $q->where('id', '!=', $exceptId))
|
||||
->exists()
|
||||
) {
|
||||
$candidate = "{$base}-" . (++$counter);
|
||||
}
|
||||
return $candidate;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -34,6 +34,8 @@ class SettingSeeder extends Seeder
|
||||
['key' => 'asset.consumable_enabled', 'value' => true, 'type' => 'boolean', 'group' => 'asset', 'description' => 'Aktifkan stok consumable/pool pinjaman'],
|
||||
['key' => 'asset.rfid_required', 'value' => false, 'type' => 'boolean', 'group' => 'asset', 'description' => 'Wajibkan pengisian RFID ketika aset dibuat/di-update'],
|
||||
['key' => 'asset.nfc_required', 'value' => false, 'type' => 'boolean', 'group' => 'asset', 'description' => 'Wajibkan pengisian NFC ketika aset dibuat/di-update'],
|
||||
['key' => 'asset.rfid_auto_generate', 'value' => true, 'type' => 'boolean', 'group' => 'asset', 'description' => 'Otomatis generate RFID jika kosong, menggunakan kode aset'],
|
||||
['key' => 'asset.nfc_auto_generate', 'value' => true, 'type' => 'boolean', 'group' => 'asset', 'description' => 'Otomatis generate NFC jika kosong, menggunakan kode aset'],
|
||||
['key' => 'asset.qr_format', 'value' => 'svg', 'type' => 'string', 'group' => 'asset', 'description' => 'Format file QR (svg/png/pdf)'],
|
||||
['key' => 'asset.qr_size', 'value' => 300, 'type' => 'integer', 'group' => 'asset', 'description' => 'Ukuran sisi QR dalam pixel'],
|
||||
|
||||
|
||||
Reference in New Issue
Block a user