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\Transformers\AccountTransformer;
use FireflyIII\Transformers\PiggyBankTransformer;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
use Illuminate\Support\Collection;
@ -215,6 +216,7 @@ class PiggyBankController extends Controller
*/
public function index(Request $request)
{
$this->piggyRepos->correctOrder();
$collection = $this->piggyRepos->getPiggyBanks();
$total = $collection->count();
$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'));
}
/**
* @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 PiggyBank $piggyBank
@ -402,6 +383,20 @@ class PiggyBankController extends Controller
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
*

View File

@ -104,6 +104,22 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
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 string $amount
@ -327,7 +343,7 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
/** @var PiggyBank $current */
foreach ($piggies as $current) {
$repetition = $this->getRepetition($current);
if(null !== $repetition) {
if (null !== $repetition) {
$balance = bcsub($balance, $repetition->currentamount);
}
}
@ -379,14 +395,10 @@ class PiggyBankRepository implements PiggyBankRepositoryInterface
*
* @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)
->where('piggy_banks.id', $piggyBankId)->first(['piggy_banks.*']);
if ($piggyBank) {
$piggyBank->order = $order;
$piggyBank->save();
}
$piggyBank->order = $order;
$piggyBank->save();
return true;
}

View File

@ -86,6 +86,11 @@ interface PiggyBankRepositoryInterface
*/
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.
*
@ -196,12 +201,12 @@ interface PiggyBankRepositoryInterface
/**
* Set specific piggy bank to specific order.
*
* @param int $piggyBankId
* @param PiggyBank $piggyBank
* @param int $order
*
* @return bool
*/
public function setOrder(int $piggyBankId, int $order): bool;
public function setOrder(PiggyBank $piggyBank, int $order): bool;
/**
* @param User $user

View File

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

View File

@ -83,13 +83,36 @@ function removeMoney(e) {
function stopSorting() {
"use strict";
$('.loadSpin').addClass('fa fa-refresh fa-spin');
var order = [];
$.each($('#sortable-piggy>tbody>tr'), function (i, v) {
var holder = $(v);
var position = parseInt(holder.data('position'));
var originalOrder = parseInt(holder.data('order'));
var id = holder.data('id');
order.push(id);
});
$.post('piggy-banks/sort', {order: order, _token: token}).done(function () {
$('.loadSpin').removeClass('fa fa-refresh fa-spin');
console.log('Now at row ' + i);
var newOrder;
if (position === i) {
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>
<tbody>
{% 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">
&nbsp;
</td>

View File

@ -564,7 +564,8 @@ Route::group(
Route::post('destroy/{piggyBank}', ['uses' => 'PiggyBankController@destroy', 'as' => 'destroy']);
Route::post('add/{piggyBank}', ['uses' => 'PiggyBankController@postAdd', 'as' => 'add']);
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']);
}