diff --git a/app/Http/Controllers/Account/CreateController.php b/app/Http/Controllers/Account/CreateController.php index 5627fbe8e4..3d2be2799b 100644 --- a/app/Http/Controllers/Account/CreateController.php +++ b/app/Http/Controllers/Account/CreateController.php @@ -29,7 +29,6 @@ use FireflyIII\Http\Requests\AccountFormRequest; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\Request; -use Preferences; /** * @@ -103,11 +102,11 @@ class CreateController extends Controller app('preferences')->mark(); // update preferences if necessary: - $frontPage = Preferences::get('frontPageAccounts', [])->data; + $frontPage = app('preferences')->get('frontPageAccounts', [])->data; if (AccountType::ASSET === $account->accountType->type && \count($frontPage) > 0) { // @codeCoverageIgnoreStart $frontPage[] = $account->id; - Preferences::set('frontPageAccounts', $frontPage); + app('preferences')->set('frontPageAccounts', $frontPage); // @codeCoverageIgnoreEnd } // redirect to previous URL. diff --git a/app/Http/Controllers/Account/IndexController.php b/app/Http/Controllers/Account/IndexController.php index 199dfa7924..07ac0643e1 100644 --- a/app/Http/Controllers/Account/IndexController.php +++ b/app/Http/Controllers/Account/IndexController.php @@ -29,7 +29,6 @@ use FireflyIII\Models\Account; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; -use Preferences; /** * @@ -75,7 +74,7 @@ class IndexController extends Controller $collection = $this->repository->getAccountsByType($types); $total = $collection->count(); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $accounts = $collection->slice(($page - 1) * $pageSize, $pageSize); unset($collection); /** @var Carbon $start */ diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index 09f8101ba6..f0596f4b05 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -38,7 +38,6 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Services\Internal\Update\CurrencyUpdateService; use Log; -use Preferences; /** * Class ReconcileController. @@ -138,7 +137,7 @@ class ReconcileController extends Controller } // no start or end: - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; // get start and end if (null === $start && null === $end) { diff --git a/app/Http/Controllers/Account/ShowController.php b/app/Http/Controllers/Account/ShowController.php index 250bf023a3..ba1d440ed4 100644 --- a/app/Http/Controllers/Account/ShowController.php +++ b/app/Http/Controllers/Account/ShowController.php @@ -36,7 +36,6 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Preferences; use View; /** @@ -100,7 +99,7 @@ class ShowController extends Controller $today = new Carbon; $subTitleIcon = config(sprintf('firefly.subIconsByIdentifier.%s', $account->accountType->type)); $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $currencyId = (int)$this->repository->getMetaValue($account, 'currency_id'); $currency = $this->currencyRepos->findNull($currencyId); if (0 === $currencyId) { @@ -146,7 +145,7 @@ class ShowController extends Controller $start = $this->repository->oldestJournalDate($account); $subTitleIcon = config('firefly.subIconsByIdentifier.' . $account->accountType->type); $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $currencyId = (int)$this->repository->getMetaValue($account, 'currency_id'); $currency = $this->currencyRepos->findNull($currencyId); if (0 === $currencyId) { @@ -187,7 +186,7 @@ class ShowController extends Controller */ private function getPeriodOverview(Account $account, ?Carbon $date): Collection { - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = $this->repository->oldestJournalDate($account); $end = $date ?? new Carbon; if ($end < $start) { diff --git a/app/Http/Controllers/Admin/UserController.php b/app/Http/Controllers/Admin/UserController.php index 2a09646643..ba8b994ad9 100644 --- a/app/Http/Controllers/Admin/UserController.php +++ b/app/Http/Controllers/Admin/UserController.php @@ -29,7 +29,6 @@ use FireflyIII\Http\Requests\UserFormRequest; use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Log; -use Preferences; /** * Class UserController. @@ -121,7 +120,7 @@ class UserController extends Controller $users->each( function (User $user) use ($repository) { $list = ['twoFactorAuthEnabled', 'twoFactorAuthSecret']; - $preferences = Preferences::getArrayForUser($user, $list); + $preferences = app('preferences')->getArrayForUser($user, $list); $user->isAdmin = $repository->hasRole($user, 'owner'); $is2faEnabled = 1 === $preferences['twoFactorAuthEnabled']; $has2faSecret = null !== $preferences['twoFactorAuthSecret']; diff --git a/app/Http/Controllers/Auth/TwoFactorController.php b/app/Http/Controllers/Auth/TwoFactorController.php index 80bc9de73e..dce3d27a93 100644 --- a/app/Http/Controllers/Auth/TwoFactorController.php +++ b/app/Http/Controllers/Auth/TwoFactorController.php @@ -29,7 +29,6 @@ use FireflyIII\User; use Illuminate\Cookie\CookieJar; use Illuminate\Http\Request; use Log; -use Preferences; /** * Class TwoFactorController. @@ -49,12 +48,12 @@ class TwoFactorController extends Controller $user = auth()->user(); // to make sure the validator in the next step gets the secret, we push it in session - $secretPreference = Preferences::get('twoFactorAuthSecret', null); + $secretPreference = app('preferences')->get('twoFactorAuthSecret', null); $secret = null === $secretPreference ? null : $secretPreference->data; $title = (string)trans('firefly.two_factor_title'); // make sure the user has two factor configured: - $has2FA = Preferences::get('twoFactorAuthEnabled', false)->data; + $has2FA = app('preferences')->get('twoFactorAuthEnabled', false)->data; if (null === $has2FA || false === $has2FA) { return redirect(route('index')); } diff --git a/app/Http/Controllers/BillController.php b/app/Http/Controllers/BillController.php index ca7d6a181d..9c29c05fe0 100644 --- a/app/Http/Controllers/BillController.php +++ b/app/Http/Controllers/BillController.php @@ -36,10 +36,8 @@ use Illuminate\Support\Collection; use League\Fractal\Manager; use League\Fractal\Resource\Item; use League\Fractal\Serializer\DataArraySerializer; -use Preferences; use Symfony\Component\HttpFoundation\ParameterBag; use URL; -use View; /** * Class BillController. @@ -65,7 +63,7 @@ class BillController extends Controller $maxFileSize = app('steam')->phpBytes(ini_get('upload_max_filesize')); $maxPostSize = app('steam')->phpBytes(ini_get('post_max_size')); $uploadSize = min($maxFileSize, $maxPostSize); - View::share('uploadSize', $uploadSize); + app('view')->share('uploadSize', $uploadSize); $this->middleware( function ($request, $next) { @@ -186,7 +184,7 @@ class BillController extends Controller { $start = session('start'); $end = session('end'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $paginator = $this->billRepository->getPaginator($pageSize); $parameters = new ParameterBag(); $parameters->set('start', $start); @@ -269,7 +267,7 @@ class BillController extends Controller $end = session('end'); $year = $start->year; $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $yearAverage = $this->billRepository->getYearAverage($bill, $start); $overallAverage = $this->billRepository->getOverallAverage($bill); $manager = new Manager(); diff --git a/app/Http/Controllers/Budget/AmountController.php b/app/Http/Controllers/Budget/AmountController.php index 9274ce18a0..1cc575dd95 100644 --- a/app/Http/Controllers/Budget/AmountController.php +++ b/app/Http/Controllers/Budget/AmountController.php @@ -32,13 +32,12 @@ use FireflyIII\Models\Budget; use FireflyIII\Models\TransactionType; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use FireflyIII\Support\CacheProperties; +use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\JsonResponse; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Log; -use Preferences; -use View; /** * @@ -46,6 +45,7 @@ use View; */ class AmountController extends Controller { + use DateCalculation; /** @var BudgetRepositoryInterface */ private $repository; @@ -56,7 +56,7 @@ class AmountController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { @@ -79,53 +79,36 @@ class AmountController extends Controller */ public function amount(Request $request, BudgetRepositoryInterface $repository, Budget $budget): JsonResponse { - $amount = (string)$request->get('amount'); - $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); - $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); - $budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount); - $largeDiff = false; - $warnText = ''; - $days = 0; - $daysInMonth = 0; - if (0 === bccomp($amount, '0')) { - $budgetLimit = null; - } + $amount = (string)$request->get('amount'); + $start = Carbon::createFromFormat('Y-m-d', $request->get('start')); + $end = Carbon::createFromFormat('Y-m-d', $request->get('end')); + $budgetLimit = $this->repository->updateLimitAmount($budget, $start, $end, $amount); + $spent = $repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end); + $currency = app('amount')->getDefaultCurrency(); + $left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true); + $largeDiff = false; + $warnText = ''; + $leftPerDay = null; + $periodLength = $start->diffInDays($end); + $dayDifference = $this->getDayDifference($start, $end); - // if today is between start and end, use the diff in days between end and today (days left) - // otherwise, use diff between start and end. - $today = new Carbon; - Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'), $today->format('Y-m-d'))); - if ($today->gte($start) && $today->lte($end)) { - $days = $end->diffInDays($today); - $daysInMonth = $start->diffInDays($today); - } - if ($today->lte($start) || $today->gte($end)) { - $days = $start->diffInDays($end); - $daysInMonth = $start->diffInDays($end); - } - $days = 0 === $days ? 1 : $days; - $daysInMonth = 0 === $daysInMonth ? 1 : $daysInMonth; - // calculate left in budget: - $spent = $repository->spentInPeriod(new Collection([$budget]), new Collection, $start, $end); - $currency = app('amount')->getDefaultCurrency(); - $left = app('amount')->formatAnything($currency, bcadd($amount, $spent), true); - $leftPerDay = 'none'; - - // is user has money left, calculate. + /* + * If the user budgets ANY amount per day for this budget (anything but zero) + * Firefly III calculates how much he could spend per day. + */ if (1 === bccomp(bcadd($amount, $spent), '0')) { - $leftPerDay = app('amount')->formatAnything($currency, bcdiv(bcadd($amount, $spent), (string)$days), true); + $leftPerDay = app('amount')->formatAnything($currency, bcdiv(bcadd($amount, $spent), (string)$dayDifference), true); } - - // over or under budgeting, compared to previous budgets? + /* + * Get the average amount of money the user budgets for this budget. + * And calculate the same for the current amount. + * + * If the difference is very large, give the user a notification. + */ $average = $this->repository->budgetedPerDay($budget); - // current average per day: - $diff = $start->diffInDays($end); - $current = $amount; - if ($diff > 0) { - $current = bcdiv($amount, (string)$diff); - } + $current = bcdiv($amount, (string)$periodLength); if (bccomp(bcmul('1.1', $average), $current) === -1) { $largeDiff = true; $warnText = (string)trans( @@ -150,8 +133,6 @@ class AmountController extends Controller 'large_diff' => $largeDiff, 'left_per_day' => $leftPerDay, 'warn_text' => $warnText, - 'daysInMonth' => $daysInMonth, - ] ); } @@ -187,7 +168,7 @@ class AmountController extends Controller 'suggested' => '0', ]; $currency = app('amount')->getDefaultCurrency(); - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; /** @var Carbon $begin */ $begin = app('navigation')->subtractPeriod($start, $range, 3); @@ -272,5 +253,4 @@ class AmountController extends Controller return view('budgets.income', compact('available', 'start', 'end', 'page')); } - } \ No newline at end of file diff --git a/app/Http/Controllers/Budget/CreateController.php b/app/Http/Controllers/Budget/CreateController.php index 6fda49b305..cbcc7c4d8b 100644 --- a/app/Http/Controllers/Budget/CreateController.php +++ b/app/Http/Controllers/Budget/CreateController.php @@ -29,7 +29,6 @@ use FireflyIII\Http\Requests\BudgetFormRequest; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use View; /** * Class CreateController @@ -46,7 +45,7 @@ class CreateController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { diff --git a/app/Http/Controllers/Budget/DeleteController.php b/app/Http/Controllers/Budget/DeleteController.php index 0acdbda200..d1c0e9ab25 100644 --- a/app/Http/Controllers/Budget/DeleteController.php +++ b/app/Http/Controllers/Budget/DeleteController.php @@ -28,7 +28,6 @@ use FireflyIII\Http\Controllers\Controller; use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Http\Request; -use View; /** * @@ -46,7 +45,7 @@ class DeleteController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { diff --git a/app/Http/Controllers/Budget/EditController.php b/app/Http/Controllers/Budget/EditController.php index f8e405f670..8ccb72f71b 100644 --- a/app/Http/Controllers/Budget/EditController.php +++ b/app/Http/Controllers/Budget/EditController.php @@ -30,7 +30,6 @@ use FireflyIII\Models\Budget; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; -use View; /** * @@ -48,7 +47,7 @@ class EditController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { diff --git a/app/Http/Controllers/Budget/IndexController.php b/app/Http/Controllers/Budget/IndexController.php index b53187eeaa..f1db2e95a4 100644 --- a/app/Http/Controllers/Budget/IndexController.php +++ b/app/Http/Controllers/Budget/IndexController.php @@ -28,11 +28,10 @@ use Carbon\Carbon; use Exception; use FireflyIII\Http\Controllers\Controller; use FireflyIII\Repositories\Budget\BudgetRepositoryInterface; +use FireflyIII\Support\Http\Controllers\DateCalculation; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Log; -use Preferences; -use View; /** * @@ -41,6 +40,7 @@ use View; class IndexController extends Controller { + use DateCalculation; /** @var BudgetRepositoryInterface */ private $repository; @@ -51,7 +51,7 @@ class IndexController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { @@ -73,13 +73,13 @@ class IndexController extends Controller */ public function index(Request $request, string $moment = null) { - $range = Preferences::get('viewRange', '1M')->data; - $start = session('start', new Carbon); - $end = session('end', new Carbon); - $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; - $days = 0; - $daysInMonth = 0; + $range = app('preferences')->get('viewRange', '1M')->data; + $start = session('start', new Carbon); + $end = session('end', new Carbon); + $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $days = 0; + // make date if present: if (null !== $moment || '' !== (string)$moment) { @@ -96,15 +96,12 @@ class IndexController extends Controller // otherwise, use diff between start and end. $today = new Carbon; if ($today->gte($start) && $today->lte($end)) { - $days = $end->diffInDays($today); - $daysInMonth = $start->diffInDays($today); + $days = $end->diffInDays($today); } if ($today->lte($start) || $today->gte($end)) { - $days = $start->diffInDays($end); - $daysInMonth = $start->diffInDays($end); + $days = $start->diffInDays($end); } - $days = 0 === $days ? 1 : $days; - $daysInMonth = 0 === $daysInMonth ? 1 : $daysInMonth; + $days = 0 === $days ? 1 : $days; $next = clone $end; @@ -113,6 +110,7 @@ class IndexController extends Controller $prev->subDay(); $prev = app('navigation')->startOfPeriod($prev, $range); $this->repository->cleanupBudgets(); + $daysPassed = $this->getDaysPassedInPeriod($start, $end); $allBudgets = $this->repository->getActiveBudgets(); $total = $allBudgets->count(); $budgets = $allBudgets->slice(($page - 1) * $pageSize, $pageSize); @@ -165,10 +163,14 @@ class IndexController extends Controller return view( 'budgets.index', compact( 'available', 'currentMonth', 'next', 'nextText', 'prev', 'allBudgets', 'prevText', 'periodStart', 'periodEnd', 'days', 'page', - 'budgetInformation', 'daysInMonth', + 'budgetInformation', 'daysPassed', 'inactive', 'budgets', 'spent', 'budgeted', 'previousLoop', 'nextLoop', 'start', 'end' ) ); } + + + + } \ No newline at end of file diff --git a/app/Http/Controllers/Budget/ShowController.php b/app/Http/Controllers/Budget/ShowController.php index aa97660c37..168c3c9ebc 100644 --- a/app/Http/Controllers/Budget/ShowController.php +++ b/app/Http/Controllers/Budget/ShowController.php @@ -36,8 +36,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Preferences; -use View; /** * @@ -56,7 +54,7 @@ class ShowController extends Controller { parent::__construct(); - View::share('hideBudgets', true); + app('view')->share('hideBudgets', true); $this->middleware( function ($request, $next) { @@ -80,7 +78,7 @@ class ShowController extends Controller { // default values: $moment = $moment ?? ''; - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = null; $end = null; $periods = new Collection; @@ -117,7 +115,7 @@ class ShowController extends Controller } $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; /** @var JournalCollectorInterface $collector */ $collector = app(JournalCollectorInterface::class); @@ -141,7 +139,7 @@ class ShowController extends Controller $start = session('first', Carbon::create()->startOfYear()); $end = new Carbon; $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $limits = $this->getLimits($budget, $start, $end); $repetition = null; @@ -172,7 +170,7 @@ class ShowController extends Controller } $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $subTitle = trans( 'firefly.budget_in_period', [ @@ -239,7 +237,7 @@ class ShowController extends Controller $repository = app(JournalRepositoryInterface::class); $first = $repository->firstNull(); $start = null === $first ? new Carbon : $first->date; - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = app('navigation')->startOfPeriod($start, $range); $end = app('navigation')->endOfX(new Carbon, $range, null); $entries = new Collection; diff --git a/app/Http/Controllers/CategoryController.php b/app/Http/Controllers/CategoryController.php index d16cc0f81b..184a04e6bd 100644 --- a/app/Http/Controllers/CategoryController.php +++ b/app/Http/Controllers/CategoryController.php @@ -37,7 +37,6 @@ use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; -use Preferences; /** * Class CategoryController. @@ -146,7 +145,7 @@ class CategoryController extends Controller public function index(Request $request) { $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $collection = $this->repository->getCategories(); $total = $collection->count(); $collection = $collection->slice(($page - 1) * $pageSize, $pageSize); @@ -174,12 +173,12 @@ class CategoryController extends Controller { // default values: $moment = $moment ?? ''; - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = null; $end = null; $periods = new Collection; $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; Log::debug('Start of noCategory()'); // prep for "all" view. if ('all' === $moment) { @@ -242,8 +241,8 @@ class CategoryController extends Controller $subTitle = $category->name; $subTitleIcon = 'fa-bar-chart'; $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; - $range = Preferences::get('viewRange', '1M')->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = null; $end = null; $periods = new Collection; @@ -362,7 +361,7 @@ class CategoryController extends Controller private function getNoCategoryPeriodOverview(Carbon $theDate): Collection { Log::debug(sprintf('Now in getNoCategoryPeriodOverview(%s)', $theDate->format('Y-m-d'))); - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $first = $this->journalRepos->firstNull(); $start = null === $first ? new Carbon : $first->date; $end = $theDate ?? new Carbon; @@ -447,7 +446,7 @@ class CategoryController extends Controller */ private function getPeriodOverview(Category $category, Carbon $date): Collection { - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $first = $this->journalRepos->firstNull(); $start = null === $first ? new Carbon : $first->date; $end = $date ?? new Carbon; diff --git a/app/Http/Controllers/Chart/AccountController.php b/app/Http/Controllers/Chart/AccountController.php index 3ebf46d7bc..fc1af1ff91 100644 --- a/app/Http/Controllers/Chart/AccountController.php +++ b/app/Http/Controllers/Chart/AccountController.php @@ -39,7 +39,6 @@ use FireflyIII\Support\CacheProperties; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; use Log; -use Preferences; /** checked * Class AccountController. @@ -231,7 +230,7 @@ class AccountController extends Controller $end = clone session('end', Carbon::now()->endOfMonth()); $defaultSet = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray(); Log::debug('Default set is ', $defaultSet); - $frontPage = Preferences::get('frontPageAccounts', $defaultSet); + $frontPage = app('preferences')->get('frontPageAccounts', $defaultSet); Log::debug('Frontpage preference set is ', $frontPage->data); diff --git a/app/Http/Controllers/Chart/CategoryController.php b/app/Http/Controllers/Chart/CategoryController.php index 3d016639c1..f7b020d66c 100644 --- a/app/Http/Controllers/Chart/CategoryController.php +++ b/app/Http/Controllers/Chart/CategoryController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\Category\CategoryRepositoryInterface; use FireflyIII\Support\CacheProperties; use Illuminate\Http\JsonResponse; use Illuminate\Support\Collection; -use Preferences; /** * Class CategoryController. @@ -77,7 +76,7 @@ class CategoryController extends Controller $start = new Carbon; // @codeCoverageIgnore } - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = app('navigation')->startOfPeriod($start, $range); $end = new Carbon; $accounts = $accountRepository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); @@ -283,7 +282,7 @@ class CategoryController extends Controller */ public function specificPeriod(Category $category, Carbon $date): JsonResponse { - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $start = app('navigation')->startOfPeriod($date, $range); $end = app('navigation')->endOfPeriod($date, $range); $data = $this->makePeriodChart($category, $start, $end); diff --git a/app/Http/Controllers/Controller.php b/app/Http/Controllers/Controller.php index 4cfd23cd0f..4107419f72 100644 --- a/app/Http/Controllers/Controller.php +++ b/app/Http/Controllers/Controller.php @@ -27,7 +27,6 @@ use FireflyIII\Models\AccountType; use FireflyIII\Models\Transaction; use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\TransactionType; -use FireflyIII\Support\Facades\Preferences; use Illuminate\Foundation\Auth\Access\AuthorizesRequests; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Foundation\Validation\ValidatesRequests; @@ -35,7 +34,6 @@ use Illuminate\Routing\Controller as BaseController; use Log; use Route; use URL; -use View; /** * Class Controller. @@ -59,17 +57,17 @@ class Controller extends BaseController public function __construct() { // for transaction lists: - View::share('hideBudgets', false); - View::share('hideCategories', false); - View::share('hideBills', false); - View::share('hideTags', false); + app('view')->share('hideBudgets', false); + app('view')->share('hideCategories', false); + app('view')->share('hideBills', false); + app('view')->share('hideTags', false); // is site a demo site? $isDemoSite = FireflyConfig::get('is_demo_site', config('firefly.configuration.is_demo_site'))->data; - View::share('IS_DEMO_SITE', $isDemoSite); - View::share('DEMO_USERNAME', env('DEMO_USERNAME', '')); - View::share('DEMO_PASSWORD', env('DEMO_PASSWORD', '')); - View::share('FF_VERSION', config('firefly.version')); + app('view')->share('IS_DEMO_SITE', $isDemoSite); + app('view')->share('DEMO_USERNAME', env('DEMO_USERNAME', '')); + app('view')->share('DEMO_PASSWORD', env('DEMO_PASSWORD', '')); + app('view')->share('FF_VERSION', config('firefly.version')); $this->middleware( function ($request, $next) { @@ -93,17 +91,17 @@ class Controller extends BaseController // either must be array and either must be > 0 if ((\is_array($intro) || \is_array($specialIntro)) && (\count($intro) > 0 || \count($specialIntro) > 0)) { - $shownDemo = Preferences::get($key, false)->data; + $shownDemo = app('preferences')->get($key, false)->data; Log::debug(sprintf('Check if user has already seen intro with key "%s". Result is %d', $key, $shownDemo)); } // share language - $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; + $language = app('preferences')->get('language', config('firefly.default_language', 'en_US'))->data; - View::share('language', $language); - View::share('shownDemo', $shownDemo); - View::share('current_route_name', $page); - View::share('original_route_name', Route::currentRouteName()); + app('view')->share('language', $language); + app('view')->share('shownDemo', $shownDemo); + app('view')->share('current_route_name', $page); + app('view')->share('original_route_name', Route::currentRouteName()); } return $next($request); diff --git a/app/Http/Controllers/CurrencyController.php b/app/Http/Controllers/CurrencyController.php index 7458016608..59051c9226 100644 --- a/app/Http/Controllers/CurrencyController.php +++ b/app/Http/Controllers/CurrencyController.php @@ -31,7 +31,6 @@ use FireflyIII\User; use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Log; -use Preferences; use View; /** @@ -100,7 +99,7 @@ class CurrencyController extends Controller */ public function defaultCurrency(Request $request, TransactionCurrency $currency) { - Preferences::set('currencyPreference', $currency->code); + app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); $request->session()->flash('success', trans('firefly.new_default_currency', ['name' => $currency->name])); @@ -215,7 +214,7 @@ class CurrencyController extends Controller /** @var User $user */ $user = auth()->user(); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $collection = $this->repository->get(); $total = $collection->count(); $collection = $collection->sortBy( @@ -227,7 +226,7 @@ class CurrencyController extends Controller $currencies = new LengthAwarePaginator($collection, $total, $pageSize, $page); $currencies->setPath(route('currencies.index')); - $defaultCurrency = $this->repository->getCurrencyByPreference(Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR'))); + $defaultCurrency = $this->repository->getCurrencyByPreference(app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR'))); $isOwner = true; if (!$this->userRepository->hasRole($user, 'owner')) { $request->session()->flash('info', trans('firefly.ask_site_owner', ['owner' => env('SITE_OWNER')])); diff --git a/app/Http/Controllers/ExportController.php b/app/Http/Controllers/ExportController.php index 34102365bb..aa7f320b10 100644 --- a/app/Http/Controllers/ExportController.php +++ b/app/Http/Controllers/ExportController.php @@ -32,7 +32,6 @@ use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\ExportJob\ExportJobRepositoryInterface; use Illuminate\Http\JsonResponse; use Illuminate\Http\Response as LaravelResponse; -use Preferences; /** * Class ExportController. @@ -118,7 +117,7 @@ class ExportController extends Controller // does the user have shared accounts? $formats = array_keys(config('firefly.export_formats')); - $defaultFormat = Preferences::get('export_format', config('firefly.default_export_format'))->data; + $defaultFormat = app('preferences')->get('export_format', config('firefly.default_export_format'))->data; $first = session('first')->format('Y-m-d'); $today = Carbon::create()->format('Y-m-d'); diff --git a/app/Http/Controllers/HelpController.php b/app/Http/Controllers/HelpController.php index b472f8ea9d..3ef04f6969 100644 --- a/app/Http/Controllers/HelpController.php +++ b/app/Http/Controllers/HelpController.php @@ -25,7 +25,6 @@ namespace FireflyIII\Http\Controllers; use FireflyIII\Helpers\Help\HelpInterface; use Illuminate\Http\JsonResponse; use Log; -use Preferences; /** * Class HelpController. @@ -58,7 +57,7 @@ class HelpController extends Controller */ public function show(string $route): JsonResponse { - $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; + $language = app('preferences')->get('language', config('firefly.default_language', 'en_US'))->data; $html = $this->getHelpText($route, $language); return response()->json(['html' => $html]); diff --git a/app/Http/Controllers/HomeController.php b/app/Http/Controllers/HomeController.php index 2c67ce8520..ef151d2c02 100644 --- a/app/Http/Controllers/HomeController.php +++ b/app/Http/Controllers/HomeController.php @@ -36,7 +36,6 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Log; -use Preferences; use View; /** @@ -111,7 +110,7 @@ class HomeController extends Controller } $subTitle = trans('firefly.welcomeBack'); $transactions = []; - $frontPage = Preferences::get( + $frontPage = app('preferences')->get( 'frontPageAccounts', $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET])->pluck('id')->toArray() ); diff --git a/app/Http/Controllers/JavascriptController.php b/app/Http/Controllers/JavascriptController.php index cc63fdab0c..28568aedd1 100644 --- a/app/Http/Controllers/JavascriptController.php +++ b/app/Http/Controllers/JavascriptController.php @@ -31,7 +31,6 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; use Illuminate\Http\Request; use Illuminate\Http\Response; use Log; -use Preferences; /** * Class JavascriptController. @@ -47,7 +46,7 @@ class JavascriptController extends Controller public function accounts(AccountRepositoryInterface $repository, CurrencyRepositoryInterface $currencyRepository): Response { $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); - $preference = Preferences::get('currencyPreference', config('firefly.default_currency', 'EUR')); + $preference = app('preferences')->get('currencyPreference', config('firefly.default_currency', 'EUR')); /** @noinspection NullPointerExceptionInspection */ $default = $currencyRepository->findByCodeNull($preference->data); @@ -114,7 +113,7 @@ class JavascriptController extends Controller $accounting = app('amount')->getJsConfig($localeconv); $localeconv = localeconv(); $localeconv['frac_digits'] = $currency->decimal_places; - $pref = Preferences::get('language', config('firefly.default_language', 'en_US')); + $pref = app('preferences')->get('language', config('firefly.default_language', 'en_US')); /** @noinspection NullPointerExceptionInspection */ $lang = $pref->data; $dateRange = $this->getDateRangeConfig(); @@ -140,7 +139,7 @@ class JavascriptController extends Controller */ private function getDateRangeConfig(): array { - $viewRange = Preferences::get('viewRange', '1M')->data; + $viewRange = app('preferences')->get('viewRange', '1M')->data; $start = session('start'); $end = session('end'); $first = session('first'); diff --git a/app/Http/Controllers/Json/IntroController.php b/app/Http/Controllers/Json/IntroController.php index 31ab70d523..70870db0d5 100644 --- a/app/Http/Controllers/Json/IntroController.php +++ b/app/Http/Controllers/Json/IntroController.php @@ -22,7 +22,6 @@ declare(strict_types=1); namespace FireflyIII\Http\Controllers\Json; -use FireflyIII\Support\Facades\Preferences; use Illuminate\Http\JsonResponse; use Log; @@ -104,7 +103,7 @@ class IntroController $key .= '_' . $specialPage; } Log::debug(sprintf('Going to mark the following route as NOT done: %s with special "%s" (%s)', $route, $specialPage, $key)); - Preferences::set($key, false); + app('preferences')->set($key, false); return response()->json(['message' => trans('firefly.intro_boxes_after_refresh')]); } @@ -123,7 +122,7 @@ class IntroController $key .= '_' . $specialPage; } Log::debug(sprintf('Going to mark the following route as done: %s with special "%s" (%s)', $route, $specialPage, $key)); - Preferences::set($key, true); + app('preferences')->set($key, true); return response()->json(['result' => sprintf('Reported demo watched for route "%s".', $route)]); } diff --git a/app/Http/Controllers/NewUserController.php b/app/Http/Controllers/NewUserController.php index 2ef441b1c2..a6c8ac24bc 100644 --- a/app/Http/Controllers/NewUserController.php +++ b/app/Http/Controllers/NewUserController.php @@ -27,7 +27,6 @@ use FireflyIII\Http\Requests\NewUserFormRequest; use FireflyIII\Models\TransactionCurrency; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface; -use Preferences; use View; /** @@ -89,7 +88,7 @@ class NewUserController extends Controller } // set language preference: - Preferences::set('language', $language); + app('preferences')->set('language', $language); // Store currency preference from input: $currency = $currencyRepository->findNull((int)$request->input('amount_currency_id_bank_balance')); @@ -108,7 +107,7 @@ class NewUserController extends Controller $this->createCashWalletAccount($currency, $language); // store currency preference: - Preferences::set('currencyPreference', $currency->code); + app('preferences')->set('currencyPreference', $currency->code); app('preferences')->mark(); // set default optional fields: @@ -123,7 +122,7 @@ class NewUserController extends Controller 'notes' => true, 'attachments' => true, ]; - Preferences::set('transaction_journal_optional_fields', $visibleFields); + app('preferences')->set('transaction_journal_optional_fields', $visibleFields); session()->flash('success', (string)trans('firefly.stored_new_accounts_new_user')); app('preferences')->mark(); diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index 75365e9108..8d03d667e1 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -36,7 +36,6 @@ use Illuminate\Http\Request; use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Support\Collection; use Log; -use Preferences; use Symfony\Component\HttpFoundation\ParameterBag; /** @@ -220,7 +219,7 @@ class PiggyBankController extends Controller $collection = $this->piggyRepos->getPiggyBanks(); $total = $collection->count(); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $accounts = []; /** @var Carbon $end */ $end = session('end', Carbon::now()->endOfMonth()); diff --git a/app/Http/Controllers/Popup/ReportController.php b/app/Http/Controllers/Popup/ReportController.php index 3473cf34c0..e93e37755d 100644 --- a/app/Http/Controllers/Popup/ReportController.php +++ b/app/Http/Controllers/Popup/ReportController.php @@ -35,7 +35,6 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Routing\Route; use InvalidArgumentException; -use View; /** * Class ReportController. @@ -89,8 +88,8 @@ class ReportController extends Controller $attributes = $request->get('attributes') ?? []; $attributes = $this->parseAttributes($attributes); - View::share('start', $attributes['startDate']); - View::share('end', $attributes['endDate']); + app('view')->share('start', $attributes['startDate']); + app('view')->share('end', $attributes['endDate']); switch ($attributes['location']) { default: diff --git a/app/Http/Controllers/PreferencesController.php b/app/Http/Controllers/PreferencesController.php index 7a2f461bfe..92bdfb547e 100644 --- a/app/Http/Controllers/PreferencesController.php +++ b/app/Http/Controllers/PreferencesController.php @@ -25,7 +25,6 @@ namespace FireflyIII\Http\Controllers; use FireflyIII\Models\AccountType; use FireflyIII\Repositories\Account\AccountRepositoryInterface; use Illuminate\Http\Request; -use Preferences; /** * Class PreferencesController. @@ -57,16 +56,16 @@ class PreferencesController extends Controller public function index(AccountRepositoryInterface $repository) { $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); - $viewRangePref = Preferences::get('viewRange', '1M'); + $viewRangePref = app('preferences')->get('viewRange', '1M'); /** @noinspection NullPointerExceptionInspection */ $viewRange = $viewRangePref->data; - $frontPageAccounts = Preferences::get('frontPageAccounts', []); - $language = Preferences::get('language', config('firefly.default_language', 'en_US'))->data; - $listPageSize = Preferences::get('listPageSize', 50)->data; - $customFiscalYear = Preferences::get('customFiscalYear', 0)->data; - $fiscalYearStartStr = Preferences::get('fiscalYearStart', '01-01')->data; + $frontPageAccounts = app('preferences')->get('frontPageAccounts', []); + $language = app('preferences')->get('language', config('firefly.default_language', 'en_US'))->data; + $listPageSize = app('preferences')->get('listPageSize', 50)->data; + $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; + $fiscalYearStartStr = app('preferences')->get('fiscalYearStart', '01-01')->data; $fiscalYearStart = date('Y') . '-' . $fiscalYearStartStr; - $tjOptionalFields = Preferences::get('transaction_journal_optional_fields', [])->data; + $tjOptionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; return view( 'preferences.index', @@ -96,11 +95,11 @@ class PreferencesController extends Controller foreach ($request->get('frontPageAccounts') as $id) { $frontPageAccounts[] = (int)$id; } - Preferences::set('frontPageAccounts', $frontPageAccounts); + app('preferences')->set('frontPageAccounts', $frontPageAccounts); } // view range: - Preferences::set('viewRange', $request->get('viewRange')); + app('preferences')->set('viewRange', $request->get('viewRange')); // forget session values: session()->forget('start'); session()->forget('end'); @@ -109,20 +108,20 @@ class PreferencesController extends Controller // custom fiscal year $customFiscalYear = 1 === (int)$request->get('customFiscalYear'); $fiscalYearStart = date('m-d', strtotime((string)$request->get('fiscalYearStart'))); - Preferences::set('customFiscalYear', $customFiscalYear); - Preferences::set('fiscalYearStart', $fiscalYearStart); + app('preferences')->set('customFiscalYear', $customFiscalYear); + app('preferences')->set('fiscalYearStart', $fiscalYearStart); // save page size: - Preferences::set('listPageSize', 50); + app('preferences')->set('listPageSize', 50); $listPageSize = (int)$request->get('listPageSize'); if ($listPageSize > 0 && $listPageSize < 1337) { - Preferences::set('listPageSize', $listPageSize); + app('preferences')->set('listPageSize', $listPageSize); } // language: $lang = $request->get('language'); if (array_key_exists($lang, config('firefly.languages'))) { - Preferences::set('language', $lang); + app('preferences')->set('language', $lang); } // optional fields for transactions: @@ -138,7 +137,7 @@ class PreferencesController extends Controller 'notes' => isset($setOptions['notes']), 'attachments' => isset($setOptions['attachments']), ]; - Preferences::set('transaction_journal_optional_fields', $optionalTj); + app('preferences')->set('transaction_journal_optional_fields', $optionalTj); session()->flash('success', (string)trans('firefly.saved_preferences')); app('preferences')->mark(); diff --git a/app/Http/Controllers/ProfileController.php b/app/Http/Controllers/ProfileController.php index b77631646e..a1e33f6855 100644 --- a/app/Http/Controllers/ProfileController.php +++ b/app/Http/Controllers/ProfileController.php @@ -44,7 +44,6 @@ use Laravel\Passport\ClientRepository; use Laravel\Passport\Passport; use Log; use phpseclib\Crypt\RSA; -use Preferences; /** * Class ProfileController. @@ -125,7 +124,7 @@ class ProfileController extends Controller { // find preference with this token value. /** @var Collection $set */ - $set = Preferences::findByName('email_change_confirm_token'); + $set = app('preferences')->findByName('email_change_confirm_token'); $user = null; Log::debug(sprintf('Found %d preferences', $set->count())); /** @var Preference $preference */ @@ -166,8 +165,8 @@ class ProfileController extends Controller */ public function deleteCode() { - Preferences::delete('twoFactorAuthEnabled'); - Preferences::delete('twoFactorAuthSecret'); + app('preferences')->delete('twoFactorAuthEnabled'); + app('preferences')->delete('twoFactorAuthSecret'); session()->flash('success', (string)trans('firefly.pref_two_factor_auth_disabled')); session()->flash('info', (string)trans('firefly.pref_two_factor_auth_remove_it')); @@ -186,7 +185,7 @@ class ProfileController extends Controller if ($repository->hasRole($user, 'demo')) { return redirect(route('profile.index')); } - $hasTwoFactorAuthSecret = (null !== Preferences::get('twoFactorAuthSecret')); + $hasTwoFactorAuthSecret = (null !== app('preferences')->get('twoFactorAuthSecret')); // if we don't have a valid secret yet, redirect to the code page to get one. if (!$hasTwoFactorAuthSecret) { @@ -196,7 +195,7 @@ class ProfileController extends Controller // If FF3 already has a secret, just set the two factor auth enabled to 1, // and let the user continue with the existing secret. - Preferences::set('twoFactorAuthEnabled', 1); + app('preferences')->set('twoFactorAuthEnabled', 1); return redirect(route('profile.index')); } @@ -220,15 +219,15 @@ class ProfileController extends Controller } $subTitle = auth()->user()->email; $userId = auth()->user()->id; - $enabled2FA = 1 === (int)Preferences::get('twoFactorAuthEnabled', 0)->data; + $enabled2FA = 1 === (int)app('preferences')->get('twoFactorAuthEnabled', 0)->data; /** @var User $user */ $user = auth()->user(); // get access token or create one. - $accessToken = Preferences::get('access_token', null); + $accessToken = app('preferences')->get('access_token', null); if (null === $accessToken) { $token = $user->generateAccessToken(); - $accessToken = Preferences::set('access_token', $token); + $accessToken = app('preferences')->set('access_token', $token); } return view('profile.index', compact('subTitle', 'userId', 'accessToken', 'enabled2FA')); @@ -312,8 +311,8 @@ class ProfileController extends Controller */ public function postCode(TokenFormRequest $request) { - Preferences::set('twoFactorAuthEnabled', 1); - Preferences::set('twoFactorAuthSecret', session()->get('two-factor-secret')); + app('preferences')->set('twoFactorAuthEnabled', 1); + app('preferences')->set('twoFactorAuthSecret', session()->get('two-factor-secret')); session()->flash('success', (string)trans('firefly.saved_preferences')); app('preferences')->mark(); @@ -353,7 +352,7 @@ class ProfileController extends Controller /** @var User $user */ $user = auth()->user(); $token = $user->generateAccessToken(); - Preferences::set('access_token', $token); + app('preferences')->set('access_token', $token); session()->flash('success', (string)trans('firefly.token_regenerated')); return redirect(route('profile.index')); @@ -371,7 +370,7 @@ class ProfileController extends Controller public function undoEmailChange(UserRepositoryInterface $repository, string $token, string $hash) { // find preference with this token value. - $set = Preferences::findByName('email_change_undo_token'); + $set = app('preferences')->findByName('email_change_undo_token'); $user = null; /** @var Preference $preference */ foreach ($set as $preference) { @@ -385,7 +384,7 @@ class ProfileController extends Controller // found user. // which email address to return to? - $set = Preferences::beginsWith($user, 'previous_email_'); + $set = app('preferences')->beginsWith($user, 'previous_email_'); /** @var string $match */ $match = null; foreach ($set as $entry) { diff --git a/app/Http/Controllers/ReportController.php b/app/Http/Controllers/ReportController.php index a912daf83b..169e17ff84 100644 --- a/app/Http/Controllers/ReportController.php +++ b/app/Http/Controllers/ReportController.php @@ -37,8 +37,6 @@ use FireflyIII\Repositories\Tag\TagRepositoryInterface; use Illuminate\Http\RedirectResponse; use Illuminate\Support\Collection; use Log; -use Preferences; -use View; /** * Class ReportController. @@ -62,7 +60,7 @@ class ReportController extends Controller function ($request, $next) { app('view')->share('title', trans('firefly.reports')); app('view')->share('mainTitleIcon', 'fa-line-chart'); - View::share('subTitleIcon', 'fa-calendar'); + app('view')->share('subTitleIcon', 'fa-calendar'); $this->helper = app(ReportHelperInterface::class); $this->repository = app(BudgetRepositoryInterface::class); @@ -91,7 +89,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_account', ['start' => $start->formatLocalized($this->monthFormat), 'end' => $end->formatLocalized($this->monthFormat)] @@ -124,7 +122,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_audit', @@ -161,7 +159,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_budget', @@ -199,7 +197,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_category', @@ -237,7 +235,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_default', @@ -264,7 +262,7 @@ class ReportController extends Controller /** @var Carbon $start */ $start = clone session('first'); $months = $this->helper->listOfMonths($start); - $customFiscalYear = Preferences::get('customFiscalYear', 0)->data; + $customFiscalYear = app('preferences')->get('customFiscalYear', 0)->data; $accounts = $repository->getAccountsByType([AccountType::DEFAULT, AccountType::ASSET]); $accountList = implode(',', $accounts->pluck('id')->toArray()); $this->repository->cleanupBudgets(); @@ -395,7 +393,7 @@ class ReportController extends Controller } $this->repository->cleanupBudgets(); - View::share( + app('view')->share( 'subTitle', trans( 'firefly.report_tag', diff --git a/app/Http/Controllers/TagController.php b/app/Http/Controllers/TagController.php index 9027432d6e..529a26d4c1 100644 --- a/app/Http/Controllers/TagController.php +++ b/app/Http/Controllers/TagController.php @@ -33,7 +33,6 @@ use FireflyIII\Support\CacheProperties; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use View; /** * Class TagController. @@ -49,7 +48,7 @@ class TagController extends Controller public function __construct() { parent::__construct(); - View::share('hideTags', true); + app('view')->share('hideTags', true); $this->redirectUri = route('tags.index'); $this->middleware( diff --git a/app/Http/Controllers/Transaction/SingleController.php b/app/Http/Controllers/Transaction/SingleController.php index 261119e15b..6ebe79d23d 100644 --- a/app/Http/Controllers/Transaction/SingleController.php +++ b/app/Http/Controllers/Transaction/SingleController.php @@ -38,7 +38,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Http\RedirectResponse; use Illuminate\Http\Request; use Log; -use Preferences; use View; /** @@ -63,7 +62,7 @@ class SingleController extends Controller $maxFileSize = app('steam')->phpBytes(ini_get('upload_max_filesize')); $maxPostSize = app('steam')->phpBytes(ini_get('post_max_size')); $uploadSize = min($maxFileSize, $maxPostSize); - View::share('uploadSize', $uploadSize); + app('view')->share('uploadSize', $uploadSize); // some useful repositories: $this->middleware( @@ -148,7 +147,7 @@ class SingleController extends Controller $preFilled = session()->has('preFilled') ? session('preFilled') : []; $subTitle = trans('form.add_new_' . $what); $subTitleIcon = 'fa-plus'; - $optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data; + $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; $source = (int)$request->get('source'); // grab old currency ID from old data: @@ -259,7 +258,7 @@ class SingleController extends Controller // journal related code $sourceAccounts = $repository->getJournalSourceAccounts($journal); $destinationAccounts = $repository->getJournalDestinationAccounts($journal); - $optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data; + $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; $pTransaction = $repository->getFirstPosTransaction($journal); $foreignCurrency = $pTransaction->foreignCurrency ?? $pTransaction->transactionCurrency; $preFilled = [ diff --git a/app/Http/Controllers/Transaction/SplitController.php b/app/Http/Controllers/Transaction/SplitController.php index 43d8056620..42772721e4 100644 --- a/app/Http/Controllers/Transaction/SplitController.php +++ b/app/Http/Controllers/Transaction/SplitController.php @@ -38,7 +38,6 @@ use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use FireflyIII\Transformers\TransactionTransformer; use Illuminate\Http\Request; use Illuminate\Support\Collection; -use Preferences; use Symfony\Component\HttpFoundation\ParameterBag; use View; @@ -102,7 +101,7 @@ class SplitController extends Controller $budgets = ExpandedForm::makeSelectListWithEmpty($this->budgets->getActiveBudgets()); // other fields - $optionalFields = Preferences::get('transaction_journal_optional_fields', [])->data; + $optionalFields = app('preferences')->get('transaction_journal_optional_fields', [])->data; $preFilled = $this->arrayFromJournal($request, $journal); // put previous url in session if not redirect from store (not "return_to_edit"). diff --git a/app/Http/Controllers/TransactionController.php b/app/Http/Controllers/TransactionController.php index 0a59b0c28c..7c18e342a3 100644 --- a/app/Http/Controllers/TransactionController.php +++ b/app/Http/Controllers/TransactionController.php @@ -40,7 +40,6 @@ use Illuminate\Http\JsonResponse; use Illuminate\Http\Request; use Illuminate\Support\Collection; use Log; -use Preferences; use Symfony\Component\HttpFoundation\ParameterBag; use View; @@ -85,7 +84,7 @@ class TransactionController extends Controller $subTitleIcon = config('firefly.transactionIconsByWhat.' . $what); $types = config('firefly.transactionTypesByWhat.' . $what); $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; if (null === $start) { $start = session('start'); $end = session('end'); @@ -130,7 +129,7 @@ class TransactionController extends Controller $subTitleIcon = config('firefly.transactionIconsByWhat.' . $what); $types = config('firefly.transactionTypesByWhat.' . $what); $page = (int)$request->get('page'); - $pageSize = (int)Preferences::get('listPageSize', 50)->data; + $pageSize = (int)app('preferences')->get('listPageSize', 50)->data; $path = route('transactions.index.all', [$what]); $first = $this->repository->firstNull(); $start = null === $first ? new Carbon : $first->date; @@ -245,7 +244,7 @@ class TransactionController extends Controller */ private function getPeriodOverview(string $what, Carbon $date): Collection { - $range = Preferences::get('viewRange', '1M')->data; + $range = app('preferences')->get('viewRange', '1M')->data; $first = $this->repository->firstNull(); $start = new Carbon; $start->subYear(); diff --git a/app/Http/Middleware/Range.php b/app/Http/Middleware/Range.php index b51d3ec59b..868d69a767 100644 --- a/app/Http/Middleware/Range.php +++ b/app/Http/Middleware/Range.php @@ -27,9 +27,7 @@ use Carbon\Carbon; use Closure; use FireflyIII\Repositories\Journal\JournalRepositoryInterface; use Illuminate\Http\Request; -use Preferences; use Session; -use View; /** * Class SessionFilter. @@ -68,8 +66,8 @@ class Range */ private function configureList(): void { - $pref = Preferences::get('list-length', config('firefly.list_length', 10))->data; - View::share('listLength', $pref); + $pref = app('preferences')->get('list-length', config('firefly.list_length', 10))->data; + app('view')->share('listLength', $pref); } /** @@ -77,7 +75,7 @@ class Range */ private function configureView(): void { - $pref = Preferences::get('language', config('firefly.default_language', 'en_US')); + $pref = app('preferences')->get('language', config('firefly.default_language', 'en_US')); /** @noinspection NullPointerExceptionInspection */ $lang = $pref->data; App::setLocale($lang); @@ -90,7 +88,7 @@ class Range // send error to view if could not set money format if (false === $moneyResult) { - View::share('invalidMonetaryLocale', true); // @codeCoverageIgnore + app('view')->share('invalidMonetaryLocale', true); // @codeCoverageIgnore } // save some formats: @@ -98,9 +96,9 @@ class Range $dateTimeFormat = (string)trans('config.date_time'); $defaultCurrency = app('amount')->getDefaultCurrency(); - View::share('monthAndDayFormat', $monthAndDayFormat); - View::share('dateTimeFormat', $dateTimeFormat); - View::share('defaultCurrency', $defaultCurrency); + app('view')->share('monthAndDayFormat', $monthAndDayFormat); + app('view')->share('dateTimeFormat', $dateTimeFormat); + app('view')->share('defaultCurrency', $defaultCurrency); } /** @@ -122,10 +120,10 @@ class Range { // ignore preference. set the range to be the current month: if (!Session::has('start') && !Session::has('end')) { - $viewRange = Preferences::get('viewRange', '1M')->data; + $viewRange = app('preferences')->get('viewRange', '1M')->data; if (null === $viewRange) { $viewRange = '1M'; - Preferences::set('viewRange', '1M'); + app('preferences')->set('viewRange', '1M'); } $start = new Carbon; $start = app('navigation')->updateStartDate($viewRange, $start); diff --git a/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php b/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php index f2b4f27e12..c585018bf3 100644 --- a/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php +++ b/app/Http/Middleware/RedirectIfTwoFactorAuthenticated.php @@ -24,7 +24,6 @@ namespace FireflyIII\Http\Middleware; use Closure; use Illuminate\Support\Facades\Auth; -use Preferences; /** * Class RedirectIfTwoFactorAuthenticated. @@ -43,9 +42,9 @@ class RedirectIfTwoFactorAuthenticated public function handle($request, Closure $next, $guard = null) { if (Auth::guard($guard)->check()) { - $is2faEnabled = Preferences::get('twoFactorAuthEnabled', false)->data; + $is2faEnabled = app('preferences')->get('twoFactorAuthEnabled', false)->data; - $has2faSecret = null !== Preferences::get('twoFactorAuthSecret'); + $has2faSecret = null !== app('preferences')->get('twoFactorAuthSecret'); // grab 2auth information from cookie. $is2faAuthed = 'true' === $request->cookie('twoFactorAuthenticated'); diff --git a/app/Http/Middleware/Sandstorm.php b/app/Http/Middleware/Sandstorm.php index 34a60b8c16..208ee3f08b 100644 --- a/app/Http/Middleware/Sandstorm.php +++ b/app/Http/Middleware/Sandstorm.php @@ -30,7 +30,6 @@ use FireflyIII\Repositories\User\UserRepositoryInterface; use FireflyIII\User; use Illuminate\Http\Request; use Log; -use View; /** * Class Sandstorm. @@ -53,7 +52,7 @@ class Sandstorm { // is in Sandstorm environment? $sandstorm = 1 === (int)getenv('SANDSTORM'); - View::share('SANDSTORM', $sandstorm); + app('view')->share('SANDSTORM', $sandstorm); if (!$sandstorm) { return $next($request); } @@ -76,7 +75,7 @@ class Sandstorm $user = $repository->first(); /** @noinspection NullPointerExceptionInspection */ Auth::guard($guard)->login($user); - View::share('SANDSTORM_ANON', false); + app('view')->share('SANDSTORM_ANON', false); return $next($request); } @@ -86,7 +85,7 @@ class Sandstorm $user = User::first(); /** @noinspection NullPointerExceptionInspection */ Auth::guard($guard)->login($user); - View::share('SANDSTORM_ANON', true); + app('view')->share('SANDSTORM_ANON', true); return $next($request); } @@ -108,7 +107,7 @@ class Sandstorm $repository->attachRole($user, 'owner'); // share value. - View::share('SANDSTORM_ANON', false); + app('view')->share('SANDSTORM_ANON', false); return $next($request); } @@ -124,11 +123,11 @@ class Sandstorm // if in Sandstorm, user logged in, still must check if user is anon. $userId = (string)$request->header('X-Sandstorm-User-Id'); if ('' === $userId) { - View::share('SANDSTORM_ANON', true); + app('view')->share('SANDSTORM_ANON', true); return $next($request); } - View::share('SANDSTORM_ANON', false); + app('view')->share('SANDSTORM_ANON', false); return $next($request); } diff --git a/app/Repositories/Budget/BudgetRepository.php b/app/Repositories/Budget/BudgetRepository.php index df207daba6..01c869ea55 100644 --- a/app/Repositories/Budget/BudgetRepository.php +++ b/app/Repositories/Budget/BudgetRepository.php @@ -60,31 +60,29 @@ class BudgetRepository implements BudgetRepositoryInterface */ public function budgetedPerDay(Budget $budget): string { + Log::debug(sprintf('Now with budget #%d "%s"', $budget->id, $budget->name)); $total = '0'; $count = 0; foreach ($budget->budgetlimits as $limit) { - $diff = (string)$limit->start_date->diffInDays($limit->end_date); - if (bccomp('0', $diff) === 0) { - $diff = '1'; - } + $diff = $limit->start_date->diffInDays($limit->end_date); + $diff = 0 === $diff ? 1 : $diff; $amount = (string)$limit->amount; - $perDay = bcdiv($amount, $diff); + $perDay = bcdiv($amount, (string)$diff); $total = bcadd($total, $perDay); $count++; + Log::debug(sprintf('Found %d budget limits. Per day is %s, total is %s', $count, $perDay, $total)); } $avg = $total; if ($count > 0) { $avg = bcdiv($total, (string)$count); } + Log::debug(sprintf('%s / %d = %s = average.', $total, $count, $avg)); return $avg; } /** * @return bool - * - - */ public function cleanupBudgets(): bool { @@ -852,10 +850,9 @@ class BudgetRepository implements BudgetRepositoryInterface * @param Carbon $end * @param string $amount * - * @return BudgetLimit - * @throws \Exception + * @return BudgetLimit|null */ - public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): BudgetLimit + public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): ?BudgetLimit { $this->cleanupBudgets(); // count the limits: @@ -885,9 +882,14 @@ class BudgetRepository implements BudgetRepositoryInterface // 1 if the left_operand is larger than the right_operand, -1 otherwise. if (null !== $limit && bccomp($amount, '0') <= 0) { Log::debug(sprintf('%s is zero, delete budget limit #%d', $amount, $limit->id)); - $limit->delete(); + try { + $limit->delete(); + } catch (Exception $e) { + Log::debug(sprintf('Could not delete limit: %s', $e->getMessage())); + } - return new BudgetLimit; + + return null; } // update if exists: if (null !== $limit) { diff --git a/app/Repositories/Budget/BudgetRepositoryInterface.php b/app/Repositories/Budget/BudgetRepositoryInterface.php index 68c94efcf3..b09b130b04 100644 --- a/app/Repositories/Budget/BudgetRepositoryInterface.php +++ b/app/Repositories/Budget/BudgetRepositoryInterface.php @@ -292,7 +292,7 @@ interface BudgetRepositoryInterface * @param Carbon $end * @param string $amount * - * @return BudgetLimit + * @return BudgetLimit|null */ - public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): BudgetLimit; + public function updateLimitAmount(Budget $budget, Carbon $start, Carbon $end, string $amount): ?BudgetLimit; } diff --git a/app/Support/Http/Controllers/DateCalculation.php b/app/Support/Http/Controllers/DateCalculation.php new file mode 100644 index 0000000000..353c695ef2 --- /dev/null +++ b/app/Support/Http/Controllers/DateCalculation.php @@ -0,0 +1,93 @@ +. + */ + +declare(strict_types=1); + +namespace FireflyIII\Support\Http\Controllers; + +use Carbon\Carbon; +use Log; + +/** + * Trait DateCalculation + * + * @package FireflyIII\Support\Http\Controllers + */ +trait DateCalculation +{ + /** + * Returns the number of days between the two given dates. + * - If today is within the two dates, give the number of days between today and the end date. + * - If they are the same, return 1. + * + * @param Carbon $start + * @param Carbon $end + * + * @return int + */ + protected function getDayDifference(Carbon $start, Carbon $end): int + { + $dayDifference = 0; + + // if today is between start and end, use the diff in days between end and today (days left) + // otherwise, use diff between start and end. + $today = new Carbon; + Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'), $today->format('Y-m-d'))); + if ($today->gte($start) && $today->lte($end)) { + $dayDifference = $end->diffInDays($today); + } + if ($today->lte($start) || $today->gte($end)) { + $dayDifference = $start->diffInDays($end); + } + $dayDifference = 0 === $dayDifference ? 1 : $dayDifference; + + return $dayDifference; + } + + /** + * Returns the number of days that have passed in this period. If it is zero (start of period) + * then return 1. + * + * @param Carbon $start + * @param Carbon $end + * + * @return int + */ + protected function getDaysPassedInPeriod(Carbon $start, Carbon $end): int + { + // if today is between start and end, use the diff in days between end and today (days left) + // otherwise, use diff between start and end. + $today = new Carbon; + $daysPassed = 0; + Log::debug(sprintf('Start is %s, end is %s, today is %s', $start->format('Y-m-d'), $end->format('Y-m-d'), $today->format('Y-m-d'))); + if ($today->gte($start) && $today->lte($end)) { + $daysPassed = $start->diffInDays($today); + } + if ($today->lte($start) || $today->gte($end)) { + $daysPassed = $start->diffInDays($end); + } + $daysPassed = 0 === $daysPassed ? 1 : $daysPassed; + + return $daysPassed; + + } + +} \ No newline at end of file diff --git a/public/js/ff/budgets/index.js b/public/js/ff/budgets/index.js index 8651b947ae..ea31da14e3 100644 --- a/public/js/ff/budgets/index.js +++ b/public/js/ff/budgets/index.js @@ -131,8 +131,8 @@ function updateBudgetedAmounts(e) { // fill in "left" value: - if (data.left_per_day !== 'none') { - leftCell.html(data.left + '(' + data.left_per_day + ')'); + if (data.left_per_day !== null) { + leftCell.html(data.left + ' (' + data.left_per_day + ')'); } else { leftCell.html(data.left); } diff --git a/resources/views/budgets/index.twig b/resources/views/budgets/index.twig index 476199250a..89f02a1877 100644 --- a/resources/views/budgets/index.twig +++ b/resources/views/budgets/index.twig @@ -188,7 +188,7 @@