diff --git a/app/Api/V2/Controllers/Chart/BalanceController.php b/app/Api/V2/Controllers/Chart/BalanceController.php index 582e226d97..2886493cfc 100644 --- a/app/Api/V2/Controllers/Chart/BalanceController.php +++ b/app/Api/V2/Controllers/Chart/BalanceController.php @@ -84,10 +84,6 @@ class BalanceController extends Controller $queryParameters = $request->getParameters(); $accounts = $this->getAccountList($queryParameters); - // move date to end of day - $queryParameters['start']->startOfDay(); - $queryParameters['end']->endOfDay(); - // prepare for currency conversion and data collection: /** @var TransactionCurrency $default */ $default = app('amount')->getDefaultCurrency(); diff --git a/app/Api/V2/Request/Chart/ChartRequest.php b/app/Api/V2/Request/Chart/ChartRequest.php index bbe06b0202..6eadbe5837 100644 --- a/app/Api/V2/Request/Chart/ChartRequest.php +++ b/app/Api/V2/Request/Chart/ChartRequest.php @@ -53,10 +53,10 @@ class ChartRequest extends FormRequest $queryParameters = QueryParameters::cast($this->all()); return [ - 'start' => $this->dateOrToday($queryParameters, 'start'), - 'end' => $this->dateOrToday($queryParameters, 'end'), + 'start' => $this->dateOrToday($queryParameters, 'start')->startOfDay(), + 'end' => $this->dateOrToday($queryParameters, 'end')->endOfDay(), 'preselected' => $this->stringFromQueryParams($queryParameters, 'preselected', 'empty'), - 'period' => $this->stringFromQueryParams($queryParameters, 'period', '1M'), + 'period' => $this->stringFromFilterParams($queryParameters, 'period', '1M'), 'accounts' => $this->arrayOfStrings($queryParameters, 'accounts'), // preselected heeft maar een paar toegestane waardes, dat moet ook goed gaan. // 'query' => $this->arrayOfStrings($queryParameters, 'query'), @@ -80,12 +80,14 @@ class ChartRequest extends FormRequest return [ 'fields' => JsonApiRule::notSupported(), 'filter' => ['nullable', 'array', - new IsValidFilter(['start', 'end', 'preselected', 'accounts']), - new IsFilterValueIn('preselected', config('firefly.preselected_accounts')), + new IsValidFilter(['start', 'end', 'preselected', 'accounts', 'period']), + new IsFilterValueIn('preselected', config('firefly.preselected_accounts')), ], 'include' => JsonApiRule::notSupported(), 'page' => JsonApiRule::notSupported(), 'sort' => JsonApiRule::notSupported(), + //'start' => 'required|date|after:1900-01-01|before:2099-12-31', + //'end' => 'required|date|after_or_equal:start|before:2099-12-31|after:1900-01-01', ]; // return [ diff --git a/app/Support/Http/Api/ParsesQueryFilters.php b/app/Support/Http/Api/ParsesQueryFilters.php index be70743676..a3d83328fb 100644 --- a/app/Support/Http/Api/ParsesQueryFilters.php +++ b/app/Support/Http/Api/ParsesQueryFilters.php @@ -35,6 +35,7 @@ trait ParsesQueryFilters $date = today(); $value = $parameters->filter()?->value($field, date('Y-m-d')); + if (is_array($value)) { Log::error(sprintf('Multiple values for date field "%s". Using first value.', $field)); $value = $value[0]; @@ -65,4 +66,8 @@ trait ParsesQueryFilters { return (string) ($parameters->page()[$field] ?? $default); } + private function stringFromFilterParams(QueryParameters $parameters, string $field, string $default): string + { + return (string)$parameters->filter()?->value($field, $default) ?? $default; + } }