1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace App\Models;
  3. use App\Models\Mutation;
  4. use App\Models\Outlet;
  5. use App\Models\User;
  6. use App\Services\CurrencyFormatService;
  7. use Carbon\Carbon;
  8. use Illuminate\Database\Eloquent\Casts\Attribute;
  9. use Illuminate\Database\Eloquent\Factories\HasFactory;
  10. use Illuminate\Database\Eloquent\Model;
  11. class Expense extends Model
  12. {
  13. use HasFactory;
  14. protected $fillable = [
  15. 'description',
  16. 'amount',
  17. 'user_id',
  18. 'outlet_id',
  19. ];
  20. protected function createdAt(): Attribute
  21. {
  22. return Attribute::make(
  23. get:fn($value) => Carbon::parse($value)->translatedFormat('l d/m/Y')
  24. );
  25. }
  26. protected function amount(): Attribute
  27. {
  28. return Attribute::make(
  29. get:fn($value) => (new CurrencyFormatService)->setRupiahFormat($value, true)
  30. );
  31. }
  32. public function outlet()
  33. {
  34. return $this->belongsTo(Outlet::class);
  35. }
  36. public function user()
  37. {
  38. return $this->belongsTo(User::class);
  39. }
  40. public function mutation()
  41. {
  42. return $this->hasOne(Mutation::class);
  43. }
  44. public function scopeFilter($query, array $filters)
  45. {
  46. $query->when($filters['startDate'] ?? null, function ($query, $date) {
  47. $query->whereDate('created_at', '>=', $date);
  48. })->when($filters['endDate'] ?? null, function ($query, $date) {
  49. $query->whereDate('created_at', '<=', $date);
  50. })->when($filters['outlet'] ?? null, function ($query, $outlet) {
  51. $query->where('outlet_id', $outlet);
  52. });
  53. }
  54. }