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') }}
+
+
+
+
+ | # |
+ Nama Item |
+ Harga Satuan |
+ Diskon per Item |
+ Qty |
+ Subtotal |
+
+
+
+ @forelse($draft->items() as $key => $item)
+
+ | {{ $key + 1 }} |
+ {{ $item->name }} |
+ {{ formatRp($item->price) }} |
+ {{ formatRp($item->item_discount) }} |
+ {{ $item->qty }} |
+ {{ formatRp($item->subtotal) }} |
+
+ @empty
+ @endforelse
+
+
+
+
+
+ | {{ 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 @@
+
@@ -21,7 +22,7 @@
{{ Form::open(['route' => ['cart.update-draft-item', $draft->draftKey], 'method' => 'patch']) }}
{{ Form::hidden('item_key', $key) }}
|
- {{ 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()) }} |
|
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 @@
+
+{{ 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());
+ }
}