mirror of
https://github.com/kevin-DL/LaravelShoppingcart.git
synced 2026-01-23 15:41:24 +00:00
Update CartItemModel.php
This commit is contained in:
@@ -23,6 +23,7 @@ class CartItemModel extends Model
|
|||||||
'row_id',
|
'row_id',
|
||||||
'cart_id',
|
'cart_id',
|
||||||
'price',
|
'price',
|
||||||
|
'qty',
|
||||||
'discount_rate',
|
'discount_rate',
|
||||||
'discount_fixed',
|
'discount_fixed',
|
||||||
'taxRate',
|
'taxRate',
|
||||||
@@ -56,4 +57,74 @@ class CartItemModel extends Model
|
|||||||
set: fn (Money $value) => $value,
|
set: fn (Money $value) => $value,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This will is the price of the CartItem considering the set quantity. If you need the single
|
||||||
|
* price just set the parameter to true.
|
||||||
|
*/
|
||||||
|
public function priceAll(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => $this->price->multiply($this->qty),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the discount granted for this CartItem. It is based on the given price and, in case
|
||||||
|
* discount is a float, multiplied or, in case it is an absolute Money, subtracted. It will return
|
||||||
|
* a minimum value of 0.
|
||||||
|
*/
|
||||||
|
public function discount(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => {
|
||||||
|
if ($this->discount instanceof Money) {
|
||||||
|
return $this->price_all->subtract($this->discount)
|
||||||
|
} else {
|
||||||
|
return $this->price_all->multiply(sprintf('%.14F', $this->discount), Config::get('cart.rounding', Money::ROUND_UP)),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the final price of the CartItem but without any tax applied. This does on the
|
||||||
|
* other hand include any discounts.
|
||||||
|
*/
|
||||||
|
public function subtotal(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => Money::max(new Money(0, $this->price->getCurrency()), $this->price()->subtract($this->discount())),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the tax, based on the subtotal (all previous calculations) and set tax rate.
|
||||||
|
*/
|
||||||
|
public function tax(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => $this->subtotal()->multiply(sprintf('%.14F', $this->taxRate), Config::get('cart.rounding', Money::ROUND_UP)),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the total price, consisting of the subtotal and tax applied.
|
||||||
|
*/
|
||||||
|
public function total(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => $this->subtotal()->add($this->tax()),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This is the total price, consisting of the subtotal and tax applied.
|
||||||
|
*/
|
||||||
|
public function totalWeight(): Attribute
|
||||||
|
{
|
||||||
|
return new Attribute(
|
||||||
|
get: fn () => $this->qty * $this->weight,
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user