hasMany(BorrowTransaction::class, 'koleksi_id', 'biblio_id'); } public function scopeBorrowed($query) { return $query->whereHas('borrowTransactions', function ($q) { $q->whereIn('status', ['dipinjam', 'disetujui', 'pengembalian_menunggu']); }); } public function scopeAvailable($query) { return $query->whereDoesntHave('borrowTransactions', function ($q) { $q->whereIn('status', ['dipinjam', 'disetujui', 'pengembalian_menunggu']); }); } public function isBorrowed() { return $this->borrowTransactions() ->whereIn('status', ['dipinjam', 'disetujui', 'pengembalian_menunggu']) ->exists(); } public function getStatusAttribute() { return $this->isBorrowed() ? 'Dipinjam' : 'Tersedia'; } public function scopeWithStatus($query) { return $query->with(['borrowTransactions' => function ($q) { $q->latest(); }]); } public function getBarcodeUrlAttribute() { if ($this->barcode && Storage::disk('public')->exists($this->barcode)) { return asset('storage/' . $this->barcode); } return null; } public function hasBarcode() { return $this->barcode && Storage::disk('public')->exists($this->barcode); } }