mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-18 10:16:49 +00:00
Refactor currency validation
This commit is contained in:
@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
use Carbon\Carbon;
|
use Carbon\Carbon;
|
||||||
use FireflyIII\Rules\BelongsUser;
|
use FireflyIII\Rules\BelongsUser;
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
use FireflyIII\Validation\RecurrenceValidation;
|
use FireflyIII\Validation\RecurrenceValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
@@ -35,7 +36,7 @@ use Illuminate\Validation\Validator;
|
|||||||
*/
|
*/
|
||||||
class RecurrenceStoreRequest extends Request
|
class RecurrenceStoreRequest extends Request
|
||||||
{
|
{
|
||||||
use RecurrenceValidation, TransactionValidation;
|
use RecurrenceValidation, TransactionValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
|
@@ -26,6 +26,7 @@ namespace FireflyIII\Api\V1\Requests;
|
|||||||
use FireflyIII\Models\Recurrence;
|
use FireflyIII\Models\Recurrence;
|
||||||
use FireflyIII\Rules\BelongsUser;
|
use FireflyIII\Rules\BelongsUser;
|
||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
use FireflyIII\Validation\RecurrenceValidation;
|
use FireflyIII\Validation\RecurrenceValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
@@ -35,7 +36,7 @@ use Illuminate\Validation\Validator;
|
|||||||
*/
|
*/
|
||||||
class RecurrenceUpdateRequest extends Request
|
class RecurrenceUpdateRequest extends Request
|
||||||
{
|
{
|
||||||
use RecurrenceValidation, TransactionValidation;
|
use RecurrenceValidation, TransactionValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
|
@@ -28,6 +28,8 @@ use FireflyIII\Rules\BelongsUser;
|
|||||||
use FireflyIII\Rules\IsBoolean;
|
use FireflyIII\Rules\IsBoolean;
|
||||||
use FireflyIII\Rules\IsDateOrTime;
|
use FireflyIII\Rules\IsDateOrTime;
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
|
use FireflyIII\Validation\CurrencyValidation;
|
||||||
|
use FireflyIII\Validation\GroupValidation;
|
||||||
use FireflyIII\Validation\TransactionValidation;
|
use FireflyIII\Validation\TransactionValidation;
|
||||||
use Illuminate\Validation\Validator;
|
use Illuminate\Validation\Validator;
|
||||||
use Log;
|
use Log;
|
||||||
@@ -37,7 +39,7 @@ use Log;
|
|||||||
*/
|
*/
|
||||||
class TransactionStoreRequest extends Request
|
class TransactionStoreRequest extends Request
|
||||||
{
|
{
|
||||||
use TransactionValidation;
|
use TransactionValidation, GroupValidation, CurrencyValidation;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Authorize logged in users.
|
* Authorize logged in users.
|
||||||
|
72
app/Validation/CurrencyValidation.php
Normal file
72
app/Validation/CurrencyValidation.php
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
declare(strict_types=1);
|
||||||
|
/**
|
||||||
|
* CurrencyValidation.php
|
||||||
|
* Copyright (c) 2020 thegrumpydictator@gmail.com
|
||||||
|
*
|
||||||
|
* This file is part of Firefly III (https://github.com/firefly-iii).
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Affero General Public License as
|
||||||
|
* published by the Free Software Foundation, either version 3 of the
|
||||||
|
* License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Affero General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Affero General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
namespace FireflyIII\Validation;
|
||||||
|
|
||||||
|
|
||||||
|
use Illuminate\Validation\Validator;
|
||||||
|
use Log;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trait CurrencyValidation
|
||||||
|
*
|
||||||
|
* This trait contains validation methods that have to do with currencies.
|
||||||
|
*/
|
||||||
|
trait CurrencyValidation
|
||||||
|
{
|
||||||
|
/**
|
||||||
|
* @param Validator $validator
|
||||||
|
*
|
||||||
|
* @return array
|
||||||
|
*/
|
||||||
|
abstract protected function getTransactionsArray(Validator $validator): array;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* If the transactions contain foreign amounts, there must also be foreign currency information.
|
||||||
|
*
|
||||||
|
* @param Validator $validator
|
||||||
|
*/
|
||||||
|
protected function validateForeignCurrencyInformation(Validator $validator): void
|
||||||
|
{
|
||||||
|
Log::debug('Now in validateForeignCurrencyInformation()');
|
||||||
|
$transactions = $this->getTransactionsArray($validator);
|
||||||
|
|
||||||
|
foreach ($transactions as $index => $transaction) {
|
||||||
|
// if foreign amount is present, then the currency must be as well.
|
||||||
|
if (isset($transaction['foreign_amount']) && !(isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code']))
|
||||||
|
&& 0 !== bccomp('0', $transaction['foreign_amount'])
|
||||||
|
) {
|
||||||
|
$validator->errors()->add(
|
||||||
|
'transactions.' . $index . '.foreign_amount',
|
||||||
|
(string) trans('validation.require_currency_info')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
// if the currency is present, then the amount must be present as well.
|
||||||
|
if ((isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code'])) && !isset($transaction['foreign_amount'])) {
|
||||||
|
$validator->errors()->add(
|
||||||
|
'transactions.' . $index . '.foreign_amount',
|
||||||
|
(string) trans('validation.require_currency_amount')
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -67,6 +67,31 @@ trait GroupValidation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Adds an error to the "description" field when the user has submitted no descriptions and no
|
||||||
|
* journal description.
|
||||||
|
*
|
||||||
|
* @param Validator $validator
|
||||||
|
*/
|
||||||
|
protected function validateDescriptions(Validator $validator): void
|
||||||
|
{
|
||||||
|
Log::debug('Now in GroupValidation::validateDescriptions()');
|
||||||
|
$transactions = $this->getTransactionsArray($validator);
|
||||||
|
$validDescriptions = 0;
|
||||||
|
foreach ($transactions as $transaction) {
|
||||||
|
if ('' !== (string)($transaction['description'] ?? null)) {
|
||||||
|
$validDescriptions++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no valid descriptions?
|
||||||
|
if (0 === $validDescriptions) {
|
||||||
|
$validator->errors()->add(
|
||||||
|
'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Do the validation required by validateJournalIds.
|
* Do the validation required by validateJournalIds.
|
||||||
*
|
*
|
||||||
@@ -86,4 +111,6 @@ trait GroupValidation
|
|||||||
$validator->errors()->add(sprintf('transactions.%d.source_name', $index), (string) trans('validation.need_id_in_edit'));
|
$validator->errors()->add(sprintf('transactions.%d.source_name', $index), (string) trans('validation.need_id_in_edit'));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
@@ -160,61 +160,6 @@ trait TransactionValidation
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Adds an error to the "description" field when the user has submitted no descriptions and no
|
|
||||||
* journal description.
|
|
||||||
*
|
|
||||||
* @param Validator $validator
|
|
||||||
*/
|
|
||||||
public function validateDescriptions(Validator $validator): void
|
|
||||||
{
|
|
||||||
Log::debug('Now in validateDescriptions()');
|
|
||||||
$transactions = $this->getTransactionsArray($validator);
|
|
||||||
$validDescriptions = 0;
|
|
||||||
foreach ($transactions as $transaction) {
|
|
||||||
if ('' !== (string)($transaction['description'] ?? null)) {
|
|
||||||
$validDescriptions++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// no valid descriptions?
|
|
||||||
if (0 === $validDescriptions) {
|
|
||||||
$validator->errors()->add(
|
|
||||||
'transactions.0.description', (string)trans('validation.filled', ['attribute' => (string)trans('validation.attributes.description')])
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* If the transactions contain foreign amounts, there must also be foreign currency information.
|
|
||||||
*
|
|
||||||
* @param Validator $validator
|
|
||||||
*/
|
|
||||||
public function validateForeignCurrencyInformation(Validator $validator): void
|
|
||||||
{
|
|
||||||
Log::debug('Now in validateForeignCurrencyInformation()');
|
|
||||||
$transactions = $this->getTransactionsArray($validator);
|
|
||||||
|
|
||||||
foreach ($transactions as $index => $transaction) {
|
|
||||||
// if foreign amount is present, then the currency must be as well.
|
|
||||||
if (isset($transaction['foreign_amount']) && !(isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code']))
|
|
||||||
&& 0 !== bccomp('0', $transaction['foreign_amount'])
|
|
||||||
) {
|
|
||||||
$validator->errors()->add(
|
|
||||||
'transactions.' . $index . '.foreign_amount',
|
|
||||||
(string)trans('validation.require_currency_info')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
// if the currency is present, then the amount must be present as well.
|
|
||||||
if ((isset($transaction['foreign_currency_id']) || isset($transaction['foreign_currency_code'])) && !isset($transaction['foreign_amount'])) {
|
|
||||||
$validator->errors()->add(
|
|
||||||
'transactions.' . $index . '.foreign_amount',
|
|
||||||
(string)trans('validation.require_currency_amount')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Validator $validator
|
* @param Validator $validator
|
||||||
*/
|
*/
|
||||||
|
Reference in New Issue
Block a user