From 55f1c4617f037255008d77eb1fc6f512237d0286 Mon Sep 17 00:00:00 2001 From: Patrick Henninger Date: Wed, 9 Jan 2019 12:22:25 +0100 Subject: [PATCH] Revert "Manually merged https://github.com/Crinsane/LaravelShoppingcart/pull/502" This reverts commit 5d117a0acd3252faf70a8e11a6707c5df0841eed. --- README.md | 34 +++------- src/Cart.php | 33 +--------- src/CartItem.php | 35 ++--------- src/Contracts/Buyable.php | 7 --- tests/CartItemTest.php | 9 ++- tests/CartTest.php | 101 +----------------------------- tests/Fixtures/BuyableProduct.php | 13 +--- 7 files changed, 21 insertions(+), 211 deletions(-) diff --git a/README.md b/README.md index c0e864d..fb8c236 100644 --- a/README.md +++ b/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) { diff --git a/src/Cart.php b/src/Cart.php index 2d23481..9688ce4 100644 --- a/src/Cart.php +++ b/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; } /** diff --git a/src/CartItem.php b/src/CartItem.php index 188a8d6..4f10cb5 100644 --- a/src/CartItem.php +++ b/src/CartItem.php @@ -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, diff --git a/src/Contracts/Buyable.php b/src/Contracts/Buyable.php index 555ed7e..f5bfeb7 100644 --- a/src/Contracts/Buyable.php +++ b/src/Contracts/Buyable.php @@ -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); } \ No newline at end of file diff --git a/tests/CartItemTest.php b/tests/CartItemTest.php index 5592087..b1ea046 100644 --- a/tests/CartItemTest.php +++ b/tests/CartItemTest.php @@ -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()); } diff --git a/tests/CartTest.php b/tests/CartTest.php index 40ac113..4e74cf8 100644 --- a/tests/CartTest.php +++ b/tests/CartTest.php @@ -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. * diff --git a/tests/Fixtures/BuyableProduct.php b/tests/Fixtures/BuyableProduct.php index d7e459b..a58e830 100644 --- a/tests/Fixtures/BuyableProduct.php +++ b/tests/Fixtures/BuyableProduct.php @@ -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; - } } \ No newline at end of file