| 
									
										
										
										
											2016-05-20 08:57:45 +02:00
										 |  |  | <?php | 
					
						
							| 
									
										
										
										
											2016-05-20 12:27:31 +02:00
										 |  |  | /** | 
					
						
							|  |  |  |  * CategoryController.php | 
					
						
							|  |  |  |  * Copyright (C) 2016 thegrumpydictator@gmail.com | 
					
						
							|  |  |  |  * | 
					
						
							| 
									
										
										
										
											2016-10-05 06:52:15 +02:00
										 |  |  |  * This software may be modified and distributed under the terms of the | 
					
						
							|  |  |  |  * Creative Commons Attribution-ShareAlike 4.0 International License. | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * See the LICENSE file for details. | 
					
						
							| 
									
										
										
										
											2016-05-20 12:27:31 +02:00
										 |  |  |  */ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-20 08:57:45 +02:00
										 |  |  | declare(strict_types = 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace FireflyIII\Http\Controllers; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-25 15:19:14 +01:00
										 |  |  | use Carbon\Carbon; | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  | use FireflyIII\Helpers\Collector\JournalCollector; | 
					
						
							| 
									
										
										
										
											2016-12-18 10:37:59 +01:00
										 |  |  | use FireflyIII\Helpers\Collector\JournalCollectorInterface; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | use FireflyIII\Http\Requests\CategoryFormRequest; | 
					
						
							| 
									
										
										
										
											2016-05-24 16:08:43 +02:00
										 |  |  | use FireflyIII\Models\AccountType; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | use FireflyIII\Models\Category; | 
					
						
							| 
									
										
										
										
											2016-10-10 07:49:39 +02:00
										 |  |  | use FireflyIII\Repositories\Account\AccountRepositoryInterface; | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  | use FireflyIII\Repositories\Category\CategoryRepositoryInterface; | 
					
						
							| 
									
										
										
										
											2015-09-25 16:00:14 +02:00
										 |  |  | use FireflyIII\Support\CacheProperties; | 
					
						
							|  |  |  | use Illuminate\Support\Collection; | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  | use Input; | 
					
						
							| 
									
										
										
										
											2015-09-25 16:00:14 +02:00
										 |  |  | use Navigation; | 
					
						
							| 
									
										
										
										
											2015-06-02 17:44:50 +02:00
										 |  |  | use Preferences; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | use Session; | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  | use URL; | 
					
						
							| 
									
										
										
										
											2015-04-05 19:43:20 +02:00
										 |  |  | use View; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | /** | 
					
						
							|  |  |  |  * Class CategoryController | 
					
						
							|  |  |  |  * | 
					
						
							|  |  |  |  * @package FireflyIII\Http\Controllers | 
					
						
							|  |  |  |  */ | 
					
						
							|  |  |  | class CategoryController extends Controller | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-24 22:53:38 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-02-04 07:27:03 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2015-02-24 22:53:38 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     public function __construct() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-04-28 15:26:30 +02:00
										 |  |  |         parent::__construct(); | 
					
						
							| 
									
										
										
										
											2016-10-29 07:44:46 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         $this->middleware( | 
					
						
							|  |  |  |             function ($request, $next) { | 
					
						
							|  |  |  |                 View::share('title', trans('firefly.categories')); | 
					
						
							|  |  |  |                 View::share('mainTitleIcon', 'fa-bar-chart'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |                 return $next($request); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function create() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-04 07:27:03 +01:00
										 |  |  |         if (session('categories.create.fromStore') !== true) { | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |             Session::put('categories.create.url', URL::previous()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         Session::forget('categories.create.fromStore'); | 
					
						
							| 
									
										
										
										
											2015-05-25 08:12:31 +02:00
										 |  |  |         Session::flash('gaEventCategory', 'categories'); | 
					
						
							|  |  |  |         Session::flash('gaEventAction', 'create'); | 
					
						
							| 
									
										
										
										
											2015-06-09 17:56:08 +02:00
										 |  |  |         $subTitle = trans('firefly.create_new_category'); | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-05-05 10:23:01 +02:00
										 |  |  |         return view('categories.create', compact('subTitle')); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @param Category $category | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function delete(Category $category) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-05-25 22:16:00 +02:00
										 |  |  |         $subTitle = trans('firefly.delete_category', ['name' => $category->name]); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |         // put previous url in session
 | 
					
						
							|  |  |  |         Session::put('categories.delete.url', URL::previous()); | 
					
						
							| 
									
										
										
										
											2015-05-25 08:12:31 +02:00
										 |  |  |         Session::flash('gaEventCategory', 'categories'); | 
					
						
							|  |  |  |         Session::flash('gaEventAction', 'delete'); | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |         return view('categories.delete', compact('category', 'subTitle')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @param CategoryRepositoryInterface $repository | 
					
						
							|  |  |  |      * @param Category                    $category | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |     public function destroy(CategoryRepositoryInterface $repository, Category $category) | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     { | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-19 21:07:22 +01:00
										 |  |  |         $name       = $category->name; | 
					
						
							|  |  |  |         $categoryId = $category->id; | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |         $repository->destroy($category); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 11:38:01 +01:00
										 |  |  |         Session::flash('success', strval(trans('firefly.deleted_category', ['name' => e($name)]))); | 
					
						
							| 
									
										
										
										
											2015-06-02 17:44:50 +02:00
										 |  |  |         Preferences::mark(); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-19 21:07:22 +01:00
										 |  |  |         $uri = session('categories.delete.url'); | 
					
						
							|  |  |  |         if (!(strpos($uri, sprintf('categories/show/%s', $categoryId)) === false)) { | 
					
						
							|  |  |  |             // uri would point back to category
 | 
					
						
							|  |  |  |             $uri = route('categories.index'); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return redirect($uri); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @param Category $category | 
					
						
							|  |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							|  |  |  |     public function edit(Category $category) | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2015-06-09 17:56:08 +02:00
										 |  |  |         $subTitle = trans('firefly.edit_category', ['name' => $category->name]); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |         // put previous url in session if not redirect from store (not "return_to_edit").
 | 
					
						
							| 
									
										
										
										
											2016-02-04 07:27:03 +01:00
										 |  |  |         if (session('categories.edit.fromUpdate') !== true) { | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |             Session::put('categories.edit.url', URL::previous()); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         Session::forget('categories.edit.fromUpdate'); | 
					
						
							| 
									
										
										
										
											2015-05-25 08:12:31 +02:00
										 |  |  |         Session::flash('gaEventCategory', 'categories'); | 
					
						
							|  |  |  |         Session::flash('gaEventAction', 'edit'); | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |         return view('categories.edit', compact('category', 'subTitle')); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @param CategoryRepositoryInterface $repository | 
					
						
							| 
									
										
										
										
											2015-04-05 19:43:20 +02:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |     public function index(CategoryRepositoryInterface $repository) | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-04-10 08:18:14 +02:00
										 |  |  |         $categories = $repository->getCategories(); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $categories->each( | 
					
						
							| 
									
										
										
										
											2016-05-08 13:45:23 +02:00
										 |  |  |             function (Category $category) use ($repository) { | 
					
						
							|  |  |  |                 $category->lastActivity = $repository->lastUseDate($category, new Collection); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |             } | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return view('categories.index', compact('categories')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-11-05 10:28:10 +01:00
										 |  |  |     public function noCategory() | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-02-05 15:41:40 +01:00
										 |  |  |         /** @var Carbon $start */ | 
					
						
							|  |  |  |         $start = session('start', Carbon::now()->startOfMonth()); | 
					
						
							|  |  |  |         /** @var Carbon $end */ | 
					
						
							| 
									
										
										
										
											2016-11-05 10:28:10 +01:00
										 |  |  |         $end = session('end', Carbon::now()->startOfMonth()); | 
					
						
							| 
									
										
										
										
											2016-11-05 10:26:57 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |         // new collector:
 | 
					
						
							|  |  |  |         $collector = new JournalCollector(auth()->user()); | 
					
						
							|  |  |  |         $collector->setAllAssetAccounts()->setRange($start, $end)->withoutCategory();//->groupJournals();
 | 
					
						
							|  |  |  |         $journals = $collector->getJournals(); | 
					
						
							| 
									
										
										
										
											2015-06-09 17:56:08 +02:00
										 |  |  |         $subTitle = trans( | 
					
						
							|  |  |  |             'firefly.without_category_between', | 
					
						
							|  |  |  |             ['start' => $start->formatLocalized($this->monthAndDayFormat), 'end' => $end->formatLocalized($this->monthAndDayFormat)] | 
					
						
							|  |  |  |         ); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-05 10:26:57 +01:00
										 |  |  |         return view('categories.no-category', compact('journals', 'subTitle')); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |      * @param JournalCollectorInterface $collector | 
					
						
							|  |  |  |      * @param Category                  $category | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-05-24 16:08:43 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |     public function show(JournalCollectorInterface $collector, Category $category) | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $range        = Preferences::get('viewRange', '1M')->data; | 
					
						
							|  |  |  |         $start        = session('start', Navigation::startOfPeriod(new Carbon, $range)); | 
					
						
							| 
									
										
										
										
											2016-05-13 15:53:39 +02:00
										 |  |  |         $end          = session('end', Navigation::endOfPeriod(new Carbon, $range)); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |         $hideCategory = true; // used in list.
 | 
					
						
							| 
									
										
										
										
											2016-11-20 11:43:19 +01:00
										 |  |  |         $page         = intval(Input::get('page')) === 0 ? 1 : intval(Input::get('page')); | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  |         $pageSize     = intval(Preferences::get('transactionPageSize', 50)->data); | 
					
						
							| 
									
										
										
										
											2016-05-17 16:00:27 +02:00
										 |  |  |         $subTitle     = $category->name; | 
					
						
							|  |  |  |         $subTitleIcon = 'fa-bar-chart'; | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |         $collector->setLimit($pageSize)->setPage($page)->setAllAssetAccounts()->setRange($start, $end)->setCategory($category)->withBudgetInformation(); | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  |         $journals = $collector->getPaginatedJournals(); | 
					
						
							| 
									
										
										
										
											2015-04-12 10:19:37 +02:00
										 |  |  |         $journals->setPath('categories/show/' . $category->id); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $entries = $this->getGroupedEntries($category); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return view('categories.show', compact('category', 'journals', 'entries', 'hideCategory', 'subTitle', 'subTitleIcon', 'start', 'end')); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							|  |  |  |      * @param CategoryRepositoryInterface $repository | 
					
						
							|  |  |  |      * @param Category                    $category | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return View | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     public function showAll(CategoryRepositoryInterface $repository, Category $category) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $range = Preferences::get('viewRange', '1M')->data; | 
					
						
							| 
									
										
										
										
											2016-09-25 08:36:35 +02:00
										 |  |  |         $start = $repository->firstUseDate($category); | 
					
						
							| 
									
										
										
										
											2016-05-13 15:53:39 +02:00
										 |  |  |         if ($start->year == 1900) { | 
					
						
							|  |  |  |             $start = new Carbon; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $end          = Navigation::endOfPeriod(new Carbon, $range); | 
					
						
							|  |  |  |         $subTitle     = $category->name; | 
					
						
							|  |  |  |         $subTitleIcon = 'fa-bar-chart'; | 
					
						
							|  |  |  |         $hideCategory = true; // used in list.
 | 
					
						
							|  |  |  |         $page         = intval(Input::get('page')) === 0 ? 1 : intval(Input::get('page')); | 
					
						
							|  |  |  |         $pageSize     = intval(Preferences::get('transactionPageSize', 50)->data); | 
					
						
							| 
									
										
										
										
											2016-12-27 11:02:14 +01:00
										 |  |  |         $showAll      = true; | 
					
						
							| 
									
										
										
										
											2015-09-25 16:00:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |         /** @var JournalCollectorInterface $collector */ | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $collector = app(JournalCollectorInterface::class); | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |         $collector->setLimit($pageSize)->setPage($page)->setAllAssetAccounts()->setCategory($category)->withBudgetInformation(); | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $journals = $collector->getPaginatedJournals(); | 
					
						
							|  |  |  |         $journals->setPath('categories/show/' . $category->id . '/all'); | 
					
						
							| 
									
										
										
										
											2015-09-25 16:00:14 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-27 11:02:14 +01:00
										 |  |  |         return view('categories.show', compact('category', 'journals', 'hideCategory', 'subTitle', 'subTitleIcon', 'start', 'end', 'showAll')); | 
					
						
							| 
									
										
										
										
											2015-03-04 09:42:47 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-11-05 18:43:18 +01:00
										 |  |  |      * @param Category $category | 
					
						
							|  |  |  |      * @param          $date | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-08-26 09:30:52 +02:00
										 |  |  |      * @return View | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-06 07:48:41 +01:00
										 |  |  |     public function showByDate(Category $category, string $date) | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-05-08 13:45:23 +02:00
										 |  |  |         $carbon       = new Carbon($date); | 
					
						
							|  |  |  |         $range        = Preferences::get('viewRange', '1M')->data; | 
					
						
							|  |  |  |         $start        = Navigation::startOfPeriod($carbon, $range); | 
					
						
							|  |  |  |         $end          = Navigation::endOfPeriod($carbon, $range); | 
					
						
							|  |  |  |         $subTitle     = $category->name; | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         $subTitleIcon = 'fa-bar-chart'; | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |         $hideCategory = true; // used in list.
 | 
					
						
							| 
									
										
										
										
											2016-11-20 11:43:19 +01:00
										 |  |  |         $page         = intval(Input::get('page')) === 0 ? 1 : intval(Input::get('page')); | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  |         $pageSize     = intval(Preferences::get('transactionPageSize', 50)->data); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |         /** @var JournalCollectorInterface $collector */ | 
					
						
							| 
									
										
										
										
											2016-12-18 10:37:59 +01:00
										 |  |  |         $collector = app(JournalCollectorInterface::class); | 
					
						
							| 
									
										
										
										
											2016-12-28 06:19:18 +01:00
										 |  |  |         $collector->setLimit($pageSize)->setPage($page)->setAllAssetAccounts()->setRange($start, $end)->setCategory($category)->withBudgetInformation(); | 
					
						
							| 
									
										
										
										
											2016-11-05 08:46:55 +01:00
										 |  |  |         $journals = $collector->getPaginatedJournals(); | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |         $journals->setPath('categories/show/' . $category->id . '/' . $date); | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |         return view('categories.show', compact('category', 'journals', 'hideCategory', 'subTitle', 'subTitleIcon', 'start', 'end')); | 
					
						
							| 
									
										
										
										
											2016-01-24 15:58:16 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @param CategoryFormRequest         $request | 
					
						
							|  |  |  |      * @param CategoryRepositoryInterface $repository | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @return $this|\Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |     public function store(CategoryFormRequest $request, CategoryRepositoryInterface $repository) | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-10-23 12:10:22 +02:00
										 |  |  |         $data     = $request->getCategoryData(); | 
					
						
							|  |  |  |         $category = $repository->store($data); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 11:38:01 +01:00
										 |  |  |         Session::flash('success', strval(trans('firefly.stored_category', ['name' => e($category->name)]))); | 
					
						
							| 
									
										
										
										
											2015-06-02 17:44:50 +02:00
										 |  |  |         Preferences::mark(); | 
					
						
							| 
									
										
										
										
											2015-03-29 21:27:51 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-25 16:14:28 +01:00
										 |  |  |         if (intval(Input::get('create_another')) === 1) { | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |             Session::put('categories.create.fromStore', true); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 16:27:21 +02:00
										 |  |  |             return redirect(route('categories.create'))->withInput(); | 
					
						
							| 
									
										
										
										
											2015-03-25 16:13:39 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 16:27:21 +02:00
										 |  |  |         return redirect(route('categories.index')); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     /** | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @param CategoryFormRequest         $request | 
					
						
							|  |  |  |      * @param CategoryRepositoryInterface $repository | 
					
						
							|  |  |  |      * @param Category                    $category | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      * | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |      * @return \Illuminate\Http\RedirectResponse|\Illuminate\Routing\Redirector | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |      */ | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |     public function update(CategoryFormRequest $request, CategoryRepositoryInterface $repository, Category $category) | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-10-23 12:10:22 +02:00
										 |  |  |         $data = $request->getCategoryData(); | 
					
						
							|  |  |  |         $repository->update($category, $data); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-03-20 11:38:01 +01:00
										 |  |  |         Session::flash('success', strval(trans('firefly.updated_category', ['name' => e($category->name)]))); | 
					
						
							| 
									
										
										
										
											2015-06-02 17:44:50 +02:00
										 |  |  |         Preferences::mark(); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-03-26 17:45:03 +01:00
										 |  |  |         if (intval(Input::get('return_to_edit')) === 1) { | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |             Session::put('categories.edit.fromUpdate', true); | 
					
						
							| 
									
										
										
										
											2015-04-05 19:43:20 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-07-06 16:27:21 +02:00
										 |  |  |             return redirect(route('categories.edit', [$category->id])); | 
					
						
							| 
									
										
										
										
											2015-03-26 17:45:03 +01:00
										 |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-04-01 09:43:19 +02:00
										 |  |  |         // redirect to previous URL.
 | 
					
						
							| 
									
										
										
										
											2016-02-04 07:27:03 +01:00
										 |  |  |         return redirect(session('categories.edit.url')); | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-27 10:46:11 +01:00
										 |  |  |     /** | 
					
						
							|  |  |  |      * @param Category $category | 
					
						
							|  |  |  |      * | 
					
						
							|  |  |  |      * @return Collection | 
					
						
							|  |  |  |      */ | 
					
						
							|  |  |  |     private function getGroupedEntries(Category $category): Collection | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $repository        = app(CategoryRepositoryInterface::class); | 
					
						
							|  |  |  |         $accountRepository = app(AccountRepositoryInterface::class); | 
					
						
							|  |  |  |         $accounts          = $accountRepository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); | 
					
						
							|  |  |  |         $first             = $repository->firstUseDate($category); | 
					
						
							|  |  |  |         if ($first->year == 1900) { | 
					
						
							|  |  |  |             $first = new Carbon; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $range   = Preferences::get('viewRange', '1M')->data; | 
					
						
							|  |  |  |         $first   = Navigation::startOfPeriod($first, $range); | 
					
						
							|  |  |  |         $end     = Navigation::endOfX(new Carbon, $range); | 
					
						
							|  |  |  |         $entries = new Collection; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         // properties for entries with their amounts.
 | 
					
						
							|  |  |  |         $cache = new CacheProperties(); | 
					
						
							|  |  |  |         $cache->addProperty($first); | 
					
						
							|  |  |  |         $cache->addProperty($end); | 
					
						
							|  |  |  |         $cache->addProperty('categories.entries'); | 
					
						
							|  |  |  |         $cache->addProperty($category->id); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         if ($cache->has()) { | 
					
						
							|  |  |  |             return $cache->get(); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         while ($end >= $first) { | 
					
						
							|  |  |  |             $end        = Navigation::startOfPeriod($end, $range); | 
					
						
							|  |  |  |             $currentEnd = Navigation::endOfPeriod($end, $range); | 
					
						
							|  |  |  |             $spent      = $repository->spentInPeriod(new Collection([$category]), $accounts, $end, $currentEnd); | 
					
						
							|  |  |  |             $earned     = $repository->earnedInPeriod(new Collection([$category]), $accounts, $end, $currentEnd); | 
					
						
							|  |  |  |             $dateStr    = $end->format('Y-m-d'); | 
					
						
							|  |  |  |             $dateName   = Navigation::periodShow($end, $range); | 
					
						
							|  |  |  |             $entries->push([$dateStr, $dateName, $spent, $earned]); | 
					
						
							|  |  |  |             $end = Navigation::subtractPeriod($end, $range, 1); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         $cache->store($entries); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return $entries; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2015-02-22 16:19:32 +01:00
										 |  |  | } |