From 397e37f344ac9b71970087a1e7b813959eb070a5 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 31 Mar 2024 16:46:38 +0200 Subject: [PATCH] Fix another division by zero --- .../Budget/BudgetLimitController.php | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/app/Http/Controllers/Budget/BudgetLimitController.php b/app/Http/Controllers/Budget/BudgetLimitController.php index a293e25fae..2517f38726 100644 --- a/app/Http/Controllers/Budget/BudgetLimitController.php +++ b/app/Http/Controllers/Budget/BudgetLimitController.php @@ -83,7 +83,7 @@ class BudgetLimitController extends Controller $budgetLimits = $this->blRepository->getBudgetLimits($budget, $start, $end); // remove already budgeted currencies with the same date range - $currencies = $collection->filter( + $currencies = $collection->filter( static function (TransactionCurrency $currency) use ($budgetLimits, $start, $end) { /** @var BudgetLimit $limit */ foreach ($budgetLimits as $limit) { @@ -116,7 +116,7 @@ class BudgetLimitController extends Controller * * @throws FireflyException */ - public function store(Request $request): JsonResponse|RedirectResponse + public function store(Request $request): JsonResponse | RedirectResponse { app('log')->debug('Going to store new budget-limit.', $request->all()); // first search for existing one and update it if necessary. @@ -125,14 +125,14 @@ class BudgetLimitController extends Controller if (null === $currency || null === $budget) { throw new FireflyException('No valid currency or budget.'); } - $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); - $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); + $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); if (false === $start || false === $end) { return response()->json([]); } - $amount = (string)$request->get('amount'); + $amount = (string)$request->get('amount'); $start->startOfDay(); $end->startOfDay(); @@ -142,7 +142,7 @@ class BudgetLimitController extends Controller app('log')->debug(sprintf('Start: %s, end: %s', $start->format('Y-m-d'), $end->format('Y-m-d'))); - $limit = $this->blRepository->find($budget, $currency, $start, $end); + $limit = $this->blRepository->find($budget, $currency, $start, $end); // sanity check on amount: if (0 === bccomp($amount, '0')) { @@ -177,15 +177,15 @@ class BudgetLimitController extends Controller } if ($request->expectsJson()) { - $array = $limit->toArray(); + $array = $limit->toArray(); // add some extra metadata: - $spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection([$budget]), $currency); - $array['spent'] = $spentArr[$currency->id]['sum'] ?? '0'; - $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); - $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); - $array['days_left'] = (string)$this->activeDaysLeft($start, $end); + $spentArr = $this->opsRepository->sumExpenses($limit->start_date, $limit->end_date, null, new Collection([$budget]), $currency); + $array['spent'] = $spentArr[$currency->id]['sum'] ?? '0'; + $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); + $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); + $array['days_left'] = (string)$this->activeDaysLeft($start, $end); // left per day: - $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); + $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); // left per day formatted. $array['left_per_day_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $array['left_per_day']); @@ -198,7 +198,7 @@ class BudgetLimitController extends Controller public function update(Request $request, BudgetLimit $budgetLimit): JsonResponse { - $amount = (string)$request->get('amount'); + $amount = (string)$request->get('amount'); if ('' === $amount) { $amount = '0'; } @@ -210,7 +210,7 @@ class BudgetLimitController extends Controller $budgetId = $budgetLimit->budget_id; $currency = $budgetLimit->transactionCurrency; $this->blRepository->destroyBudgetLimit($budgetLimit); - $array = [ + $array = [ 'budget_id' => $budgetId, 'left_formatted' => app('amount')->formatAnything($currency, '0'), 'left_per_day_formatted' => app('amount')->formatAnything($currency, '0'), @@ -224,23 +224,23 @@ class BudgetLimitController extends Controller $amount = bcmul($amount, '-1'); } - $limit = $this->blRepository->update($budgetLimit, ['amount' => $amount]); + $limit = $this->blRepository->update($budgetLimit, ['amount' => $amount]); app('preferences')->mark(); - $array = $limit->toArray(); + $array = $limit->toArray(); - $spentArr = $this->opsRepository->sumExpenses( + $spentArr = $this->opsRepository->sumExpenses( $limit->start_date, $limit->end_date, null, new Collection([$budgetLimit->budget]), $budgetLimit->transactionCurrency ); - $array['spent'] = $spentArr[$budgetLimit->transactionCurrency->id]['sum'] ?? '0'; - $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); - $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); - $array['days_left'] = (string)$this->activeDaysLeft($limit->start_date, $limit->end_date); - // left per day: - $array['left_per_day'] = bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); + $daysLeft = $this->activeDaysLeft($limit->start_date, $limit->end_date); + $array['spent'] = $spentArr[$budgetLimit->transactionCurrency->id]['sum'] ?? '0'; + $array['left_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, bcadd($array['spent'], $array['amount'])); + $array['amount_formatted'] = app('amount')->formatAnything($limit->transactionCurrency, $limit['amount']); + $array['days_left'] = (string)$daysLeft; + $array['left_per_day'] = 0 === $daysLeft ? bcadd($array['spent'], $array['amount']) : bcdiv(bcadd($array['spent'], $array['amount']), $array['days_left']); // left per day formatted. $array['amount'] = app('steam')->bcround($limit['amount'], $limit->transactionCurrency->decimal_places);