Skip to content

Commit

Permalink
Merge pull request #380 from NottingHack/#228-manual-snackspace-trans…
Browse files Browse the repository at this point in the history
…actions

Snackspace Transactions: Allow entry of manual snackspace transactions
  • Loading branch information
dpslwk authored May 19, 2019
2 parents 63d77d8 + a89e500 commit 285ecfb
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 11 deletions.
59 changes: 57 additions & 2 deletions app/Http/Controllers/Snackspace/TransactionsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,10 @@
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use HMS\Repositories\UserRepository;
use HMS\Entities\Snackspace\Transaction;
use Doctrine\ORM\EntityNotFoundException;
use HMS\Entities\Snackspace\TransactionType;
use HMS\Factories\Snackspace\TransactionFactory;
use HMS\Repositories\Snackspace\TransactionRepository;

class TransactionsController extends Controller
Expand All @@ -21,18 +24,29 @@ class TransactionsController extends Controller
*/
protected $userRepository;

/**
* @var TransactionFactory
*/
protected $transactionFactory;

/**
* Create a new controller instance.
*
* @param TransactionRepository $transactionRepository
* @param UserRepository $userRepository
* @param TransactionFactory $transactionFactory
*/
public function __construct(TransactionRepository $transactionRepository, UserRepository $userRepository)
{
public function __construct(
TransactionRepository $transactionRepository,
UserRepository $userRepository,
TransactionFactory $transactionFactory
) {
$this->transactionRepository = $transactionRepository;
$this->userRepository = $userRepository;
$this->transactionFactory = $transactionFactory;

$this->middleware('can:snackspaceTransaction.view.self')->only(['index']);
$this->middleware('can:snackspaceTransaction.create.all')->only(['create', 'store']);
}

/**
Expand Down Expand Up @@ -69,4 +83,45 @@ public function index(Request $request)
return view('snackspace.transaction.index')
->with(['user' => $user, 'transactions' => $transactions]);
}

/**
* Show the form for creating a new resource.
*
* @param User $user
*
* @return \Illuminate\Http\Response
*/
public function create(User $user)
{
return view('snackspace.transaction.create')
->with('user', $user);
}

/**
* Store a newly created resource in storage.
*
* @param User $user
* @param \Illuminate\Http\Request $request
*
* @return \Illuminate\Http\Response
*/
public function store(User $user, Request $request)
{
$validatedData = $request->validate([
'description' => 'required|string|max:512',
'amount' => 'required|integer',
]);

$transaction = $this->transactionFactory
->create(
$user,
$validatedData['amount'],
TransactionType::MANUAL,
$validatedData['description']
);
$this->transactionRepository->saveAndUpdateBalance($transaction);
flash('Transaction added.')->success();

return redirect()->route('users.snackspace.transactions', $user->getId());
}
}
4 changes: 2 additions & 2 deletions config/navigation.php
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
],
'snackspaceTransactions' => [
'text' => 'Snackspace',
'route' => 'transactions.index',
'match' => 'transactions.index',
'route' => 'snackspace.transactions.index',
'match' => 'snackspace.transactions.index',
'permissions' => ['snackspaceTransaction.view.self'],
'links' => [],
],
Expand Down
2 changes: 2 additions & 0 deletions config/roles.php
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@
'bankTransation.upload',
'snackspaceTransaction.view.self',
'snackspaceTransaction.view.all',
'snackspaceTransaction.create.all', // Trustees and snackspace team can create manual transactions
'snackspace.purchase', // Can buy stuff either vend or chargeable tool
'snackspace.purchase.creditOnly', // Can buy stuff either vend or chargeable tool but only if there in credit (ex members)
'snackspace.payment', // can make a payment
Expand Down Expand Up @@ -282,6 +283,7 @@
'box.edit.all',
'box.printLabel.all',
'snackspaceTransaction.view.all',
'snackspaceTransaction.create.all',
'rfidTags.view.self',
'rfidTags.view.all',
'rfidTags.edit.self',
Expand Down
39 changes: 39 additions & 0 deletions resources/views/snackspace/transaction/create.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
@extends('layouts.app')

@section('pageTitle')
Add Snackspace transaction for {{ $user->getFirstname() }}
@endsection

@section('content')
<div class="container">
<form class="form-group" role="form" method="POST" action="{{ route('users.snackspace.transactions.store', $user->getId()) }}">
@csrf

<div class="form-group">
<label for="description" class="form-label">Description</label>
<input id="description" class="form-control" type="text" name="description" placeholder="Description of Transaction" value="{{ old('description') }}" max="512" required autofocus>
@if ($errors->has('description'))
<p class="help-text">
<strong>{{ $errors->first('description') }}</strong>
</p>
@endif
</div>

<div class="form-group">
<label for="amount" class="form-label">Amount in pence</label>
<input id="amount" class="form-control" type="number" name="amount" placeholder="in pence" value="{{ old('amount') }}" required>
@if ($errors->has('amount'))
<p class="help-text">
<strong>{{ $errors->first('amount') }}</strong>
</p>
@endif
</div>

<div class="form-group">
<div class="card">
<button type="submit" class="btn btn-primary">Add Transaction</button>
</div>
</div>
</form>
</div>
@endsection
11 changes: 10 additions & 1 deletion resources/views/snackspace/transaction/index.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@

<br>
<p>Words about purchases/payments records, credit limit and how to pay off balance in the space at the cash acceptors.</p>

</div>
<div class="container">
<div class="table-responsive">
<table class="table table-bordered table-hover">
<thead>
Expand Down Expand Up @@ -43,4 +44,12 @@
{{ $transactions->links() }}
</div>
</div>
@can ('snackspaceTransaction.create.all')
<div class="container">
<div class="card">
<a href="{{ route('users.snackspace.transactions.create', $user->getId()) }}" class="btn btn-primary"><i class="fas fa-plus" aria-hidden="true"></i> Add manual transaction</a>
</div>
</div>
@endcan

@endsection
17 changes: 11 additions & 6 deletions routes/web.php
Original file line number Diff line number Diff line change
Expand Up @@ -180,13 +180,18 @@
// Snackspace
Route::get('users/{user}/snackspace/transactions', 'Snackspace\TransactionsController@index')
->name('users.snackspace.transactions');
Route::resource(
Route::get(
'users/{user}/snackspace/transactions/create',
'Snackspace\TransactionsController@create'
)->name('users.snackspace.transactions.create');
Route::post(
'users/{user}/snackspace/transactions',
'Snackspace\TransactionsController@store'
)->name('users.snackspace.transactions.store');
Route::get(
'snackspace/transactions',
'Snackspace\TransactionsController',
[
'except' => ['show', 'store', 'create', 'edit', 'update', 'destroy'],
]
);
'Snackspace\TransactionsController@index'
)->name('snackspace.transactions.index');

// Tools
Route::resource('tools', 'Tools\ToolController');
Expand Down

0 comments on commit 285ecfb

Please sign in to comment.