Browse Source

Added Transaction Draft view and and has product search

Added Transaction Draft Button on top navbar
Group cart routes in auth middleware
pull/1/head
Nafies Luthfi 9 years ago
parent
commit
2e74cad75a
  1. 2
      app/Cart/CashDraft.php
  2. 2
      app/Cart/CreditDraft.php
  3. 25
      app/Http/Controllers/CartController.php
  4. 41
      resources/views/cart/index.blade.php
  5. 13
      resources/views/layouts/app.blade.php
  6. 18
      routes/web.php
  7. 10
      tests/BrowserKitTestCase.php
  8. 4
      tests/Feature/Cart/CartControllerTest.php
  9. 72
      tests/Feature/TransactionEntryTest.php

2
app/Cart/CashDraft.php

@ -8,4 +8,6 @@ namespace App\Cart;
class CashDraft extends TransactionDraft class CashDraft extends TransactionDraft
{ {
public $draftKey; public $draftKey;
public $type = 'cash';
public $type_id = 1;
} }

2
app/Cart/CreditDraft.php

@ -8,4 +8,6 @@ namespace App\Cart;
class CreditDraft extends TransactionDraft class CreditDraft extends TransactionDraft
{ {
public $draftKey; public $draftKey;
public $type = 'credit';
public $type_id = 2;
} }

25
app/Http/Controllers/CartController.php

@ -17,14 +17,33 @@ class CartController extends Controller
{ {
$this->cart = new CartCollection; $this->cart = new CartCollection;
} }
public function add(Request $request, $type)
public function index(Request $request)
{
$draft = $this->cart->content()->last();
return view('cart.index', compact('draft'));
}
public function show(Request $request, $draftKey)
{ {
if ($type == 1)
$queriedProducts = Product::where(function($query) use ($request) {
return $query->where('name', 'like', '%' . $request->get('query') . '%');
})->get();
$draft = $this->cart->get($draftKey);
return view('cart.index', compact('draft','queriedProducts'));
}
public function add(Request $request)
{
if ($request->has('create-cash-draft'))
$this->cart->add(new CashDraft); $this->cart->add(new CashDraft);
else else
$this->cart->add(new CreditDraft); $this->cart->add(new CreditDraft);
return redirect()->route('cart.index', $item->draftKey);
return redirect()->route('cart.show', $this->cart->content()->last()->draftKey);
} }
public function addDraftItem(Request $request, $draftKey, Product $product) public function addDraftItem(Request $request, $draftKey, Product $product)

41
resources/views/cart/index.blade.php

@ -0,0 +1,41 @@
@extends('layouts.app')
@section('content')
<?php use Facades\App\Cart\CartCollection; ?>
<h3 class="page-header">drafts</h3>
@if (! CartCollection::isEmpty())
<ul class="nav nav-tabs draft-drafts-list">
@foreach(CartCollection::content() as $key => $content)
<?php $active = ($draft->draftKey == $key) ? 'class=active' : '' ?>
<li {{ $active }} role="presentation">
<a href="{{ route('cart.show', $key) }}">
{{ $content->type }} - {{ $key }}
<form action="{{ route('cart.remove') }}" method="post" style="display:inline" onsubmit="return confirm('Yakin ingin menghapus Draft Transaksi ini?')">
{{ csrf_field() }}
{{ method_field('delete') }}
<input type="hidden" name="draft_key" value="{{ $key }}">
<input type="submit" value="x" style="margin: -2px -7px 0px 0px" class="btn-link btn-xs pull-right">
</form>
</a>
</li>
@endforeach
</ul><!-- Tab panes -->
<br>
@endif
@if ($draft)
{{ $draft ? $draft->type : '' }}
<form method="get" action="{{ route('cart.show', $draft->draftKey) }}">
<input type="text" name="query" value="{{ request('query') }}">
<input type="submit" value="{{ trans('product.search') }}" style="display:none">
</form>
@if (isset($queriedProducts))
<ul>
@foreach($queriedProducts as $product)
<li>{{ $product->name }}</li>
<li>{{ $draft->type == 'cash' ? $product->cash_price : $product->credit_price }}</li>
@endforeach
</ul>
@endif
@endif
@endsection

13
resources/views/layouts/app.blade.php

