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 mutations() { return $this->hasMany(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['dates'] ?? null, function ($query, $dates) { // $datess = []; // foreach ($dates as $date) { // array_push($datess, Carbon::parse($date)->translatedFormat('d/m/Y')); // } $query->whereBetween('created_at', $dates); })->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(), 2, 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()); } }