From 063c8025aa143f556d02c95cd79545feb05ce061 Mon Sep 17 00:00:00 2001
From: James Cole
Date: Sun, 15 Mar 2015 18:00:33 +0100
Subject: [PATCH] Allow piggy banks to be ordered.
---
app/Http/Controllers/PiggyBankController.php | 20 +++++++++-
app/Http/routes.php | 1 +
.../PiggyBank/PiggyBankRepository.php | 39 +++++++++++++++++--
.../PiggyBankRepositoryInterface.php | 17 ++++++++
public/css/firefly.css | 3 +-
public/js/piggy-banks.js | 27 ++++++++++++-
resources/views/piggy-banks/index.blade.php | 12 ++++--
7 files changed, 107 insertions(+), 12 deletions(-)
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)
-