mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-03 11:08:28 +00:00
Fix issue #8328
This commit is contained in:
@@ -30,6 +30,7 @@ use FireflyIII\Rules\BelongsUser;
|
|||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Rules\IsDateOrTime;
|
use FireflyIII\Rules\IsDateOrTime;
|
||||||
use FireflyIII\Rules\IsValidPositiveAmount;
|
use FireflyIII\Rules\IsValidPositiveAmount;
|
||||||
|
use FireflyIII\Rules\IsValidZeroOrMoreAmount;
|
||||||
use FireflyIII\Support\Request\ChecksLogin;
|
use FireflyIII\Support\Request\ChecksLogin;
|
||||||
use FireflyIII\Support\Request\ConvertsDataTypes;
|
use FireflyIII\Support\Request\ConvertsDataTypes;
|
||||||
use FireflyIII\Validation\GroupValidation;
|
use FireflyIII\Validation\GroupValidation;
|
||||||
@@ -117,7 +118,7 @@ class UpdateRequest extends FormRequest
|
|||||||
|
|
||||||
// amount
|
// amount
|
||||||
'transactions.*.amount' => ['nullable', new IsValidPositiveAmount()],
|
'transactions.*.amount' => ['nullable', new IsValidPositiveAmount()],
|
||||||
'transactions.*.foreign_amount' => ['nullable', new IsValidPositiveAmount()],
|
'transactions.*.foreign_amount' => ['nullable', new IsValidZeroOrMoreAmount()],
|
||||||
|
|
||||||
// description
|
// description
|
||||||
'transactions.*.description' => 'nullable|between:1,1000',
|
'transactions.*.description' => 'nullable|between:1,1000',
|
||||||
|
57
app/Rules/IsValidZeroOrMoreAmount.php
Normal file
57
app/Rules/IsValidZeroOrMoreAmount.php
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
declare(strict_types=1);
|
||||||
|
|
||||||
|
namespace FireflyIII\Rules;
|
||||||
|
|
||||||
|
use FireflyIII\Support\Validation\ValidatesAmountsTrait;
|
||||||
|
use Illuminate\Contracts\Validation\ValidationRule;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
|
|
||||||
|
class IsValidZeroOrMoreAmount implements ValidationRule
|
||||||
|
{
|
||||||
|
use ValidatesAmountsTrait;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @SuppressWarnings(PHPMD.UnusedFormalParameter)
|
||||||
|
*/
|
||||||
|
public function validate(string $attribute, mixed $value, \Closure $fail): void
|
||||||
|
{
|
||||||
|
$value = (string)$value;
|
||||||
|
// must not be empty:
|
||||||
|
if($this->emptyString($value)) {
|
||||||
|
$fail('validation.filled')->translate();
|
||||||
|
Log::info(sprintf('IsValidZeroOrMoreAmount: "%s" cannot be empty.', $value));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// must be a number:
|
||||||
|
if(!$this->isValidNumber($value)) {
|
||||||
|
$fail('validation.numeric')->translate();
|
||||||
|
Log::info(sprintf('IsValidZeroOrMoreAmount: "%s" is not a number.', $value));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// must not be scientific notation:
|
||||||
|
if($this->scientificNumber($value)) {
|
||||||
|
$fail('validation.scientific_notation')->translate();
|
||||||
|
Log::info(sprintf('IsValidZeroOrMoreAmount: "%s" cannot be in the scientific notation.', $value));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// must be more than zero:
|
||||||
|
if(!$this->zeroOrMore($value)) {
|
||||||
|
$fail('validation.more_than_zero_correct')->translate();
|
||||||
|
Log::info(sprintf('IsValidZeroOrMoreAmount: "%s" must be more than zero.', $value));
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// must be less than 100 million and 1709:
|
||||||
|
if($this->moreThanLots($value)) {
|
||||||
|
Log::info(sprintf('IsValidPositiveAmount: "%s" must be less than %s.', $value, self::BIG_AMOUNT));
|
||||||
|
$fail('validation.lte.numeric')->translate(['value' => self::BIG_AMOUNT]);
|
||||||
|
}
|
||||||
|
Log::info(sprintf('IsValidZeroOrMoreAmount: "%s" is a valid positive amount.', $value));
|
||||||
|
}
|
||||||
|
}
|
@@ -47,6 +47,11 @@ trait ValidatesAmountsTrait
|
|||||||
return -1 === bccomp($value, '0') || 0 === bccomp($value, '0');
|
return -1 === bccomp($value, '0') || 0 === bccomp($value, '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final protected function zeroOrMore(string $value): bool
|
||||||
|
{
|
||||||
|
return 1 === bccomp($value, '0') || 0 === bccomp($value, '0');
|
||||||
|
}
|
||||||
|
|
||||||
final protected function moreThanLots(string $value): bool
|
final protected function moreThanLots(string $value): bool
|
||||||
{
|
{
|
||||||
return 1 === bccomp($value, self::BIG_AMOUNT) || 0 === bccomp($value, self::BIG_AMOUNT);
|
return 1 === bccomp($value, self::BIG_AMOUNT) || 0 === bccomp($value, self::BIG_AMOUNT);
|
||||||
|
@@ -3,6 +3,12 @@
|
|||||||
All notable changes to this project will be documented in this file.
|
All notable changes to this project will be documented in this file.
|
||||||
This project adheres to [Semantic Versioning](http://semver.org/).
|
This project adheres to [Semantic Versioning](http://semver.org/).
|
||||||
|
|
||||||
|
## 6.1.4 - 2024-01-03
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- [Issue 8328](https://github.com/firefly-iii/firefly-iii/issues/8328) Asking for non-zero foreign amount despite not being used
|
||||||
|
|
||||||
## 6.1.3 - 2024-01-03
|
## 6.1.3 - 2024-01-03
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
@@ -114,7 +114,7 @@ return [
|
|||||||
'handle_debts' => true,
|
'handle_debts' => true,
|
||||||
// see cer.php for exchange rates feature flag.
|
// see cer.php for exchange rates feature flag.
|
||||||
],
|
],
|
||||||
'version' => '6.1.3',
|
'version' => '6.1.4',
|
||||||
'api_version' => '2.0.12',
|
'api_version' => '2.0.12',
|
||||||
'db_version' => 22,
|
'db_version' => 22,
|
||||||
|
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -652,7 +652,7 @@ export default {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// set foreign currency info:
|
// set foreign currency info:
|
||||||
if (row.foreign_amount.amount !== '' && parseFloat(row.foreign_amount.amount) !== .00) {
|
if (row.foreign_amount.amount.toString() !== '' && parseFloat(row.foreign_amount.amount) !== .00) {
|
||||||
foreignAmount = row.foreign_amount.amount;
|
foreignAmount = row.foreign_amount.amount;
|
||||||
foreignCurrency = row.foreign_amount.currency_id;
|
foreignCurrency = row.foreign_amount.currency_id;
|
||||||
}
|
}
|
||||||
|
@@ -35,6 +35,7 @@ return [
|
|||||||
'iban' => 'This is not a valid IBAN.',
|
'iban' => 'This is not a valid IBAN.',
|
||||||
'zero_or_more' => 'The value cannot be negative.',
|
'zero_or_more' => 'The value cannot be negative.',
|
||||||
'more_than_zero' => 'The value must be more than zero.',
|
'more_than_zero' => 'The value must be more than zero.',
|
||||||
|
'more_than_zero_correct' => 'The value must be zero or more.',
|
||||||
'no_asset_account' => 'This is not an asset account.',
|
'no_asset_account' => 'This is not an asset account.',
|
||||||
'date_or_time' => 'The value must be a valid date or time value (ISO 8601).',
|
'date_or_time' => 'The value must be a valid date or time value (ISO 8601).',
|
||||||
'source_equals_destination' => 'The source account equals the destination account.',
|
'source_equals_destination' => 'The source account equals the destination account.',
|
||||||
@@ -254,6 +255,7 @@ return [
|
|||||||
|
|
||||||
'amount_required_for_auto_budget' => 'The amount is required.',
|
'amount_required_for_auto_budget' => 'The amount is required.',
|
||||||
'auto_budget_amount_positive' => 'The amount must be more than zero.',
|
'auto_budget_amount_positive' => 'The amount must be more than zero.',
|
||||||
|
|
||||||
'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.',
|
'auto_budget_period_mandatory' => 'The auto budget period is a mandatory field.',
|
||||||
|
|
||||||
// no access to administration:
|
// no access to administration:
|
||||||
|
Reference in New Issue
Block a user