Carbon::parse($value)->translatedFormat('l d/m/Y') ); } public function discount(): Attribute { return Attribute::make( get:fn($value) => "{$value}%" ); } public function transactionDetails() { return $this->hasMany(TransactionDetail::class); } public function customer() { return $this->belongsTo(Customer::class, 'customer_number', 'customer_number'); } public function outlet() { return $this->belongsTo(Outlet::class); } public function transactionStatus() { return $this->belongsTo(TransactionStatus::class); } public function user() { return $this->belongsTo(User::class); } public function mutation() { return $this->hasOne(Mutation::class); } public function scopeFilter($query, array $filters) { $query->when($filters['search'] ?? null, function ($query, $search) { $query->where(function ($query) use ($search) { $query->where('transaction_number', 'like', '%' . $search . '%') ->orWhereHas('customer', function ($query) use ($search) { $query->where('customer_number', 'like', '%' . $search . '%') ->orWhere('phone', 'like', '%' . $search . '%'); }); }); })->when($filters['startDate'] ?? null, function ($query, $date) { $query->whereDate('created_at', '>=', $date); })->when($filters['endDate'] ?? null, function ($query, $date) { $query->whereDate('created_at', '<=', $date); })->when($filters['outlet'] ?? null, function ($query, $outlet) { $query->where('outlet_id', $outlet); }); } public function totalPrice() { $price = $this->transactionDetails->sum(function ($transactionDetail) { $price = $transactionDetail->getRawOriginal('price') * $transactionDetail->quantity; return $price - $price * ($transactionDetail->getRawOriginal('discount') / 100); }); return $price - $price * ($this->getRawOriginal('discount') / 100); } public function totalPriceAsString() { return $this->setRupiahFormat($this->totalPrice()); } public function totalPriceAsFullString() { return $this->setRupiahFormat($this->totalPrice(), 0, true); } public function subTotal() { $subTotal = $this->transactionDetails->sum(function ($transactionDetail) { $price = $transactionDetail->getRawOriginal('price') * $transactionDetail->quantity; return $price - $price * ($transactionDetail->getRawOriginal('discount') / 100); }); return $subTotal; } public function subTotalAsString() { return $this->setRupiahFormat($this->subTotal()); } public function discountAsString() { $discount = $this->getRawOriginal('discount') / 100; return $this->setRupiahFormat($discount * $this->subTotal()); } }