Browse Source

Added transaction search by customer name and customer phone

pull/6/head
Nafies Luthfi 9 years ago
parent
commit
55f395bd86
  1. 1
      app/Cart/CartCollection.php
  2. 2
      app/Cart/TransactionDraft.php
  3. 6
      app/Http/Controllers/CartController.php
  4. 8
      app/Http/Controllers/TransactionsController.php
  5. 19
      app/Http/Controllers/UsersController.php
  6. 10
      database/factories/ModelFactory.php
  7. 1
      resources/views/layouts/partials/top-nav.blade.php
  8. 10
      resources/views/transactions/index.blade.php
  9. 24
      tests/Feature/ManageTransactionsTest.php
  10. 8
      tests/Feature/ManageUsersTest.php

1
app/Cart/CartCollection.php

@ -120,7 +120,6 @@ class CartCollection
$content[$draftKey]->addItem($item);
}
$this->session->put($this->instance, $content);
return $item->product;

2
app/Cart/TransactionDraft.php

@ -100,7 +100,7 @@ abstract class TransactionDraft
public function searchItemKeyFor(Product $product)
{
return $this->items()->search(function($item, $key) use ($product) {
return $this->items()->search(function ($item, $key) use ($product) {
return $item->product->id == $product->id;
});
}

6
app/Http/Controllers/CartController.php

@ -122,11 +122,11 @@ class CartController extends Controller
'customer.name' => 'required|string|max:30',
'customer.phone' => 'nullable|string|max:20',
'total' => 'required|numeric',
'payment' => 'required|numeric|min:' . $request->get('total') . '|max:' . ($request->get('total') + 100000),
'payment' => 'required|numeric|min:'.$request->get('total').'|max:'.($request->get('total') + 100000),
'notes' => 'nullable|string|max:100',
], [
'payment.min' => 'Pembayaran minimal ' . formatRp($request->get('total')) . '.',
'payment.max' => 'Pembayaran terlalu besar ' . formatRp($request->get('payment')) . '.'
'payment.min' => 'Pembayaran minimal '.formatRp($request->get('total')).'.',
'payment.max' => 'Pembayaran terlalu besar '.formatRp($request->get('payment')).'.',
]);
$draft = $this->cart->updateDraftAttributes($draftKey, $request->only('customer', 'notes', 'payment'));

8
app/Http/Controllers/TransactionsController.php