@ -42,14 +42,23 @@
<div class="collapse navbar-collapse" id="app-navbar-collapse"> <div class="collapse navbar-collapse" id="app-navbar-collapse">
<!-- Left Side Of Navbar --> <!-- Left Side Of Navbar -->
@if (Auth::check())
<ul class="nav navbar-nav"> <ul class="nav navbar-nav">
&nbsp; &nbsp;
</ul> </ul>
@endif
<!-- Right Side Of Navbar --> <!-- Right Side Of Navbar -->
<ul class="nav navbar-nav navbar-right"> <ul class="nav navbar-nav navbar-right">
<!-- Authentication Links --> <!-- Authentication Links -->
@if (Auth::check()) @if (Auth::check())
<li>
<form class="" action="{{ route('cart.add') }}" method="POST">
{{ csrf_field() }}
<input type="submit" class="btn btn-default navbar-btn" name="create-cash-draft" id="cash-draft-create-button" value="{{ trans('transaction.create') }}">
<input type="submit" class="btn btn-default navbar-btn" name="create-credit-draft" id="credit-draft-create-button" value="{{ trans('transaction.create_credit') }}">
</form>
</li>
<li class="dropdown"> <li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
{{ Auth::user()->name }} <span class="caret"></span> {{ Auth::user()->name }} <span class="caret"></span>
@ -76,7 +85,9 @@
</div> </div>
</nav> </nav>
@yield('content')
<div class="container">
@yield('content')
</div>
</div> </div>
<!-- Scripts --> <!-- Scripts -->

18
routes/web.php

@ -18,10 +18,14 @@ Route::get('/', function () {
Auth::routes(); Auth::routes();
Route::get('/home', 'HomeController@index')->name('home'); 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');
Route::group(['middleware' => 'auth'], function() {
Route::get('drafts', 'CartController@index')->name('cart.index');
Route::get('drafts/{draftKey}', 'CartController@show')->name('cart.show');
Route::post('cart/add-draft', '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');
});

10
tests/BrowserKitTestCase.php

@ -2,9 +2,19 @@
namespace Tests; namespace Tests;
use App\User;
abstract class BrowserKitTestCase extends \Laravel\BrowserKitTesting\TestCase abstract class BrowserKitTestCase extends \Laravel\BrowserKitTesting\TestCase
{ {
use CreatesApplication; use CreatesApplication;
protected $baseUrl = 'http://localhost'; protected $baseUrl = 'http://localhost';
protected function loginAsUser()
{
$user = factory(User::class)->create();
$this->actingAs($user);
return $user;
}
} }

4
tests/Feature/Cart/CartControllerTest.php

@ -21,8 +21,8 @@ class CartControllerTest extends TestCase
$cart = new CartCollection; $cart = new CartCollection;
$response = $this->post(route('cart.add', 1));
$response = $this->post(route('cart.add', 2));
$response = $this->post(route('cart.add'), ['create-cash-draft'=> trans('transaction.create')]);
$response = $this->post(route('cart.add'), ['create-credit-draft'=> trans('transaction.create_credit')]);
$response->assertSessionHas('transactions.drafts'); $response->assertSessionHas('transactions.drafts');
$cashDraft = $cart->content()->first(); $cashDraft = $cart->content()->first();

72
tests/Feature/TransactionEntryTest.php

@ -0,0 +1,72 @@
<?php
namespace Tests\Feature;
use App\Cart\CartCollection;
use App\Cart\CashDraft;
use App\Cart\CreditDraft;
use App\Product;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\BrowserKitTestCase;
class TransactionEntryTest extends BrowserKitTestCase
{
use DatabaseMigrations;
/** @test */
public function user_can_visit_transaction_drafts_page()
{
$this->loginAsUser();
// Add new draft to collection
$cart = new CartCollection;
$draft = $cart->add(new CashDraft);
$this->visit(route('cart.index'));
$this->assertViewHas('draft', $draft);
$this->see($draft->type);
}
/** @test */
public function user_can_create_transaction_draft_by_transaction_create_button()
{
$this->loginAsUser();
$this->visit(route('home'));
$this->press(trans('transaction.create'));
$cart = new CartCollection;
$draft = $cart->content()->last();
$this->seePageIs(route('cart.show', $draft->draftKey));
$this->press(trans('transaction.create_credit'));
$cart = new CartCollection;
$draft = $cart->content()->last();
$this->seePageIs(route('cart.show', $draft->draftKey));
}
/** @test */
public function user_can_search_product_on_transaction_draft_page()
{
$product = factory(Product::class)->create(['name' => 'Testing Produk 1']);
$this->loginAsUser();
$cart = new CartCollection;
$draft = new CreditDraft;
$cart->add($draft);
// Visit cart index page
$this->visit(route('cart.index'));
// Visit search for products
$this->submitForm(trans('product.search'), [
'query' => 'testing',
]);
$this->seePageIs(route('cart.show', [$draft->draftKey, 'query' => 'testing']));
// See product list appears
$this->see($product->name);
$this->see($product->credit_price);
$this->dontSee($product->cash_price);
}
}
Loading…
Cancel
Save