Laundry.php 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <?php
  2. namespace App\Models;
  3. use App\Services\CurrencyFormatService;
  4. use Illuminate\Database\Eloquent\Casts\Attribute;
  5. use Illuminate\Database\Eloquent\Factories\HasFactory;
  6. use Illuminate\Database\Eloquent\Model;
  7. class Laundry extends Model
  8. {
  9. use HasFactory;
  10. protected $fillable = [
  11. 'name',
  12. 'price',
  13. 'unit',
  14. ];
  15. protected function name(): Attribute
  16. {
  17. return Attribute::make(
  18. set:fn($value) => ucwords($value)
  19. );
  20. }
  21. protected function unit(): Attribute
  22. {
  23. return Attribute::make(
  24. set:fn($value) => strtoupper($value)
  25. );
  26. }
  27. protected function price(): Attribute
  28. {
  29. return Attribute::make(
  30. get:fn($value) => (new CurrencyFormatService)->setRupiahFormat($value, true)
  31. );
  32. }
  33. public function transactionDetails()
  34. {
  35. return $this->hasMany(TransactionDetail::class);
  36. }
  37. public function scopeFilter($query, $search)
  38. {
  39. $query->when($search ?? null, function ($query, $search) {
  40. $query->where(function ($query) use ($search) {
  41. $query->where('name', 'like', '%' . $search . '%')
  42. ->orWhere('price', 'like', '%' . $search . '%')
  43. ->orWhere('unit', 'like', '%' . $search . '%');
  44. });
  45. });
  46. }
  47. }