diff --git a/app/Helpers/Report/ReportQuery.php b/app/Helpers/Report/ReportQuery.php index 55d0b5ec73..c210efd29a 100644 --- a/app/Helpers/Report/ReportQuery.php +++ b/app/Helpers/Report/ReportQuery.php @@ -87,9 +87,9 @@ class ReportQuery implements ReportQueryInterface ->whereNull('budget_transaction_journal.budget_id')->whereNull('transaction_journals.deleted_at') ->whereNull('otherJournals.deleted_at') ->where('transactions.account_id', $account->id) - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order','ASC') - ->orderBy('transaction_journals.id','DESC') + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC') ->whereNotNull('transaction_group_transaction_journal.transaction_group_id') ->get( [ @@ -174,26 +174,9 @@ class ReportQuery implements ReportQueryInterface */ public function getBudgetSummary(Account $account, Carbon $start, Carbon $end) { - $set = TransactionJournal:: - leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') - ->leftJoin('budgets', 'budgets.id', '=', 'budget_transaction_journal.budget_id') - ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->leftJoin( - 'transactions', function (JoinClause $join) { - $join->on('transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('transactions.amount', '<', 0); - } - ) - ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') - ->before($end) - ->after($start) - ->where('accounts.id', $account->id) - ->where('transaction_journals.user_id', Auth::user()->id) - ->where('transaction_types.type', 'Withdrawal') - ->groupBy('budgets.id') - ->orderBy('budgets.name', 'ASC') - ->get(['budgets.id', 'budgets.name', DB::Raw('SUM(`transactions`.`amount`) as `amount`')]); + $query = $this->queryJournalsNoBudget($account, $start, $end); - return $set; + return $query->get(['budgets.id', 'budgets.name', DB::Raw('SUM(`transactions`.`amount`) as `amount`')]); } @@ -209,26 +192,9 @@ class ReportQuery implements ReportQueryInterface */ public function getTransactionsWithoutBudget(Account $account, Carbon $start, Carbon $end) { - $set = TransactionJournal:: - leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') - ->leftJoin('budgets', 'budgets.id', '=', 'budget_transaction_journal.budget_id') - ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') - ->leftJoin( - 'transactions', function (JoinClause $join) { - $join->on('transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('transactions.amount', '<', 0); - } - ) - ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') - ->before($end) - ->after($start) - ->where('accounts.id', $account->id) - ->where('transaction_journals.user_id', Auth::user()->id) - ->where('transaction_types.type', 'Withdrawal') - ->whereNull('budgets.id') - ->orderBy('transaction_journals.date', 'ASC') - ->get(['budgets.name', 'transactions.amount', 'transaction_journals.*']); + $query = $this->queryJournalsNoBudget($account, $start, $end); - return $set; + return $query->get(['budgets.name', 'transactions.amount', 'transaction_journals.*']); } /** @@ -604,4 +570,37 @@ class ReportQuery implements ReportQueryInterface ); } + /** + * + * This query will get all transaction journals and budget information for a specified account + * in a certain date range, where the transaction journal does not have a budget. + * There is no get() specified, this is up to the method itself. + * + * @param Account $account + * @param Carbon $start + * @param Carbon $end + * + * @return Builder + */ + public function queryJournalsNoBudget(Account $account, Carbon $start, Carbon $end) + { + return TransactionJournal:: + leftJoin('budget_transaction_journal', 'budget_transaction_journal.transaction_journal_id', '=', 'transaction_journals.id') + ->leftJoin('budgets', 'budgets.id', '=', 'budget_transaction_journal.budget_id') + ->leftJoin('transaction_types', 'transaction_types.id', '=', 'transaction_journals.transaction_type_id') + ->leftJoin( + 'transactions', function (JoinClause $join) { + $join->on('transactions.transaction_journal_id', '=', 'transaction_journals.id')->where('transactions.amount', '<', 0); + } + ) + ->leftJoin('accounts', 'accounts.id', '=', 'transactions.account_id') + ->before($end) + ->after($start) + ->where('accounts.id', $account->id) + ->where('transaction_journals.user_id', Auth::user()->id) + ->where('transaction_types.type', 'Withdrawal') + ->groupBy('budgets.id') + ->orderBy('budgets.name', 'ASC'); + } + } diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index 457b20bdb1..a2dcc48624 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -1,7 +1,6 @@ transactionjournals()->withRelevantData() - ->orderBy('transaction_journals.date', 'DESC') - ->orderBy('transaction_journals.order','ASC') - ->orderBy('transaction_journals.id','DESC') - - ->get(); + ->orderBy('transaction_journals.date', 'DESC') + ->orderBy('transaction_journals.order', 'ASC') + ->orderBy('transaction_journals.id', 'DESC') + ->get(); $bill->nextExpectedMatch = $repository->nextExpectedMatch($bill); $hideBill = true; @@ -156,22 +154,8 @@ class BillController extends Controller */ public function store(BillFormRequest $request, BillRepositoryInterface $repository) { - - $billData = [ - 'name' => $request->get('name'), - 'match' => $request->get('match'), - 'amount_min' => floatval($request->get('amount_min')), - 'amount_currency_id' => floatval($request->get('amount_currency_id')), - 'amount_max' => floatval($request->get('amount_max')), - 'date' => new Carbon($request->get('date')), - 'user' => Auth::user()->id, - 'repeat_freq' => $request->get('repeat_freq'), - 'skip' => intval($request->get('skip')), - 'automatch' => intval($request->get('automatch')) === 1, - 'active' => intval($request->get('active')) === 1, - ]; - - $bill = $repository->store($billData); + $billData = $request->getBillData(); + $bill = $repository->store($billData); Session::flash('success', 'Bill "' . e($bill->name) . '" stored.'); if (intval(Input::get('create_another')) === 1) { @@ -189,21 +173,8 @@ class BillController extends Controller */ public function update(Bill $bill, BillFormRequest $request, BillRepositoryInterface $repository) { - $billData = [ - 'name' => $request->get('name'), - 'match' => $request->get('match'), - 'amount_min' => floatval($request->get('amount_min')), - 'amount_currency_id' => floatval($request->get('amount_currency_id')), - 'amount_max' => floatval($request->get('amount_max')), - 'date' => new Carbon($request->get('date')), - 'user' => Auth::user()->id, - 'repeat_freq' => $request->get('repeat_freq'), - 'skip' => intval($request->get('skip')), - 'automatch' => intval($request->get('automatch')) === 1, - 'active' => intval($request->get('active')) === 1, - ]; - - $bill = $repository->update($bill, $billData); + $billData = $request->getBillData(); + $bill = $repository->update($bill, $billData); if (intval(Input::get('return_to_edit')) === 1) { return Redirect::route('bills.edit', $bill->id); diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 56054d859e..04650dc5e6 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -1,7 +1,6 @@ 0 ? ($page - 1) * 50 : 0; - $set = Auth::user()-> - transactionJournals()-> - transactionTypes($types)-> - withRelevantData()->take(50)->offset($offset) - ->orderBy('date', 'DESC') - ->orderBy('order','ASC') - ->orderBy('id','DESC') - ->get( - ['transaction_journals.*'] - ); + $set = Auth::user()->transactionJournals()->transactionTypes($types)->withRelevantData()->take(50)->offset($offset) + ->orderBy('date', 'DESC') + ->orderBy('order', 'ASC') + ->orderBy('id', 'DESC') + ->get( + ['transaction_journals.*'] + ); $count = Auth::user()->transactionJournals()->transactionTypes($types)->count(); $journals = new LengthAwarePaginator($set, $count, 50, $page); $journals->setPath('transactions/' . $what); @@ -227,13 +223,14 @@ class TransactionController extends Controller $order = 0; foreach ($ids as $id) { $journal = Auth::user()->transactionjournals()->where('id', $id)->where('date', Input::get('date'))->first(); - if($journal) { + if ($journal) { $journal->order = $order; $order++; $journal->save(); } } } + return Response::json(true); } @@ -251,10 +248,10 @@ class TransactionController extends Controller $t->account->transactions()->leftJoin( 'transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id' ) - ->where('transaction_journals.date', '<=', $journal->date->format('Y-m-d')) - ->where('transaction_journals.order','>=',$journal->order) - ->where('transaction_journals.id', '!=', $journal->id) - ->sum('transactions.amount') + ->where('transaction_journals.date', '<=', $journal->date->format('Y-m-d')) + ->where('transaction_journals.order', '>=', $journal->order) + ->where('transaction_journals.id', '!=', $journal->id) + ->sum('transactions.amount') ); $t->after = $t->before + $t->amount; } @@ -274,23 +271,8 @@ class TransactionController extends Controller */ public function store(JournalFormRequest $request, JournalRepositoryInterface $repository) { - $journalData = [ - 'what' => $request->get('what'), - 'description' => $request->get('description'), - 'account_id' => intval($request->get('account_id')), - 'account_from_id' => intval($request->get('account_from_id')), - 'account_to_id' => intval($request->get('account_to_id')), - 'expense_account' => $request->get('expense_account'), - 'revenue_account' => $request->get('revenue_account'), - 'amount' => floatval($request->get('amount')), - 'user' => Auth::user()->id, - 'amount_currency_id' => intval($request->get('amount_currency_id')), - 'date' => new Carbon($request->get('date')), - 'budget_id' => intval($request->get('budget_id')), - 'category' => $request->get('category'), - ]; - - $journal = $repository->store($journalData); + $journalData = $request->getJournalData(); + $journal = $repository->store($journalData); event(new JournalSaved($journal)); event(new JournalCreated($journal, intval($request->get('piggy_bank_id')))); @@ -321,23 +303,7 @@ class TransactionController extends Controller public function update(TransactionJournal $journal, JournalFormRequest $request, JournalRepositoryInterface $repository) { - - $journalData = [ - 'what' => $request->get('what'), - 'description' => $request->get('description'), - 'account_id' => intval($request->get('account_id')), - 'account_from_id' => intval($request->get('account_from_id')), - 'account_to_id' => intval($request->get('account_to_id')), - 'expense_account' => $request->get('expense_account'), - 'revenue_account' => $request->get('revenue_account'), - 'amount' => floatval($request->get('amount')), - 'user' => Auth::user()->id, - 'amount_currency_id' => intval($request->get('amount_currency_id')), - 'date' => new Carbon($request->get('date')), - 'budget_id' => intval($request->get('budget_id')), - 'category' => $request->get('category'), - ]; - + $journalData = $request->getJournalData(); $repository->update($journal, $journalData); event(new JournalSaved($journal)); diff --git a/app/Http/Requests/BillFormRequest.php b/app/Http/Requests/BillFormRequest.php index b3057bc885..b225ab91bc 100644 --- a/app/Http/Requests/BillFormRequest.php +++ b/app/Http/Requests/BillFormRequest.php @@ -3,6 +3,7 @@ namespace FireflyIII\Http\Requests; use Auth; +use Carbon\Carbon; use Input; /** @@ -21,6 +22,26 @@ class BillFormRequest extends Request return Auth::check(); } + /** + * @return array + */ + public function getBillData() + { + return [ + 'name' => $this->get('name'), + 'match' => $this->get('match'), + 'amount_min' => floatval($this->get('amount_min')), + 'amount_currency_id' => floatval($this->get('amount_currency_id')), + 'amount_max' => floatval($this->get('amount_max')), + 'date' => new Carbon($this->get('date')), + 'user' => Auth::user()->id, + 'repeat_freq' => $this->get('repeat_freq'), + 'skip' => intval($this->get('skip')), + 'automatch' => intval($this->get('automatch')) === 1, + 'active' => intval($this->get('active')) === 1, + ]; + } + /** * @return array */ diff --git a/app/Http/Requests/JournalFormRequest.php b/app/Http/Requests/JournalFormRequest.php index 82b8f8549e..b0da081e4a 100644 --- a/app/Http/Requests/JournalFormRequest.php +++ b/app/Http/Requests/JournalFormRequest.php @@ -3,8 +3,10 @@ namespace FireflyIII\Http\Requests; use Auth; -use Input; +use Carbon\Carbon; use Exception; +use Input; + /** * Class JournalFormRequest * @@ -21,6 +23,28 @@ class JournalFormRequest extends Request return Auth::check(); } + /** + * @return array + */ + public function getJournalData() + { + return [ + 'what' => $this->get('what'), + 'description' => $this->get('description'), + 'account_id' => intval($this->get('account_id')), + 'account_from_id' => intval($this->get('account_from_id')), + 'account_to_id' => intval($this->get('account_to_id')), + 'expense_account' => $this->get('expense_account'), + 'revenue_account' => $this->get('revenue_account'), + 'amount' => floatval($this->get('amount')), + 'user' => Auth::user()->id, + 'amount_currency_id' => intval($this->get('amount_currency_id')), + 'date' => new Carbon($this->get('date')), + 'budget_id' => intval($this->get('budget_id')), + 'category' => $this->get('category'), + ]; + } + /** * @return array * @throws Exception