mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-10-31 02:36:28 +00:00 
			
		
		
		
	Refactor various methods away from controllers
This commit is contained in:
		| @@ -27,13 +27,11 @@ use Carbon\Carbon; | ||||
| use FireflyIII\Helpers\Collector\JournalCollectorInterface; | ||||
| use FireflyIII\Helpers\Filter\InternalTransferFilter; | ||||
| use FireflyIII\Http\Controllers\Controller; | ||||
| use FireflyIII\Models\AccountType; | ||||
| use FireflyIII\Models\Category; | ||||
| use FireflyIII\Models\TransactionType; | ||||
| use FireflyIII\Repositories\Account\AccountRepositoryInterface; | ||||
| use FireflyIII\Repositories\Category\CategoryRepositoryInterface; | ||||
| use FireflyIII\Repositories\Journal\JournalRepositoryInterface; | ||||
| use FireflyIII\Support\CacheProperties; | ||||
| use FireflyIII\Support\Http\Controllers\PeriodOverview; | ||||
| use Illuminate\Http\Request; | ||||
| use Illuminate\Support\Collection; | ||||
| use Log; | ||||
| @@ -46,7 +44,7 @@ use Log; | ||||
|  */ | ||||
| class ShowController extends Controller | ||||
| { | ||||
|  | ||||
|     use PeriodOverview; | ||||
|     /** @var AccountRepositoryInterface The account repository */ | ||||
|     private $accountRepos; | ||||
|     /** @var JournalRepositoryInterface Journals and transactions overview */ | ||||
| @@ -96,7 +94,7 @@ class ShowController extends Controller | ||||
|         $subTitleIcon = 'fa-bar-chart'; | ||||
|         $page         = (int)$request->get('page'); | ||||
|         $pageSize     = (int)app('preferences')->get('listPageSize', 50)->data; | ||||
|         $periods      = $this->getPeriodOverview($category, $start); | ||||
|         $periods      = $this->getCategoryPeriodOverview($category, $start); | ||||
|         $path         = route('categories.show', [$category->id, $start->format('Y-m-d'), $end->format('Y-m-d')]); | ||||
|         $subTitle     = trans( | ||||
|             'firefly.journals_in_period_for_category', | ||||
| @@ -153,72 +151,4 @@ class ShowController extends Controller | ||||
|  | ||||
|         return view('categories.show', compact('category', 'transactions', 'periods', 'subTitle', 'subTitleIcon', 'start', 'end')); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get a period overview for category. | ||||
|      * | ||||
|      * @param Category $category | ||||
|      * | ||||
|      * @param Carbon   $date | ||||
|      * | ||||
|      * @return Collection | ||||
|      * | ||||
|      * @SuppressWarnings(PHPMD.ExcessiveMethodLength) | ||||
|      */ | ||||
|     protected function getPeriodOverview(Category $category, Carbon $date): Collection // periodOverview method | ||||
|     { | ||||
|         $range    = app('preferences')->get('viewRange', '1M')->data; | ||||
|         $first    = $this->journalRepos->firstNull(); | ||||
|         $start    = null === $first ? new Carbon : $first->date; | ||||
|         $end      = $date ?? new Carbon; | ||||
|         $accounts = $this->accountRepos->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); | ||||
|  | ||||
|         // properties for entries with their amounts. | ||||
|         $cache = new CacheProperties(); | ||||
|         $cache->addProperty($start); | ||||
|         $cache->addProperty($end); | ||||
|         $cache->addProperty($range); | ||||
|         $cache->addProperty('categories.entries'); | ||||
|         $cache->addProperty($category->id); | ||||
|  | ||||
|         if ($cache->has()) { | ||||
|             return $cache->get(); // @codeCoverageIgnore | ||||
|         } | ||||
|         /** @var array $dates */ | ||||
|         $dates   = app('navigation')->blockPeriods($start, $end, $range); | ||||
|         $entries = new Collection; | ||||
|  | ||||
|         foreach ($dates as $currentDate) { | ||||
|             $spent  = $this->repository->spentInPeriod(new Collection([$category]), $accounts, $currentDate['start'], $currentDate['end']); | ||||
|             $earned = $this->repository->earnedInPeriod(new Collection([$category]), $accounts, $currentDate['start'], $currentDate['end']); | ||||
|             /** @noinspection PhpUndefinedMethodInspection */ | ||||
|             $dateStr  = $currentDate['end']->format('Y-m-d'); | ||||
|             $dateName = app('navigation')->periodShow($currentDate['end'], $currentDate['period']); | ||||
|  | ||||
|             // amount transferred | ||||
|             /** @var JournalCollectorInterface $collector */ | ||||
|             $collector = app(JournalCollectorInterface::class); | ||||
|             $collector->setAllAssetAccounts()->setRange($currentDate['start'], $currentDate['end'])->setCategory($category) | ||||
|                       ->withOpposingAccount()->setTypes([TransactionType::TRANSFER]); | ||||
|             $collector->removeFilter(InternalTransferFilter::class); | ||||
|             $transferred = app('steam')->positive((string)$collector->getJournals()->sum('transaction_amount')); | ||||
|  | ||||
|             $entries->push( | ||||
|                 [ | ||||
|                     'string'      => $dateStr, | ||||
|                     'name'        => $dateName, | ||||
|                     'spent'       => $spent, | ||||
|                     'earned'      => $earned, | ||||
|                     'sum'         => bcadd($earned, $spent), | ||||
|                     'transferred' => $transferred, | ||||
|                     'start'       => clone $currentDate['start'], | ||||
|                     'end'         => clone $currentDate['end'], | ||||
|                 ] | ||||
|             ); | ||||
|         } | ||||
|         $cache->store($entries); | ||||
|  | ||||
|         return $entries; | ||||
|     } | ||||
|  | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user