This commit is contained in:
James Cole
2019-08-27 07:26:32 +02:00
parent d1eab98281
commit 57961de214
3 changed files with 170 additions and 130 deletions

View File

@@ -33,6 +33,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\Journal\JournalRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Repositories\Tag\TagRepositoryInterface;
use FireflyIII\Repositories\TransactionGroup\TransactionGroupRepositoryInterface;
use FireflyIII\Repositories\TransactionType\TransactionTypeRepositoryInterface;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
@@ -96,73 +97,12 @@ class AutoCompleteController extends Controller
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.
* The result is limited to the top 15 unique results.
*
* @param Request $request
*
* @return JsonResponse
*/
public function allJournals(Request $request): JsonResponse
@@ -176,6 +116,7 @@ class AutoCompleteController extends Controller
$filtered = $result->unique('description');
$limited = $filtered->slice(0, 15);
$array = $limited->toArray();
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.
*
* @param Request $request
*
* @return JsonResponse
*/
public function allJournalsWithID(Request $request): JsonResponse
@@ -193,12 +135,20 @@ class AutoCompleteController extends Controller
$search = (string)$request->get('search');
/** @var JournalRepositoryInterface $repository */
$repository = app(JournalRepositoryInterface::class);
/** @var TransactionGroupRepositoryInterface $groupRepos */
$groupRepos = app(TransactionGroupRepositoryInterface::class);
$result = $repository->searchJournalDescriptions($search);
$array = [];
if (is_numeric($search)) {
$firstResult = $repository->findNull((int)$search);
// search for group, not journal.
$firstResult = $groupRepos->find((int)$search);
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!
@@ -217,6 +167,7 @@ class AutoCompleteController extends Controller
/**
* @param Request $request
*
* @return JsonResponse
* @codeCoverageIgnore
*/
@@ -246,45 +197,6 @@ class AutoCompleteController extends Controller
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
* @codeCoverageIgnore
@@ -311,6 +223,57 @@ class AutoCompleteController extends Controller
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
* @codeCoverageIgnore
@@ -324,7 +287,40 @@ class AutoCompleteController extends Controller
}
/**
* 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);
}
/**
* @param Request $request
*
* @return JsonResponse
* @codeCoverageIgnore
*/
@@ -343,4 +339,25 @@ class AutoCompleteController extends Controller
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);
}
}

View File

@@ -42,6 +42,7 @@ use FireflyIII\Models\TransactionType;
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
use FireflyIII\Services\Internal\Update\GroupUpdateService;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\User;
use Illuminate\Database\Eloquent\Builder;
/**
@@ -49,6 +50,7 @@ use Illuminate\Database\Eloquent\Builder;
*/
class TransactionGroupRepository implements TransactionGroupRepositoryInterface
{
/** @var 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.
*
@@ -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;
}
@@ -311,6 +335,7 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
{
/** @var GroupUpdateService $service */
$service = app(GroupUpdateService::class);
return $service->update($transactionGroup, $data);
}
@@ -363,14 +388,4 @@ class TransactionGroupRepository implements TransactionGroupRepositoryInterfac
return $return;
}
/**
* @param TransactionGroup $group
*/
public function destroy(TransactionGroup $group): void
{
/** @var TransactionGroupDestroyService $service */
$service = new TransactionGroupDestroyService;
$service->destroy($group);
}
}

View File

@@ -24,7 +24,6 @@ declare(strict_types=1);
namespace FireflyIII\Repositories\TransactionGroup;
use FireflyIII\Models\TransactionGroup;
use FireflyIII\Services\Internal\Destroy\TransactionGroupDestroyService;
use FireflyIII\Support\NullArrayObject;
use FireflyIII\User;
@@ -34,6 +33,20 @@ use FireflyIII\User;
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.
*
@@ -43,11 +56,6 @@ interface TransactionGroupRepositoryInterface
*/
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.
*