From d116609389d81914b36cd200d5f86acb7bf8f064 Mon Sep 17 00:00:00 2001 From: James Cole Date: Sun, 5 Jan 2020 08:04:55 +0100 Subject: [PATCH] Fix #2956 --- .../Account/ReconcileController.php | 22 ++++++++++++++++++- .../Controllers/Json/ReconcileController.php | 8 +++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/app/Http/Controllers/Account/ReconcileController.php b/app/Http/Controllers/Account/ReconcileController.php index 0c862a9419..fd112c3691 100644 --- a/app/Http/Controllers/Account/ReconcileController.php +++ b/app/Http/Controllers/Account/ReconcileController.php @@ -90,6 +90,7 @@ class ReconcileController extends Controller return $this->redirectAccountToAccount($account); // @codeCoverageIgnore } + if (AccountType::ASSET !== $account->accountType->type) { // @codeCoverageIgnoreStart session()->flash('error', (string)trans('firefly.must_be_asset_account')); @@ -117,6 +118,9 @@ class ReconcileController extends Controller $end = app('navigation')->endOfPeriod($start, $range); } // @codeCoverageIgnoreEnd + if ($end->lt($start)) { + [$start, $end] = [$end, $start]; + } $startDate = clone $start; $startDate->subDay(); @@ -163,6 +167,11 @@ class ReconcileController extends Controller } Log::debug('Reconciled all transactions.'); + // switch dates if necessary + if ($end->lt($start)) { + [$start, $end] = [$end, $start]; + } + // create reconciliation transaction (if necessary): $result = ''; if ('create' === $data['reconcile']) { @@ -182,9 +191,16 @@ class ReconcileController extends Controller /** * Creates a reconciliation group. + * + * @param Account $account + * @param Carbon $start + * @param Carbon $end + * @param string $difference + * * @return string + * @throws \FireflyIII\Exceptions\DuplicateTransactionException */ - private function createReconciliation(Account $account, Carbon $start, Carbon $end, string $difference): string + private function createReconciliation(Account $account, Carbon $start, Carbon $end, string $difference) { if (!$this->isEditableAccount($account)) { return $this->redirectAccountToAccount($account); // @codeCoverageIgnore @@ -199,6 +215,10 @@ class ReconcileController extends Controller $destination = $reconciliation; } + if ($end->lt($start)) { + [$start, $end] = [$end, $start]; + } + // title: $description = trans('firefly.reconciliation_transaction_title', ['from' => $start->formatLocalized($this->monthAndDayFormat), 'to' => $end->formatLocalized($this->monthAndDayFormat)]); diff --git a/app/Http/Controllers/Json/ReconcileController.php b/app/Http/Controllers/Json/ReconcileController.php index b8f9491843..38f1a52f62 100644 --- a/app/Http/Controllers/Json/ReconcileController.php +++ b/app/Http/Controllers/Json/ReconcileController.php @@ -93,6 +93,11 @@ class ReconcileController extends Controller $accountCurrency = $this->accountRepos->getAccountCurrency($account) ?? app('amount')->getDefaultCurrency(); $amount = '0'; $clearedAmount = '0'; + + if ($end->lt($start)) { + [$start, $end] = [$end, $start]; + } + $route = route('accounts.reconcile.submit', [$account->id, $start->format('Ymd'), $end->format('Ymd')]); $selectedIds = $request->get('journals') ?? []; $clearedJournals = []; @@ -171,6 +176,9 @@ class ReconcileController extends Controller */ public function transactions(Account $account, Carbon $start, Carbon $end) { + if ($end->lt($start)) { + [$end, $start] = [$start, $end]; + } $startDate = clone $start; $startDate->subDay();