Various code cleanup and fixed alignments.

This commit is contained in:
James Cole
2024-01-01 14:42:24 +01:00
parent 657262f179
commit 1368aafe5f
23 changed files with 169 additions and 169 deletions

View File

@@ -22,7 +22,7 @@
$current = __DIR__; $current = __DIR__;
$paths = [ $paths = [
$current . '/../../app/Api/V1', $current . '/../../app/Api',
// $current . '/../../config', // $current . '/../../config',
// $current . '/../../database', // $current . '/../../database',
// $current . '/../../routes', // $current . '/../../routes',

View File

@@ -56,7 +56,7 @@ class AccountController extends Controller
$this->repository = app(AccountRepositoryInterface::class); $this->repository = app(AccountRepositoryInterface::class);
$this->adminRepository = app(AdminAccountRepositoryInterface::class); $this->adminRepository = app(AdminAccountRepositoryInterface::class);
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->adminRepository->setUserGroup($userGroup); $this->adminRepository->setUserGroup($userGroup);
} }
@@ -99,12 +99,12 @@ class AccountController extends Controller
$balance = app('steam')->balance($account, $date); $balance = app('steam')->balance($account, $date);
$nameWithBalance = sprintf('%s (%s)', $account->name, app('amount')->formatAnything($currency, $balance, false)); $nameWithBalance = sprintf('%s (%s)', $account->name, app('amount')->formatAnything($currency, $balance, false));
} }
$type = (string)trans(sprintf('firefly.%s', $account->accountType->type)); $type = (string)trans(sprintf('firefly.%s', $account->accountType->type));
$groupedResult[$type] ??= [ $groupedResult[$type] ??= [
'group ' => $type, 'group ' => $type,
'items' => [], 'items' => [],
]; ];
$allItems[] = [ $allItems[] = [
'id' => (string)$account->id, 'id' => (string)$account->id,
'value' => (string)$account->id, 'value' => (string)$account->id,
'name' => $account->name, 'name' => $account->name,

View File

@@ -46,7 +46,7 @@ class TransactionController extends Controller
function ($request, $next) { function ($request, $next) {
$this->repository = app(JournalRepositoryInterface::class); $this->repository = app(JournalRepositoryInterface::class);
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
} }
@@ -67,8 +67,8 @@ class TransactionController extends Controller
*/ */
public function transactionDescriptions(AutocompleteRequest $request): JsonResponse public function transactionDescriptions(AutocompleteRequest $request): JsonResponse
{ {
$data = $request->getData(); $data = $request->getData();
$result = $this->repository->searchJournalDescriptions($data['query'], $data['limit']); $result = $this->repository->searchJournalDescriptions($data['query'], $data['limit']);
// limit and unique // limit and unique
$filtered = $result->unique('description'); $filtered = $result->unique('description');

View File

@@ -81,15 +81,15 @@ class AccountController extends Controller
public function dashboard(DashboardChartRequest $request): JsonResponse public function dashboard(DashboardChartRequest $request): JsonResponse
{ {
/** @var Carbon $start */ /** @var Carbon $start */
$start = $this->parameters->get('start'); $start = $this->parameters->get('start');
/** @var Carbon $end */ /** @var Carbon $end */
$end = $this->parameters->get('end'); $end = $this->parameters->get('end');
$end->endOfDay(); $end->endOfDay();
/** @var TransactionCurrency $default */ /** @var TransactionCurrency $default */
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();
$params = $request->getAll(); $params = $request->getAll();
/** @var Collection $accounts */ /** @var Collection $accounts */
$accounts = $params['accounts']; $accounts = $params['accounts'];
@@ -105,7 +105,7 @@ class AccountController extends Controller
$frontPage->save(); $frontPage->save();
} }
$accounts = $this->repository->getAccountsById($frontPage->data); $accounts = $this->repository->getAccountsById($frontPage->data);
} }
// both options are overruled by "preselected" // both options are overruled by "preselected"
@@ -121,48 +121,48 @@ class AccountController extends Controller
/** @var Account $account */ /** @var Account $account */
foreach ($accounts as $account) { foreach ($accounts as $account) {
$currency = $this->repository->getAccountCurrency($account); $currency = $this->repository->getAccountCurrency($account);
if (null === $currency) { if (null === $currency) {
$currency = $default; $currency = $default;
} }
$currentSet = [ $currentSet = [
'label' => $account->name, 'label' => $account->name,
// the currency that belongs to the account. // the currency that belongs to the account.
'currency_id' => (string)$currency->id, 'currency_id' => (string)$currency->id,
'currency_code' => $currency->code, 'currency_code' => $currency->code,
'currency_symbol' => $currency->symbol, 'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places, 'currency_decimal_places' => $currency->decimal_places,
// the default currency of the user (could be the same!) // the default currency of the user (could be the same!)
'native_currency_id' => (string)$default->id, 'native_currency_id' => (string)$default->id,
'native_currency_code' => $default->code, 'native_currency_code' => $default->code,
'native_currency_symbol' => $default->symbol, 'native_currency_symbol' => $default->symbol,
'native_currency_decimal_places' => $default->decimal_places, 'native_currency_decimal_places' => $default->decimal_places,
'start' => $start->toAtomString(), 'start' => $start->toAtomString(),
'end' => $end->toAtomString(), 'end' => $end->toAtomString(),
'period' => '1D', 'period' => '1D',
'entries' => [], 'entries' => [],
'native_entries' => [], 'native_entries' => [],
]; ];
$currentStart = clone $start; $currentStart = clone $start;
$range = app('steam')->balanceInRange($account, $start, clone $end, $currency); $range = app('steam')->balanceInRange($account, $start, clone $end, $currency);
$rangeConverted = app('steam')->balanceInRangeConverted($account, $start, clone $end, $default); $rangeConverted = app('steam')->balanceInRangeConverted($account, $start, clone $end, $default);
$previous = array_values($range)[0]; $previous = array_values($range)[0];
$previousConverted = array_values($rangeConverted)[0]; $previousConverted = array_values($rangeConverted)[0];
while ($currentStart <= $end) { while ($currentStart <= $end) {
$format = $currentStart->format('Y-m-d'); $format = $currentStart->format('Y-m-d');
$label = $currentStart->toAtomString(); $label = $currentStart->toAtomString();
$balance = array_key_exists($format, $range) ? $range[$format] : $previous; $balance = array_key_exists($format, $range) ? $range[$format] : $previous;
$balanceConverted = array_key_exists($format, $rangeConverted) ? $rangeConverted[$format] : $previousConverted; $balanceConverted = array_key_exists($format, $rangeConverted) ? $rangeConverted[$format] : $previousConverted;
$previous = $balance; $previous = $balance;
$previousConverted = $balanceConverted; $previousConverted = $balanceConverted;
$currentStart->addDay(); $currentStart->addDay();
$currentSet['entries'][$label] = $balance; $currentSet['entries'][$label] = $balance;
$currentSet['native_entries'][$label] = $balanceConverted; $currentSet['native_entries'][$label] = $balanceConverted;
} }
$chartData[] = $currentSet; $chartData[] = $currentSet;
} }
return response()->json($this->clean($chartData)); return response()->json($this->clean($chartData));

View File

@@ -59,13 +59,13 @@ class BalanceController extends Controller
*/ */
public function balance(BalanceChartRequest $request): JsonResponse public function balance(BalanceChartRequest $request): JsonResponse
{ {
$params = $request->getAll(); $params = $request->getAll();
/** @var Carbon $start */ /** @var Carbon $start */
$start = $this->parameters->get('start'); $start = $this->parameters->get('start');
/** @var Carbon $end */ /** @var Carbon $end */
$end = $this->parameters->get('end'); $end = $this->parameters->get('end');
$end->endOfDay(); $end->endOfDay();
/** @var Collection $accounts */ /** @var Collection $accounts */
@@ -76,17 +76,17 @@ class BalanceController extends Controller
// prepare for currency conversion and data collection: // prepare for currency conversion and data collection:
/** @var TransactionCurrency $default */ /** @var TransactionCurrency $default */
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();
// get journals for entire period: // get journals for entire period:
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
$collector->setRange($start, $end)->withAccountInformation(); $collector->setRange($start, $end)->withAccountInformation();
$collector->setXorAccounts($accounts); $collector->setXorAccounts($accounts);
$collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::RECONCILIATION, TransactionType::TRANSFER]); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::DEPOSIT, TransactionType::RECONCILIATION, TransactionType::TRANSFER]);
$journals = $collector->getExtractedJournals(); $journals = $collector->getExtractedJournals();
$object = new AccountBalanceGrouped(); $object = new AccountBalanceGrouped();
$object->setPreferredRange($preferredRange); $object->setPreferredRange($preferredRange);
$object->setDefault($default); $object->setDefault($default);
$object->setAccounts($accounts); $object->setAccounts($accounts);
@@ -94,7 +94,7 @@ class BalanceController extends Controller
$object->setStart($start); $object->setStart($start);
$object->setEnd($end); $object->setEnd($end);
$object->groupByCurrencyAndPeriod(); $object->groupByCurrencyAndPeriod();
$chartData = $object->convertToChartData(); $chartData = $object->convertToChartData();
return response()->json($this->clean($chartData)); return response()->json($this->clean($chartData));
} }

