mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-12 15:35:15 +00:00
Fix for #2499
This commit is contained in:
@@ -33,6 +33,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
|
|||||||
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
|
||||||
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
|
||||||
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
|
||||||
|
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
|
||||||
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
|
||||||
use Illuminate\Http\JsonResponse;
|
use Illuminate\Http\JsonResponse;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
@@ -96,73 +97,12 @@ class AutoCompleteController extends Controller
|
|||||||
return response()->json($return);
|
return response()->json($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* An auto-complete specifically for revenue accounts, used when converting transactions mostly.
|
|
||||||
* @param Request $request
|
|
||||||
*
|
|
||||||
* @return JsonResponse
|
|
||||||
*/
|
|
||||||
public function revenueAccounts(Request $request): JsonResponse
|
|
||||||
{
|
|
||||||
$search = $request->get('search');
|
|
||||||
/** @var AccountRepositoryInterface $repository */
|
|
||||||
$repository = app(AccountRepositoryInterface::class);
|
|
||||||
|
|
||||||
// filter the account types:
|
|
||||||
$allowedAccountTypes = [AccountType::REVENUE];
|
|
||||||
Log::debug('Now in revenueAccounts(). Filtering results.', $allowedAccountTypes);
|
|
||||||
|
|
||||||
$return = [];
|
|
||||||
$result = $repository->searchAccount((string)$search, $allowedAccountTypes);
|
|
||||||
|
|
||||||
/** @var Account $account */
|
|
||||||
foreach ($result as $account) {
|
|
||||||
$return[] = [
|
|
||||||
'id' => $account->id,
|
|
||||||
'name' => $account->name,
|
|
||||||
'type' => $account->accountType->type,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An auto-complete specifically for expense accounts, used when mass updating mostly.
|
|
||||||
* @param Request $request
|
|
||||||
*
|
|
||||||
* @return JsonResponse
|
|
||||||
*/
|
|
||||||
public function expenseAccounts(Request $request): JsonResponse
|
|
||||||
{
|
|
||||||
$search = $request->get('search');
|
|
||||||
/** @var AccountRepositoryInterface $repository */
|
|
||||||
$repository = app(AccountRepositoryInterface::class);
|
|
||||||
|
|
||||||
// filter the account types:
|
|
||||||
$allowedAccountTypes = [AccountType::EXPENSE];
|
|
||||||
Log::debug(sprintf('Now in expenseAccounts(%s). Filtering results.', $search), $allowedAccountTypes);
|
|
||||||
|
|
||||||
$return = [];
|
|
||||||
$result = $repository->searchAccount((string)$search, $allowedAccountTypes);
|
|
||||||
|
|
||||||
/** @var Account $account */
|
|
||||||
foreach ($result as $account) {
|
|
||||||
$return[] = [
|
|
||||||
'id' => $account->id,
|
|
||||||
'name' => $account->name,
|
|
||||||
'type' => $account->accountType->type,
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($return);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Searches in the titles of all transaction journals.
|
* Searches in the titles of all transaction journals.
|
||||||
* The result is limited to the top 15 unique results.
|
* The result is limited to the top 15 unique results.
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function allJournals(Request $request): JsonResponse
|
public function allJournals(Request $request): JsonResponse
|
||||||
@@ -176,6 +116,7 @@ class AutoCompleteController extends Controller
|
|||||||
$filtered = $result->unique('description');
|
$filtered = $result->unique('description');
|
||||||
$limited = $filtered->slice(0, 15);
|
$limited = $filtered->slice(0, 15);
|
||||||
$array = $limited->toArray();
|
$array = $limited->toArray();
|
||||||
|
|
||||||
return response()->json(array_values($array));
|
return response()->json(array_values($array));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +127,7 @@ class AutoCompleteController extends Controller
|
|||||||
* If the query is numeric, it will append the journal with that particular ID.
|
* If the query is numeric, it will append the journal with that particular ID.
|
||||||
*
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
*/
|
*/
|
||||||
public function allJournalsWithID(Request $request): JsonResponse
|
public function allJournalsWithID(Request $request): JsonResponse
|
||||||
@@ -193,12 +135,20 @@ class AutoCompleteController extends Controller
|
|||||||
$search = (string)$request->get('search');
|
$search = (string)$request->get('search');
|
||||||
/** @var JournalRepositoryInterface $repository */
|
/** @var JournalRepositoryInterface $repository */
|
||||||
$repository = app(JournalRepositoryInterface::class);
|
$repository = app(JournalRepositoryInterface::class);
|
||||||
|
|
||||||
|
/** @var TransactionGroupRepositoryInterface $groupRepos */
|
||||||
|
$groupRepos = app(TransactionGroupRepositoryInterface::class);
|
||||||
|
|
||||||
$result = $repository->searchJournalDescriptions($search);
|
$result = $repository->searchJournalDescriptions($search);
|
||||||
$array = [];
|
$array = [];
|
||||||
if (is_numeric($search)) {
|
if (is_numeric($search)) {
|
||||||
$firstResult = $repository->findNull((int)$search);
|
// search for group, not journal.
|
||||||
|
$firstResult = $groupRepos->find((int)$search);
|
||||||
if (null !== $firstResult) {
|
if (null !== $firstResult) {
|
||||||
$array[] = $firstResult->toArray();
|
// group may contain multiple journals, each a result:
|
||||||
|
foreach ($firstResult->transactionJournals as $journal) {
|
||||||
|
$array[] = $journal->toArray();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if not numeric, search ahead!
|
// if not numeric, search ahead!
|
||||||
@@ -217,6 +167,7 @@ class AutoCompleteController extends Controller
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
@@ -246,45 +197,6 @@ class AutoCompleteController extends Controller
|
|||||||
return response()->json($result->toArray());
|
return response()->json($result->toArray());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Request $request
|
|
||||||
* @return JsonResponse
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
public function currencyNames(Request $request): JsonResponse
|
|
||||||
{
|
|
||||||
$query = (string)$request->get('search');
|
|
||||||
/** @var CurrencyRepositoryInterface $repository */
|
|
||||||
$repository = app(CurrencyRepositoryInterface::class);
|
|
||||||
$result = $repository->searchCurrency($query)->toArray();
|
|
||||||
foreach ($result as $index => $item) {
|
|
||||||
$result[$index]['name'] = sprintf('%s (%s)', $item['name'], $item['code']);
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param Request $request
|
|
||||||
*
|
|
||||||
* @return JsonResponse
|
|
||||||
* @codeCoverageIgnore
|
|
||||||
*/
|
|
||||||
public function transactionTypes(Request $request): JsonResponse
|
|
||||||
{
|
|
||||||
$query = (string)$request->get('search');
|
|
||||||
/** @var TransactionTypeRepositoryInterface $repository */
|
|
||||||
$repository = app(TransactionTypeRepositoryInterface::class);
|
|
||||||
$array = $repository->searchTypes($query)->toArray();
|
|
||||||
|
|
||||||
foreach ($array as $index => $item) {
|
|
||||||
// different key for consistency.
|
|
||||||
$array[$index]['name'] = $item['type'];
|
|
||||||
}
|
|
||||||
|
|
||||||
return response()->json($array);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
@@ -311,6 +223,57 @@ class AutoCompleteController extends Controller
|
|||||||
return response()->json($return);
|
return response()->json($return);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function currencyNames(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$query = (string)$request->get('search');
|
||||||
|
/** @var CurrencyRepositoryInterface $repository */
|
||||||
|
$repository = app(CurrencyRepositoryInterface::class);
|
||||||
|
$result = $repository->searchCurrency($query)->toArray();
|
||||||
|
foreach ($result as $index => $item) {
|
||||||
|
$result[$index]['name'] = sprintf('%s (%s)', $item['name'], $item['code']);
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($result);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* An auto-complete specifically for expense accounts, used when mass updating mostly.
|
||||||
|
*
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function expenseAccounts(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$search = $request->get('search');
|
||||||
|
/** @var AccountRepositoryInterface $repository */
|
||||||
|
$repository = app(AccountRepositoryInterface::class);
|
||||||
|
|
||||||
|
// filter the account types:
|
||||||
|
$allowedAccountTypes = [AccountType::EXPENSE];
|
||||||
|
Log::debug(sprintf('Now in expenseAccounts(%s). Filtering results.', $search), $allowedAccountTypes);
|
||||||
|
|
||||||
|
$return = [];
|
||||||
|
$result = $repository->searchAccount((string)$search, $allowedAccountTypes);
|
||||||
|
|
||||||
|
/** @var Account $account */
|
||||||
|
foreach ($result as $account) {
|
||||||
|
$return[] = [
|
||||||
|
'id' => $account->id,
|
||||||
|
'name' => $account->name,
|
||||||
|
'type' => $account->accountType->type,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($return);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
@@ -324,7 +287,40 @@ class AutoCompleteController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* An auto-complete specifically for revenue accounts, used when converting transactions mostly.
|
||||||
|
*
|
||||||
* @param Request $request
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
*/
|
||||||
|
public function revenueAccounts(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$search = $request->get('search');
|
||||||
|
/** @var AccountRepositoryInterface $repository */
|
||||||
|
$repository = app(AccountRepositoryInterface::class);
|
||||||
|
|
||||||
|
// filter the account types:
|
||||||
|
$allowedAccountTypes = [AccountType::REVENUE];
|
||||||
|
Log::debug('Now in revenueAccounts(). Filtering results.', $allowedAccountTypes);
|
||||||
|
|
||||||
|
$return = [];
|
||||||
|
$result = $repository->searchAccount((string)$search, $allowedAccountTypes);
|
||||||
|
|
||||||
|
/** @var Account $account */
|
||||||
|
foreach ($result as $account) {
|
||||||
|
$return[] = [
|
||||||
|
'id' => $account->id,
|
||||||
|
'name' => $account->name,
|
||||||
|
'type' => $account->accountType->type,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($return);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
* @return JsonResponse
|
* @return JsonResponse
|
||||||
* @codeCoverageIgnore
|
* @codeCoverageIgnore
|
||||||
*/
|
*/
|
||||||
@@ -343,4 +339,25 @@ class AutoCompleteController extends Controller
|
|||||||
return response()->json($array);
|
return response()->json($array);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param Request $request
|
||||||
|
*
|
||||||
|
* @return JsonResponse
|
||||||
|
* @codeCoverageIgnore
|
||||||
|
*/
|
||||||
|
public function transactionTypes(Request $request): JsonResponse
|
||||||
|
{
|
||||||
|
$query = (string)$request->get('search');
|
||||||
|
/** @var TransactionTypeRepositoryInterface $repository */
|
||||||
|
$repository = app(TransactionTypeRepositoryInterface::class);
|
||||||
|
$array = $repository->searchTypes($query)->toArray();
|
||||||
|
|
||||||
|
foreach ($array as $index => $item) {
|
||||||
|
// different key for consistency.
|
||||||
|
$array[$index]['name'] = $item['type'];
|
||||||
|
}
|
||||||
|
|
||||||
|
return response()->json($array);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@@ -42,6 +42,7 @@ use FireflyIII\Models\TransactionType;
|
|||||||
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
||||||
use FireflyIII\Services\Internal\Update\GroupUpdateService;
|
use FireflyIII\Services\Internal\Update\GroupUpdateService;
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
|
use FireflyIII\User;
|
||||||
use Illuminate\Database\Eloquent\Builder;
|
use Illuminate\Database\Eloquent\Builder;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -49,6 +50,7 @@ use Illuminate\Database\Eloquent\Builder;
|
|||||||
*/
|
*/
|
||||||
class TransactionGroupRepository implements TransactionGroupRepositoryInterface
|
class TransactionGroupRepository implements TransactionGroupRepositoryInterface
|
||||||
{
|
{
|
||||||
|
/** @var User */
|
||||||
private $user;
|
private $user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -61,6 +63,28 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TransactionGroup $group
|
||||||
|
*/
|
||||||
|
public function destroy(TransactionGroup $group): void
|
||||||
|
{
|
||||||
|
/** @var TransactionGroupDestroyService $service */
|
||||||
|
$service = new TransactionGroupDestroyService;
|
||||||
|
$service->destroy($group);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find a transaction group by its ID.
|
||||||
|
*
|
||||||
|
* @param int $groupId
|
||||||
|
*
|
||||||
|
* @return TransactionGroup|null
|
||||||
|
*/
|
||||||
|
public function find(int $groupId): ?TransactionGroup
|
||||||
|
{
|
||||||
|
return $this->user->transactionGroups()->where('id', $groupId)->first();
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all attachments for all journals in the group.
|
* Return all attachments for all journals in the group.
|
||||||
*
|
*
|
||||||
@@ -278,9 +302,9 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param mixed $user
|
* @param User $user
|
||||||
*/
|
*/
|
||||||
public function setUser($user): void
|
public function setUser(User $user): void
|
||||||
{
|
{
|
||||||
$this->user = $user;
|
$this->user = $user;
|
||||||
}
|
}
|
||||||
@@ -311,6 +335,7 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
|
|||||||
{
|
{
|
||||||
/** @var GroupUpdateService $service */
|
/** @var GroupUpdateService $service */
|
||||||
$service = app(GroupUpdateService::class);
|
$service = app(GroupUpdateService::class);
|
||||||
|
|
||||||
return $service->update($transactionGroup, $data);
|
return $service->update($transactionGroup, $data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -363,14 +388,4 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
|
|||||||
|
|
||||||
return $return;
|
return $return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param TransactionGroup $group
|
|
||||||
*/
|
|
||||||
public function destroy(TransactionGroup $group): void
|
|
||||||
{
|
|
||||||
/** @var TransactionGroupDestroyService $service */
|
|
||||||
$service = new TransactionGroupDestroyService;
|
|
||||||
$service->destroy($group);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@@ -24,7 +24,6 @@ declare(strict_types=1);
|
|||||||
namespace FireflyIII\Repositories\TransactionGroup;
|
namespace FireflyIII\Repositories\TransactionGroup;
|
||||||
|
|
||||||
use FireflyIII\Models\TransactionGroup;
|
use FireflyIII\Models\TransactionGroup;
|
||||||
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
|
|
||||||
use FireflyIII\Support\NullArrayObject;
|
use FireflyIII\Support\NullArrayObject;
|
||||||
use FireflyIII\User;
|
use FireflyIII\User;
|
||||||
|
|
||||||
@@ -34,6 +33,20 @@ use FireflyIII\User;
|
|||||||
interface TransactionGroupRepositoryInterface
|
interface TransactionGroupRepositoryInterface
|
||||||
{
|
{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param TransactionGroup $group
|
||||||
|
*/
|
||||||
|
public function destroy(TransactionGroup $group): void;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find a transaction group by its ID.
|
||||||
|
*
|
||||||
|
* @param int $groupId
|
||||||
|
*
|
||||||
|
* @return TransactionGroup|null
|
||||||
|
*/
|
||||||
|
public function find(int $groupId): ?TransactionGroup;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all attachments for all journals in the group.
|
* Return all attachments for all journals in the group.
|
||||||
*
|
*
|
||||||
@@ -43,11 +56,6 @@ interface TransactionGroupRepositoryInterface
|
|||||||
*/
|
*/
|
||||||
public function getAttachments(TransactionGroup $group): array;
|
public function getAttachments(TransactionGroup $group): array;
|
||||||
|
|
||||||
/**
|
|
||||||
* @param TransactionGroup $group
|
|
||||||
*/
|
|
||||||
public function destroy(TransactionGroup $group): void;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all journal links for all journals in the group.
|
* Return all journal links for all journals in the group.
|
||||||
*
|
*
|
||||||
|
Reference in New Issue
Block a user