. */ declare(strict_types=1); namespace FireflyIII\Helpers\Fiscal; use Carbon\Carbon; /** * Class FiscalHelper. */ class FiscalHelper implements FiscalHelperInterface { /** @var bool */ protected $useCustomFiscalYear; /** * FiscalHelper constructor. */ public function __construct() { $this->useCustomFiscalYear = (bool)app('preferences')->get('customFiscalYear', false)->data; } /** * @return Carbon date object */ public function endOfFiscalYear(Carbon $date): Carbon { // app('log')->debug(sprintf('Now in endOfFiscalYear(%s).', $date->format('Y-m-d'))); $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(); } // app('log')->debug(sprintf('Result of endOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $endDate->format('Y-m-d'))); return $endDate; } /** * @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; if (is_array($prefStartStr)) { $prefStartStr = '01-01'; } $prefStartStr = (string)$prefStartStr; [$mth, $day] = explode('-', $prefStartStr); $startDate->day((int)$day)->month((int)$mth); // if start date is after passed date, sub 1 year. if ($startDate > $date) { $startDate->subYear(); } } if (false === $this->useCustomFiscalYear) { $startDate->startOfYear(); } // app('log')->debug(sprintf('Result of startOfFiscalYear(%s) = %s', $date->format('Y-m-d'), $startDate->format('Y-m-d'))); return $startDate; } }