View File

@@ -65,7 +65,7 @@ class BudgetController extends Controller
$this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository = app(OperationsRepositoryInterface::class);
$this->currency = app('amount')->getDefaultCurrency(); $this->currency = app('amount')->getDefaultCurrency();
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
$this->opsRepository->setUserGroup($userGroup); $this->opsRepository->setUserGroup($userGroup);
@@ -85,13 +85,13 @@ class BudgetController extends Controller
*/ */
public function dashboard(DateRequest $request): JsonResponse public function dashboard(DateRequest $request): JsonResponse
{ {
$params = $request->getAll(); $params = $request->getAll();
/** @var Carbon $start */ /** @var Carbon $start */
$start = $params['start']; $start = $params['start'];
/** @var Carbon $end */ /** @var Carbon $end */
$end = $params['end']; $end = $params['end'];
// code from FrontpageChartGenerator, but not in separate class // code from FrontpageChartGenerator, but not in separate class
$budgets = $this->repository->getActiveBudgets(); $budgets = $this->repository->getActiveBudgets();
@@ -212,14 +212,14 @@ class BudgetController extends Controller
'overspent' => '0', 'overspent' => '0',
'native_overspent' => '0', 'native_overspent' => '0',
]; ];
$currentBudgetArray = $block['budgets'][$budgetId]; $currentBudgetArray = $block['budgets'][$budgetId];
// var_dump($return); // var_dump($return);
/** @var array $journal */ /** @var array $journal */
foreach ($currentBudgetArray['transaction_journals'] as $journal) { foreach ($currentBudgetArray['transaction_journals'] as $journal) {
// convert the amount to the native currency. // convert the amount to the native currency.
$rate = $converter->getCurrencyRate($this->currencies[$currencyId], $this->currency, $journal['date']); $rate = $converter->getCurrencyRate($this->currencies[$currencyId], $this->currency, $journal['date']);
$convertedAmount = bcmul($journal['amount'], $rate); $convertedAmount = bcmul($journal['amount'], $rate);
if ($journal['foreign_currency_id'] === $this->currency->id) { if ($journal['foreign_currency_id'] === $this->currency->id) {
$convertedAmount = $journal['foreign_amount']; $convertedAmount = $journal['foreign_amount'];
} }
@@ -262,7 +262,7 @@ class BudgetController extends Controller
private function processLimit(Budget $budget, BudgetLimit $limit): array private function processLimit(Budget $budget, BudgetLimit $limit): array
{ {
Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__));
$end = clone $limit->end_date; $end = clone $limit->end_date;
$end->endOfDay(); $end->endOfDay();
$spent = $this->opsRepository->listExpenses($limit->start_date, $end, null, new Collection([$budget])); $spent = $this->opsRepository->listExpenses($limit->start_date, $end, null, new Collection([$budget]));
$limitCurrencyId = $limit->transaction_currency_id; $limitCurrencyId = $limit->transaction_currency_id;
@@ -280,7 +280,7 @@ class BudgetController extends Controller
$filtered[$currencyId] = $entry; $filtered[$currencyId] = $entry;
} }
} }
$result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end); $result = $this->processExpenses($budget->id, $filtered, $limit->start_date, $end);
if (1 === count($result)) { if (1 === count($result)) {
$compare = bccomp($limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent'])); $compare = bccomp($limit->amount, app('steam')->positive($result[$limitCurrencyId]['spent']));
if (1 === $compare) { if (1 === $compare) {

View File

@@ -80,7 +80,7 @@ class CategoryController extends Controller
Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__));
/** @var Carbon $start */ /** @var Carbon $start */
$start = $this->parameters->get('start'); $start = $this->parameters->get('start');
/** @var Carbon $end */ /** @var Carbon $end */
$end = $this->parameters->get('end'); $end = $this->parameters->get('end');
@@ -92,49 +92,49 @@ class CategoryController extends Controller
// get journals for entire period: // get journals for entire period:
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
$collector->setRange($start, $end)->withAccountInformation(); $collector->setRange($start, $end)->withAccountInformation();
$collector->setXorAccounts($accounts)->withCategoryInformation(); $collector->setXorAccounts($accounts)->withCategoryInformation();
$collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::RECONCILIATION]); $collector->setTypes([TransactionType::WITHDRAWAL, TransactionType::RECONCILIATION]);
$journals = $collector->getExtractedJournals(); $journals = $collector->getExtractedJournals();
/** @var array $journal */ /** @var array $journal */
foreach ($journals as $journal) { foreach ($journals as $journal) {
$currencyId = (int)$journal['currency_id']; $currencyId = (int)$journal['currency_id'];
$currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId); $currency = $currencies[$currencyId] ?? $this->currencyRepos->find($currencyId);
$currencies[$currencyId] = $currency; $currencies[$currencyId] = $currency;
$categoryName = null === $journal['category_name'] ? (string)trans('firefly.no_category') : $journal['category_name']; $categoryName = null === $journal['category_name'] ? (string)trans('firefly.no_category') : $journal['category_name'];
$amount = app('steam')->positive($journal['amount']); $amount = app('steam')->positive($journal['amount']);
$nativeAmount = $converter->convert($default, $currency, $journal['date'], $amount); $nativeAmount = $converter->convert($default, $currency, $journal['date'], $amount);
$key = sprintf('%s-%s', $categoryName, $currency->code); $key = sprintf('%s-%s', $categoryName, $currency->code);
if ((int)$journal['foreign_currency_id'] === $default->id) { if ((int)$journal['foreign_currency_id'] === $default->id) {
$nativeAmount = app('steam')->positive($journal['foreign_amount']); $nativeAmount = app('steam')->positive($journal['foreign_amount']);
} }
// create arrays // create arrays
$return[$key] ??= [ $return[$key] ??= [
'label' => $categoryName, 'label' => $categoryName,
'currency_id' => (string)$currency->id, 'currency_id' => (string)$currency->id,
'currency_code' => $currency->code, 'currency_code' => $currency->code,
'currency_name' => $currency->name, 'currency_name' => $currency->name,
'currency_symbol' => $currency->symbol, 'currency_symbol' => $currency->symbol,
'currency_decimal_places' => $currency->decimal_places, 'currency_decimal_places' => $currency->decimal_places,
'native_currency_id' => (string)$default->id, 'native_currency_id' => (string)$default->id,
'native_currency_code' => $default->code, 'native_currency_code' => $default->code,
'native_currency_name' => $default->name, 'native_currency_name' => $default->name,
'native_currency_symbol' => $default->symbol, 'native_currency_symbol' => $default->symbol,
'native_currency_decimal_places' => $default->decimal_places, 'native_currency_decimal_places' => $default->decimal_places,
'period' => null, 'period' => null,
'start' => $start->toAtomString(), 'start' => $start->toAtomString(),
'end' => $end->toAtomString(), 'end' => $end->toAtomString(),
'amount' => '0', 'amount' => '0',
'native_amount' => '0', 'native_amount' => '0',
]; ];
// add monies // add monies
$return[$key]['amount'] = bcadd($return[$key]['amount'], $amount); $return[$key]['amount'] = bcadd($return[$key]['amount'], $amount);
$return[$key]['native_amount'] = bcadd($return[$key]['native_amount'], $nativeAmount); $return[$key]['native_amount'] = bcadd($return[$key]['native_amount'], $nativeAmount);
} }
$return = array_values($return); $return = array_values($return);
// order by native amount // order by native amount
usort($return, static function (array $a, array $b) { usort($return, static function (array $a, array $b) {

View File

@@ -69,11 +69,11 @@ class Controller extends BaseController
final protected function jsonApiList(string $key, LengthAwarePaginator $paginator, AbstractTransformer $transformer): array final protected function jsonApiList(string $key, LengthAwarePaginator $paginator, AbstractTransformer $transformer): array
{ {
$manager = new Manager(); $manager = new Manager();
$baseUrl = request()->getSchemeAndHttpHost().'/api/v2'; $baseUrl = request()->getSchemeAndHttpHost().'/api/v2';
$manager->setSerializer(new JsonApiSerializer($baseUrl)); $manager->setSerializer(new JsonApiSerializer($baseUrl));
$objects = $paginator->getCollection(); $objects = $paginator->getCollection();
// the transformer, at this point, needs to collect information that ALL items in the collection // the transformer, at this point, needs to collect information that ALL items in the collection
// require, like meta-data and stuff like that, and save it for later. // require, like meta-data and stuff like that, and save it for later.
@@ -93,8 +93,8 @@ class Controller extends BaseController
final protected function jsonApiObject(string $key, array|Model $object, AbstractTransformer $transformer): array final protected function jsonApiObject(string $key, array|Model $object, AbstractTransformer $transformer): array
{ {
// create some objects: // create some objects:
$manager = new Manager(); $manager = new Manager();
$baseUrl = request()->getSchemeAndHttpHost().'/api/v2'; $baseUrl = request()->getSchemeAndHttpHost().'/api/v2';
$manager->setSerializer(new JsonApiSerializer($baseUrl)); $manager->setSerializer(new JsonApiSerializer($baseUrl));
$transformer->collectMetaData(new Collection([$object])); $transformer->collectMetaData(new Collection([$object]));
@@ -112,7 +112,7 @@ class Controller extends BaseController
*/ */
private function getParameters(): ParameterBag private function getParameters(): ParameterBag
{ {
$bag = new ParameterBag(); $bag = new ParameterBag();
$bag->set('limit', 50); $bag->set('limit', 50);
try { try {

View File

@@ -48,7 +48,7 @@ class IndexController extends Controller
$this->repository = app(BillRepositoryInterface::class); $this->repository = app(BillRepositoryInterface::class);
// new way of user group validation // new way of user group validation
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
} }

View File

@@ -48,7 +48,7 @@ class ShowController extends Controller
$this->repository = app(BillRepositoryInterface::class); $this->repository = app(BillRepositoryInterface::class);
// new way of user group validation // new way of user group validation
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
} }

View File

@@ -46,7 +46,7 @@ class SumController extends Controller
function ($request, $next) { function ($request, $next) {
$this->repository = app(BillRepositoryInterface::class); $this->repository = app(BillRepositoryInterface::class);
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
} }

View File

@@ -55,9 +55,9 @@ class IndexController extends Controller
*/ */
public function index(): JsonResponse public function index(): JsonResponse
{ {
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$collection = $this->repository->getActiveBudgets(); $collection = $this->repository->getActiveBudgets();
$total = $collection->count(); $total = $collection->count();
$collection->slice($pageSize * $this->parameters->get('page'), $pageSize); $collection->slice($pageSize * $this->parameters->get('page'), $pageSize);
$paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page'));

View File

@@ -52,9 +52,9 @@ class IndexController extends Controller
*/ */
public function index(Budget $budget): JsonResponse public function index(Budget $budget): JsonResponse
{ {
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$collection = $this->repository->getBudgetLimits($budget); $collection = $this->repository->getBudgetLimits($budget);
$total = $collection->count(); $total = $collection->count();
$collection->slice($pageSize * $this->parameters->get('page'), $pageSize); $collection->slice($pageSize * $this->parameters->get('page'), $pageSize);
$paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($collection, $total, $pageSize, $this->parameters->get('page'));

View File

@@ -47,7 +47,7 @@ class IndexController extends Controller
function ($request, $next) { function ($request, $next) {
$this->repository = app(PiggyBankRepositoryInterface::class); $this->repository = app(PiggyBankRepositoryInterface::class);
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
} }

View File

@@ -97,28 +97,28 @@ class StoreController extends Controller
throw new ValidationException($validator); // @phpstan-ignore-line throw new ValidationException($validator); // @phpstan-ignore-line
} }
app('preferences')->mark(); app('preferences')->mark();
$applyRules = $data['apply_rules'] ?? true; $applyRules = $data['apply_rules'] ?? true;
$fireWebhooks = $data['fire_webhooks'] ?? true; $fireWebhooks = $data['fire_webhooks'] ?? true;
event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks)); event(new StoredTransactionGroup($transactionGroup, $applyRules, $fireWebhooks));
/** @var User $admin */ /** @var User $admin */
$admin = auth()->user(); $admin = auth()->user();
// use new group collector: // use new group collector:
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
$collector $collector
->setUser($admin) ->setUser($admin)
// filter on transaction group. // filter on transaction group.
->setTransactionGroup($transactionGroup) ->setTransactionGroup($transactionGroup)
; ;
$selectedGroup = $collector->getGroups()->first(); $selectedGroup = $collector->getGroups()->first();
if (null === $selectedGroup) { if (null === $selectedGroup) {
throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.'); throw new FireflyException('200032: Cannot find transaction. Possibly, a rule deleted this transaction after its creation.');
} }
$transformer = new TransactionGroupTransformer(); $transformer = new TransactionGroupTransformer();
$transformer->setParameters($this->parameters); $transformer->setParameters($this->parameters);
return response() return response()

View File

@@ -76,7 +76,7 @@ class BasicController extends Controller
$this->currencyRepos = app(CurrencyRepositoryInterface::class); $this->currencyRepos = app(CurrencyRepositoryInterface::class);
$this->opsRepository = app(OperationsRepositoryInterface::class); $this->opsRepository = app(OperationsRepositoryInterface::class);
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->abRepository->setUserGroup($userGroup); $this->abRepository->setUserGroup($userGroup);
$this->accountRepository->setUserGroup($userGroup); $this->accountRepository->setUserGroup($userGroup);
@@ -101,8 +101,8 @@ class BasicController extends Controller
public function basic(DateRequest $request): JsonResponse public function basic(DateRequest $request): JsonResponse
{ {
// parameters for boxes: // parameters for boxes:
$start = $this->parameters->get('start'); $start = $this->parameters->get('start');
$end = $this->parameters->get('end'); $end = $this->parameters->get('end');
// balance information: // balance information:
$balanceData = $this->getBalanceInformation($start, $end); $balanceData = $this->getBalanceInformation($start, $end);
@@ -136,13 +136,13 @@ class BasicController extends Controller
*/ */
private function getBalanceInformation(Carbon $start, Carbon $end): array private function getBalanceInformation(Carbon $start, Carbon $end): array
{ {
$object = new SummaryBalanceGrouped(); $object = new SummaryBalanceGrouped();
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();
$object->setDefault($default); $object->setDefault($default);
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
// collect income of user using the new group collector. // collect income of user using the new group collector.
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
@@ -157,7 +157,7 @@ class BasicController extends Controller
->setRange($start, $end) ->setRange($start, $end)
; ;
$set = $collector->getExtractedJournals(); $set = $collector->getExtractedJournals();
$object->groupTransactions('income', $set); $object->groupTransactions('income', $set);
// collect expenses of user using the new group collector. // collect expenses of user using the new group collector.
@@ -172,7 +172,7 @@ class BasicController extends Controller
->setTypes([TransactionType::WITHDRAWAL]) ->setTypes([TransactionType::WITHDRAWAL])
->setRange($start, $end) ->setRange($start, $end)
; ;
$set = $collector->getExtractedJournals(); $set = $collector->getExtractedJournals();
$object->groupTransactions('expense', $set); $object->groupTransactions('expense', $set);
return $object->groupData(); return $object->groupData();
@@ -187,7 +187,7 @@ class BasicController extends Controller
$paidAmount = $this->billRepository->sumPaidInRange($start, $end); $paidAmount = $this->billRepository->sumPaidInRange($start, $end);
$unpaidAmount = $this->billRepository->sumUnpaidInRange($start, $end); $unpaidAmount = $this->billRepository->sumUnpaidInRange($start, $end);
$return = []; $return = [];
/** /**
* @var array $info * @var array $info
@@ -247,14 +247,14 @@ class BasicController extends Controller
{ {
Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__)); Log::debug(sprintf('Created new ExchangeRateConverter in %s', __METHOD__));
app('log')->debug('Now in getLeftToSpendInfo'); app('log')->debug('Now in getLeftToSpendInfo');
$return = []; $return = [];
$today = today(config('app.timezone')); $today = today(config('app.timezone'));
$available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end); $available = $this->abRepository->getAvailableBudgetWithCurrency($start, $end);
$budgets = $this->budgetRepository->getActiveBudgets(); $budgets = $this->budgetRepository->getActiveBudgets();
$spent = $this->opsRepository->listExpenses($start, $end, null, $budgets); $spent = $this->opsRepository->listExpenses($start, $end, null, $budgets);
$default = app('amount')->getDefaultCurrency(); $default = app('amount')->getDefaultCurrency();
$currencies = []; $currencies = [];
$converter = new ExchangeRateConverter(); $converter = new ExchangeRateConverter();
// native info: // native info:
$nativeLeft = [ $nativeLeft = [
@@ -280,8 +280,8 @@ class BasicController extends Controller
*/ */
foreach ($spent as $currencyId => $row) { foreach ($spent as $currencyId => $row) {
app('log')->debug(sprintf('Processing spent array in currency #%d', $currencyId)); app('log')->debug(sprintf('Processing spent array in currency #%d', $currencyId));
$spent = '0'; $spent = '0';
$spentNative = '0'; $spentNative = '0';
// get the sum from the array of transactions (double loop but who cares) // get the sum from the array of transactions (double loop but who cares)
/** @var array $budget */ /** @var array $budget */
@@ -298,8 +298,8 @@ class BasicController extends Controller
if ((int)$journal['foreign_currency_id'] === $default->id) { if ((int)$journal['foreign_currency_id'] === $default->id) {
$amountNative = $journal['foreign_amount']; $amountNative = $journal['foreign_amount'];
} }
$spent = bcadd($spent, $amount); $spent = bcadd($spent, $amount);
$spentNative = bcadd($spentNative, $amountNative); $spentNative = bcadd($spentNative, $amountNative);
} }
app('log')->debug(sprintf('Total spent in budget "%s" is %s', $budget['name'], $spent)); app('log')->debug(sprintf('Total spent in budget "%s" is %s', $budget['name'], $spent));
} }
@@ -315,9 +315,9 @@ class BasicController extends Controller
app('log')->debug(sprintf('Amount left is %s', $left)); app('log')->debug(sprintf('Amount left is %s', $left));
// how much left per day? // how much left per day?
$days = $today->diffInDays($end) + 1; $days = $today->diffInDays($end) + 1;
$perDay = '0'; $perDay = '0';
$perDayNative = '0'; $perDayNative = '0';
if (0 !== $days && bccomp($left, '0') > -1) { if (0 !== $days && bccomp($left, '0') > -1) {
$perDay = bcdiv($left, (string)$days); $perDay = bcdiv($left, (string)$days);
} }
@@ -326,7 +326,7 @@ class BasicController extends Controller
} }
// left // left
$return[] = [ $return[] = [
'key' => sprintf('left-to-spend-in-%s', $row['currency_code']), 'key' => sprintf('left-to-spend-in-%s', $row['currency_code']),
'value' => $left, 'value' => $left,
'currency_id' => (string)$row['currency_id'], 'currency_id' => (string)$row['currency_id'],
@@ -335,10 +335,10 @@ class BasicController extends Controller
'currency_decimal_places' => (int)$row['currency_decimal_places'], 'currency_decimal_places' => (int)$row['currency_decimal_places'],
]; ];
// left (native) // left (native)
$nativeLeft['value'] = $leftNative; $nativeLeft['value'] = $leftNative;
// left per day: // left per day:
$return[] = [ $return[] = [
'key' => sprintf('left-per-day-to-spend-in-%s', $row['currency_code']), 'key' => sprintf('left-per-day-to-spend-in-%s', $row['currency_code']),
'value' => $perDay, 'value' => $perDay,
'currency_id' => (string)$row['currency_id'], 'currency_id' => (string)$row['currency_id'],
@@ -348,10 +348,10 @@ class BasicController extends Controller
]; ];
// left per day (native) // left per day (native)
$nativePerDay['value'] = $perDayNative; $nativePerDay['value'] = $perDayNative;
} }
$return[] = $nativeLeft; $return[] = $nativeLeft;
$return[] = $nativePerDay; $return[] = $nativePerDay;
$converter->summarize(); $converter->summarize();
return $return; return $return;
@@ -360,8 +360,8 @@ class BasicController extends Controller
private function getNetWorthInfo(Carbon $start, Carbon $end): array private function getNetWorthInfo(Carbon $start, Carbon $end): array
{ {
/** @var UserGroup $userGroup */ /** @var UserGroup $userGroup */
$userGroup = auth()->user()->userGroup; $userGroup = auth()->user()->userGroup;
$date = today(config('app.timezone'))->startOfDay(); $date = today(config('app.timezone'))->startOfDay();
// start and end in the future? use $end // start and end in the future? use $end
if ($this->notInDateRange($date, $start, $end)) { if ($this->notInDateRange($date, $start, $end)) {
/** @var Carbon $date */ /** @var Carbon $date */
@@ -371,12 +371,12 @@ class BasicController extends Controller
/** @var NetWorthInterface $netWorthHelper */ /** @var NetWorthInterface $netWorthHelper */
$netWorthHelper = app(NetWorthInterface::class); $netWorthHelper = app(NetWorthInterface::class);
$netWorthHelper->setUserGroup($userGroup); $netWorthHelper->setUserGroup($userGroup);
$allAccounts = $this->accountRepository->getActiveAccountsByType( $allAccounts = $this->accountRepository->getActiveAccountsByType(
[AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT] [AccountType::ASSET, AccountType::DEFAULT, AccountType::LOAN, AccountType::MORTGAGE, AccountType::DEBT]
); );
// filter list on preference of being included. // filter list on preference of being included.
$filtered = $allAccounts->filter( $filtered = $allAccounts->filter(
function (Account $account) { function (Account $account) {
$includeNetWorth = $this->accountRepository->getMetaValue($account, 'include_net_worth'); $includeNetWorth = $this->accountRepository->getMetaValue($account, 'include_net_worth');
@@ -384,10 +384,10 @@ class BasicController extends Controller
} }
); );
$netWorthSet = $netWorthHelper->byAccounts($filtered, $date); $netWorthSet = $netWorthHelper->byAccounts($filtered, $date);
$return = []; $return = [];
// in native amount // in native amount
$return[] = [ $return[] = [
'key' => 'net-worth-in-native', 'key' => 'net-worth-in-native',
'value' => $netWorthSet['native']['balance'], 'value' => $netWorthSet['native']['balance'],
'currency_id' => (string)$netWorthSet['native']['currency_id'], 'currency_id' => (string)$netWorthSet['native']['currency_id'],

View File

@@ -51,7 +51,7 @@ class NetWorthController extends Controller
$this->netWorth = app(NetWorthInterface::class); $this->netWorth = app(NetWorthInterface::class);
$this->repository = app(AccountRepositoryInterface::class); $this->repository = app(AccountRepositoryInterface::class);
// new way of user group validation // new way of user group validation
$userGroup = $this->validateUserGroup($request); $userGroup = $this->validateUserGroup($request);
if (null !== $userGroup) { if (null !== $userGroup) {
$this->netWorth->setUserGroup($userGroup); $this->netWorth->setUserGroup($userGroup);
$this->repository->setUserGroup($userGroup); $this->repository->setUserGroup($userGroup);
@@ -81,7 +81,7 @@ class NetWorthController extends Controller
); );
// skip accounts that should not be in the net worth // skip accounts that should not be in the net worth
$result = $this->netWorth->byAccounts($filtered, $date); $result = $this->netWorth->byAccounts($filtered, $date);
return response()->api($result); return response()->api($result);
} }

View File

@@ -47,9 +47,9 @@ class AccountController extends Controller
public function list(ListRequest $request, Account $account): JsonResponse public function list(ListRequest $request, Account $account): JsonResponse
{ {
// collect transactions: // collect transactions:
$page = $request->getPage(); $page = $request->getPage();
$page = max($page, 1); $page = max($page, 1);
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
@@ -60,8 +60,8 @@ class AccountController extends Controller
->setTypes($request->getTransactionTypes()) ->setTypes($request->getTransactionTypes())
; ;
$start = $request->getStartDate(); $start = $request->getStartDate();
$end = $request->getEndDate(); $end = $request->getEndDate();
if (null !== $start) { if (null !== $start) {
app('log')->debug(sprintf('Set start date to %s', $start->toIso8601String())); app('log')->debug(sprintf('Set start date to %s', $start->toIso8601String()));
$collector->setStart($start); $collector->setStart($start);

View File

@@ -37,9 +37,9 @@ class TransactionController extends Controller
public function list(ListRequest $request): JsonResponse public function list(ListRequest $request): JsonResponse
{ {
// collect transactions: // collect transactions:
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
$page = $request->getPage(); $page = $request->getPage();
$page = max($page, 1); $page = max($page, 1);
/** @var GroupCollectorInterface $collector */ /** @var GroupCollectorInterface $collector */
$collector = app(GroupCollectorInterface::class); $collector = app(GroupCollectorInterface::class);
@@ -50,8 +50,8 @@ class TransactionController extends Controller
->setTypes($request->getTransactionTypes()) ->setTypes($request->getTransactionTypes())
; ;
$start = $this->parameters->get('start'); $start = $this->parameters->get('start');
$end = $this->parameters->get('end'); $end = $this->parameters->get('end');
if (null !== $start) { if (null !== $start) {
$collector->setStart($start); $collector->setStart($start);
} }

View File

@@ -54,7 +54,7 @@ class DestroyController extends Controller
public function destroy(UserGroup $userGroup): JsonResponse public function destroy(UserGroup $userGroup): JsonResponse
{ {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
// to access this function: must be group owner or sysadmin. // to access this function: must be group owner or sysadmin.
// need owner role or system owner role to delete user group. // need owner role or system owner role to delete user group.
$access = $user->hasSpecificRoleInGroup($userGroup, UserRoleEnum::OWNER) || $user->hasRole('owner'); $access = $user->hasSpecificRoleInGroup($userGroup, UserRoleEnum::OWNER) || $user->hasRole('owner');

View File

@@ -53,8 +53,8 @@ class ShowController extends Controller
public function index(): JsonResponse public function index(): JsonResponse
{ {
$collection = new Collection(); $collection = new Collection();
$pageSize = $this->parameters->get('limit'); $pageSize = $this->parameters->get('limit');
// if the user has the system owner role, get all. Otherwise, get only the users' groups. // if the user has the system owner role, get all. Otherwise, get only the users' groups.
if (!auth()->user()->hasRole('owner')) { if (!auth()->user()->hasRole('owner')) {
$collection = $this->repository->get(); $collection = $this->repository->get();
@@ -62,8 +62,8 @@ class ShowController extends Controller
if (auth()->user()->hasRole('owner')) { if (auth()->user()->hasRole('owner')) {
$collection = $this->repository->getAll(); $collection = $this->repository->getAll();
} }
$count = $collection->count(); $count = $collection->count();
$userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize); $userGroups = $collection->slice(($this->parameters->get('page') - 1) * $pageSize, $pageSize);
$paginator = new LengthAwarePaginator($userGroups, $count, $pageSize, $this->parameters->get('page')); $paginator = new LengthAwarePaginator($userGroups, $count, $pageSize, $this->parameters->get('page'));
$transformer = new UserGroupTransformer(); $transformer = new UserGroupTransformer();

View File

@@ -175,7 +175,7 @@ class StoreRequest extends FormRequest
public function withValidator(Validator $validator): void public function withValidator(Validator $validator): void
{ {
/** @var User $user */ /** @var User $user */
$user = auth()->user(); $user = auth()->user();
/** @var UserGroup $userGroup */ /** @var UserGroup $userGroup */
$userGroup = $this->getUserGroup(); $userGroup = $this->getUserGroup();
@@ -223,9 +223,9 @@ class StoreRequest extends FormRequest
foreach ($this->get('transactions') as $transaction) { foreach ($this->get('transactions') as $transaction) {
$object = new NullArrayObject($transaction); $object = new NullArrayObject($transaction);
$return[] = [ $return[] = [
'type' => $this->clearString($object['type']), 'type' => $this->clearString($object['type']),
'date' => $this->dateFromValue($object['date']), 'date' => $this->dateFromValue($object['date']),
'order' => $this->integerFromValue((string)$object['order']), 'order' => $this->integerFromValue((string)$object['order']),
'currency_id' => $this->integerFromValue((string)$object['currency_id']), 'currency_id' => $this->integerFromValue((string)$object['currency_id']),
'currency_code' => $this->clearString((string)$object['currency_code']), 'currency_code' => $this->clearString((string)$object['currency_code']),
@@ -284,21 +284,21 @@ class StoreRequest extends FormRequest
'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']), 'bunq_payment_id' => $this->clearString((string)$object['bunq_payment_id']),
'external_url' => $this->clearString((string)$object['external_url']), 'external_url' => $this->clearString((string)$object['external_url']),
'sepa_cc' => $this->clearString((string)$object['sepa_cc']), 'sepa_cc' => $this->clearString((string)$object['sepa_cc']),
'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']), 'sepa_ct_op' => $this->clearString((string)$object['sepa_ct_op']),
'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']), 'sepa_ct_id' => $this->clearString((string)$object['sepa_ct_id']),
'sepa_db' => $this->clearString((string)$object['sepa_db']), 'sepa_db' => $this->clearString((string)$object['sepa_db']),
'sepa_country' => $this->clearString((string)$object['sepa_country']), 'sepa_country' => $this->clearString((string)$object['sepa_country']),
'sepa_ep' => $this->clearString((string)$object['sepa_ep']), 'sepa_ep' => $this->clearString((string)$object['sepa_ep']),
'sepa_ci' => $this->clearString((string)$object['sepa_ci']), 'sepa_ci' => $this->clearString((string)$object['sepa_ci']),
'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']), 'sepa_batch_id' => $this->clearString((string)$object['sepa_batch_id']),
// custom date fields. Must be Carbon objects. Presence is optional. // custom date fields. Must be Carbon objects. Presence is optional.
'interest_date' => $this->dateFromValue($object['interest_date']), 'interest_date' => $this->dateFromValue($object['interest_date']),
'book_date' => $this->dateFromValue($object['book_date']), 'book_date' => $this->dateFromValue($object['book_date']),
'process_date' => $this->dateFromValue($object['process_date']), 'process_date' => $this->dateFromValue($object['process_date']),
'due_date' => $this->dateFromValue($object['due_date']), 'due_date' => $this->dateFromValue($object['due_date']),
'payment_date' => $this->dateFromValue($object['payment_date']), 'payment_date' => $this->dateFromValue($object['payment_date']),
'invoice_date' => $this->dateFromValue($object['invoice_date']), 'invoice_date' => $this->dateFromValue($object['invoice_date']),
]; ];
} }

View File

@@ -46,10 +46,10 @@ class AutoSum
/** @var Model $object */ /** @var Model $object */
foreach ($objects as $object) { foreach ($objects as $object) {
/** @var TransactionCurrency $currency */ /** @var TransactionCurrency $currency */
$currency = $getCurrency($object); $currency = $getCurrency($object);
/** @var string $amount */ /** @var string $amount */
$amount = $getSum($object); $amount = $getSum($object);
$return[$currency->id] ??= [ $return[$currency->id] ??= [
'id' => (string)$currency->id, 'id' => (string)$currency->id,