diff --git a/app/Http/Controllers/Budget/CreateController.php b/app/Http/Controllers/Budget/CreateController.php
index 81dd47e09b..d7b79673d8 100644
--- a/app/Http/Controllers/Budget/CreateController.php
+++ b/app/Http/Controllers/Budget/CreateController.php
@@ -24,7 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Budget;
-use FireflyIII\AutoBudget;
+use FireflyIII\Models\AutoBudget;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\BudgetFormStoreRequest;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
@@ -85,9 +85,11 @@ class CreateController extends Controller
'half_year' => (string)trans('firefly.auto_budget_period_half_year'),
'yearly' => (string)trans('firefly.auto_budget_period_yearly'),
];
+ $currency = app('amount')->getDefaultCurrency();
$preFilled = [
- 'auto_budget_period' => $hasOldInput ? (bool)$request->old('auto_budget_period') : 'monthly',
+ 'auto_budget_period' => $hasOldInput ? (bool)$request->old('auto_budget_period') : 'monthly',
+ 'transaction_currency_id' => $hasOldInput ? (int)$request->old('transaction_currency_id') : $currency->id,
];
$request->session()->flash('preFilled', $preFilled);
diff --git a/app/Http/Controllers/Budget/EditController.php b/app/Http/Controllers/Budget/EditController.php
index 91125c6e4d..536f827c73 100644
--- a/app/Http/Controllers/Budget/EditController.php
+++ b/app/Http/Controllers/Budget/EditController.php
@@ -24,6 +24,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Controllers\Budget;
+use FireflyIII\Models\AutoBudget;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Http\Requests\BudgetFormUpdateRequest;
use FireflyIII\Models\Budget;
@@ -69,13 +70,35 @@ class EditController extends Controller
*/
public function edit(Request $request, Budget $budget)
{
- $subTitle = (string)trans('firefly.edit_budget', ['name' => $budget->name]);
+ $subTitle = (string)trans('firefly.edit_budget', ['name' => $budget->name]);
+ $autoBudget = $this->repository->getAutoBudget($budget);
+ // auto budget options
+ $autoBudgetOptions = [
+ 0 => (string)trans('firefly.auto_budget_none'),
+ AutoBudget::AUTO_BUDGET_RESET => (string)trans('firefly.auto_budget_reset'),
+ AutoBudget::AUTO_BUDGET_ROLLOVER => (string)trans('firefly.auto_budget_rollover'),
+ ];
+ $autoBudgetPeriods = [
+ 'daily' => (string)trans('firefly.auto_budget_period_daily'),
+ 'weekly' => (string)trans('firefly.auto_budget_period_weekly'),
+ 'monthly' => (string)trans('firefly.auto_budget_period_monthly'),
+ 'quarterly' => (string)trans('firefly.auto_budget_period_quarterly'),
+ 'half_year' => (string)trans('firefly.auto_budget_period_half_year'),
+ 'yearly' => (string)trans('firefly.auto_budget_period_yearly'),
+ ];
// code to handle active-checkboxes
$hasOldInput = null !== $request->old('_token');
$preFilled = [
- 'active' => $hasOldInput ? (bool)$request->old('active') : $budget->active,
+ 'active' => $hasOldInput ? (bool)$request->old('active') : $budget->active,
];
+ if($autoBudget) {
+ $preFilled['auto_budget_amount'] = $hasOldInput ? $request->old('auto_budget_amount') : $autoBudget->amount;
+ //'auto_budget_option' => $request->,
+ //'transaction_currency_id' => 'required|exists:transaction_currencies,id',
+ //'auto_budget_amount' => $request->old('auto_budget_amount'),
+ //'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly',
+ }
// put previous url in session if not redirect from store (not "return_to_edit").
if (true !== session('budgets.edit.fromUpdate')) {
@@ -84,7 +107,7 @@ class EditController extends Controller
$request->session()->forget('budgets.edit.fromUpdate');
$request->session()->flash('preFilled', $preFilled);
- return view('budgets.edit', compact('budget', 'subTitle'));
+ return view('budgets.edit', compact('budget', 'subTitle', 'autoBudgetOptions', 'autoBudgetPeriods', 'autoBudget'));
}
/**
diff --git a/app/Http/Requests/BudgetFormStoreRequest.php b/app/Http/Requests/BudgetFormStoreRequest.php
index f7287c4ff3..9e27e337f1 100644
--- a/app/Http/Requests/BudgetFormStoreRequest.php
+++ b/app/Http/Requests/BudgetFormStoreRequest.php
@@ -22,7 +22,6 @@ declare(strict_types=1);
namespace FireflyIII\Http\Requests;
-use FireflyIII\AutoBudget;
use Illuminate\Validation\Validator;
/**
@@ -87,30 +86,9 @@ class BudgetFormStoreRequest extends Request
$validator->after(
function (Validator $validator) {
// validate all account info
- $this->validateAmount($validator);
+ $this->validateAutoBudgetAmount($validator);
}
);
}
- /**
- * @param Validator $validator
- */
- private function validateAmount(Validator $validator): void
- {
- $data = $validator->getData();
- $option = (int)$data['auto_budget_option'];
- $amount = $data['auto_budget_amount'] ?? '';
- switch ($option) {
- case AutoBudget::AUTO_BUDGET_RESET:
- case AutoBudget::AUTO_BUDGET_ROLLOVER:
- // basic float check:
- if ('' === $amount) {
- $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget'));
- }
- if (1 !== bccomp((string)$amount, '0')) {
- $validator->errors()->add('auto_budget_amount', (string)trans('validation.auto_budget_amount_positive'));
- }
- break;
- }
- }
}
diff --git a/app/Http/Requests/BudgetFormUpdateRequest.php b/app/Http/Requests/BudgetFormUpdateRequest.php
index ed01f1ee6c..d9c54cfb5f 100644
--- a/app/Http/Requests/BudgetFormUpdateRequest.php
+++ b/app/Http/Requests/BudgetFormUpdateRequest.php
@@ -23,6 +23,7 @@ declare(strict_types=1);
namespace FireflyIII\Http\Requests;
use FireflyIII\Models\Budget;
+use Illuminate\Validation\Validator;
/**
* @codeCoverageIgnore
@@ -48,8 +49,12 @@ class BudgetFormUpdateRequest extends Request
public function getBudgetData(): array
{
return [
- 'name' => $this->string('name'),
- 'active' => $this->boolean('active'),
+ 'name' => $this->string('name'),
+ 'active' => $this->boolean('active'),
+ 'auto_budget_option' => $this->integer('auto_budget_option'),
+ 'transaction_currency_id' => $this->integer('transaction_currency_id'),
+ 'auto_budget_amount' => $this->string('auto_budget_amount'),
+ 'auto_budget_period' => $this->string('auto_budget_period'),
];
}
@@ -70,8 +75,29 @@ class BudgetFormUpdateRequest extends Request
}
return [
- 'name' => $nameRule,
- 'active' => 'numeric|between:0,1',
+ 'name' => $nameRule,
+ 'active' => 'numeric|between:0,1',
+ 'auto_budget_option' => 'numeric|between:0,2',
+ 'transaction_currency_id' => 'required|exists:transaction_currencies,id',
+ 'auto_budget_amount' => 'min:0|max:1000000000',
+ 'auto_budget_period' => 'in:daily,weekly,monthly,quarterly,half_year,yearly',
];
}
+
+ /**
+ * Configure the validator instance with special rules for after the basic validation rules.
+ *
+ * @param Validator $validator
+ *
+ * @return void
+ */
+ public function withValidator(Validator $validator): void
+ {
+ $validator->after(
+ function (Validator $validator) {
+ // validate all account info
+ $this->validateAutoBudgetAmount($validator);
+ }
+ );
+ }
}
diff --git a/app/Http/Requests/Request.php b/app/Http/Requests/Request.php
index d85310ff38..f98e2e0b61 100644
--- a/app/Http/Requests/Request.php
+++ b/app/Http/Requests/Request.php
@@ -25,7 +25,9 @@ namespace FireflyIII\Http\Requests;
use Carbon\Carbon;
use Carbon\Exceptions\InvalidDateException;
use Exception;
+use FireflyIII\Models\AutoBudget;
use Illuminate\Foundation\Http\FormRequest;
+use Illuminate\Validation\Validator;
use Log;
/**
@@ -385,4 +387,26 @@ class Request extends FormRequest
return $data;
}
+ /**
+ * @param Validator $validator
+ */
+ protected function validateAutoBudgetAmount(Validator $validator): void
+ {
+ $data = $validator->getData();
+ $option = (int)$data['auto_budget_option'];
+ $amount = $data['auto_budget_amount'] ?? '';
+ switch ($option) {
+ case AutoBudget::AUTO_BUDGET_RESET:
+ case AutoBudget::AUTO_BUDGET_ROLLOVER:
+ // basic float check:
+ if ('' === $amount) {
+ $validator->errors()->add('auto_budget_amount', (string)trans('validation.amount_required_for_auto_budget'));
+ }
+ if (1 !== bccomp((string)$amount, '0')) {
+ $validator->errors()->add('auto_budget_amount', (string)trans('validation.auto_budget_amount_positive'));
+ }
+ break;
+ }
+ }
+
}
diff --git a/app/Models/AutoBudget.php b/app/Models/AutoBudget.php
index fef108460d..4d9dd6c834 100644
--- a/app/Models/AutoBudget.php
+++ b/app/Models/AutoBudget.php
@@ -19,9 +19,8 @@
* along with this program. If not, see