/** * POST api/filter/basicTotals * @param Request $request * @return array */ public function basicTotals(Request $request) { $filter = array_merge(Config::get('filters.defaults'), $request->get('filter')); $query = $this->filterQueryRepository->buildQuery($filter); $queryForCalculatingBalance = $this->filterQueryRepository->buildQueryForCalculatingBalance($filter); return $this->filterTotalsRepository->getFilterTotals($query, $queryForCalculatingBalance)->toArray(); }
/** * * @param $query * @param $queryForCalculatingBalance * @return array */ public function getGraphTotals($query, $queryForCalculatingBalance) { $transactions = $query->select('date', 'type', 'total', 'reconciled')->orderBy('date', 'desc')->get(); $transactionsFromBeginning = $queryForCalculatingBalance->select('date', 'type', 'total', 'reconciled')->orderBy('date', 'desc')->get(); if (count($transactions) < 1) { return null; } $minDate = Carbon::createFromFormat('Y-m-d', $transactions->min('date'))->startOfMonth(); $maxDate = Carbon::createFromFormat('Y-m-d', $transactions->max('date'))->startOfMonth(); $date = $maxDate; $totalsForAllMonths = []; while ($minDate <= $date) { // $transactionsForMonth = $query // ->whereMonth('date', '=', $date->month) // ->whereYear('date', '=', $date->year) // ->select('date', 'type', 'total', 'reconciled') // ->orderBy('date', 'desc') // ->get(); $transactionsForMonth = $transactions->filter(function ($transaction) use($date) { return Carbon::createFromFormat('Y-m-d', $transaction->date)->year === $date->year && ($transactionMonth = Carbon::createFromFormat('Y-m-d', $transaction->date)->month === $date->month); }); // $transactionsFromBeginning = $queryForCalculatingBalance // ->where('date', '<=', $date->copy()->endOfMonth()->format('Y-m-d')) // ->select('date', 'type', 'total', 'reconciled') // ->orderBy('date', 'desc') // ->get(); $transactionsFromBeginning = $transactionsFromBeginning->filter(function ($transaction) use($date) { return Carbon::createFromFormat('Y-m-d', $transaction->date) <= $date->copy()->endOfMonth(); }); $totalsForMonth = $this->filterTotalsRepository->calculateFilterTotals($transactionsForMonth); $totalsForMonth['month'] = $date->format("M Y"); $totalsFromBeginning = $this->filterTotalsRepository->calculateFilterTotals($transactionsFromBeginning); $totalsForMonth['balanceFromBeginning'] = $totalsFromBeginning['creditIncludingTransfers'] + $totalsFromBeginning['debitIncludingTransfers']; $totalsForAllMonths[] = $totalsForMonth; $date = $date->subMonths(1); } return ['monthTotals' => array_reverse($totalsForAllMonths)]; }