mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-13 16:00:13 +00:00
Moved method to new helper.
This commit is contained in:
@@ -9,6 +9,12 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Helpers\Report;
|
namespace FireflyIII\Helpers\Report;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use DB;
|
||||||
|
use FireflyIII\Helpers\Collection\Account as AccountCollection;
|
||||||
|
use FireflyIII\Models\Account;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class AccountReportHelper
|
* Class AccountReportHelper
|
||||||
@@ -17,5 +23,91 @@ namespace FireflyIII\Helpers\Report;
|
|||||||
*/
|
*/
|
||||||
class AccountReportHelper implements AccountReportHelperInterface
|
class AccountReportHelper implements AccountReportHelperInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* This method generates a full report for the given period on all
|
||||||
|
* given accounts
|
||||||
|
*
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
* @param Collection $accounts
|
||||||
|
*
|
||||||
|
* @return AccountCollection
|
||||||
|
*/
|
||||||
|
public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts)
|
||||||
|
{
|
||||||
|
$startAmount = '0';
|
||||||
|
$endAmount = '0';
|
||||||
|
$diff = '0';
|
||||||
|
$ids = $accounts->pluck('id')->toArray();
|
||||||
|
|
||||||
|
$yesterday = clone $start;
|
||||||
|
$yesterday->subDay();
|
||||||
|
|
||||||
|
bcscale(2);
|
||||||
|
|
||||||
|
// get balances for start.
|
||||||
|
$startSet = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id')
|
||||||
|
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
|
->whereIn('accounts.id', $ids)
|
||||||
|
->whereNull('transaction_journals.deleted_at')
|
||||||
|
->whereNull('transactions.deleted_at')
|
||||||
|
->where('transaction_journals.date', '<=', $yesterday->format('Y-m-d'))
|
||||||
|
->groupBy('accounts.id')
|
||||||
|
->get(['accounts.id', DB::Raw('SUM(`transactions`.`amount`) as `balance`')]);
|
||||||
|
|
||||||
|
// and end:
|
||||||
|
$endSet = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id')
|
||||||
|
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
||||||
|
->whereIn('accounts.id', $ids)
|
||||||
|
->whereNull('transaction_journals.deleted_at')
|
||||||
|
->whereNull('transactions.deleted_at')
|
||||||
|
->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
|
||||||
|
->groupBy('accounts.id')
|
||||||
|
->get(['accounts.id', DB::Raw('SUM(`transactions`.`amount`) as `balance`')]);
|
||||||
|
|
||||||
|
|
||||||
|
$accounts->each(
|
||||||
|
function (Account $account) use ($startSet, $endSet) {
|
||||||
|
/**
|
||||||
|
* The balance for today always incorporates transactions
|
||||||
|
* made on today. So to get todays "start" balance, we sub one
|
||||||
|
* day.
|
||||||
|
*/
|
||||||
|
//
|
||||||
|
$currentStart = $startSet->filter(
|
||||||
|
function (Account $entry) use ($account) {
|
||||||
|
return $account->id == $entry->id;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if ($currentStart->first()) {
|
||||||
|
$account->startBalance = $currentStart->first()->balance;
|
||||||
|
}
|
||||||
|
|
||||||
|
$currentEnd = $endSet->filter(
|
||||||
|
function (Account $entry) use ($account) {
|
||||||
|
return $account->id == $entry->id;
|
||||||
|
}
|
||||||
|
);
|
||||||
|
if ($currentEnd->first()) {
|
||||||
|
$account->endBalance = $currentEnd->first()->balance;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
|
||||||
|
// summarize:
|
||||||
|
foreach ($accounts as $account) {
|
||||||
|
$startAmount = bcadd($startAmount, $account->startBalance);
|
||||||
|
$endAmount = bcadd($endAmount, $account->endBalance);
|
||||||
|
$diff = bcadd($diff, bcsub($account->endBalance, $account->startBalance));
|
||||||
|
}
|
||||||
|
|
||||||
|
$object = new AccountCollection;
|
||||||
|
$object->setStart($startAmount);
|
||||||
|
$object->setEnd($endAmount);
|
||||||
|
$object->setDifference($diff);
|
||||||
|
$object->setAccounts($accounts);
|
||||||
|
|
||||||
|
return $object;
|
||||||
|
}
|
||||||
}
|
}
|
@@ -9,6 +9,11 @@
|
|||||||
|
|
||||||
namespace FireflyIII\Helpers\Report;
|
namespace FireflyIII\Helpers\Report;
|
||||||
|
|
||||||
|
use Carbon\Carbon;
|
||||||
|
use FireflyIII\Helpers\Collection\Account as AccountCollection;
|
||||||
|
use Illuminate\Support\Collection;
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Interface AccountReportHelperInterface
|
* Interface AccountReportHelperInterface
|
||||||
*
|
*
|
||||||
@@ -16,5 +21,16 @@ namespace FireflyIII\Helpers\Report;
|
|||||||
*/
|
*/
|
||||||
interface AccountReportHelperInterface
|
interface AccountReportHelperInterface
|
||||||
{
|
{
|
||||||
|
/**
|
||||||
|
* This method generates a full report for the given period on all
|
||||||
|
* given accounts
|
||||||
|
*
|
||||||
|
* @param Carbon $start
|
||||||
|
* @param Carbon $end
|
||||||
|
* @param Collection $accounts
|
||||||
|
*
|
||||||
|
* @return AccountCollection
|
||||||
|
*/
|
||||||
|
public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts);
|
||||||
|
|
||||||
}
|
}
|
@@ -3,9 +3,6 @@
|
|||||||
namespace FireflyIII\Helpers\Report;
|
namespace FireflyIII\Helpers\Report;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use DB;
|
|
||||||
use FireflyIII\Helpers\FiscalHelper;
|
|
||||||
use FireflyIII\Helpers\Collection\Account as AccountCollection;
|
|
||||||
use FireflyIII\Helpers\Collection\Balance;
|
use FireflyIII\Helpers\Collection\Balance;
|
||||||
use FireflyIII\Helpers\Collection\BalanceEntry;
|
use FireflyIII\Helpers\Collection\BalanceEntry;
|
||||||
use FireflyIII\Helpers\Collection\BalanceHeader;
|
use FireflyIII\Helpers\Collection\BalanceHeader;
|
||||||
@@ -17,10 +14,10 @@ use FireflyIII\Helpers\Collection\BudgetLine;
|
|||||||
use FireflyIII\Helpers\Collection\Category as CategoryCollection;
|
use FireflyIII\Helpers\Collection\Category as CategoryCollection;
|
||||||
use FireflyIII\Helpers\Collection\Expense;
|
use FireflyIII\Helpers\Collection\Expense;
|
||||||
use FireflyIII\Helpers\Collection\Income;
|
use FireflyIII\Helpers\Collection\Income;
|
||||||
use FireflyIII\Models\Account;
|
use FireflyIII\Helpers\FiscalHelper;
|
||||||
use FireflyIII\Models\Bill;
|
use FireflyIII\Models\Bill;
|
||||||
use FireflyIII\Models\Budget as BudgetModel;
|
|
||||||
use FireflyIII\Models\Budget;
|
use FireflyIII\Models\Budget;
|
||||||
|
use FireflyIII\Models\Budget as BudgetModel;
|
||||||
use FireflyIII\Models\LimitRepetition;
|
use FireflyIII\Models\LimitRepetition;
|
||||||
use FireflyIII\Models\Tag;
|
use FireflyIII\Models\Tag;
|
||||||
use FireflyIII\Models\TransactionJournal;
|
use FireflyIII\Models\TransactionJournal;
|
||||||
@@ -59,94 +56,6 @@ class ReportHelper implements ReportHelperInterface
|
|||||||
$this->tagRepository = $tagRepository;
|
$this->tagRepository = $tagRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* This method generates a full report for the given period on all
|
|
||||||
* given accounts
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param Collection $accounts
|
|
||||||
*
|
|
||||||
* @return AccountCollection
|
|
||||||
*/
|
|
||||||
public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts)
|
|
||||||
{
|
|
||||||
$startAmount = '0';
|
|
||||||
$endAmount = '0';
|
|
||||||
$diff = '0';
|
|
||||||
$ids = $accounts->pluck('id')->toArray();
|
|
||||||
|
|
||||||
$yesterday = clone $start;
|
|
||||||
$yesterday->subDay();
|
|
||||||
|
|
||||||
bcscale(2);
|
|
||||||
|
|
||||||
// get balances for start.
|
|
||||||
$startSet = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id')
|
|
||||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
|
||||||
->whereIn('accounts.id', $ids)
|
|
||||||
->whereNull('transaction_journals.deleted_at')
|
|
||||||
->whereNull('transactions.deleted_at')
|
|
||||||
->where('transaction_journals.date', '<=', $yesterday->format('Y-m-d'))
|
|
||||||
->groupBy('accounts.id')
|
|
||||||
->get(['accounts.id', DB::Raw('SUM(`transactions`.`amount`) as `balance`')]);
|
|
||||||
|
|
||||||
// and end:
|
|
||||||
$endSet = Account::leftJoin('transactions', 'transactions.account_id', '=', 'accounts.id')
|
|
||||||
->leftJoin('transaction_journals', 'transaction_journals.id', '=', 'transactions.transaction_journal_id')
|
|
||||||
->whereIn('accounts.id', $ids)
|
|
||||||
->whereNull('transaction_journals.deleted_at')
|
|
||||||
->whereNull('transactions.deleted_at')
|
|
||||||
->where('transaction_journals.date', '<=', $end->format('Y-m-d'))
|
|
||||||
->groupBy('accounts.id')
|
|
||||||
->get(['accounts.id', DB::Raw('SUM(`transactions`.`amount`) as `balance`')]);
|
|
||||||
|
|
||||||
|
|
||||||
$accounts->each(
|
|
||||||
function (Account $account) use ($startSet, $endSet) {
|
|
||||||
/**
|
|
||||||
* The balance for today always incorporates transactions
|
|
||||||
* made on today. So to get todays "start" balance, we sub one
|
|
||||||
* day.
|
|
||||||
*/
|
|
||||||
//
|
|
||||||
$currentStart = $startSet->filter(
|
|
||||||
function (Account $entry) use ($account) {
|
|
||||||
return $account->id == $entry->id;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if ($currentStart->first()) {
|
|
||||||
$account->startBalance = $currentStart->first()->balance;
|
|
||||||
}
|
|
||||||
|
|
||||||
$currentEnd = $endSet->filter(
|
|
||||||
function (Account $entry) use ($account) {
|
|
||||||
return $account->id == $entry->id;
|
|
||||||
}
|
|
||||||
);
|
|
||||||
if ($currentEnd->first()) {
|
|
||||||
$account->endBalance = $currentEnd->first()->balance;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
// summarize:
|
|
||||||
foreach ($accounts as $account) {
|
|
||||||
$startAmount = bcadd($startAmount, $account->startBalance);
|
|
||||||
$endAmount = bcadd($endAmount, $account->endBalance);
|
|
||||||
$diff = bcadd($diff, bcsub($account->endBalance, $account->startBalance));
|
|
||||||
}
|
|
||||||
|
|
||||||
$object = new AccountCollection;
|
|
||||||
$object->setStart($startAmount);
|
|
||||||
$object->setEnd($endAmount);
|
|
||||||
$object->setDifference($diff);
|
|
||||||
$object->setAccounts($accounts);
|
|
||||||
|
|
||||||
return $object;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
|
@@ -3,7 +3,6 @@
|
|||||||
namespace FireflyIII\Helpers\Report;
|
namespace FireflyIII\Helpers\Report;
|
||||||
|
|
||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Helpers\Collection\Account as AccountCollection;
|
|
||||||
use FireflyIII\Helpers\Collection\Balance;
|
use FireflyIII\Helpers\Collection\Balance;
|
||||||
use FireflyIII\Helpers\Collection\Bill as BillCollection;
|
use FireflyIII\Helpers\Collection\Bill as BillCollection;
|
||||||
use FireflyIII\Helpers\Collection\Budget as BudgetCollection;
|
use FireflyIII\Helpers\Collection\Budget as BudgetCollection;
|
||||||
@@ -19,19 +18,6 @@ use Illuminate\Support\Collection;
|
|||||||
*/
|
*/
|
||||||
interface ReportHelperInterface
|
interface ReportHelperInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
/**
|
|
||||||
* This method generates a full report for the given period on all
|
|
||||||
* given accounts
|
|
||||||
*
|
|
||||||
* @param Carbon $start
|
|
||||||
* @param Carbon $end
|
|
||||||
* @param Collection $accounts
|
|
||||||
*
|
|
||||||
* @return AccountCollection
|
|
||||||
*/
|
|
||||||
public function getAccountReport(Carbon $start, Carbon $end, Collection $accounts);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Carbon $start
|
* @param Carbon $start
|
||||||
* @param Carbon $end
|
* @param Carbon $end
|
||||||
|
Reference in New Issue
Block a user