mirror of
				https://github.com/firefly-iii/firefly-iii.git
				synced 2025-11-03 20:55:05 +00:00 
			
		
		
		
	Removed duplicated code.
This commit is contained in:
		@@ -84,6 +84,87 @@ class CategoryController extends Controller
 | 
			
		||||
        return Response::json($data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param SCRI     $repository
 | 
			
		||||
     * @param Category $category
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function currentPeriod(SCRI $repository, Category $category)
 | 
			
		||||
    {
 | 
			
		||||
        $start = clone Session::get('start', Carbon::now()->startOfMonth());
 | 
			
		||||
        $end   = Session::get('end', Carbon::now()->endOfMonth());
 | 
			
		||||
        $data  = $this->makePeriodChart($repository, $category, $start, $end);
 | 
			
		||||
 | 
			
		||||
        return Response::json($data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a chart of what has been earned in this period in each category
 | 
			
		||||
     * grouped by month.
 | 
			
		||||
     *
 | 
			
		||||
     * @param CRI                         $repository
 | 
			
		||||
     * @param                             $reportType
 | 
			
		||||
     * @param Carbon                      $start
 | 
			
		||||
     * @param Carbon                      $end
 | 
			
		||||
     * @param Collection                  $accounts
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings(PHPMD.ExcessiveParameterList) // cant avoid it.
 | 
			
		||||
     * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's exactly 5.
 | 
			
		||||
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength) // it's long but ok.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Illuminate\Http\JsonResponse
 | 
			
		||||
     */
 | 
			
		||||
    public function earnedInPeriod(CRI $repository, $reportType, Carbon $start, Carbon $end, Collection $accounts)
 | 
			
		||||
    {
 | 
			
		||||
        $cache = new CacheProperties; // chart properties for cache:
 | 
			
		||||
        $cache->addProperty($start);
 | 
			
		||||
        $cache->addProperty($end);
 | 
			
		||||
        $cache->addProperty($reportType);
 | 
			
		||||
        $cache->addProperty($accounts);
 | 
			
		||||
        $cache->addProperty('category');
 | 
			
		||||
        $cache->addProperty('earned-in-period');
 | 
			
		||||
        if ($cache->has()) {
 | 
			
		||||
            return Response::json($cache->get()); // @codeCoverageIgnore
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $set        = $repository->earnedForAccountsPerMonth($accounts, $start, $end);
 | 
			
		||||
        $categories = $set->unique('id')->sortBy(
 | 
			
		||||
            function (Category $category) {
 | 
			
		||||
                return $category->name;
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        $entries    = new Collection;
 | 
			
		||||
 | 
			
		||||
        while ($start < $end) { // filter the set:
 | 
			
		||||
            $row        = [clone $start];
 | 
			
		||||
            $currentSet = $set->filter( // get possibly relevant entries from the big $set
 | 
			
		||||
                function (Category $category) use ($start) {
 | 
			
		||||
                    return $category->dateFormatted == $start->format('Y-m');
 | 
			
		||||
                }
 | 
			
		||||
            );
 | 
			
		||||
            /** @var Category $category */
 | 
			
		||||
            foreach ($categories as $category) { // check for each category if its in the current set.
 | 
			
		||||
                $entry = $currentSet->filter( // if its in there, use the value.
 | 
			
		||||
                    function (Category $cat) use ($category) {
 | 
			
		||||
                        return ($cat->id == $category->id);
 | 
			
		||||
                    }
 | 
			
		||||
                )->first();
 | 
			
		||||
                if (!is_null($entry)) {
 | 
			
		||||
                    $row[] = round($entry->earned, 2);
 | 
			
		||||
                } else {
 | 
			
		||||
                    $row[] = 0;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            $entries->push($row);
 | 
			
		||||
            $start->addMonth();
 | 
			
		||||
        }
 | 
			
		||||
        $data = $this->generator->earnedInPeriod($categories, $entries);
 | 
			
		||||
        $cache->store($data);
 | 
			
		||||
 | 
			
		||||
        return $data;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Show this month's category overview.
 | 
			
		||||
@@ -210,49 +291,6 @@ class CategoryController extends Controller
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param SCRI     $repository
 | 
			
		||||
     * @param Category $category
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Symfony\Component\HttpFoundation\Response
 | 
			
		||||
     */
 | 
			
		||||
    public function currentPeriod(SCRI $repository, Category $category)
 | 
			
		||||
    {
 | 
			
		||||
        $start = clone Session::get('start', Carbon::now()->startOfMonth());
 | 
			
		||||
        $end   = Session::get('end', Carbon::now()->endOfMonth());
 | 
			
		||||
 | 
			
		||||
        // chart properties for cache:
 | 
			
		||||
        $cache = new CacheProperties;
 | 
			
		||||
        $cache->addProperty($start);
 | 
			
		||||
        $cache->addProperty($end);
 | 
			
		||||
        $cache->addProperty($category->id);
 | 
			
		||||
        $cache->addProperty('category');
 | 
			
		||||
        $cache->addProperty('current-period');
 | 
			
		||||
        if ($cache->has()) {
 | 
			
		||||
            return Response::json($cache->get()); // @codeCoverageIgnore
 | 
			
		||||
        }
 | 
			
		||||
        $entries = new Collection;
 | 
			
		||||
 | 
			
		||||
        // get amount earned in period, grouped by day.
 | 
			
		||||
        // get amount spent in period, grouped by day.
 | 
			
		||||
        $spentArray  = $repository->spentPerDay($category, $start, $end);
 | 
			
		||||
        $earnedArray = $repository->earnedPerDay($category, $start, $end);
 | 
			
		||||
 | 
			
		||||
        while ($start <= $end) {
 | 
			
		||||
            $str    = $start->format('Y-m-d');
 | 
			
		||||
            $spent  = isset($spentArray[$str]) ? $spentArray[$str] : 0;
 | 
			
		||||
            $earned = isset($earnedArray[$str]) ? $earnedArray[$str] : 0;
 | 
			
		||||
            $date   = Navigation::periodShow($start, '1D');
 | 
			
		||||
            $entries->push([clone $start, $date, $spent, $earned]);
 | 
			
		||||
            $start->addDay();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $data = $this->generator->period($entries);
 | 
			
		||||
        $cache->store($data);
 | 
			
		||||
 | 
			
		||||
        return Response::json($data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param SCRI                        $repository
 | 
			
		||||
     * @param Category                    $category
 | 
			
		||||
@@ -267,109 +305,13 @@ class CategoryController extends Controller
 | 
			
		||||
        $range  = Preferences::get('viewRange', '1M')->data;
 | 
			
		||||
        $start  = Navigation::startOfPeriod($carbon, $range);
 | 
			
		||||
        $end    = Navigation::endOfPeriod($carbon, $range);
 | 
			
		||||
 | 
			
		||||
        // chart properties for cache:
 | 
			
		||||
        $cache = new CacheProperties;
 | 
			
		||||
        $cache->addProperty($start);
 | 
			
		||||
        $cache->addProperty($end);
 | 
			
		||||
        $cache->addProperty($category->id);
 | 
			
		||||
        $cache->addProperty('category');
 | 
			
		||||
        $cache->addProperty('specificPeriod');
 | 
			
		||||
        $cache->addProperty($date);
 | 
			
		||||
        if ($cache->has()) {
 | 
			
		||||
            return Response::json($cache->get()); // @codeCoverageIgnore
 | 
			
		||||
        }
 | 
			
		||||
        $entries = new Collection;
 | 
			
		||||
 | 
			
		||||
        // get amount earned in period, grouped by day.
 | 
			
		||||
        $spentArray  = $repository->spentPerDay($category, $start, $end);
 | 
			
		||||
        $earnedArray = $repository->earnedPerDay($category, $start, $end);
 | 
			
		||||
        // get amount spent in period, grouped by day.
 | 
			
		||||
 | 
			
		||||
        while ($start <= $end) {
 | 
			
		||||
            $str    = $start->format('Y-m-d');
 | 
			
		||||
            $spent  = isset($spentArray[$str]) ? $spentArray[$str] : 0;
 | 
			
		||||
            $earned = isset($earnedArray[$str]) ? $earnedArray[$str] : 0;
 | 
			
		||||
            $date   = Navigation::periodShow($start, '1D');
 | 
			
		||||
            $entries->push([clone $start, $date, $spent, $earned]);
 | 
			
		||||
            $start->addDay();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $data = $this->generator->period($entries);
 | 
			
		||||
        $cache->store($data);
 | 
			
		||||
        $data   = $this->makePeriodChart($repository, $category, $start, $end);
 | 
			
		||||
 | 
			
		||||
        return Response::json($data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a chart of what has been earned in this period in each category
 | 
			
		||||
     * grouped by month.
 | 
			
		||||
     *
 | 
			
		||||
     * @param CRI                         $repository
 | 
			
		||||
     * @param                             $reportType
 | 
			
		||||
     * @param Carbon                      $start
 | 
			
		||||
     * @param Carbon                      $end
 | 
			
		||||
     * @param Collection                  $accounts
 | 
			
		||||
     *
 | 
			
		||||
     * @SuppressWarnings(PHPMD.ExcessiveParameterList) // cant avoid it.
 | 
			
		||||
     * @SuppressWarnings(PHPMD.CyclomaticComplexity) // it's exactly 5.
 | 
			
		||||
     * @SuppressWarnings(PHPMD.ExcessiveMethodLength) // it's long but ok.
 | 
			
		||||
     *
 | 
			
		||||
     * @return \Illuminate\Http\JsonResponse
 | 
			
		||||
     */
 | 
			
		||||
    public function earnedInPeriod(CRI $repository, $reportType, Carbon $start, Carbon $end, Collection $accounts)
 | 
			
		||||
    {
 | 
			
		||||
        $cache = new CacheProperties; // chart properties for cache:
 | 
			
		||||
        $cache->addProperty($start);
 | 
			
		||||
        $cache->addProperty($end);
 | 
			
		||||
        $cache->addProperty($reportType);
 | 
			
		||||
        $cache->addProperty($accounts);
 | 
			
		||||
        $cache->addProperty('category');
 | 
			
		||||
        $cache->addProperty('earned-in-period');
 | 
			
		||||
        if ($cache->has()) {
 | 
			
		||||
            return Response::json($cache->get()); // @codeCoverageIgnore
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $set        = $repository->earnedForAccountsPerMonth($accounts, $start, $end);
 | 
			
		||||
        $categories = $set->unique('id')->sortBy(
 | 
			
		||||
            function (Category $category) {
 | 
			
		||||
                return $category->name;
 | 
			
		||||
            }
 | 
			
		||||
        );
 | 
			
		||||
        $entries    = new Collection;
 | 
			
		||||
 | 
			
		||||
        while ($start < $end) { // filter the set:
 | 
			
		||||
            $row        = [clone $start];
 | 
			
		||||
            $currentSet = $set->filter( // get possibly relevant entries from the big $set
 | 
			
		||||
                function (Category $category) use ($start) {
 | 
			
		||||
                    return $category->dateFormatted == $start->format('Y-m');
 | 
			
		||||
                }
 | 
			
		||||
            );
 | 
			
		||||
            /** @var Category $category */
 | 
			
		||||
            foreach ($categories as $category) { // check for each category if its in the current set.
 | 
			
		||||
                $entry = $currentSet->filter( // if its in there, use the value.
 | 
			
		||||
                    function (Category $cat) use ($category) {
 | 
			
		||||
                        return ($cat->id == $category->id);
 | 
			
		||||
                    }
 | 
			
		||||
                )->first();
 | 
			
		||||
                if (!is_null($entry)) {
 | 
			
		||||
                    $row[] = round($entry->earned, 2);
 | 
			
		||||
                } else {
 | 
			
		||||
                    $row[] = 0;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            $entries->push($row);
 | 
			
		||||
            $start->addMonth();
 | 
			
		||||
        }
 | 
			
		||||
        $data = $this->generator->earnedInPeriod($categories, $entries);
 | 
			
		||||
        $cache->store($data);
 | 
			
		||||
 | 
			
		||||
        return $data;
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Returns a chart of what has been spent in this period in each category
 | 
			
		||||
     * grouped by month.
 | 
			
		||||
@@ -436,5 +378,46 @@ class CategoryController extends Controller
 | 
			
		||||
        return $data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @param SCRI     $repository
 | 
			
		||||
     * @param Category $category
 | 
			
		||||
     * @param Carbon   $start
 | 
			
		||||
     * @param Carbon   $end
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    private function makePeriodChart(SCRI $repository, Category $category, Carbon $start, Carbon $end)
 | 
			
		||||
    {
 | 
			
		||||
        // chart properties for cache:
 | 
			
		||||
        $cache = new CacheProperties;
 | 
			
		||||
        $cache->addProperty($start);
 | 
			
		||||
        $cache->addProperty($end);
 | 
			
		||||
        $cache->addProperty($category->id);
 | 
			
		||||
        $cache->addProperty('specific-period');
 | 
			
		||||
        if ($cache->has()) {
 | 
			
		||||
            return $cache->get(); // @codeCoverageIgnore
 | 
			
		||||
        }
 | 
			
		||||
        $entries = new Collection;
 | 
			
		||||
 | 
			
		||||
        // get amount earned in period, grouped by day.
 | 
			
		||||
        // get amount spent in period, grouped by day.
 | 
			
		||||
        $spentArray  = $repository->spentPerDay($category, $start, $end);
 | 
			
		||||
        $earnedArray = $repository->earnedPerDay($category, $start, $end);
 | 
			
		||||
 | 
			
		||||
        while ($start <= $end) {
 | 
			
		||||
            $str    = $start->format('Y-m-d');
 | 
			
		||||
            $spent  = isset($spentArray[$str]) ? $spentArray[$str] : 0;
 | 
			
		||||
            $earned = isset($earnedArray[$str]) ? $earnedArray[$str] : 0;
 | 
			
		||||
            $date   = Navigation::periodShow($start, '1D');
 | 
			
		||||
            $entries->push([clone $start, $date, $spent, $earned]);
 | 
			
		||||
            $start->addDay();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $data = $this->generator->period($entries);
 | 
			
		||||
        $cache->store($data);
 | 
			
		||||
 | 
			
		||||
        return $data;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user