Users can now reorder budgets #1108

This commit is contained in:
James Cole
2018-10-17 15:18:09 +02:00
parent b12773bc99
commit d0d2189d55
7 changed files with 211 additions and 58 deletions

View File

@@ -28,6 +28,7 @@ use Carbon\Carbon;
use FireflyIII\Http\Controllers\Controller;
use FireflyIII\Repositories\Budget\BudgetRepositoryInterface;
use FireflyIII\Support\Http\Controllers\DateCalculation;
use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request;
use Illuminate\Pagination\LengthAwarePaginator;
@@ -63,7 +64,6 @@ class IndexController extends Controller
);
}
/**
* Show all budgets.
*
@@ -134,5 +134,29 @@ class IndexController extends Controller
);
}
/**
* @param Request $request
*
* @return JsonResponse
*/
public function reorder(Request $request, BudgetRepositoryInterface $repository): JsonResponse
{
$budgetIds = $request->get('budgetIds');
$page = (int)$request->get('page');
$pageSize = (int)app('preferences')->get('listPageSize', 50)->data;
$currentOrder = (($page - 1) * $pageSize) + 1;
foreach ($budgetIds as $budgetId) {
$budgetId = (int)$budgetId;
$budget = $repository->findNull($budgetId);
if (null !== $budget) {
$repository->setBudgetOrder($budget, $currentOrder);
}
$currentOrder++;
}
return response()->json(['OK']);
}
}

View File

@@ -42,6 +42,7 @@ use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
* @property-read string $email
* @property bool encrypted
* @property Collection budgetlimits
* @property int $order
*/
class Budget extends Model
{
@@ -61,7 +62,7 @@ class Budget extends Model
'encrypted' => 'boolean',
];
/** @var array Fields that can be filled */
protected $fillable = ['user_id', 'name', 'active'];
protected $fillable = ['user_id', 'name', 'active','order'];
/** @var array Hidden from view */
protected $hidden = ['encrypted'];

View File

@@ -107,6 +107,7 @@ class BudgetRepository implements BudgetRepositoryInterface
} catch (Exception $e) {
Log::debug(sprintf('Could not delete budget limit: %s', $e->getMessage()));
}
Budget::where('order',0)->update(['order' => 100]);
// do the clean up by hand because Sqlite can be tricky with this.
$budgetLimits = BudgetLimit::orderBy('created_at', 'DESC')->get(['id', 'budget_id', 'start_date', 'end_date']);
@@ -289,11 +290,14 @@ class BudgetRepository implements BudgetRepositoryInterface
public function getActiveBudgets(): Collection
{
/** @var Collection $set */
$set = $this->user->budgets()->where('active', 1)->get();
$set = $this->user->budgets()->where('active', 1)
->get();
$set = $set->sortBy(
function (Budget $budget) {
return strtolower($budget->name);
$str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name);
return $str;
}
);
@@ -554,7 +558,9 @@ class BudgetRepository implements BudgetRepositoryInterface
$set = $set->sortBy(
function (Budget $budget) {
return strtolower($budget->name);
$str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name);
return $str;
}
);
@@ -583,7 +589,9 @@ class BudgetRepository implements BudgetRepositoryInterface
$set = $set->sortBy(
function (Budget $budget) {
return strtolower($budget->name);
$str = str_pad((string)$budget->order, 4, '0', STR_PAD_LEFT) . strtolower($budget->name);
return $str;
}
);
@@ -652,6 +660,18 @@ class BudgetRepository implements BudgetRepositoryInterface
return $availableBudget;
}
/**
* @param Budget $budget
* @param int $order
*/
public function setBudgetOrder(Budget $budget, int $order): void
{
$budget->order = $order;
$budget->save();
}
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param User $user
*/
@@ -660,7 +680,6 @@ class BudgetRepository implements BudgetRepositoryInterface
$this->user = $user;
}
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Collection $budgets
* @param Collection $accounts
@@ -825,6 +844,8 @@ class BudgetRepository implements BudgetRepositoryInterface
}
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param BudgetLimit $budgetLimit
* @param array $data
@@ -848,7 +869,6 @@ class BudgetRepository implements BudgetRepositoryInterface
return $budgetLimit;
}
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Budget $budget
* @param Carbon $start

View File

@@ -156,7 +156,6 @@ interface BudgetRepositoryInterface
*/
public function getBudgetLimits(Budget $budget, Carbon $start = null, Carbon $end = null): Collection;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Collection $budgets
* @param Collection $accounts
@@ -167,6 +166,8 @@ interface BudgetRepositoryInterface
*/
public function getBudgetPeriodReport(Collection $budgets, Collection $accounts, Carbon $start, Carbon $end): array;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @return Collection
*/
@@ -195,7 +196,6 @@ interface BudgetRepositoryInterface
*/
public function getNoBudgetPeriodReport(Collection $accounts, Carbon $start, Carbon $end): array;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param TransactionCurrency $currency
* @param Carbon $start
@@ -206,6 +206,14 @@ interface BudgetRepositoryInterface
*/
public function setAvailableBudget(TransactionCurrency $currency, Carbon $start, Carbon $end, string $amount): AvailableBudget;
/** @noinspection MoreThanThreeArgumentsInspection */
/**
* @param Budget $budget
* @param int $order
*/
public function setBudgetOrder(Budget $budget, int $order): void;
/**
* @param User $user
*/