mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-02-12 00:15:50 -06:00
Fix #1369
This commit is contained in:
parent
7f459df9e9
commit
fdc9467218
@ -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
|
||||
*
|
||||
|
@ -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();
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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();
|
||||
|
@ -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);
|
||||
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})
|
||||
});
|
||||
$.post('piggy-banks/sort', {order: order, _token: token}).done(function () {
|
||||
$('.loadSpin').removeClass('fa fa-refresh fa-spin');
|
||||
});
|
||||
|
||||
}
|
@ -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">
|
||||
|
||||
</td>
|
||||
|
@ -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']);
|
||||
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user