mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
Better endpoint to move transactions.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
<?php
|
||||
|
||||
namespace FireflyIII\Validation\Api\Data\Bulk;
|
||||
|
||||
use FireflyIII\Repositories\Account\AccountRepositoryInterface;
|
||||
use Illuminate\Validation\Validator;
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
trait ValidatesBulkTransactionQuery
|
||||
{
|
||||
/**
|
||||
* @param Validator $validator
|
||||
*/
|
||||
protected function validateTransactionQuery(Validator $validator): void
|
||||
{
|
||||
$data = $validator->getData();
|
||||
// assumption is all validation has already taken place
|
||||
// and the query key exists.
|
||||
$json = json_decode($data['query'], true, 8);
|
||||
|
||||
if (array_key_exists('source_account_id', $json['where'])
|
||||
&& array_key_exists('destination_account_id', $json['update'])
|
||||
) {
|
||||
// find both accounts
|
||||
// must be same type.
|
||||
// already validated: belongs to this user.
|
||||
$repository = app(AccountRepositoryInterface::class);
|
||||
$source = $repository->find((int)$json['where']['source_account_id']);
|
||||
$dest = $repository->find((int)$json['update']['destination_account_id']);
|
||||
if (null === $source) {
|
||||
$validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'where', 'source_account_id'));
|
||||
|
||||
return;
|
||||
}
|
||||
if (null === $dest) {
|
||||
$validator->errors()->add('query', sprintf((string)trans('validation.invalid_query_data'), 'update', 'destination_account_id'));
|
||||
|
||||
return;
|
||||
}
|
||||
if ($source->accountType->type !== $dest->accountType->type) {
|
||||
$validator->errors()->add('query', (string)trans('validation.invalid_query_account_type'));
|
||||
return;
|
||||
}
|
||||
// must have same currency:
|
||||
if($repository->getAccountCurrency($source)->id !== $repository->getAccountCurrency($dest)->id) {
|
||||
$validator->errors()->add('query', (string)trans('validation.invalid_query_currency'));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user