Build edit split transactions.

This commit is contained in:
James Cole
2016-05-12 10:38:44 +02:00
parent b7c446f7db
commit ce7eebac5c
5 changed files with 49 additions and 10 deletions

View File

@@ -48,6 +48,35 @@ class SplitController extends Controller
if ($count === 2) { if ($count === 2) {
return redirect(route('transactions.edit', [$journal->id])); return redirect(route('transactions.edit', [$journal->id]));
} }
/** @var CurrencyRepositoryInterface $currencyRepository */
$currencyRepository = app(CurrencyRepositoryInterface::class);
/** @var AccountRepositoryInterface $accountRepository */
$accountRepository = app(AccountRepositoryInterface::class);
/** @var BudgetRepositoryInterface $budgetRepository */
$budgetRepository = app(BudgetRepositoryInterface::class);
/** @var PiggyBankRepositoryInterface $piggyBankRepository */
$piggyBankRepository = app(PiggyBankRepositoryInterface::class);
$what = strtolower(TransactionJournal::transactionTypeStr($journal));
$currencies = ExpandedForm::makeSelectList($currencyRepository->get());
$assetAccounts = ExpandedForm::makeSelectList($accountRepository->getAccounts(['Default account', 'Asset account']));
$budgets = ExpandedForm::makeSelectListWithEmpty($budgetRepository->getActiveBudgets());
$piggyBanks = ExpandedForm::makeSelectListWithEmpty($piggyBankRepository->getPiggyBanks());
$amount = TransactionJournal::amountPositive($journal);
// get source account:
$sourceAccounts = TransactionJournal::sourceAccountList($journal);
$destinationAccounts = TransactionJournal::destinationAccountList($journal);
// get the transactions:
return view(
'split.journals.edit',
compact('currencies', 'amount', 'piggyBanks', 'sourceAccounts', 'destinationAccounts', 'assetAccounts', 'budgets', 'what', 'journal')
);
} }
/** /**

View File

@@ -418,6 +418,8 @@ class TransactionController extends Controller
$event->piggyBank = $event->piggyBank()->withTrashed()->first(); $event->piggyBank = $event->piggyBank()->withTrashed()->first();
} }
); );
// TODO different for each transaction type!
$transactions = $journal->transactions()->groupBy('transactions.account_id')->orderBy('amount', 'ASC')->get( $transactions = $journal->transactions()->groupBy('transactions.account_id')->orderBy('amount', 'ASC')->get(
['transactions.*', DB::raw('SUM(`transactions`.`amount`) as `sum`')] ['transactions.*', DB::raw('SUM(`transactions`.`amount`) as `sum`')]
); );

View File

@@ -343,7 +343,8 @@ Route::group(
*/ */
Route::get('/transaction/split', ['uses' => 'Transaction\SplitController@journalFromStore', 'as' => 'split.journal.from-store']); Route::get('/transaction/split', ['uses' => 'Transaction\SplitController@journalFromStore', 'as' => 'split.journal.from-store']);
Route::post('/transaction/split', ['uses' => 'Transaction\SplitController@postJournalFromStore', 'as' => 'split.journal.from-store.post']); Route::post('/transaction/split', ['uses' => 'Transaction\SplitController@postJournalFromStore', 'as' => 'split.journal.from-store.post']);
Route::get('/transaction/edit-split/{journal}',['uses' => 'Transaction\SplitController@edit', 'as' => 'split.journal.edit']);
Route::post('/transaction/edit-split/{journal}',['uses' => 'Transaction\SplitController@update', 'as' => 'split.journal.update']);
/** /**
* Tag Controller * Tag Controller
*/ */

View File

@@ -182,8 +182,18 @@ class AccountRepository implements AccountRepositoryInterface
->expanded() ->expanded()
->sortCorrectly() ->sortCorrectly()
->before($end) ->before($end)
->where('destination_account.id', $account->id) ->leftJoin(
->whereIn('source_account.id', $ids) 'transactions as dest', function (JoinClause $join) {
$join->on('dest.transaction_journal_id', '=', 'transaction_journals.id')->where('dest.amount', '>', 0);
}
)
->leftJoin(
'transactions as source', function (JoinClause $join) {
$join->on('source.transaction_journal_id', '=', 'transaction_journals.id')->where('source.amount', '<', 0);
}
)
->where('dest.account_id', $account->id)
->whereIn('source.account_id', $ids)
->after($start) ->after($start)
->get(TransactionJournal::queryFields()); ->get(TransactionJournal::queryFields());

View File

@@ -72,13 +72,10 @@ class TransactionJournalSupport extends Model
return $cache->get(); return $cache->get();
} }
$amount = '0'; // saves on queries:
/** @var Transaction $t */ $amount = $journal->transactions()->where('amount', '>', 0)->get()->sum('amount');
foreach ($journal->transactions as $t) {
if ($t->amount > 0) { $amount = strval($amount);
$amount = $t->amount;
}
}
$cache->store($amount); $cache->store($amount);
return $amount; return $amount;