mirror of
https://github.com/kevin-DL/LaravelShoppingcart.git
synced 2026-01-11 18:54:33 +00:00
Revert "Manually merged https://github.com/Crinsane/LaravelShoppingcart/pull/502"
This reverts commit 5d117a0acd.
This commit is contained in:
34
README.md
34
README.md
@@ -49,7 +49,7 @@ Cart::add('293ad', 'Product 1', 1, 9.99);
|
||||
As an optional fifth parameter you can pass it options, so you can add multiple items with the same id, but with (for instance) a different size.
|
||||
|
||||
```php
|
||||
Cart::add('293ad', 'Product 1', 1, 9.99, 'weight' => 550, ['size' => 'large']);
|
||||
Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large']);
|
||||
```
|
||||
|
||||
**The `add()` method will return an CartItem instance of the item you just added to the cart.**
|
||||
@@ -57,7 +57,7 @@ Cart::add('293ad', 'Product 1', 1, 9.99, 'weight' => 550, ['size' => 'large']);
|
||||
Maybe you prefer to add the item using an array? As long as the array contains the required keys, you can pass it to the method. The options key is optional.
|
||||
|
||||
```php
|
||||
Cart::add(['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'weight' => 550, 'options' => ['size' => 'large']]);
|
||||
Cart::add(['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 9.99, 'options' => ['size' => 'large']]);
|
||||
```
|
||||
|
||||
New in version 2 of the package is the possibility to work with the [Buyable](#buyable) interface. The way this works is that you have a model implement the [Buyable](#buyable) interface, which will make you implement a few methods so the package knows how to get the id, name and price from your model.
|
||||
@@ -80,8 +80,8 @@ You can just pass the `add()` method an array of arrays, or an array of Buyables
|
||||
|
||||
```php
|
||||
Cart::add([
|
||||
['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00, 'weight' => 550 ],
|
||||
['id' => '4832k', 'name' => 'Product 2', 'qty' => 1, 'price' => 10.00, 'weight' => 550, 'options' => ['size' => 'large']]
|
||||
['id' => '293ad', 'name' => 'Product 1', 'qty' => 1, 'price' => 10.00],
|
||||
['id' => '4832k', 'name' => 'Product 2', 'qty' => 1, 'price' => 10.00, 'options' => ['size' => 'large']]
|
||||
]);
|
||||
|
||||
Cart::add([$product1, $product2]);
|
||||
@@ -152,24 +152,6 @@ If you want to completely remove the content of a cart, you can call the destroy
|
||||
Cart::destroy();
|
||||
```
|
||||
|
||||
### Cart::weight()
|
||||
|
||||
The `weight()` method can be used to get the weight total of all items in the cart, given there weight and quantity.
|
||||
|
||||
```php
|
||||
Cart::weight();
|
||||
```
|
||||
|
||||
The method will automatically format the result, which you can tweak using the three optional parameters
|
||||
|
||||
```php
|
||||
Cart::weight($decimals, $decimalSeperator, $thousandSeperator);
|
||||
```
|
||||
|
||||
You can set the default number format in the config file.
|
||||
|
||||
**If you're not using the Facade, but use dependency injection in your (for instance) Controller, you can also simply get the total property `$cart->weight`**
|
||||
|
||||
### Cart::total()
|
||||
|
||||
The `total()` method can be used to get the calculated total of all items in the cart, given there price and quantity.
|
||||
@@ -391,12 +373,12 @@ If you want to switch instances, you just call `Cart::instance('otherInstance')`
|
||||
So a little example:
|
||||
|
||||
```php
|
||||
Cart::instance('shopping')->add('192ao12', 'Product 1', 1, 9.99, 550);
|
||||
Cart::instance('shopping')->add('192ao12', 'Product 1', 1, 9.99);
|
||||
|
||||
// Get the content of the 'shopping' cart
|
||||
Cart::content();
|
||||
|
||||
Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, 550, ['size' => 'medium']);
|
||||
Cart::instance('wishlist')->add('sdjk922', 'Product 2', 1, 19.95, ['size' => 'medium']);
|
||||
|
||||
// Get the content of the 'wishlist' cart
|
||||
Cart::content();
|
||||
@@ -469,7 +451,7 @@ Here is an example:
|
||||
```php
|
||||
|
||||
// First we'll add the item to the cart.
|
||||
$cartItem = Cart::add('293ad', 'Product 1', 1, 9.99, 550, ['size' => 'large']);
|
||||
$cartItem = Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large']);
|
||||
|
||||
// Next we associate a model with the item.
|
||||
Cart::associate($cartItem->rowId, 'Product');
|
||||
@@ -478,7 +460,7 @@ Cart::associate($cartItem->rowId, 'Product');
|
||||
$cartItem->associate('Product');
|
||||
|
||||
// You can even make it a one-liner
|
||||
Cart::add('293ad', 'Product 1', 1, 9.99, 550, ['size' => 'large'])->associate('Product');
|
||||
Cart::add('293ad', 'Product 1', 1, 9.99, ['size' => 'large'])->associate('Product');
|
||||
|
||||
// Now, when iterating over the content of the cart, you can access the model.
|
||||
foreach(Cart::content() as $row) {
|
||||
|
||||
33
src/Cart.php
33
src/Cart.php
@@ -424,33 +424,6 @@ class Cart
|
||||
return $this->numberFormat($this->initialFloat(), $decimals, $decimalPoint, $thousandSeperator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the total weight of the items in the cart.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function weightFloat()
|
||||
{
|
||||
$content = $this->getContent();
|
||||
$total = $content->reduce(function ($total, CartItem $cartItem) {
|
||||
return $total + ($cartItem->qty * $cartItem->weight);
|
||||
}, 0);
|
||||
return $total;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the total weight of the items in the cart.
|
||||
*
|
||||
* @param int $decimals
|
||||
* @param string $decimalPoint
|
||||
* @param string $thousandSeperator
|
||||
* @return string
|
||||
*/
|
||||
public function weight($decimals = null, $decimalPoint = null, $thousandSeperator = null)
|
||||
{
|
||||
return $this->numberFormat($this->weightFloat(), $decimals, $decimalPoint, $thousandSeperator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Search the cart content for a cart item matching the given search closure.
|
||||
*
|
||||
@@ -630,12 +603,12 @@ class Cart
|
||||
* @param mixed $identifier Identifier of the Cart to merge with.
|
||||
* @param bool $keepDiscount Keep the discount of the CartItems.
|
||||
* @param bool $keepTax Keep the tax of the CartItems.
|
||||
* @return bool
|
||||
* @return void
|
||||
*/
|
||||
public function merge( $identifier, $keepDiscount = false, $keepTax = false )
|
||||
{
|
||||
if( ! $this->storedCartWithIdentifierExists($identifier)) {
|
||||
return false;
|
||||
return;
|
||||
}
|
||||
|
||||
$stored = $this->getConnection()->table($this->getTableName())
|
||||
@@ -646,8 +619,6 @@ class Cart
|
||||
foreach ($storedContent as $cartItem) {
|
||||
$this->addCartItem($cartItem, $keepDiscount, $keepTax);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -43,13 +43,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
*/
|
||||
public $price;
|
||||
|
||||
/**
|
||||
* The weight of the product.
|
||||
*
|
||||
* @var float
|
||||
*/
|
||||
public $weight;
|
||||
|
||||
/**
|
||||
* The options for this cart item.
|
||||
*
|
||||
@@ -86,7 +79,7 @@ class CartItem implements Arrayable, Jsonable
|
||||
* @param float $price
|
||||
* @param array $options
|
||||
*/
|
||||
public function __construct($id, $name, $price, $weight = 0, array $options = [])
|
||||
public function __construct($id, $name, $price, array $options = [])
|
||||
{
|
||||
if(empty($id)) {
|
||||
throw new \InvalidArgumentException('Please supply a valid identifier.');
|
||||
@@ -101,7 +94,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
$this->id = $id;
|
||||
$this->name = $name;
|
||||
$this->price = floatval($price);
|
||||
$this->weight = floatval($weight);
|
||||
$this->options = new CartItemOptions($options);
|
||||
$this->rowId = $this->generateRowId($id, $options);
|
||||
}
|
||||
@@ -225,19 +217,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
return $this->numberFormat($this->discountTotal, $decimals, $decimalPoint, $thousandSeperator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the formatted weight.
|
||||
*
|
||||
* @param int $decimals
|
||||
* @param string $decimalPoint
|
||||
* @param string $thousandSeperator
|
||||
* @return string
|
||||
*/
|
||||
public function weight($decimals = null, $decimalPoint = null, $thousandSeperator = null)
|
||||
{
|
||||
return $this->numberFormat($this->weight, $decimals, $decimalPoint, $thousandSeperator);
|
||||
}
|
||||
|
||||
/**
|
||||
* Set the quantity for this cart item.
|
||||
*
|
||||
@@ -277,7 +256,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
$this->qty = array_get($attributes, 'qty', $this->qty);
|
||||
$this->name = array_get($attributes, 'name', $this->name);
|
||||
$this->price = array_get($attributes, 'price', $this->price);
|
||||
$this->weight = array_get($attributes, 'weight', $this->weight);
|
||||
$this->priceTax = $this->price + $this->tax;
|
||||
$this->options = new CartItemOptions(array_get($attributes, 'options', $this->options));
|
||||
|
||||
@@ -367,10 +345,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
return $this->discount * $this->qty;
|
||||
}
|
||||
|
||||
if($attribute === 'weightTotal') {
|
||||
return $this->qty * $this->weight;
|
||||
}
|
||||
|
||||
if($attribute === 'model' && isset($this->associatedModel)) {
|
||||
return with(new $this->associatedModel)->find($this->id);
|
||||
}
|
||||
@@ -387,7 +361,7 @@ class CartItem implements Arrayable, Jsonable
|
||||
*/
|
||||
public static function fromBuyable(Buyable $item, array $options = [])
|
||||
{
|
||||
return new self($item->getBuyableIdentifier($options), $item->getBuyableDescription($options), $item->getBuyablePrice($options), $item->getBuyableWeight($options), $options);
|
||||
return new self($item->getBuyableIdentifier($options), $item->getBuyableDescription($options), $item->getBuyablePrice($options), $options);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -412,9 +386,9 @@ class CartItem implements Arrayable, Jsonable
|
||||
* @param array $options
|
||||
* @return \Gloudemans\Shoppingcart\CartItem
|
||||
*/
|
||||
public static function fromAttributes($id, $name, $price, $weight = 0, array $options = [])
|
||||
public static function fromAttributes($id, $name, $price, array $options = [])
|
||||
{
|
||||
return new self($id, $name, $price, $weight, $options);
|
||||
return new self($id, $name, $price, $options);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -444,7 +418,6 @@ class CartItem implements Arrayable, Jsonable
|
||||
'name' => $this->name,
|
||||
'qty' => $this->qty,
|
||||
'price' => $this->price,
|
||||
'weight' => $this->weight,
|
||||
'options' => $this->options->toArray(),
|
||||
'discount' => $this->discount,
|
||||
'tax' => $this->tax,
|
||||
|
||||
@@ -24,11 +24,4 @@ interface Buyable
|
||||
* @return float
|
||||
*/
|
||||
public function getBuyablePrice($options = null);
|
||||
|
||||
/**
|
||||
* Get the weight of the Buyable item.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getBuyableWeight($options = null);
|
||||
}
|
||||
@@ -22,7 +22,7 @@ class CartItemTest extends TestCase
|
||||
/** @test */
|
||||
public function it_can_be_cast_to_an_array()
|
||||
{
|
||||
$cartItem = new CartItem(1, 'Some item', 10.00, 550, ['size' => 'XL', 'color' => 'red']);
|
||||
$cartItem = new CartItem(1, 'Some item', 10.00, ['size' => 'XL', 'color' => 'red']);
|
||||
$cartItem->setQuantity(2);
|
||||
|
||||
$this->assertEquals([
|
||||
@@ -37,20 +37,19 @@ class CartItemTest extends TestCase
|
||||
],
|
||||
'tax' => 0,
|
||||
'subtotal' => 20.00,
|
||||
'discount' => 0.0,
|
||||
'weight' => 550.0
|
||||
'discount' => 0.0
|
||||
], $cartItem->toArray());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_can_be_cast_to_json()
|
||||
{
|
||||
$cartItem = new CartItem(1, 'Some item', 10.00, 550, ['size' => 'XL', 'color' => 'red']);
|
||||
$cartItem = new CartItem(1, 'Some item', 10.00, ['size' => 'XL', 'color' => 'red']);
|
||||
$cartItem->setQuantity(2);
|
||||
|
||||
$this->assertJson($cartItem->toJson());
|
||||
|
||||
$json = '{"rowId":"07d5da5550494c62daf9993cf954303f","id":1,"name":"Some item","qty":2,"price":10,"weight":550,"options":{"size":"XL","color":"red"},"discount":0,"tax":0,"subtotal":20}';
|
||||
$json = '{"rowId":"07d5da5550494c62daf9993cf954303f","id":1,"name":"Some item","qty":2,"price":10,"options":{"size":"XL","color":"red"},"discount":0,"tax":0,"subtotal":20}';
|
||||
|
||||
$this->assertEquals($json, $cartItem->toJson());
|
||||
}
|
||||
|
||||
@@ -488,8 +488,7 @@ class CartTest extends TestCase
|
||||
'tax' => 2.10,
|
||||
'subtotal' => 10.0,
|
||||
'options' => [],
|
||||
'discount' => 0.0,
|
||||
'weight' => 0.0
|
||||
'discount' => 0.0
|
||||
],
|
||||
'370d08585360f5c568b18d1f2e4ca1df' => [
|
||||
'rowId' => '370d08585360f5c568b18d1f2e4ca1df',
|
||||
@@ -500,8 +499,7 @@ class CartTest extends TestCase
|
||||
'tax' => 2.10,
|
||||
'subtotal' => 10.0,
|
||||
'options' => [],
|
||||
'discount' => 0.0,
|
||||
'weight' => 0.0
|
||||
'discount' => 0.0
|
||||
]
|
||||
], $content->toArray());
|
||||
}
|
||||
@@ -999,101 +997,6 @@ class CartTest extends TestCase
|
||||
$this->assertEquals(10, $cart3->totalFloat());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function it_cant_merge_non_existing_cart()
|
||||
{
|
||||
$this->artisan('migrate', [
|
||||
'--database' => 'testing',
|
||||
]);
|
||||
|
||||
Event::fake();
|
||||
|
||||
$cart = $this->getCartDiscount(50);
|
||||
$cart->add( new BuyableProduct(1, 'Item', 10.00), 1);
|
||||
$cart->add( new BuyableProduct(2, 'Item 2', 10.00), 1);
|
||||
|
||||
$this->assertEquals(false, $cart->merge('doesNotExist'));
|
||||
$this->assertEquals(2, $cart->countInstances());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function cart_can_calculate_all_values()
|
||||
{
|
||||
$cart = $this->getCartDiscount( 50 );
|
||||
|
||||
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
||||
|
||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||
|
||||
$cart->setTax('027c91341fd5cf4d2579b49c4b6a90da', 19);
|
||||
|
||||
$this->assertEquals('10.00', $cart->initial(2));
|
||||
$this->assertEquals(10.00, $cart->initialFloat());
|
||||
$this->assertEquals('5.00', $cart->discount(2));
|
||||
$this->assertEquals(5.00, $cart->discountFloat());
|
||||
$this->assertEquals('5.00', $cart->subtotal(2));
|
||||
$this->assertEquals(5.00, $cart->subtotalFloat());
|
||||
$this->assertEquals('0.95', $cart->tax(2));
|
||||
$this->assertEquals(0.95, $cart->taxFloat());
|
||||
$this->assertEquals('5.95', $cart->total(2));
|
||||
$this->assertEquals(5.95, $cart->totalFloat());
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function can_access_cart_item_propertys()
|
||||
{
|
||||
$cart = $this->getCartDiscount( 50 );
|
||||
|
||||
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
||||
|
||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||
|
||||
$this->assertEquals(50, $cartItem->discountRate);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function cant_access_non_existant_propertys()
|
||||
{
|
||||
$cart = $this->getCartDiscount( 50 );
|
||||
|
||||
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
||||
|
||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||
|
||||
$this->assertEquals(null, $cartItem->doesNotExist);
|
||||
$this->assertEquals(null, $cart->doesNotExist);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function can_set_cart_item_discount()
|
||||
{
|
||||
$cart = $this->getCart();
|
||||
|
||||
$cart->add(new BuyableProduct(1, 'First item', 10.00), 1);
|
||||
|
||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||
|
||||
$cart->setDiscount('027c91341fd5cf4d2579b49c4b6a90da', 50);
|
||||
|
||||
$this->assertEquals(50, $cartItem->discountRate);
|
||||
}
|
||||
|
||||
/** @test */
|
||||
public function can_set_cart_item_weight_and_calculate_total_weight()
|
||||
{
|
||||
$cart = $this->getCart();
|
||||
|
||||
$cart->add(new BuyableProduct(1, 'First item', 10.00, 250), 2);
|
||||
|
||||
$cartItem = $cart->get('027c91341fd5cf4d2579b49c4b6a90da');
|
||||
|
||||
$cart->setDiscount('027c91341fd5cf4d2579b49c4b6a90da', 50);
|
||||
|
||||
$this->assertEquals('500.00', $cart->weight(2));
|
||||
$this->assertEquals(500.00, $cart->weightFloat());
|
||||
$this->assertEquals(500.00, $cartItem->weightTotal);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an instance of the cart.
|
||||
*
|
||||
|
||||
@@ -28,12 +28,11 @@ class BuyableProduct implements Buyable
|
||||
* @param string $name
|
||||
* @param float $price
|
||||
*/
|
||||
public function __construct($id = 1, $name = 'Item name', $price = 10.00, $weight = 0)
|
||||
public function __construct($id = 1, $name = 'Item name', $price = 10.00)
|
||||
{
|
||||
$this->id = $id;
|
||||
$this->name = $name;
|
||||
$this->price = $price;
|
||||
$this->weight = $weight;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -65,14 +64,4 @@ class BuyableProduct implements Buyable
|
||||
{
|
||||
return $this->price;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the price of the Buyable item.
|
||||
*
|
||||
* @return float
|
||||
*/
|
||||
public function getBuyableWeight($options = null)
|
||||
{
|
||||
return $this->weight;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user