'decimal:2', 'stock' => 'integer', 'weight' => 'integer', 'harvest_time' => 'integer', 'sold' => 'integer' ]; // Accessor untuk format harga - DIPERBAIKI public function getFormattedPriceAttribute() { return 'Rp ' . number_format($this->price, 0, ',', '.'); } // NEW: Accessor untuk URL gambar public function getImageUrlAttribute() { if ($this->image) { // Cek apakah file gambar ada di storage if (Storage::disk('public')->exists($this->image)) { return asset('storage/' . $this->image); } } // Return placeholder jika gambar tidak ada return 'https://via.placeholder.com/60x60?text=No+Image&color=6c757d&background=f8f9fa'; } // Accessor untuk status badge public function getStatusBadgeAttribute() { return $this->status === 'aktif' ? 'Aktif' : 'Non-aktif'; } // NEW: Accessor untuk status badge class (untuk styling CSS) public function getStatusBadgeClassAttribute() { return $this->status === 'aktif' ? 'status-badge success' : 'status-badge danger'; } // NEW: Accessor untuk label badge class public function getLabelBadgeClassAttribute() { if (!$this->label) { return 'label-badge bg-secondary'; } switch (strtolower($this->label)) { case 'terlaris': return 'label-badge bg-danger'; case 'tersedia': return 'label-badge bg-success'; case 'habis': return 'label-badge bg-secondary'; case 'baru': return 'label-badge bg-primary'; default: return 'label-badge bg-secondary'; } } // NEW: Method untuk mendapatkan label berdasarkan stok public function updateLabelBasedOnStock() { if ($this->stock <= 0) { $this->label = 'habis'; } elseif ($this->stock > 1000) { $this->label = 'terlaris'; } else { $this->label = 'tersedia'; } return $this; } // Scope untuk produk aktif public function scopeActive($query) { return $query->where('status', 'aktif'); } // Scope untuk produk dengan stok rendah - DIPERBAIKI public function scopeLowStock($query, $threshold = 10) { return $query->where('stock', '<=', $threshold); } // NEW: Scope untuk search public function scopeSearch($query, $term) { return $query->where('name', 'like', "%{$term}%") ->orWhere('description', 'like', "%{$term}%"); } // NEW: Scope untuk filter kategori public function scopeByCategory($query, $category) { return $query->where('category', $category); } }