@ -12,9 +12,11 @@ class TransactionsController extends Controller
{
$q = $request->get('q');
$transactions = Transaction::orderBy('invoice_no', 'desc')
->where(function($query) use ($q) {
if ($q)
$query->where('invoice_no', 'like', '%' . $q . '%');
->where(function ($query) use ($q) {
if ($q) {
$query->where('invoice_no', 'like', '%'.$q.'%');
$query->orWhere('customer', 'like', '%'.$q.'%');
}
})->paginate(25);
return view('transactions.index', compact('transactions'));

19
app/Http/Controllers/UsersController.php

@ -22,18 +22,18 @@ class UsersController extends Controller
public function store(Request $request)
{
$this->validate($request, [
'name' => 'required|max:60',
'name' => 'required|max:60',
'username' => 'required|max:30',
'password' => 'nullable|between:5,15',
]);
$newUserData = $request->only('name','username');
$newUserData = $request->only('name', 'username');
if ($request->has('password'))
if ($request->has('password')) {
$newUserData['password'] = $request->get('password');
else
} else {
$newUserData['password'] = 'rahasia';
}
$user = User::create($newUserData);
@ -45,14 +45,15 @@ class UsersController extends Controller
public function update(Request $request, $userId)
{
$this->validate($request, [
'name' => 'required|max:60',
'username' => 'required|max:30|unique:users,username,' . $request->segment(2),
'name' => 'required|max:60',
'username' => 'required|max:30|unique:users,username,'.$request->segment(2),
'password' => 'nullable|between:5,15',
]);
$userData = $request->only('name','username');
if ($request->has('password'))
$userData = $request->only('name', 'username');
if ($request->has('password')) {
$userData['password'] = $request->get('password');
}
User::findOrFail($userId)->update($userData);

10
database/factories/ModelFactory.php

@ -32,13 +32,13 @@ $factory->define(App\Unit::class, function (Faker\Generator $faker) {
/* @var \Illuminate\Database\Eloquent\Factory $factory */
$factory->define(App\Transaction::class, function (Faker\Generator $faker) {
return [
'user_id' => function() {
'user_id' => function () {
return factory(App\User::class)->create()->id;
},
'invoice_no' => str_random(5),
'items' => [],
'customer' => ['name' => $faker->name, 'phone' => $faker->phoneNumber],
'payment' => 1000,
'total' => 1000,
'items' => [],
'customer' => ['name' => $faker->name, 'phone' => $faker->phoneNumber],
'payment' => 1000,
'total' => 1000,
];
});

1
resources/views/layouts/partials/top-nav.blade.php

@ -54,6 +54,7 @@
<ul class="dropdown-menu" role="menu">
<li>{{ link_to_route('users.index', trans('user.list')) }}</li>
<li>{{ link_to_route('backups.index', trans('backup.list')) }}</li>
<li>
<a href="{{ route('logout') }}"
onclick="event.preventDefault();

10
resources/views/transactions/index.blade.php

@ -25,7 +25,7 @@
<th>{{ trans('transaction.customer') }}</th>
<th>{{ trans('transaction.items_count') }}</th>
<th class="text-right">{{ trans('transaction.total') }}</th>
<th>{{ trans('app.action') }}</th>
<th class="text-center">{{ trans('app.action') }}</th>
</tr>
</thead>
<tbody>
@ -34,10 +34,13 @@
<td>{{ 1 + $key }}</td>
<td>{{ $transaction->invoice_no }}</td>
<td>{{ $transaction->created_at->format('Y-m-d') }}</td>
<td>{{ $transaction->customer['name'] }}</td>
<td>
{{ $transaction->customer['name'] }}
{{ $transaction->customer['phone'] ? '(' . $transaction->customer['phone'] . ')' : '' }}
</td>
<td>{{ $transaction->items_count }}</td>
<td class="text-right">{{ formatRp($transaction->total) }}</td>
<td>
<td class="text-center">
{{ link_to_route('transactions.show', trans('app.show'), $transaction->invoice_no) }} |
{{ link_to_route('transactions.pdf', trans('app.print'), $transaction->invoice_no) }}
</td>
@ -46,6 +49,7 @@
@endforelse
</tbody>
</table>
<div>{!! str_replace('/?', '?', $transactions->appends(Request::except('page'))->render()) !!}</div>
</div>
</div>
@endsection

24
tests/Feature/ManageTransactionsTest.php

@ -33,4 +33,28 @@ class ManageTransactionsTest extends BrowserKitTestCase
$this->dontSee($transaction1->invoice_no);
$this->see($transaction2->invoice_no);
}
/** @test */
public function user_can_see_search_transactions_by_customer_name()
{
$transaction1 = factory(Transaction::class)->create(['customer' => ['name' => 'Nafies', 'phone' => '081234567890']]);
$transaction2 = factory(Transaction::class)->create();
$this->loginAsUser();
$this->visit(route('transactions.index', ['q' => 'nafies']));
$this->see($transaction1->invoice_no);
$this->dontSee($transaction2->invoice_no);
}
/** @test */
public function user_can_see_search_transactions_by_customer_phone()
{
$transaction1 = factory(Transaction::class)->create(['customer' => ['name' => 'Nafies', 'phone' => '081234567890']]);
$transaction2 = factory(Transaction::class)->create();
$this->loginAsUser();
$this->visit(route('transactions.index', ['q' => '7890']));
$this->see($transaction1->invoice_no);
$this->dontSee($transaction2->invoice_no);
}
}

8
tests/Feature/ManageUsersTest.php

@ -2,8 +2,8 @@
namespace Tests\Feature;
use App\User;
use App\Transaction;
use App\User;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Tests\BrowserKitTestCase;
@ -41,7 +41,7 @@ class ManageUsersTest extends BrowserKitTestCase
$this->seePageIs(route('users.index'));
$this->seeInDatabase('users', [
'name' => 'User 1',
'name' => 'User 1',
'username' => 'username',
]);
}
@ -64,8 +64,8 @@ class ManageUsersTest extends BrowserKitTestCase
$this->seePageIs(route('users.index'));
$this->seeInDatabase('users', [
'id' => $user->id,
'name' => 'User 1',
'id' => $user->id,
'name' => 'User 1',
'username' => 'username',
]);
}

Loading…
Cancel
Save