mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
Clean up code.
This commit is contained in:
@@ -20,163 +20,6 @@ use Illuminate\Support\Collection;
|
|||||||
*/
|
*/
|
||||||
class ReportQuery implements ReportQueryInterface
|
class ReportQuery implements ReportQueryInterface
|
||||||
{
|
{
|
||||||
/**
|
|
||||||
* See ReportQueryInterface::incomeInPeriodCorrected.
|
|
||||||
*
|
|
||||||
* This method's length is caused mainly by the query build stuff. Therefor:
|
|
||||||
*
|
|
||||||
* @SuppressWarnings(PHPMD.ExcessiveMethodLength)
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function expenseInPeriodCorrected(Carbon $start, Carbon $end, $includeShared = false)
|
|
||||||
{
|
|
||||||
$query = $this->queryJournalsWithTransactions($start, $end);
|
|
||||||
if ($includeShared === false) {
|
|
||||||
$query->where(
|
|
||||||
function (Builder $query) {
|
|
||||||
$query->where(
|
|
||||||
function (Builder $q) { // only get withdrawals not from a shared account
|
|
||||||
$q->where('transaction_types.type', TransactionType::WITHDRAWAL);
|
|
||||||
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$query->orWhere(
|
|
||||||
function (Builder $q) { // and transfers from a shared account.
|
|
||||||
$q->where('transaction_types.type', TransactionType::TRANSFER);
|
|
||||||
$q->where('acm_to.data', '=', '"sharedAsset"');
|
|
||||||
$q->where('acm_from.data', '!=', '"sharedAsset"');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
$query->where('transaction_types.type', TransactionType::WITHDRAWAL); // any withdrawal is fine.
|
|
||||||
}
|
|
||||||
$query->orderBy('transaction_journals.date');
|
|
||||||
$data = $query->get( // get everything
|
|
||||||
['transaction_journals.*', 'transaction_types.type', 'ac_to.name as name', 'ac_to.id as account_id', 'ac_to.encrypted as account_encrypted']
|
|
||||||
);
|
|
||||||
|
|
||||||
$data->each(
|
|
||||||
function (TransactionJournal $journal) {
|
|
||||||
if (intval($journal->account_encrypted) == 1) {
|
|
||||||
$journal->name = Crypt::decrypt($journal->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a users accounts combined with various meta-data related to the start and end date.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*/
|
|
||||||
public function getAllAccounts(Carbon $start, Carbon $end, $includeShared = false)
|
|
||||||
{
|
|
||||||
$query = Auth::user()->accounts()->orderBy('accounts.name', 'ASC')
|
|
||||||
->accountTypeIn(['Default account', 'Asset account', 'Cash account']);
|
|
||||||
if ($includeShared === false) {
|
|
||||||
$query->leftJoin(
|
|
||||||
'account_meta', function (JoinClause $join) {
|
|
||||||
$join->on('account_meta.account_id', '=', 'accounts.id')->where('account_meta.name', '=', 'accountRole');
|
|
||||||
}
|
|
||||||
)
|
|
||||||
->where(
|
|
||||||
function (Builder $query) {
|
|
||||||
|
|
||||||
$query->where('account_meta.data', '!=', '"sharedAsset"');
|
|
||||||
$query->orWhereNull('account_meta.data');
|
|
||||||
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
$set = $query->get(['accounts.*']);
|
|
||||||
|
|
||||||
return $set;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method works the same way as ReportQueryInterface::incomeInPeriod does, but instead of returning results
|
|
||||||
* will simply list the transaction journals only. This should allow any follow up counting to be accurate with
|
|
||||||
* regards to tags.
|
|
||||||
*
|
|
||||||
* This method returns all "income" journals in a certain period, which are both transfers from a shared account
|
|
||||||
* and "ordinary" deposits. The query used is almost equal to ReportQueryInterface::journalsByRevenueAccount but it does
|
|
||||||
* not group and returns different fields.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*/
|
|
||||||
public function incomeInPeriodCorrected(Carbon $start, Carbon $end, $includeShared = false)
|
|
||||||
{
|
|
||||||
$query = $this->queryJournalsWithTransactions($start, $end);
|
|
||||||
if ($includeShared === false) {
|
|
||||||
// only get deposits not to a shared account
|
|
||||||
// and transfers to a shared account.
|
|
||||||
$query->where(
|
|
||||||
function (Builder $query) {
|
|
||||||
$query->where(
|
|
||||||
function (Builder $q) {
|
|
||||||
$q->where('transaction_types.type', TransactionType::DEPOSIT);
|
|
||||||
$q->where('acm_to.data', '!=', '"sharedAsset"');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$query->orWhere(
|
|
||||||
function (Builder $q) {
|
|
||||||
$q->where('transaction_types.type', TransactionType::TRANSFER);
|
|
||||||
$q->where('acm_from.data', '=', '"sharedAsset"');
|
|
||||||
$q->where('acm_to.data', '!=', '"sharedAsset"');
|
|
||||||
}
|
|
||||||
);
|
|
||||||
}
|
|
||||||
);
|
|
||||||
} else {
|
|
||||||
// any deposit is fine.
|
|
||||||
$query->where('transaction_types.type', TransactionType::DEPOSIT);
|
|
||||||
}
|
|
||||||
$query->orderBy('transaction_journals.date');
|
|
||||||
|
|
||||||
// get everything
|
|
||||||
$data = $query->get(
|
|
||||||
['transaction_journals.*', 'transaction_types.type', 'ac_from.name as name', 'ac_from.id as account_id', 'ac_from.encrypted as account_encrypted']
|
|
||||||
);
|
|
||||||
|
|
||||||
$data->each(
|
|
||||||
function (TransactionJournal $journal) {
|
|
||||||
if (intval($journal->account_encrypted) == 1) {
|
|
||||||
$journal->name = Crypt::decrypt($journal->name);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
$data = $data->filter(
|
|
||||||
function (TransactionJournal $journal) {
|
|
||||||
if ($journal->amount != 0) {
|
|
||||||
return $journal;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
return $data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Covers tags
|
* Covers tags
|
||||||
*
|
*
|
||||||
|
@@ -15,22 +15,6 @@ use Illuminate\Support\Collection;
|
|||||||
interface ReportQueryInterface
|
interface ReportQueryInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* See ReportQueryInterface::incomeInPeriodCorrected
|
|
||||||
*
|
|
||||||
* This method returns all "expense" journals in a certain period, which are both transfers to a shared account
|
|
||||||
* and "ordinary" withdrawals. The query used is almost equal to ReportQueryInterface::journalsByRevenueAccount but it does
|
|
||||||
* not group and returns different fields.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public function expenseInPeriodCorrected(Carbon $start, Carbon $end, $includeShared = false);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* See ReportQueryInterface::incomeInPeriodCorrected
|
* See ReportQueryInterface::incomeInPeriodCorrected
|
||||||
*
|
*
|
||||||
@@ -47,30 +31,6 @@ interface ReportQueryInterface
|
|||||||
*/
|
*/
|
||||||
public function expenseInPeriodCorrectedForList(Carbon $start, Carbon $end, Collection $accounts);
|
public function expenseInPeriodCorrectedForList(Carbon $start, Carbon $end, Collection $accounts);
|
||||||
|
|
||||||
/**
|
|
||||||
* Get a users accounts combined with various meta-data related to the start and end date.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*/
|
|
||||||
public function getAllAccounts(Carbon $start, Carbon $end, $includeShared = false);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* This method works the same way as ReportQueryInterface::incomeInPeriod does, but instead of returning results
|
|
||||||
* will simply list the transaction journals only. This should allow any follow up counting to be accurate with
|
|
||||||
* regards to tags.
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param bool $includeShared
|
|
||||||
*
|
|
||||||
* @return Collection
|
|
||||||
*/
|
|
||||||
public function incomeInPeriodCorrected(Carbon $start, Carbon $end, $includeShared = false);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This method works the same way as ReportQueryInterface::incomeInPeriod does, but instead of returning results
|
* This method works the same way as ReportQueryInterface::incomeInPeriod does, but instead of returning results
|
||||||
* will simply list the transaction journals only. This should allow any follow up counting to be accurate with
|
* will simply list the transaction journals only. This should allow any follow up counting to be accurate with
|
||||||
|
@@ -178,7 +178,7 @@ class JsonController extends Controller
|
|||||||
*
|
*
|
||||||
* @return \Symfony\Component\HttpFoundation\Response
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
*/
|
*/
|
||||||
public function boxIn(ReportQueryInterface $reportQuery)
|
public function boxIn(ReportQueryInterface $reportQuery, AccountRepositoryInterface $accountRepository)
|
||||||
{
|
{
|
||||||
$start = Session::get('start', Carbon::now()->startOfMonth());
|
$start = Session::get('start', Carbon::now()->startOfMonth());
|
||||||
$end = Session::get('end', Carbon::now()->endOfMonth());
|
$end = Session::get('end', Carbon::now()->endOfMonth());
|
||||||
@@ -191,8 +191,8 @@ class JsonController extends Controller
|
|||||||
if ($cache->has()) {
|
if ($cache->has()) {
|
||||||
return Response::json($cache->get()); // @codeCoverageIgnore
|
return Response::json($cache->get()); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
$accounts = $accountRepository->getAccounts(['Default account', 'Asset account', 'Cash account']);
|
||||||
$amount = $reportQuery->incomeInPeriodCorrected($start, $end, true)->sum('amount');
|
$amount = $reportQuery->incomeInPeriodCorrectedForList($start, $end, $accounts)->sum('amount');
|
||||||
|
|
||||||
$data = ['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
|
$data = ['box' => 'in', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
|
||||||
$cache->store($data);
|
$cache->store($data);
|
||||||
@@ -205,11 +205,12 @@ class JsonController extends Controller
|
|||||||
*
|
*
|
||||||
* @return \Symfony\Component\HttpFoundation\Response
|
* @return \Symfony\Component\HttpFoundation\Response
|
||||||
*/
|
*/
|
||||||
public function boxOut(ReportQueryInterface $reportQuery)
|
public function boxOut(ReportQueryInterface $reportQuery, AccountRepositoryInterface $accountRepository)
|
||||||
{
|
{
|
||||||
$start = Session::get('start', Carbon::now()->startOfMonth());
|
$start = Session::get('start', Carbon::now()->startOfMonth());
|
||||||
$end = Session::get('end', Carbon::now()->endOfMonth());
|
$end = Session::get('end', Carbon::now()->endOfMonth());
|
||||||
|
|
||||||
|
$accounts = $accountRepository->getAccounts(['Default account', 'Asset account', 'Cash account']);
|
||||||
|
|
||||||
// works for json too!
|
// works for json too!
|
||||||
$cache = new CacheProperties;
|
$cache = new CacheProperties;
|
||||||
@@ -220,7 +221,7 @@ class JsonController extends Controller
|
|||||||
return Response::json($cache->get()); // @codeCoverageIgnore
|
return Response::json($cache->get()); // @codeCoverageIgnore
|
||||||
}
|
}
|
||||||
|
|
||||||
$amount = $reportQuery->expenseInPeriodCorrected($start, $end, true)->sum('amount');
|
$amount = $reportQuery->expenseInPeriodCorrectedForList($start, $end, $accounts)->sum('amount');
|
||||||
$amount = $amount * -1;
|
$amount = $amount * -1;
|
||||||
|
|
||||||
$data = ['box' => 'out', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
|
$data = ['box' => 'out', 'amount' => Amount::format($amount, false), 'amount_raw' => $amount];
|
||||||
|
Reference in New Issue
Block a user