From 0c45b9a44fa7ff687618ac27a728e37833c8abf0 Mon Sep 17 00:00:00 2001 From: Nafies Luthfi Date: Thu, 27 Apr 2017 10:00:45 +0700 Subject: [PATCH] Added Transaction Confirm page --- app/Cart/Item.php | 10 +-- app/Cart/TransactionDraft.php | 11 +++- app/Http/Controllers/CartController.php | 6 ++ resources/lang/id/app.php | 37 +++++++++++ resources/lang/id/transaction.php | 28 +++++++-- resources/views/cart/index.blade.php | 13 +++- .../views/cart/partials/draft-confirm.blade.php | 73 ++++++++++++++++++++++ .../views/cart/partials/draft-item-list.blade.php | 9 +-- .../cart/partials/form-draft-detail.blade.php | 10 +++ routes/web.php | 1 + tests/Feature/TransactionEntryTest.php | 32 ++++++++++ tests/Unit/Integration/TransactionDraftTest.php | 28 +++++++++ 12 files changed, 240 insertions(+), 18 deletions(-) create mode 100644 resources/lang/id/app.php create mode 100644 resources/views/cart/partials/draft-confirm.blade.php create mode 100644 resources/views/cart/partials/form-draft-detail.blade.php diff --git a/app/Cart/Item.php b/app/Cart/Item.php index 7dcc5ba..eba193b 100644 --- a/app/Cart/Item.php +++ b/app/Cart/Item.php @@ -20,11 +20,11 @@ class Item public function __construct(Product $product, $qty) { - $this->id = $product->id; - $this->name = $product->name; - $this->product = $product; - $this->qty = $qty; - $this->price = $product->getPrice(); + $this->id = $product->id; + $this->name = $product->name; + $this->product = $product; + $this->qty = $qty; + $this->price = $product->getPrice(); $this->subtotal = $product->getPrice() * $qty; } diff --git a/app/Cart/TransactionDraft.php b/app/Cart/TransactionDraft.php index faf0318..40768e2 100644 --- a/app/Cart/TransactionDraft.php +++ b/app/Cart/TransactionDraft.php @@ -11,12 +11,16 @@ abstract class TransactionDraft { public $items = []; + public $customer = ['name' => null, 'phone' => null]; + public $notes; + public $payment; + public function toArray() { return [ 'invoice_no' => 2, 'date' => 1, - 'items' => [], + 'items' => $this->items(), 'total' => 0, 'payment' => 0, 'customer' => 0, @@ -87,4 +91,9 @@ abstract class TransactionDraft return $productItem; } + + public function getExchange() + { + return $this->payment - $this->getTotal(); + } } diff --git a/app/Http/Controllers/CartController.php b/app/Http/Controllers/CartController.php index 4ff1d00..5994dc1 100644 --- a/app/Http/Controllers/CartController.php +++ b/app/Http/Controllers/CartController.php @@ -94,4 +94,10 @@ class CartController extends Controller return redirect()->route('cart.index'); } + + public function proccess(Request $request, $draftKey) + { + $this->cart->updateDraftAttributes($draftKey, $request->only('customer','notes','payment')); + return redirect()->route('cart.show', [$draftKey, 'action' => 'confirm']); + } } diff --git a/resources/lang/id/app.php b/resources/lang/id/app.php new file mode 100644 index 0000000..1244490 --- /dev/null +++ b/resources/lang/id/app.php @@ -0,0 +1,37 @@ + '#', + 'name' => 'Nama', + 'submit' => 'Submit', + 'update' => 'Update', + 'delete' => 'Hapus', + 'add' => 'Tambah', + 'back' => 'Kembali', + 'cancel' => 'Batal', + 'reset' => 'Reset', + 'show' => 'Lihat Detail', + 'label' => 'Label', + 'edit' => 'Edit', + 'print' => 'Print', + 'search' => 'Cari', + 'filter' => 'Filter', + 'close' => 'Tutup', + 'action' => 'Action', + 'notes' => 'Catatan', + 'delete_confirm_button' => 'Ya, silakan hapus!', + 'delete_confirm' => 'Anda yakin akan menghapus?', + 'description' => 'Deskripsi', + 'code' => 'Kode', + 'active' => 'Status', + 'status' => 'Status', + 'date' => 'Tanggal', + 'time' => 'Waktu', + 'created_at' => 'Dibuat Pada', + 'created_by' => 'Oleh', + 'total' => 'Total', + 'count' => 'Jumlah', + 'welcome' => 'Selamat datang', + 'export-pdf' => 'Export PDF', +]; \ No newline at end of file diff --git a/resources/lang/id/transaction.php b/resources/lang/id/transaction.php index 9ba666b..ecf26b7 100644 --- a/resources/lang/id/transaction.php +++ b/resources/lang/id/transaction.php @@ -2,9 +2,27 @@ return [ // Labels - 'create' => 'Buat Transaksi', - 'create_cash' => 'Buat Transaksi Tunai', - 'create_credit' => 'Buat Transaksi Kredit', - 'cash' => 'Tunai', - 'credit' => 'Kredit', + 'create' => 'Buat Transaksi', + 'create_cash' => 'Buat Transaksi Tunai', + 'create_credit' => 'Buat Transaksi Kredit', + 'cash' => 'Tunai', + 'credit' => 'Kredit', + 'detail' => 'Detail Transaksi', + 'confirm' => 'Konfirmasi Transaksi', + 'items' => 'Barang Belanja', + 'subtotal' => 'Subtotal', + 'discount_total' => 'Total Diskon', + 'total' => 'Total', + 'exchange' => 'Kembalian', + + // Actions + 'proccess' => 'Proses Transaksi', + 'save' => 'Simpan Transaksi', + + // Attributes + 'customer' => 'Customer', + 'customer_name' => 'Nama Customer', + 'customer_phone' => 'Hp/Telp.', + 'payment' => 'Jumlah Dibayar', + 'notes' => 'Catatan Transaksi', ]; diff --git a/resources/views/cart/index.blade.php b/resources/views/cart/index.blade.php index 9e6e7fa..6e6ce0e 100644 --- a/resources/views/cart/index.blade.php +++ b/resources/views/cart/index.blade.php @@ -5,9 +5,16 @@ @section('content') -@includeWhen (! CartCollection::isEmpty(), 'cart.partials.transaction-draft-tabs') +@includeWhen(! CartCollection::isEmpty(), 'cart.partials.transaction-draft-tabs') @if ($draft) - @include ('cart.partials.product-search-box') - @include('cart.partials.draft-item-list') + @if (Request::get('action') == 'confirm') + @include('cart.partials.draft-confirm') + @else + @include('cart.partials.product-search-box') +
+
@include('cart.partials.draft-item-list')
+
@include('cart.partials.form-draft-detail')
+
+ @endif @endif @endsection \ No newline at end of file diff --git a/resources/views/cart/partials/draft-confirm.blade.php b/resources/views/cart/partials/draft-confirm.blade.php new file mode 100644 index 0000000..a2a4cc7 --- /dev/null +++ b/resources/views/cart/partials/draft-confirm.blade.php @@ -0,0 +1,73 @@ +
+
+
+

{{ trans('transaction.confirm') }}

+
+ + + + + + + + + + + + + @forelse($draft->items() as $key => $item) + + + + + + + + + @empty + @endforelse + + + + + + + + + + + + + + + + + +
#Nama ItemHarga SatuanDiskon per ItemQtySubtotal
{{ $key + 1 }}{{ $item->name }}{{ formatRp($item->price) }}{{ formatRp($item->item_discount) }}{{ $item->qty }}{{ formatRp($item->subtotal) }}
{{ trans('transaction.subtotal') }} :{{ formatRp($draft->getSubtotal()) }}
{{ trans('transaction.discount_total') }} :{{ formatRp($draft->getDiscountTotal()) }}
{{ trans('transaction.total') }} :{{ formatRp($draft->getTotal()) }}
+
+
+
+
+
+

{{ trans('transaction.detail') }}

+
+ + + + + + + + + +
{{ trans('transaction.customer_name') }}{{ $draft->customer['name'] }}
{{ trans('transaction.customer_phone') }}{{ $draft->customer['phone'] }}
{{ trans('transaction.payment') }}{{ formatRp($draft->payment) }}
{{ trans('transaction.total') }}{{ formatRp($draft->getTotal()) }}
{{ trans('transaction.exchange') }}{{ formatRp($draft->getExchange()) }}
{{ trans('transaction.notes') }}{{ $draft->notes }}
+
+ +
+
+
\ No newline at end of file diff --git a/resources/views/cart/partials/draft-item-list.blade.php b/resources/views/cart/partials/draft-item-list.blade.php index 53f10b8..d9ee409 100644 --- a/resources/views/cart/partials/draft-item-list.blade.php +++ b/resources/views/cart/partials/draft-item-list.blade.php @@ -1,3 +1,4 @@ +{{ trans('transaction.items') }} ({{ $draft->items()->count() }} Item)
@@ -21,7 +22,7 @@ {{ Form::open(['route' => ['cart.update-draft-item', $draft->draftKey], 'method' => 'patch']) }} {{ Form::hidden('item_key', $key) }} - + - + - + diff --git a/resources/views/cart/partials/form-draft-detail.blade.php b/resources/views/cart/partials/form-draft-detail.blade.php new file mode 100644 index 0000000..4daaee2 --- /dev/null +++ b/resources/views/cart/partials/form-draft-detail.blade.php @@ -0,0 +1,10 @@ +{{ trans('transaction.detail') }} +{{ Form::open(['route' => ['cart.draft-proccess', $draft->draftKey], 'method' => 'patch']) }} +{!! FormField::text('customer[name]', ['label' => trans('transaction.customer_name'), 'value' => $draft->customer['name']]) !!} +
+
{!! FormField::text('customer[phone]', ['label' => trans('transaction.customer_phone'), 'value' => $draft->customer['phone']]) !!}
+
{!! FormField::price('payment', ['label' => trans('transaction.payment'), 'value' => $draft->payment]) !!}
+
+{!! FormField::textarea('notes', ['label' => trans('transaction.notes'), 'value' => $draft->notes]) !!} +{{ Form::submit(trans('transaction.proccess'), ['class' => 'btn btn-info']) }} +{{ Form::close() }} \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 0104378..2e21d26 100644 --- a/routes/web.php +++ b/routes/web.php @@ -24,6 +24,7 @@ Route::group(['middleware' => 'auth'], function () { 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::patch('cart/{draftKey}/proccess', 'CartController@proccess')->name('cart.draft-proccess'); 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'); diff --git a/tests/Feature/TransactionEntryTest.php b/tests/Feature/TransactionEntryTest.php index 2cdae85..3242283 100644 --- a/tests/Feature/TransactionEntryTest.php +++ b/tests/Feature/TransactionEntryTest.php @@ -166,4 +166,36 @@ class TransactionEntryTest extends BrowserKitTestCase $this->see(formatRp($draft->getSubtotal())); $this->see(formatRp($draft->getTotal())); } + + /** @test */ + public function user_can_update_draft_transaction_detail_and_get_confirm_page() + { + $cart = new CartCollection(); + + $draft = $cart->add(new CashDraft()); + + $product1 = factory(Product::class)->create(['cash_price' => 1000]); + $product2 = factory(Product::class)->create(['cash_price' => 2000]); + $item1 = new Item($product1, 1); + $item2 = new Item($product2, 3); + + // Add items to draft + $cart->addItemToDraft($draft->draftKey, $item1); + $cart->addItemToDraft($draft->draftKey, $item2); + + $this->loginAsUser(); + $this->visit(route('cart.show', $draft->draftKey)); + + $this->type('Nafies', 'customer[name]'); + $this->type('-', 'customer[phone]'); + $this->type('catatan', 'notes'); + $this->type(10000, 'payment'); + $this->press(trans('transaction.proccess')); + + $this->seePageIs(route('cart.show', [$draft->draftKey, 'action' => 'confirm'])); + + $this->see(trans('transaction.confirm')); + $this->see(formatRp(10000)); + $this->seeElement('input', ['id' => 'save-transaction-draft']); + } } diff --git a/tests/Unit/Integration/TransactionDraftTest.php b/tests/Unit/Integration/TransactionDraftTest.php index a0c8754..0f7aefe 100644 --- a/tests/Unit/Integration/TransactionDraftTest.php +++ b/tests/Unit/Integration/TransactionDraftTest.php @@ -139,4 +139,32 @@ class TransactionDraftTest extends TestCase $this->assertEquals(7000, $draft->getSubtotal()); $this->assertEquals(6700, $draft->getTotal()); } + + /** @test */ + public function transaction_draft_has_detail() + { + // TODO: check corrent draft attributes + $cart = new CartCollection(); + + $draft = $cart->add(new CashDraft()); + $draftAttributes = [ + 'customer' => [ + 'name' => 'Nafies', + 'phone' => '081234567890', + ], + 'payment' => 10000, + 'notes' => 'Catatan', + ]; + $cart->updateDraftAttributes($draft->draftKey, $draftAttributes); + + $this->assertArrayHasKey('invoice_no', $draft->toArray()); + $this->assertArrayHasKey('date', $draft->toArray()); + $this->assertArrayHasKey('items', $draft->toArray()); + $this->assertArrayHasKey('total', $draft->toArray()); + $this->assertArrayHasKey('payment', $draft->toArray()); + $this->assertArrayHasKey('customer', $draft->toArray()); + $this->assertArrayHasKey('status_id', $draft->toArray()); + $this->assertArrayHasKey('creator_id', $draft->toArray()); + $this->assertArrayHasKey('remark', $draft->toArray()); + } }
- {{ Form::text('item_discount', $item->item_discount, ['id' => 'item_discount-' . $key, 'style' => 'width:100px;text-align:right']) }} + {{ Form::text('item_discount', $item->item_discount, ['id' => 'item_discount-' . $key, 'style' => 'width:80px;text-align:right']) }} {{ Form::number('qty', $item->qty, ['id' => 'qty-' . $key, 'style' => 'width:50px;text-align:center']) }} @@ -42,17 +43,17 @@
Subtotal :{{ trans('transaction.subtotal') }} : {{ formatRp($draft->getSubtotal()) }}
Diskon Total :{{ trans('transaction.discount_total') }} : {{ formatRp($draft->getDiscountTotal()) }}
Total :{{ trans('transaction.total') }} : {{ formatRp($draft->getTotal()) }}