diff --git a/app/Http/Controllers/PiggyBankController.php b/app/Http/Controllers/PiggyBankController.php index 010f36e2f9..797d021f91 100644 --- a/app/Http/Controllers/PiggyBankController.php +++ b/app/Http/Controllers/PiggyBankController.php @@ -136,14 +136,13 @@ class PiggyBankController extends Controller return view('piggy-banks.edit', compact('subTitle', 'subTitleIcon', 'piggyBank', 'accounts', 'periods', 'preFilled')); } - /** * @return $this */ public function index(AccountRepositoryInterface $repository) { /** @var Collection $piggyBanks */ - $piggyBanks = Auth::user()->piggyBanks()->where('repeats', 0)->get(); + $piggyBanks = Auth::user()->piggyBanks()->where('repeats', 0)->orderBy('order', 'ASC')->get(); $accounts = []; /** @var PiggyBank $piggyBank */ @@ -175,6 +174,23 @@ class PiggyBankController extends Controller return view('piggy-banks.index', compact('piggyBanks', 'accounts')); } + /** + * Allow user to order piggy banks. + */ + public function order(PiggyBankRepositoryInterface $repository) + { + $data = Input::get('order'); + + // set all users piggy banks to zero: + $repository->reset(); + + if (is_array($data)) { + foreach ($data as $order => $id) { + echo 'set '.$id.' to position '.($order+1)."\n"; + $repository->setOrder(intval($id), (intval($order) + 1)); + } + } + } /** * POST add money to piggy bank diff --git a/app/Http/routes.php b/app/Http/routes.php index 928e3a54ec..281afe04f4 100644 --- a/app/Http/routes.php +++ b/app/Http/routes.php @@ -279,6 +279,7 @@ Route::group( Route::post('/piggy-banks/destroy/{piggyBank}', ['uses' => 'PiggyBankController@destroy', 'as' => 'piggy-banks.destroy']); Route::post('/piggy-banks/add/{piggyBank}', ['uses' => 'PiggyBankController@postAdd', 'as' => 'piggy-banks.add']); # add money Route::post('/piggy-banks/remove/{piggyBank}', ['uses' => 'PiggyBankController@postRemove', 'as' => 'piggy-banks.remove']); # remove money. + Route::post('/piggy-banks/sort', ['uses' => 'PiggyBankController@order', 'as' => 'piggy-banks.order']); /** * Preferences Controller diff --git a/app/Repositories/PiggyBank/PiggyBankRepository.php b/app/Repositories/PiggyBank/PiggyBankRepository.php index 54a8608335..663fd29059 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepository.php +++ b/app/Repositories/PiggyBank/PiggyBankRepository.php @@ -2,9 +2,8 @@ namespace FireflyIII\Repositories\PiggyBank; -use Amount; use Auth; -use Carbon\Carbon; +use DB; use FireflyIII\Models\PiggyBank; use FireflyIII\Models\PiggyBankRepetition; use FireflyIII\Models\Reminder; @@ -88,6 +87,41 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $part; } + /** + * Set all piggy banks to order 0. + * + * @return void + */ + public function reset() + { + DB::table('piggy_banks') + ->leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.id') + ->where('accounts.user_id', Auth::user()->id) + ->update(['order' => 0, 'piggy_banks.updated_at' => DB::Raw('NOW()')]); + //Auth::user()->piggyBanks()->update(['order' => 0]); + } + + /** + * + * set id of piggy bank. + * + * @param int $id + * @param int $order + * + * @return void + */ + public function setOrder($id, $order) + { + $piggyBank = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.id')->where('accounts.user_id', Auth::user()->id) + ->where('piggy_banks.id',$id)->first(['piggy_banks.*']); + if ($piggyBank) { + $piggyBank->order = $order; + $piggyBank->save(); + } else { + echo "Found no piggy for id #".$id."\n"; + } + } + /** * @param array $data * @@ -132,5 +166,4 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface return $piggyBank; } - } \ No newline at end of file diff --git a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php index c65d002f1e..a763e5bfba 100644 --- a/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php +++ b/app/Repositories/PiggyBank/PiggyBankRepositoryInterface.php @@ -37,6 +37,23 @@ interface PiggyBankRepositoryInterface */ public function createPiggyBankPart(array $data); + /** + * Set all piggy banks to order 0. + * @return void + */ + public function reset(); + + /** + * + * set id of piggy bank. + * + * @param int $id + * @param int $order + * + * @return void + */ + public function setOrder($id, $order); + /** diff --git a/public/css/firefly.css b/public/css/firefly.css index 15f7ef3e7a..195d5a4043 100644 --- a/public/css/firefly.css +++ b/public/css/firefly.css @@ -1,2 +1,3 @@ #daterange {cursor:pointer;} -.google-chart-error {height:30px;background:url('/images/error.png') no-repeat center center;} \ No newline at end of file +.google-chart-error {height:30px;background:url('/images/error.png') no-repeat center center;} +.handle {cursor:move;} \ No newline at end of file diff --git a/public/js/piggy-banks.js b/public/js/piggy-banks.js index c6cdac3c94..7cef178001 100644 --- a/public/js/piggy-banks.js +++ b/public/js/piggy-banks.js @@ -5,18 +5,41 @@ $(function () { if (typeof(googleLineChart) === 'function' && typeof(piggyBankID) !== 'undefined') { googleLineChart('chart/piggy-history/' + piggyBankID, 'piggy-bank-history'); } + $('#sortable').sortable( + { + stop: stopSorting, + handle: '.handle' + } + ); }); function addMoney(e) { var pigID = parseInt($(e.target).data('id')); - $('#moneyManagementModal').empty().load('piggy-banks/add/' + pigID, function() {$('#moneyManagementModal').modal('show');}); + $('#moneyManagementModal').empty().load('piggy-banks/add/' + pigID, function () { + $('#moneyManagementModal').modal('show'); + }); return false; } function removeMoney(e) { var pigID = parseInt($(e.target).data('id')); - $('#moneyManagementModal').empty().load('piggy-banks/remove/' + pigID, function() {$('#moneyManagementModal').modal('show');}); + $('#moneyManagementModal').empty().load('piggy-banks/remove/' + pigID, function () { + $('#moneyManagementModal').modal('show'); + }); return false; +} +function stopSorting() { + $('.loadSpin').addClass('fa fa-refresh fa-spin'); + var order = []; + $.each($('#sortable>div'), function(i,v) { + var holder = $(v); + var id = holder.data('id'); + order.push(id); + }); + $.post('/piggy-banks/sort',{_token: token, order: order}).success(function(data) { + "use strict"; + $('.loadSpin').removeClass('fa fa-refresh fa-spin'); + }); } \ No newline at end of file diff --git a/resources/views/piggy-banks/index.blade.php b/resources/views/piggy-banks/index.blade.php index 2c9a6e09a4..d2f66d8361 100644 --- a/resources/views/piggy-banks/index.blade.php +++ b/resources/views/piggy-banks/index.blade.php @@ -8,13 +8,13 @@

-
+
@foreach($piggyBanks as $piggyBank) -
+
- {{{$piggyBank->name}}} - + + {{{$piggyBank->name}}}
@@ -129,5 +129,9 @@ @stop @section('scripts') + + @stop