diff --git a/app/Http/Controllers/PiggyBank/EditController.php b/app/Http/Controllers/PiggyBank/EditController.php index b7b29683ae..9e001e66fd 100644 --- a/app/Http/Controllers/PiggyBank/EditController.php +++ b/app/Http/Controllers/PiggyBank/EditController.php @@ -63,6 +63,12 @@ class EditController extends Controller ); } + public function resetHistory(PiggyBank $piggyBank): RedirectResponse { + $this->piggyRepos->resetHistory($piggyBank); + session()->flash('success', (string) trans('firefly.piggy_history_reset')); + return redirect(route('piggy-banks.show', [$piggyBank->id])); + } + /** * Edit a piggy bank. * diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index dbead1a4af..ee30bac3f5 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -23,6 +23,7 @@ declare(strict_types=1); namespace FireflyIII\Repositories\PiggyBank; +use FireflyIII\Events\Model\PiggyBank\ChangedAmount; use FireflyIII\User; use Carbon\Carbon; use FireflyIII\Exceptions\FireflyException; @@ -438,4 +439,14 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface, UserGroupInte return $search->take($limit)->get(['piggy_banks.*']); } + + public function resetHistory(PiggyBank $piggyBank): void + { + $piggyBank->piggyBankEvents()->delete(); + foreach($piggyBank->accounts as $account) { + if(0 !== bccomp('0',$account->pivot->current_amount)) { + event(new ChangedAmount($piggyBank, $account->pivot->current_amount, null, null)); + } + } + } } diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index a6eff5b1b4..a1c9d05a12 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -33,6 +33,7 @@ use FireflyIII\Models\TransactionJournal; use FireflyIII\Models\UserGroup; use FireflyIII\User; use Illuminate\Contracts\Auth\Authenticatable; +use Illuminate\Routing\Redirector; use Illuminate\Support\Collection; /** @@ -47,6 +48,8 @@ use Illuminate\Support\Collection; */ interface PiggyBankRepositoryInterface { + + public function resetHistory(PiggyBank $piggyBank): void; public function addAmount(PiggyBank $piggyBank, Account $account, string $amount, ?TransactionJournal $journal = null): bool; public function addAmountToPiggyBank(PiggyBank $piggyBank, string $amount, TransactionJournal $journal): void; diff --git a/public/v1/js/ff/piggy-banks/show.js b/public/v1/js/ff/piggy-banks/show.js index f6d41064ce..a6756992fb 100644 --- a/public/v1/js/ff/piggy-banks/show.js +++ b/public/v1/js/ff/piggy-banks/show.js @@ -24,4 +24,12 @@ $(function () { if (typeof(lineChart) === 'function' && typeof(piggyBankID) !== 'undefined') { lineChart('chart/piggy-bank/' + piggyBankID, 'piggy-bank-history'); } -}); \ No newline at end of file + + // on submit of logout button: + $('.reset-link').click(function(e) { + console.log('here we are'); + e.preventDefault(); + document.getElementById('reset-form').submit(); + return false; + }); +}); diff --git a/resources/lang/en_US/firefly.php b/resources/lang/en_US/firefly.php index d9cf68b16b..848a479212 100644 --- a/resources/lang/en_US/firefly.php +++ b/resources/lang/en_US/firefly.php @@ -2486,6 +2486,10 @@ return [ 'left_for_piggy_banks' => 'Left for piggy banks', 'sum_of_piggy_banks' => 'Sum of piggy banks', 'saved_so_far' => 'Saved so far', + 'saved_so_far_total' => 'Saved so far in total', + 'reset_history' => 'reset history', + 'reset_history_confirm' => 'Are you sure you want to reset the history of this piggy bank? This will make the chart match the piggy bank\'s amount again.', + 'piggy_history_reset' => 'The piggy bank history has been reset', 'left_to_save' => 'Left to save', 'suggested_amount' => 'Suggested monthly amount to save', 'add_money_to_piggy_title' => 'Add money to piggy bank ":name"', diff --git a/resources/views/piggy-banks/show.twig b/resources/views/piggy-banks/show.twig index 9bb716af79..6a5e58f3da 100644 --- a/resources/views/piggy-banks/show.twig +++ b/resources/views/piggy-banks/show.twig @@ -54,8 +54,20 @@ {% endif %} + {% for account in piggy.accounts %} + + + {{ 'saved_so_far'|_ }} + ({{ account.name }}) + + + {{ formatAmountBySymbol(account.current_amount, piggy.currency_symbol, piggy.currency_decimal_places) }} + + + + {% endfor %} - {{ 'saved_so_far'|_ }} + {{ 'saved_so_far_total'|_ }} {{ formatAmountBySymbol(piggy.current_amount, piggy.currency_symbol, piggy.currency_decimal_places) }} @@ -102,7 +114,7 @@
-

{{ 'event_history'|_ }}

+

{{ 'event_history'|_ }} ({{ 'reset_history'|_ }})

{% include 'list/piggy-bank-events' %} @@ -140,6 +152,9 @@
{% endif %}
+ {% endblock %} {% block scripts %} diff --git a/routes/web.php b/routes/web.php index 154b658ba0..4a7b4362fa 100644 --- a/routes/web.php +++ b/routes/web.php @@ -803,6 +803,7 @@ Route::group( Route::post('store', ['uses' => 'PiggyBank\CreateController@store', 'as' => 'store']); Route::post('update/{piggyBank}', ['uses' => 'PiggyBank\EditController@update', 'as' => 'update']); Route::post('destroy/{piggyBank}', ['uses' => 'PiggyBank\DeleteController@destroy', 'as' => 'destroy']); + Route::post('reset-history/{piggyBank}', ['uses' => 'PiggyBank\EditController@resetHistory', 'as' => 'reset']); Route::post('add/{piggyBank}', ['uses' => 'PiggyBank\AmountController@postAdd', 'as' => 'add']); Route::post('remove/{piggyBank}', ['uses' => 'PiggyBank\AmountController@postRemove', 'as' => 'remove']);