mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 18:54:58 +00:00 
			
		
		
		
	Inline edit for v2
This commit is contained in:
		| @@ -24,6 +24,7 @@ declare(strict_types=1); | ||||
| namespace FireflyIII\Api\V2\Controllers\Transaction\List; | ||||
| 
 | ||||
| use FireflyIII\Api\V2\Controllers\Controller; | ||||
| use FireflyIII\Api\V2\Request\Model\Transaction\ListByCountRequest; | ||||
| use FireflyIII\Api\V2\Request\Model\Transaction\ListRequest; | ||||
| use FireflyIII\Helpers\Collector\GroupCollectorInterface; | ||||
| use FireflyIII\Transformers\V2\TransactionGroupTransformer; | ||||
| @@ -34,24 +35,25 @@ use Illuminate\Http\JsonResponse; | ||||
|  */ | ||||
| class TransactionController extends Controller | ||||
| { | ||||
|     public function list(ListRequest $request): JsonResponse | ||||
|     public function listByCount(ListByCountRequest $request): JsonResponse | ||||
|     { | ||||
| 
 | ||||
| 
 | ||||
|         // collect transactions:
 | ||||
|         $pageSize  = $this->parameters->get('limit'); | ||||
|         $page      = $request->getPage(); | ||||
|         $page      = max($page, 1); | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $page     = $request->getPage(); | ||||
|         $page     = max($page, 1); | ||||
| 
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setUserGroup(auth()->user()->userGroup) | ||||
|             ->withAPIInformation() | ||||
|             ->setLimit($pageSize) | ||||
|             ->setPage($page) | ||||
|             ->setTypes($request->getTransactionTypes()) | ||||
|         ; | ||||
|                   ->withAPIInformation() | ||||
|                   ->setStartRow($request->getStartRow()) | ||||
|                   ->setEndRow($request->getEndRow()) | ||||
|                   ->setTypes($request->getTransactionTypes()); | ||||
| 
 | ||||
|         $start     = $this->parameters->get('start'); | ||||
|         $end       = $this->parameters->get('end'); | ||||
|         $start = $this->parameters->get('start'); | ||||
|         $end   = $this->parameters->get('end'); | ||||
|         if (null !== $start) { | ||||
|             $collector->setStart($start); | ||||
|         } | ||||
| @@ -74,7 +76,49 @@ class TransactionController extends Controller | ||||
| 
 | ||||
|         return response() | ||||
|             ->json($this->jsonApiList('transactions', $paginator, new TransactionGroupTransformer())) | ||||
|             ->header('Content-Type', self::CONTENT_TYPE) | ||||
|         ; | ||||
|             ->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
|     public function list(ListRequest $request): JsonResponse | ||||
|     { | ||||
|         // collect transactions:
 | ||||
|         $pageSize = $this->parameters->get('limit'); | ||||
|         $page     = $request->getPage(); | ||||
|         $page     = max($page, 1); | ||||
| 
 | ||||
|         /** @var GroupCollectorInterface $collector */ | ||||
|         $collector = app(GroupCollectorInterface::class); | ||||
|         $collector->setUserGroup(auth()->user()->userGroup) | ||||
|                   ->withAPIInformation() | ||||
|                   ->setLimit($pageSize) | ||||
|                   ->setPage($page) | ||||
|                   ->setTypes($request->getTransactionTypes()); | ||||
| 
 | ||||
|         $start = $this->parameters->get('start'); | ||||
|         $end   = $this->parameters->get('end'); | ||||
|         if (null !== $start) { | ||||
|             $collector->setStart($start); | ||||
|         } | ||||
|         if (null !== $end) { | ||||
|             $collector->setEnd($end); | ||||
|         } | ||||
| 
 | ||||
|         //        $collector->dumpQuery();
 | ||||
|         //        exit;
 | ||||
| 
 | ||||
|         $paginator = $collector->getPaginatedGroups(); | ||||
|         $params    = $request->buildParams($pageSize); | ||||
|         $paginator->setPath( | ||||
|             sprintf( | ||||
|                 '%s?%s', | ||||
|                 route('api.v2.transactions.list'), | ||||
|                 $params | ||||
|             ) | ||||
|         ); | ||||
| 
 | ||||
|         return response() | ||||
|             ->json($this->jsonApiList('transactions', $paginator, new TransactionGroupTransformer())) | ||||
|             ->header('Content-Type', self::CONTENT_TYPE); | ||||
|     } | ||||
| } | ||||
|   | ||||
							
								
								
									
										107
									
								
								app/Api/V2/Request/Model/Transaction/ListByCountRequest.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										107
									
								
								app/Api/V2/Request/Model/Transaction/ListByCountRequest.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,107 @@ | ||||
| <?php | ||||
| 
 | ||||
| /* | ||||
|  * ListRequest.php | ||||
|  * Copyright (c) 2023 james@firefly-iii.org | ||||
|  * | ||||
|  * This file is part of Firefly III (https://github.com/firefly-iii). | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU Affero General Public License as | ||||
|  * published by the Free Software Foundation, either version 3 of the | ||||
|  * License, or (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU Affero General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License | ||||
|  * along with this program.  If not, see <https://www.gnu.org/licenses/>. | ||||
|  */ | ||||
| 
 | ||||
| declare(strict_types=1); | ||||
| 
 | ||||
| namespace FireflyIII\Api\V2\Request\Model\Transaction; | ||||
| 
 | ||||
| use Carbon\Carbon; | ||||
| use FireflyIII\Support\Http\Api\TransactionFilter; | ||||
| use FireflyIII\Support\Request\ChecksLogin; | ||||
| use FireflyIII\Support\Request\ConvertsDataTypes; | ||||
| use Illuminate\Foundation\Http\FormRequest; | ||||
| 
 | ||||
| /** | ||||
|  * Class ListRequest | ||||
|  * Used specifically to list transactions. | ||||
|  */ | ||||
| class ListByCountRequest extends FormRequest | ||||
| { | ||||
|     use ChecksLogin; | ||||
|     use ConvertsDataTypes; | ||||
|     use TransactionFilter; | ||||
| 
 | ||||
|     public function buildParams(): string | ||||
|     { | ||||
|         $array = [ | ||||
|             'start_row' => $this->getStartRow(), | ||||
|             'end_row'   => $this->getEndRow(), | ||||
|         ]; | ||||
| 
 | ||||
|         $start = $this->getStartDate(); | ||||
|         $end   = $this->getEndDate(); | ||||
|         if (null !== $start && null !== $end) { | ||||
|             $array['start'] = $start->format('Y-m-d'); | ||||
|             $array['end']   = $end->format('Y-m-d'); | ||||
|         } | ||||
| 
 | ||||
|         return http_build_query($array); | ||||
|     } | ||||
| 
 | ||||
|     public function getPage(): int | ||||
|     { | ||||
|         $page = $this->convertInteger('page'); | ||||
| 
 | ||||
|         return 0 === $page || $page > 65536 ? 1 : $page; | ||||
|     } | ||||
| 
 | ||||
|     public function getStartRow(): int | ||||
|     { | ||||
|         $startRow = $this->convertInteger('start_row'); | ||||
| 
 | ||||
|         return $startRow < 0 || $startRow > 4294967296 ? 0 : $startRow; | ||||
|     } | ||||
| 
 | ||||
|     public function getEndRow(): int | ||||
|     { | ||||
|         $endRow = $this->convertInteger('end_row'); | ||||
| 
 | ||||
|         return $endRow <= 0 || $endRow > 4294967296 ? 100 : $endRow; | ||||
|     } | ||||
| 
 | ||||
|     public function getStartDate(): ?Carbon | ||||
|     { | ||||
|         return $this->getCarbonDate('start'); | ||||
|     } | ||||
| 
 | ||||
|     public function getEndDate(): ?Carbon | ||||
|     { | ||||
|         return $this->getCarbonDate('end'); | ||||
|     } | ||||
| 
 | ||||
|     public function getTransactionTypes(): array | ||||
|     { | ||||
|         $type = (string)$this->get('type', 'default'); | ||||
| 
 | ||||
|         return $this->mapTransactionTypes($type); | ||||
|     } | ||||
| 
 | ||||
|     public function rules(): array | ||||
|     { | ||||
|         return [ | ||||
|             'start'     => 'date', | ||||
|             'end'       => 'date|after:start', | ||||
|             'start_row' => 'integer|min:0|max:4294967296', | ||||
|             'end_row'   => 'integer|min:0|max:4294967296|gt:start_row', | ||||
|         ]; | ||||
|     } | ||||
| } | ||||
| @@ -50,6 +50,9 @@ trait CollectorProperties | ||||
|     private array   $postFilters; | ||||
|     private HasMany $query; | ||||
|     private array   $stringFields; | ||||
| 
 | ||||
|     private ?int $startRow; | ||||
|     private ?int $endRow; | ||||
|     /* | ||||
|      * This array is used to collect ALL tags the user may search for (using 'setTags'). | ||||
|      * This way the user can call 'setTags' multiple times and get a joined result. | ||||
|   | ||||
| @@ -67,6 +67,8 @@ class GroupCollector implements GroupCollectorInterface | ||||
|         $this->userGroup   = null; | ||||
|         $this->limit       = null; | ||||
|         $this->page        = null; | ||||
|         $this->startRow    = null; | ||||
|         $this->endRow      = null; | ||||
| 
 | ||||
|         $this->hasAccountInfo       = false; | ||||
|         $this->hasCatInformation    = false; | ||||
| @@ -473,6 +475,10 @@ class GroupCollector implements GroupCollectorInterface | ||||
| 
 | ||||
|             return $collection->slice($offset, $this->limit); | ||||
|         } | ||||
|         // OR filter the array according to the start and end row variable
 | ||||
|         if (null !== $this->startRow && null !== $this->endRow) { | ||||
|             return $collection->slice((int)$this->startRow, (int)$this->endRow); | ||||
|         } | ||||
| 
 | ||||
|         return $collection; | ||||
|     } | ||||
| @@ -486,6 +492,10 @@ class GroupCollector implements GroupCollectorInterface | ||||
|         if (0 === $this->limit) { | ||||
|             $this->setLimit(50); | ||||
|         } | ||||
|         if(null !== $this->startRow && null !== $this->endRow) { | ||||
|             $total = (int)($this->endRow - $this->startRow); | ||||
|             return new LengthAwarePaginator($set, $this->total, $total, 1); | ||||
|         } | ||||
| 
 | ||||
|         return new LengthAwarePaginator($set, $this->total, $this->limit, $this->page); | ||||
|     } | ||||
| @@ -1055,4 +1065,18 @@ class GroupCollector implements GroupCollectorInterface | ||||
|             ->orderBy('transaction_journals.description', 'DESC') | ||||
|             ->orderBy('source.amount', 'DESC'); | ||||
|     } | ||||
| 
 | ||||
|     public function setEndRow(int $endRow): self | ||||
|     { | ||||
|         $this->endRow = $endRow; | ||||
|         return $this; | ||||
|     } | ||||
| 
 | ||||
|     public function setStartRow(int $startRow): self | ||||
|     { | ||||
|         $this->startRow = $startRow; | ||||
|         return $this; | ||||
|     } | ||||
| 
 | ||||
| 
 | ||||
| } | ||||
|   | ||||
| @@ -526,6 +526,16 @@ interface GroupCollectorInterface | ||||
|      */ | ||||
|     public function setPage(int $page): self; | ||||
| 
 | ||||
|     /** | ||||
|      * Set the page to get. | ||||
|      */ | ||||
|     public function setStartRow(int $startRow): self; | ||||
| 
 | ||||
|     /** | ||||
|      * Set the page to get. | ||||
|      */ | ||||
|     public function setEndRow(int $endRow): self; | ||||
| 
 | ||||
|     /** | ||||
|      * Set the start and end time of the results to return. | ||||
|      */ | ||||
|   | ||||
		Reference in New Issue
	
	Block a user