This commit is contained in:
James Cole 2018-04-28 21:54:48 +02:00
parent 7f459df9e9
commit fdc9467218
No known key found for this signature in database
GPG Key ID: C16961E655E74B5E
7 changed files with 79 additions and 38 deletions

View File

@ -30,6 +30,7 @@ use FireflyIII\Repositories\Currency\CurrencyRepositoryInterface;
use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface; use FireflyIII\Repositories\PiggyBank\PiggyBankRepositoryInterface;
use FireflyIII\Transformers\AccountTransformer; use FireflyIII\Transformers\AccountTransformer;
use FireflyIII\Transformers\PiggyBankTransformer; use FireflyIII\Transformers\PiggyBankTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator; use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection; use Illuminate\Support\Collection;
@ -215,6 +216,7 @@ class PiggyBankController extends Controller
*/ */
public function index(Request $request) public function index(Request $request)
{ {
$this->piggyRepos->correctOrder();
$collection = $this->piggyRepos->getPiggyBanks(); $collection = $this->piggyRepos->getPiggyBanks();
$total = $collection->count(); $total = $collection->count();
$page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page'); $page = 0 === (int)$request->get('page') ? 1 : (int)$request->get('page');
@ -261,27 +263,6 @@ class PiggyBankController extends Controller
return view('piggy-banks.index', compact('piggyBanks', 'accounts')); return view('piggy-banks.index', compact('piggyBanks', 'accounts'));
} }
/**
* @param Request $request
*
* @return \Illuminate\Http\JsonResponse
*/
public function order(Request $request)
{
$data = $request->get('order');
// set all users piggy banks to zero:
$this->piggyRepos->reset();
if (\is_array($data)) {
foreach ($data as $order => $id) {
$this->piggyRepos->setOrder((int)$id, $order + 1);
}
}
return response()->json(['result' => 'ok']);
}
/** /**
* @param Request $request * @param Request $request
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
@ -402,6 +383,20 @@ class PiggyBankController extends Controller
return view('piggy-banks.remove-mobile', compact('piggyBank', 'repetition', 'currency')); return view('piggy-banks.remove-mobile', compact('piggyBank', 'repetition', 'currency'));
} }
/**
* @param Request $request
* @param PiggyBank $piggyBank
*
* @return JsonResponse
*/
public function setOrder(Request $request, PiggyBank $piggyBank): JsonResponse
{
$newOrder = (int)$request->get('order');
$this->piggyRepos->setOrder($piggyBank, $newOrder);
return response()->json(['data' => 'OK']);
}
/** /**
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* *

View File

@ -104,6 +104,22 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
return bccomp($amount, $savedSoFar) <= 0; return bccomp($amount, $savedSoFar) <= 0;
} }
/**
* Correct order of piggies in case of issues.
*/
public function correctOrder(): void
{
$set = $this->user->piggyBanks()->orderBy('order', 'ASC')->get();
$current = 1;
foreach ($set as $piggyBank) {
if ((int)$piggyBank->order !== $current) {
$piggyBank->order = $current;
$piggyBank->save();
}
$current++;
}
}
/** /**
* @param PiggyBank $piggyBank * @param PiggyBank $piggyBank
* @param string $amount * @param string $amount
@ -327,7 +343,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
/** @var PiggyBank $current */ /** @var PiggyBank $current */
foreach ($piggies as $current) { foreach ($piggies as $current) {
$repetition = $this->getRepetition($current); $repetition = $this->getRepetition($current);
if(null !== $repetition) { if (null !== $repetition) {
$balance = bcsub($balance, $repetition->currentamount); $balance = bcsub($balance, $repetition->currentamount);
} }
} }
@ -379,14 +395,10 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
* *
* @return bool * @return bool
*/ */
public function setOrder(int $piggyBankId, int $order): bool public function setOrder(PiggyBank $piggyBank, int $order): bool
{ {
$piggyBank = PiggyBank::leftJoin('accounts', 'accounts.id', '=', 'piggy_banks.account_id')->where('accounts.user_id', $this->user->id) $piggyBank->order = $order;
->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']); $piggyBank->save();
if ($piggyBank) {
$piggyBank->order = $order;
$piggyBank->save();
}
return true; return true;
} }

View File

