diff --git a/app/Api/V1/Controllers/RuleController.php b/app/Api/V1/Controllers/RuleController.php index ec2e95f526..ef1ac66385 100644 --- a/app/Api/V1/Controllers/RuleController.php +++ b/app/Api/V1/Controllers/RuleController.php @@ -308,7 +308,8 @@ class RuleController extends Controller */ public function update(RuleRequest $request, Rule $rule): JsonResponse { - $rule = $this->ruleRepository->update($rule, $request->getAll()); + $rule = $this->ruleRepository->update($rule, $request->getAll()); + $manager = new Manager(); $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; $manager->setSerializer(new JsonApiSerializer($baseUrl)); @@ -322,5 +323,49 @@ class RuleController extends Controller return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); } - // TODO move rule up, move rule down. + /** + * @param Request $request + * @param Rule $rule + * @return JsonResponse + */ + public function down(Request $request, Rule $rule): JsonResponse + { + $this->ruleRepository->moveDown($rule); + $rule = $this->ruleRepository->find($rule->id); + $manager = new Manager(); + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + + /** @var RuleTransformer $transformer */ + $transformer = app(RuleTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($rule, $transformer, 'rules'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + + } + + /** + * @param Request $request + * @param Rule $rule + * @return JsonResponse + */ + public function up(Request $request, Rule $rule): JsonResponse + { + $this->ruleRepository->moveUp($rule); + $rule = $this->ruleRepository->find($rule->id); + $manager = new Manager(); + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + + /** @var RuleTransformer $transformer */ + $transformer = app(RuleTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($rule, $transformer, 'rules'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + + } } diff --git a/app/Api/V1/Controllers/RuleGroupController.php b/app/Api/V1/Controllers/RuleGroupController.php index 0464317879..c4c620e2fe 100644 --- a/app/Api/V1/Controllers/RuleGroupController.php +++ b/app/Api/V1/Controllers/RuleGroupController.php @@ -284,51 +284,6 @@ class RuleGroupController extends Controller return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); } - /** - * @param Request $request - * - * @return array - */ - private function getTestParameters(Request $request): array - { - return [ - 'page_size' => (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data, - 'page' => 0 === (int)$request->query('page') ? 1 : (int)$request->query('page'), - 'start_date' => null === $request->query('start_date') ? null : Carbon::createFromFormat('Y-m-d', $request->query('start_date')), - 'end_date' => null === $request->query('end_date') ? null : Carbon::createFromFormat('Y-m-d', $request->query('end_date')), - 'search_limit' => 0 === (int)$request->query('search_limit') ? (int)config('firefly.test-triggers.limit') : (int)$request->query('search_limit'), - 'trigger_limit' => 0 === (int)$request->query('triggered_limit') - ? (int)config('firefly.test-triggers.range') - : (int)$request->query( - 'triggered_limit' - ), - 'account_list' => '' === (string)$request->query('accounts') ? [] : explode(',', $request->query('accounts')), - ]; - } - - /** - * @param array $accounts - * - * @return Collection - */ - private function getAccountParameter(array $accounts): Collection - { - $return = new Collection; - foreach ($accounts as $accountId) { - Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); - $account = $this->accountRepository->findNull((int)$accountId); - if (null !== $account && AccountType::ASSET === $account->accountType->type) { - Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); - $return->push($account); - } - if (null === $account) { - Log::debug(sprintf('No asset account with id "%s"', $accountId)); - } - } - - return $return; - } - /** * Execute the given rule group on a set of existing transactions. * @@ -381,7 +336,6 @@ class RuleGroupController extends Controller /** * Update a rule group. - * TODO update order of rule group * * @param RuleGroupRequest $request * @param RuleGroup $ruleGroup @@ -402,6 +356,94 @@ class RuleGroupController extends Controller $resource = new Item($ruleGroup, $transformer, 'rule_groups'); return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + } + /** + * @param Request $request + * @param RuleGroup $ruleGroup + * @return JsonResponse + */ + public function down(Request $request, RuleGroup $ruleGroup): JsonResponse + { + $this->ruleGroupRepository->moveDown($ruleGroup); + $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); + $manager = new Manager(); + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + + /** @var RuleGroupTransformer $transformer */ + $transformer = app(RuleGroupTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + } + + /** + * @param Request $request + * @param RuleGroup $ruleGroup + * @return JsonResponse + */ + public function up(Request $request, RuleGroup $ruleGroup): JsonResponse + { + $this->ruleGroupRepository->moveUp($ruleGroup); + $ruleGroup = $this->ruleGroupRepository->find($ruleGroup->id); + $manager = new Manager(); + $baseUrl = $request->getSchemeAndHttpHost() . '/api/v1'; + $manager->setSerializer(new JsonApiSerializer($baseUrl)); + + /** @var RuleGroupTransformer $transformer */ + $transformer = app(RuleGroupTransformer::class); + $transformer->setParameters($this->parameters); + + $resource = new Item($ruleGroup, $transformer, 'rule_groups'); + + return response()->json($manager->createData($resource)->toArray())->header('Content-Type', 'application/vnd.api+json'); + } + + /** + * @param Request $request + * + * @return array + */ + private function getTestParameters(Request $request): array + { + return [ + 'page_size' => (int)app('preferences')->getForUser(auth()->user(), 'listPageSize', 50)->data, + 'page' => 0 === (int)$request->query('page') ? 1 : (int)$request->query('page'), + 'start_date' => null === $request->query('start_date') ? null : Carbon::createFromFormat('Y-m-d', $request->query('start_date')), + 'end_date' => null === $request->query('end_date') ? null : Carbon::createFromFormat('Y-m-d', $request->query('end_date')), + 'search_limit' => 0 === (int)$request->query('search_limit') ? (int)config('firefly.test-triggers.limit') : (int)$request->query('search_limit'), + 'trigger_limit' => 0 === (int)$request->query('triggered_limit') + ? (int)config('firefly.test-triggers.range') + : (int)$request->query( + 'triggered_limit' + ), + 'account_list' => '' === (string)$request->query('accounts') ? [] : explode(',', $request->query('accounts')), + ]; + } + + /** + * @param array $accounts + * + * @return Collection + */ + private function getAccountParameter(array $accounts): Collection + { + $return = new Collection; + foreach ($accounts as $accountId) { + Log::debug(sprintf('Searching for asset account with id "%s"', $accountId)); + $account = $this->accountRepository->findNull((int)$accountId); + if (null !== $account && AccountType::ASSET === $account->accountType->type) { + Log::debug(sprintf('Found account #%d ("%s") and its an asset account', $account->id, $account->name)); + $return->push($account); + } + if (null === $account) { + Log::debug(sprintf('No asset account with id "%s"', $accountId)); + } + } + + return $return; } } diff --git a/app/Api/V1/Requests/BillRequest.php b/app/Api/V1/Requests/BillRequest.php index 8cfa5c147d..65cb1cce08 100644 --- a/app/Api/V1/Requests/BillRequest.php +++ b/app/Api/V1/Requests/BillRequest.php @@ -90,7 +90,6 @@ class BillRequest extends Request 'date' => 'required|date', 'repeat_freq' => 'required|in:weekly,monthly,quarterly,half-year,yearly', 'skip' => 'between:0,31', - 'automatch' => [new IsBoolean], // TODO isn't automatch deprecated? 'active' => [new IsBoolean], 'notes' => 'between:1,65536', ]; diff --git a/app/Api/V1/Requests/TransactionStoreRequest.php b/app/Api/V1/Requests/TransactionStoreRequest.php index 024345d027..508c347ec9 100644 --- a/app/Api/V1/Requests/TransactionStoreRequest.php +++ b/app/Api/V1/Requests/TransactionStoreRequest.php @@ -277,8 +277,6 @@ class TransactionStoreRequest extends Request // the group must have a description if > 1 journal. $this->validateGroupDescription($validator); - // TODO the currency info must match the accounts involved. - } ); } diff --git a/routes/api.php b/routes/api.php index ae7098bd8b..4cef89a665 100644 --- a/routes/api.php +++ b/routes/api.php @@ -311,6 +311,8 @@ Route::group( Route::delete('{rule}', ['uses' => 'RuleController@delete', 'as' => 'delete']); Route::get('{rule}/test', ['uses' => 'RuleController@testRule', 'as' => 'test']); Route::post('{rule}/trigger', ['uses' => 'RuleController@triggerRule', 'as' => 'trigger']); + Route::post('{rule}/up', ['uses' => 'RuleController@up', 'as' => 'up']); + Route::post('{rule}/down', ['uses' => 'RuleController@down', 'as' => 'down']); } ); @@ -327,6 +329,9 @@ Route::group( Route::get('{ruleGroup}/test', ['uses' => 'RuleGroupController@testGroup', 'as' => 'test']); Route::get('{ruleGroup}/rules', ['uses' => 'RuleGroupController@rules', 'as' => 'rules']); Route::post('{ruleGroup}/trigger', ['uses' => 'RuleGroupController@triggerGroup', 'as' => 'trigger']); + + Route::post('{ruleGroup}/up', ['uses' => 'RuleGroupController@up', 'as' => 'up']); + Route::post('{ruleGroup}/down', ['uses' => 'RuleGroupController@down', 'as' => 'down']); } );