Browse Source

Added EmptyDraft feature and Update Item of TransactionDraft

Added TransactionDraft getDiscountTotal method
pull/1/head
Nafies Luthfi 9 years ago
parent
commit
7f8304a5d7
  1. 7
      app/Cart/CartCollection.php
  2. 10
      app/Cart/TransactionDraft.php
  3. 12
      app/Http/Controllers/CartController.php
  4. 2
      routes/web.php
  5. 58
      tests/Feature/Cart/CartControllerTest.php

7
app/Cart/CartCollection.php

@ -66,6 +66,13 @@ class CartCollection
return $content[$draftKey];
}
public function emptyDraft($draftKey)
{
$content = $this->getContent();
$content[$draftKey]->empty();
$this->session->put($this->instance, $content);
}
public function removeDraft($draftKey)
{
$content = $this->getContent();

10
app/Cart/TransactionDraft.php

@ -43,6 +43,11 @@ abstract class TransactionDraft
unset($this->items[$itemKey]);
}
public function empty()
{
$this->items = [];
}
public function getTotal()
{
return $this->items()->sum('subtotal');
@ -53,6 +58,11 @@ abstract class TransactionDraft
return $this->items()->sum('qty');
}
public function getDiscountTotal()
{
return $this->items()->sum('item_discount_subtotal');
}
public function updateItem($itemKey, $newItemData)
{
if (!isset($this->items[$itemKey]))

12
app/Http/Controllers/CartController.php

@ -35,12 +35,24 @@ class CartController extends Controller
return redirect()->route('cart.index', $item->draftKey);
}
public function updateDraftItem(Request $request, $draftKey)
{
$this->cart->updateDraftItem($draftKey, $request->item_key, $request->only('qty','item_discount'));
return redirect()->route('cart.index', $draftKey);
}
public function removeDraftItem(Request $request, $draftKey)
{
$this->cart->removeItemFromDraft($draftKey, $request->item_index);
return redirect()->route('cart.index', $draftKey);
}
public function empty($draftKey)
{
$this->cart->emptyDraft($draftKey);
return redirect()->route('cart.index', $draftKey);
}
public function remove(Request $request)
{
$this->cart->removeDraft($request->draft_key);

2
routes/web.php

@ -20,6 +20,8 @@ Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
Route::post('cart/add-draft/{product}', 'CartController@add')->name('cart.add');
Route::post('cart/add-draft-item/{draftKey}/{product}', 'CartController@addDraftItem')->name('cart.add-draft-item');
Route::patch('cart/update-draft-item/{draftKey}', 'CartController@updateDraftItem')->name('cart.update-draft-item');
Route::delete('cart/remove-draft-item/{draftKey}', 'CartController@removeDraftItem')->name('cart.remove-draft-item');
Route::delete('cart/empty/{draftKey}', 'CartController@empty')->name('cart.empty');
Route::delete('cart/remove', 'CartController@remove')->name('cart.remove');
Route::delete('cart/destroy', 'CartController@destroy')->name('cart.destroy');

58
tests/Feature/Cart/CartControllerTest.php

@ -71,7 +71,7 @@ class CartControllerTest extends TestCase
$this->assertEquals(2, $cashDraft->getTotalQty());
$this->assertEquals(2200, $cashDraft->getTotal());
// Add Product as CashDraft item
// Remove Item Product from CashDraft
$response = $this->delete(route('cart.remove-draft-item', [$cashDraft->draftKey]), [
'item_index' => 0
]);
@ -93,7 +93,7 @@ class CartControllerTest extends TestCase
$this->assertFalse($cart->isEmpty());
$this->assertEquals(1, $cart->count());
// Add Product as CashDraft item
// Remove a transaction draft
$response = $this->delete(route('cart.remove'), [
'draft_key' => $cashDraft->draftKey
]);
@ -114,9 +114,61 @@ class CartControllerTest extends TestCase
$this->assertFalse($cart->isEmpty());
$this->assertEquals(2, $cart->count());
// Add Product as CashDraft item
// Destroy cart (empty out cart)
$response = $this->delete(route('cart.destroy'));
$this->assertTrue($cart->isEmpty());
}
/** @test */
public function user_can_empty_out_transaction_draft()
{
$this->loginAsUser();
$cart = new CartCollection;
$cashDraft = new CashDraft;
$product = factory(Product::class)->create(['cash_price' => 1100], ['credit_price' => 1000]);
$item = new Item($product, 2);
$cashDraft->addItem($item);
$cart->add($cashDraft);
$this->assertEquals(2, $cashDraft->getTotalQty());
$this->assertEquals(2200, $cashDraft->getTotal());
// Empty out a transaction draft
$response = $this->delete(route('cart.empty', $cashDraft->draftKey));
$this->assertEquals(0, $cashDraft->getTotalQty());
$this->assertCount(0, $cashDraft->items());
$this->assertEquals(0, $cashDraft->getTotal());
}
/** @test */
public function user_can_update_draft_item_qty_and_item_discount_in_a_draft()
{
$this->loginAsUser();
$cart = new CartCollection;
$cashDraft = new CashDraft;
$product = factory(Product::class)->create(['cash_price' => 1100], ['credit_price' => 1000]);
$item = new Item($product, 2);
$cashDraft->addItem($item);
$cart->add($cashDraft);
$this->assertEquals(2, $cashDraft->getTotalQty());
$this->assertEquals(2200, $cashDraft->getTotal());
// Update draft item on a transaction draft
$response = $this->patch(route('cart.update-draft-item', [$cashDraft->draftKey]), [
'item_key' => 0,
'qty' => 3,
'item_discount' => 100,
]);
$this->assertEquals(3, $cashDraft->getTotalQty());
$this->assertEquals(3000, $cashDraft->getTotal());
$this->assertEquals(300, $cashDraft->getDiscountTotal());
}
}
Loading…
Cancel
Save