@ -86,6 +86,11 @@ interface PiggyBankRepositoryInterface
*/ */
public function createEventWithJournal(PiggyBank $piggyBank, string $amount, TransactionJournal $journal): PiggyBankEvent; public function createEventWithJournal(PiggyBank $piggyBank, string $amount, TransactionJournal $journal): PiggyBankEvent;
/**
* Correct order of piggies in case of issues.
*/
public function correctOrder(): void;
/** /**
* Destroy piggy bank. * Destroy piggy bank.
* *
@ -196,12 +201,12 @@ interface PiggyBankRepositoryInterface
/** /**
* Set specific piggy bank to specific order. * Set specific piggy bank to specific order.
* *
* @param int $piggyBankId * @param PiggyBank $piggyBank
* @param int $order * @param int $order
* *
* @return bool * @return bool
*/ */
public function setOrder(int $piggyBankId, int $order): bool; public function setOrder(PiggyBank $piggyBank, int $order): bool;
/** /**
* @param User $user * @param User $user

View File

@ -63,6 +63,10 @@ function checkJobStatus() {
*/ */
function reportFailedJob(jqxhr, textStatus, error) { function reportFailedJob(jqxhr, textStatus, error) {
console.log('In reportFailedJob()'); console.log('In reportFailedJob()');
// cancel refresh
clearTimeout(timeOutId);
// hide all possible boxes: // hide all possible boxes:
$('.statusbox').hide(); $('.statusbox').hide();
@ -133,6 +137,7 @@ function reportOnJobStatus(data) {
$('#import-status-more-info').html(data.finishedText); $('#import-status-more-info').html(data.finishedText);
break; break;
case "error": case "error":
clearTimeout(timeOutId);
console.log('Job reports ERROR.'); console.log('Job reports ERROR.');
// hide all possible boxes: // hide all possible boxes:
$('.statusbox').hide(); $('.statusbox').hide();

View File

@ -83,13 +83,36 @@ function removeMoney(e) {
function stopSorting() { function stopSorting() {
"use strict"; "use strict";
$('.loadSpin').addClass('fa fa-refresh fa-spin'); $('.loadSpin').addClass('fa fa-refresh fa-spin');
var order = [];
$.each($('#sortable-piggy>tbody>tr'), function (i, v) { $.each($('#sortable-piggy>tbody>tr'), function (i, v) {
var holder = $(v); var holder = $(v);
var position = parseInt(holder.data('position'));
var originalOrder = parseInt(holder.data('order'));
var id = holder.data('id'); var id = holder.data('id');
order.push(id); console.log('Now at row ' + i);
}); var newOrder;
$.post('piggy-banks/sort', {order: order, _token: token}).done(function () { if (position === i) {
$('.loadSpin').removeClass('fa fa-refresh fa-spin'); return;
}
if (position < i) {
console.log('Row ' + i + ' has moved up!');
// update position:
holder.data('position', i);
newOrder = originalOrder + 1;
}
if (position > i) {
console.log('Row ' + i + ' has moved down!');
// update position:
holder.data('position', i);
newOrder = originalOrder - 1;
}
$.post('piggy-banks/set-order/' + id, {order: newOrder, _token: token})
}); });
$('.loadSpin').removeClass('fa fa-refresh fa-spin');
} }

View File

@ -14,7 +14,7 @@
</thead> </thead>
<tbody> <tbody>
{% for piggy in piggyBanks %} {% for piggy in piggyBanks %}
<tr data-id="{{ piggy.id }}"> <tr data-id="{{ piggy.id }}" data-order="{{ piggy.order }}" data-position="{{ loop.index0 }}">
<td class="visible-xs visible-sm hidden-md hidden-lg"> <td class="visible-xs visible-sm hidden-md hidden-lg">
&nbsp; &nbsp;
</td> </td>

View File

@ -564,7 +564,8 @@ Route::group(
Route::post('destroy/{piggyBank}', ['uses' => 'PiggyBankController@destroy', 'as' => 'destroy']); Route::post('destroy/{piggyBank}', ['uses' => 'PiggyBankController@destroy', 'as' => 'destroy']);
Route::post('add/{piggyBank}', ['uses' => 'PiggyBankController@postAdd', 'as' => 'add']); Route::post('add/{piggyBank}', ['uses' => 'PiggyBankController@postAdd', 'as' => 'add']);
Route::post('remove/{piggyBank}', ['uses' => 'PiggyBankController@postRemove', 'as' => 'remove']); Route::post('remove/{piggyBank}', ['uses' => 'PiggyBankController@postRemove', 'as' => 'remove']);
Route::post('sort', ['uses' => 'PiggyBankController@order', 'as' => 'order']);
Route::post('set-order/{piggyBank}', ['uses' => 'PiggyBankController@setOrder', 'as' => 'set-order']);
} }