From 89e4c3de254b53fa496b6e3cb45a05941596a5e2 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 4 Dec 2016 17:13:37 +0100 Subject: [PATCH] A fairly primitive data validation routine for split transactions. --- .../Transaction/SplitController.php | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php index f14cde1885..f98380c31c 100644 --- a/app/Http/Controllers/Transaction/SplitController.php +++ b/app/Http/Controllers/Transaction/SplitController.php @@ -135,7 +135,21 @@ class SplitController extends Controller return $this->redirectToAccount($journal); } - $data = $this->arrayFromInput($request); + $data = $this->arrayFromInput($request); + + // need to do some validation! + // sum of amount must be > 0 + // TODO move to proper validator + $sum = '0'; + foreach ($data['transactions'] as $transaction) { + Session::flash('error',strval(trans('validation.amount_zero'))); + $sum = bcadd($sum, strval($transaction['amount'])); + } + if (bccomp($sum, '0') === 0) { + return redirect(route('transactions.edit-split', [$journal->id]))->withInput(); + } + + $journal = $repository->updateSplitJournal($journal, $data); // save attachments: @@ -249,8 +263,8 @@ class SplitController extends Controller $transactions = $this->tasker->getTransactionsOverview($journal); $return = []; /** @var array $transaction */ - foreach ($transactions as $transaction) { - $return[] = [ + foreach ($transactions as $index => $transaction) { + $set = [ 'description' => $transaction['description'], 'source_account_id' => $transaction['source_account_id'], 'source_account_name' => $transaction['source_account_name'], @@ -260,6 +274,15 @@ class SplitController extends Controller 'budget_id' => isset($transaction['budget_id']) ? intval($transaction['budget_id']) : 0, 'category' => $transaction['category'], ]; + + // set initial category and/or budget: + if (count($transactions) === 1 && $index === 0) { + $set['budget_id'] = TransactionJournal::budgetId($journal); + $set['category'] = TransactionJournal::categoryAsString($journal); + } + + $return[] = $set; + } return $return;