diff --git a/app/Http/Requests/CurrencyFormRequest.php b/app/Http/Requests/CurrencyFormRequest.php index 74b805be84..ffbfa7e399 100644 --- a/app/Http/Requests/CurrencyFormRequest.php +++ b/app/Http/Requests/CurrencyFormRequest.php @@ -36,9 +36,10 @@ class CurrencyFormRequest extends Request public function getCurrencyData() { return [ - 'name' => $this->get('name'), - 'code' => $this->get('code'), - 'symbol' => $this->get('symbol'), + 'name' => $this->get('name'), + 'code' => $this->get('code'), + 'symbol' => $this->get('symbol'), + 'decimal_places' => intval($this->get('decimal_places')), ]; } @@ -49,15 +50,17 @@ class CurrencyFormRequest extends Request { $rules = [ - 'code' => 'required|min:3|max:3|unique:transaction_currencies,code', - 'name' => 'required|max:48|min:1|unique:transaction_currencies,name', - 'symbol' => 'required|min:1|max:8|unique:transaction_currencies,symbol', + 'name' => 'required|max:48|min:1|unique:transaction_currencies,name', + 'code' => 'required|min:3|max:3|unique:transaction_currencies,code', + 'symbol' => 'required|min:1|max:8|unique:transaction_currencies,symbol', + 'decimal_places' => 'required|min:0|max:12|numeric', ]; if (intval($this->get('id')) > 0) { $rules = [ - 'code' => 'required|min:3|max:3', - 'name' => 'required|max:48|min:1', - 'symbol' => 'required|min:1|max:8', + 'name' => 'required|max:48|min:1', + 'code' => 'required|min:3|max:3', + 'symbol' => 'required|min:1|max:8', + 'decimal_places' => 'required|min:0|max:12|numeric', ]; } diff --git a/app/Models/TransactionCurrency.php b/app/Models/TransactionCurrency.php index aded707d80..0a63b24329 100644 --- a/app/Models/TransactionCurrency.php +++ b/app/Models/TransactionCurrency.php @@ -27,20 +27,28 @@ class TransactionCurrency extends Model { use SoftDeletes, ValidatingTrait; - protected $dates = ['created_at', 'updated_at', 'deleted_at','date']; - protected $fillable = ['name', 'code', 'symbol']; - protected $rules = ['name' => 'required|between:1,200', 'code' => 'required|between:3,3', 'symbol' => 'required|between:1,12']; /** * The attributes that should be casted to native types. * * @var array */ protected $casts - = [ - 'created_at' => 'date', - 'updated_at' => 'date', - 'deleted_at' => 'date', + = [ + 'created_at' => 'date', + 'updated_at' => 'date', + 'deleted_at' => 'date', + 'decimal_places' => 'int', ]; + protected $dates = ['created_at', 'updated_at', 'deleted_at', 'date']; + protected $fillable = ['name', 'code', 'symbol', 'decimal_places']; + protected $rules + = [ + 'name' => 'required|between:1,48', + 'code' => 'required|between:3,3', + 'symbol' => 'required|between:1,8', + 'decimal_places' => 'required|min:0|max:12|numeric', + ]; + /** * @param TransactionCurrency $currency * diff --git a/app/Repositories/Currency/CurrencyRepository.php b/app/Repositories/Currency/CurrencyRepository.php index 40aeea18d7..d2eaed1c30 100644 --- a/app/Repositories/Currency/CurrencyRepository.php +++ b/app/Repositories/Currency/CurrencyRepository.php @@ -197,9 +197,10 @@ class CurrencyRepository implements CurrencyRepositoryInterface { $currency = TransactionCurrency::create( [ - 'name' => $data['name'], - 'code' => $data['code'], - 'symbol' => $data['symbol'], + 'name' => $data['name'], + 'code' => $data['code'], + 'symbol' => $data['symbol'], + 'decimal_places' => $data['decimal_places'], ] ); @@ -214,9 +215,10 @@ class CurrencyRepository implements CurrencyRepositoryInterface */ public function update(TransactionCurrency $currency, array $data): TransactionCurrency { - $currency->code = $data['code']; - $currency->symbol = $data['symbol']; - $currency->name = $data['name']; + $currency->code = $data['code']; + $currency->symbol = $data['symbol']; + $currency->name = $data['name']; + $currency->decimal_places = $data['decimal_places']; $currency->save(); return $currency; diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index 04e2386198..3a8ade8687 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -826,6 +826,7 @@ return [ 'transaction_journal_information' => 'Transaction information', 'transaction_journal_meta' => 'Meta information', 'total_amount' => 'Total amount', + 'number_of_decimals' => 'Number of decimals', // administration 'administration' => 'Administration', diff --git a/resources/lang/en_US/form.php b/resources/lang/en_US/form.php index dc9662cc7f..271005bc4f 100644 --- a/resources/lang/en_US/form.php +++ b/resources/lang/en_US/form.php @@ -63,6 +63,7 @@ return [ 'description' => 'Description', 'expense_account' => 'Expense account', 'revenue_account' => 'Revenue account', + 'decimal_places' => 'Decimal places', 'revenue_account_source' => 'Revenue account (source)', 'source_account_asset' => 'Source account (asset account)', @@ -150,30 +151,30 @@ return [ 'category_keep_transactions' => 'The only transaction connected to this category will not be deleted.|All :count transactions connected to this category will spared deletion.', 'tag_keep_transactions' => 'The only transaction connected to this tag will not be deleted.|All :count transactions connected to this tag will spared deletion.', - 'email' => 'Email address', - 'password' => 'Password', - 'password_confirmation' => 'Password (again)', - 'blocked' => 'Is blocked?', - 'blocked_code' => 'Reason for block', + 'email' => 'Email address', + 'password' => 'Password', + 'password_confirmation' => 'Password (again)', + 'blocked' => 'Is blocked?', + 'blocked_code' => 'Reason for block', // admin - 'domain' => 'Domain', - 'single_user_mode' => 'Single user mode', - 'must_confirm_account' => 'New users must activate account', - 'is_demo_site' => 'Is demo site', + 'domain' => 'Domain', + 'single_user_mode' => 'Single user mode', + 'must_confirm_account' => 'New users must activate account', + 'is_demo_site' => 'Is demo site', // import - 'import_file' => 'Import file', - 'configuration_file' => 'Configuration file', - 'import_file_type' => 'Import file type', - 'csv_comma' => 'A comma (,)', - 'csv_semicolon' => 'A semicolon (;)', - 'csv_tab' => 'A tab (invisible)', - 'csv_delimiter' => 'CSV field delimiter', - 'csv_import_account' => 'Default import account', - 'csv_config' => 'CSV import configuration', + 'import_file' => 'Import file', + 'configuration_file' => 'Configuration file', + 'import_file_type' => 'Import file type', + 'csv_comma' => 'A comma (,)', + 'csv_semicolon' => 'A semicolon (;)', + 'csv_tab' => 'A tab (invisible)', + 'csv_delimiter' => 'CSV field delimiter', + 'csv_import_account' => 'Default import account', + 'csv_config' => 'CSV import configuration', 'due_date' => 'Due date', diff --git a/resources/views/currencies/create.twig b/resources/views/currencies/create.twig index 8192a47171..c9949b05f2 100644 --- a/resources/views/currencies/create.twig +++ b/resources/views/currencies/create.twig @@ -17,6 +17,7 @@ {{ ExpandedForm.text('name',null,{'maxlength' : 48}) }} {{ ExpandedForm.text('symbol',null,{'maxlength': 8}) }} {{ ExpandedForm.text('code',null,{'maxlength' : 3}) }} + {{ ExpandedForm.integer('decimal_places',3,{'maxlength' : 2,'min': 0,'max': 12}) }} diff --git a/resources/views/currencies/edit.twig b/resources/views/currencies/edit.twig index 2c4819545e..1c614ebbb2 100644 --- a/resources/views/currencies/edit.twig +++ b/resources/views/currencies/edit.twig @@ -18,6 +18,7 @@ {{ ExpandedForm.text('name',null,{'maxlength' : 48}) }} {{ ExpandedForm.text('symbol',null,{'maxlength' : 8}) }} {{ ExpandedForm.text('code',null,{'maxlength' : 3}) }} + {{ ExpandedForm.integer('decimal_places',null,{'maxlength' : 2,'min': 0,'max': 12}) }} diff --git a/resources/views/currencies/index.twig b/resources/views/currencies/index.twig index 5955d6edc6..6c26819d9c 100644 --- a/resources/views/currencies/index.twig +++ b/resources/views/currencies/index.twig @@ -20,7 +20,9 @@   - {{ 'currency'|_ }} + {{ 'currency'|_ }} + {{ 'number_of_decimals'|_ }} +   @@ -33,6 +35,7 @@ {{ currency.name }} ({{ currency.code }}) ({{ currency.symbol|raw }}) + {{ currency.decimal_places }} {% if currency.id == defaultCurrency.id %} {{ 'default_currency'|_ }} diff --git a/resources/views/form/integer.twig b/resources/views/form/integer.twig index 9ce0e38f5b..54be537886 100644 --- a/resources/views/form/integer.twig +++ b/resources/views/form/integer.twig @@ -2,9 +2,8 @@
-
- {{ Form.input('number', name, value, options) }} - {% include 'form/feedback' %} -
+ {{ Form.input('number', name, value, options) }} + {% include 'form/help' %} + {% include 'form/feedback' %}