<?php namespace App\Http\Controllers\Banking; use App\Http\Controllers\Controller; use App\Models\Banking\Account; use App\Models\Banking\Transaction; use App\Models\Expense\BillPayment; use App\Models\Expense\Payment; use App\Models\Income\InvoicePayment; use App\Models\Income\Revenue; use App\Models\Setting\Category; class Transactions extends Controller { public $transactions = []; /** * Display a listing of the resource. * * @return Response */ public function index() { $request = request(); $accounts = collect(Account::enabled()->pluck('name', 'id')) ->prepend(trans('general.all_type', ['type' => trans_choice('general.accounts', 2)]), ''); $types = collect(['expense' => 'Expense', 'income' => 'Income']) ->prepend(trans('general.all_type', ['type' => trans_choice('general.types', 2)]), ''); $categories = collect(Category::enabled()->type('income')->pluck('name', 'id')) ->prepend(trans('general.all_type', ['type' => trans_choice('general.categories', 2)]), ''); $type = $request->get('type'); if ($type != 'income') { $this->addTransactions(Payment::collect(['paid_at'=> 'desc']), trans_choice('general.expenses', 1)); $this->addTransactions(BillPayment::collect(['paid_at'=> 'desc']), trans_choice('general.expenses', 1), trans_choice('general.bills', 1)); } if ($type != 'expense') { $this->addTransactions(Revenue::collect(['paid_at'=> 'desc']), trans_choice('general.incomes', 1)); $this->addTransactions(InvoicePayment::collect(['paid_at'=> 'desc']), trans_choice('general.incomes', 1), trans_choice('general.invoices', 1)); } $transactions = $this->getTransactions($request); return view('banking.transactions.index', compact('transactions', 'accounts', 'types', 'categories')); } /** * Add items to transactions array. * * @param $items * @param $type * @param $category */ protected function addTransactions($items, $type, $category = null) { foreach ($items as $item) { $data = [ 'paid_at' => $item->paid_at, 'account_name' => $item->account->name, 'type' => $type, 'description' => $item->description, 'amount' => $item->amount, 'currency_code' => $item->currency_code, ]; if (!is_null($category)) { $data['category_name'] = $category; } else { $data['category_name'] = $item->category->name; } $this->transactions[] = (object) $data; } } protected function getTransactions($request) { // Sort items if (isset($request['sort'])) { if ($request['order'] == 'asc') { $f = 'sortBy'; } else { $f = 'sortByDesc'; } $transactions = collect($this->transactions)->$f($request['sort']); } else { $transactions = collect($this->transactions)->sortByDesc('paid_at'); } return $transactions; } }