. */ declare(strict_types=1); namespace FireflyIII\Helpers; use Carbon\Carbon; use Log; /** * Class FiscalHelper. */ class FiscalHelper implements FiscalHelperInterface { /** @var bool */ protected $useCustomFiscalYear; /** * FiscalHelper constructor. */ public function __construct() { $this->useCustomFiscalYear = app('preferences')->get('customFiscalYear', false)->data; if ('testing' === env('APP_ENV')) { Log::warning(sprintf('%s should not be instantiated in the TEST environment!', \get_class($this))); } } /** * @param Carbon $date * * @return Carbon date object */ public function endOfFiscalYear(Carbon $date): Carbon { // get start of fiscal year for passed date $endDate = $this->startOfFiscalYear($date); if (true === $this->useCustomFiscalYear) { // add 1 year and sub 1 day $endDate->addYear(); $endDate->subDay(); } if (false === $this->useCustomFiscalYear) { $endDate->endOfYear(); } return $endDate; } /** * @param Carbon $date * * @return Carbon date object */ public function startOfFiscalYear(Carbon $date): Carbon { // get start mm-dd. Then create a start date in the year passed. $startDate = clone $date; if (true === $this->useCustomFiscalYear) { $prefStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; [$mth, $day] = explode('-', $prefStartStr); $startDate->month((int)$mth)->day((int)$day); // if start date is after passed date, sub 1 year. if ($startDate > $date) { $startDate->subYear(); } } if (false === $this->useCustomFiscalYear) { $startDate->startOfYear(); } return $startDate; } }