This commit is contained in:
James Cole
2023-06-01 19:49:28 +02:00
parent 4334e9bed7
commit c764ddd3be
2 changed files with 35 additions and 18 deletions

View File

@@ -264,11 +264,16 @@ class BasicController extends Controller
* Since both this method and the chart use the exact same data, we can suffice * Since both this method and the chart use the exact same data, we can suffice
* with calling the one method in the bill repository that will get this amount. * with calling the one method in the bill repository that will get this amount.
*/ */
$paidAmount = $this->billRepository->getBillsPaidInRangePerCurrency($start, $end); $paidAmount = $this->billRepository->sumPaidInRange($start, $end);
$unpaidAmount = $this->billRepository->getBillsUnpaidInRangePerCurrency($start, $end); $unpaidAmount = $this->billRepository->sumUnpaidInRange($start, $end);
$return = [];
foreach ($paidAmount as $currencyId => $amount) { $return = [];
$amount = bcmul($amount, '-1'); /**
* @var int $currencyId
* @var array $info
*/
foreach ($paidAmount as $currencyId => $info) {
$amount = bcmul($info['sum'], '-1');
$currency = $this->currencyRepos->find((int)$currencyId); $currency = $this->currencyRepos->find((int)$currencyId);
if (null === $currency) { if (null === $currency) {
continue; continue;
@@ -287,8 +292,12 @@ class BasicController extends Controller
]; ];
} }
foreach ($unpaidAmount as $currencyId => $amount) { /**
$amount = bcmul($amount, '-1'); * @var int $currencyId
* @var array $info
*/
foreach ($unpaidAmount as $currencyId => $info) {
$amount = bcmul($info['sum'], '-1');
$currency = $this->currencyRepos->find((int)$currencyId); $currency = $this->currencyRepos->find((int)$currencyId);
if (null === $currency) { if (null === $currency) {
continue; continue;

View File

@@ -851,17 +851,25 @@ class BillRepository implements BillRepositoryInterface
/** @var Collection $set */ /** @var Collection $set */
$set = $bill->transactionJournals()->after($start)->before($end)->get(['transaction_journals.*']); $set = $bill->transactionJournals()->after($start)->before($end)->get(['transaction_journals.*']);
$currency = $bill->transactionCurrency; $currency = $bill->transactionCurrency;
if ($set->count() > 0) {
$journalIds = $set->pluck('id')->toArray(); $return[$currency->id] = $return[$currency->id] ?? [
$amount = (string)Transaction::whereIn('transaction_journal_id', $journalIds)->where('amount', '<', 0)->sum('amount'); 'id' => (string)$currency->id,
$return[$currency->id] = $return[$currency->id] ?? [ 'name' => $currency->name,
'id' => (string)$currency->id, 'symbol' => $currency->symbol,
'name' => $currency->name, 'code' => $currency->code,
'symbol' => $currency->symbol, 'decimal_places' => $currency->decimal_places,
'code' => $currency->code, 'sum' => '0',
'decimal_places' => $currency->decimal_places, ];
'sum' => '0',
]; /** @var TransactionJournal $transactionJournal */
foreach ($set as $transactionJournal) {
/** @var Transaction $sourceTransaction */
$sourceTransaction = $transactionJournal->transactions()->where('amount', '<', 0)->first();
$amount = (string)$sourceTransaction->amount;
if ((int)$sourceTransaction->foreign_currency_id === (int)$currency->id) {
// use foreign amount instead!
$amount = (string)$sourceTransaction->foreign_amount;
}
$return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $amount); $return[$currency->id]['sum'] = bcadd($return[$currency->id]['sum'], $amount);
} }
} }