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'|_ }}
+