mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2026-05-03 20:56:21 +00:00
Expand test cases.
This commit is contained in:
@@ -245,7 +245,10 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
if (!empty($types)) {
|
||||
$query->accountTypeIn($types);
|
||||
}
|
||||
$query->orderBy('accounts.order', 'ASC');
|
||||
$res = array_intersect([AccountType::ASSET, AccountType::MORTGAGE, AccountType::LOAN, AccountType::DEBT], $types);
|
||||
if (0 !== count($res)) {
|
||||
$query->orderBy('accounts.order', 'ASC');
|
||||
}
|
||||
$query->orderBy('accounts.active', 'DESC');
|
||||
$query->orderBy('accounts.name', 'ASC');
|
||||
|
||||
@@ -590,10 +593,10 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
{
|
||||
$sets = [
|
||||
[AccountType::DEFAULT, AccountType::ASSET],
|
||||
[AccountType::EXPENSE, AccountType::BENEFICIARY],
|
||||
[AccountType::REVENUE],
|
||||
//[AccountType::EXPENSE, AccountType::BENEFICIARY],
|
||||
//[AccountType::REVENUE],
|
||||
[AccountType::LOAN, AccountType::DEBT, AccountType::CREDITCARD, AccountType::MORTGAGE],
|
||||
[AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION],
|
||||
//[AccountType::CASH, AccountType::INITIAL_BALANCE, AccountType::IMPORT, AccountType::RECONCILIATION],
|
||||
];
|
||||
foreach ($sets as $set) {
|
||||
Log::debug('Now in resetAccountOrder', $set);
|
||||
@@ -688,53 +691,6 @@ class AccountRepository implements AccountRepositoryInterface
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sortAccounts(): void
|
||||
{
|
||||
// sort assets
|
||||
$list = $this->user->accounts()
|
||||
->leftJoin('account_types', 'accounts.account_type_id', 'account_types.id')
|
||||
->where('account_types.type', AccountType::ASSET)
|
||||
->orderBy('accounts.order', 'ASC')
|
||||
->orderBy('accounts.name', 'ASC')
|
||||
->orderBy('accounts.created_at', 'ASC')->get(['accounts.id', 'accounts.order']);
|
||||
$index = 1;
|
||||
/** @var Account $account */
|
||||
foreach ($list as $account) {
|
||||
if ($account->order !== $index) {
|
||||
$account->order = $index;
|
||||
$account->save();
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
|
||||
// sort liabilities
|
||||
$list = $this->user->accounts()
|
||||
->leftJoin('account_types', 'accounts.account_type_id', 'account_types.id')
|
||||
->whereIn('account_types.type', [AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE])
|
||||
->orderBy('accounts.order', 'ASC')
|
||||
->orderBy('accounts.name', 'ASC')
|
||||
->orderBy('accounts.created_at', 'ASC')->get(['accounts.id', 'accounts.order']);
|
||||
$index = 1;
|
||||
/** @var Account $account */
|
||||
foreach ($list as $account) {
|
||||
if ($account->order !== $index) {
|
||||
$account->order = $index;
|
||||
$account->save();
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
|
||||
// set the rest to zero:
|
||||
$this->user->accounts()
|
||||
->leftJoin('account_types', 'accounts.account_type_id', 'account_types.id')
|
||||
->whereNotIn('account_types.type', [AccountType::ASSET, AccountType::LOAN, AccountType::DEBT, AccountType::MORTGAGE])
|
||||
->update(['order' => '0']);
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
|
||||
@@ -289,11 +289,6 @@ interface AccountRepositoryInterface
|
||||
*/
|
||||
public function setUser(User $user);
|
||||
|
||||
/**
|
||||
* Sort accounts (and fix the sort if necessary).
|
||||
*/
|
||||
public function sortAccounts(): void;
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
|
||||
@@ -36,8 +36,7 @@ use Log;
|
||||
*/
|
||||
class ObjectGroupRepository implements ObjectGroupRepositoryInterface
|
||||
{
|
||||
/** @var User */
|
||||
private $user;
|
||||
private User $user;
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
@@ -89,7 +88,8 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface
|
||||
{
|
||||
return $this->user->objectGroups()
|
||||
->with(['piggyBanks', 'bills'])
|
||||
->orderBy('order', 'ASC')->orderBy('title', 'ASC')->get();
|
||||
->orderBy('order', 'ASC')
|
||||
->orderBy('title', 'ASC')->get();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -133,43 +133,43 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setOrder(ObjectGroup $objectGroup, int $order): ObjectGroup
|
||||
public function setOrder(ObjectGroup $objectGroup, int $newOrder): ObjectGroup
|
||||
{
|
||||
$order = 0 === $order ? 1 : $order;
|
||||
$objectGroup->order = $order;
|
||||
$objectGroup->save();
|
||||
$oldOrder = (int)$objectGroup->order;
|
||||
|
||||
Log::debug(sprintf('Objectgroup #%d order is now %d', $objectGroup->id, $order));
|
||||
if ($newOrder > $oldOrder) {
|
||||
$this->user->objectGroups()->where('object_groups.order', '<=', $newOrder)->where('object_groups.order', '>', $oldOrder)
|
||||
->where('object_groups.id', '!=', $objectGroup->id)
|
||||
->decrement('object_groups.order', 1);
|
||||
|
||||
$objectGroup->order = $newOrder;
|
||||
$objectGroup->save();
|
||||
}
|
||||
if ($newOrder < $oldOrder) {
|
||||
$this->user->objectGroups()->where('object_groups.order', '>=', $newOrder)->where('object_groups.order', '<', $oldOrder)
|
||||
->where('object_groups.id', '!=', $objectGroup->id)
|
||||
->increment('object_groups.order', 1);
|
||||
|
||||
$objectGroup->order = $newOrder;
|
||||
$objectGroup->save();
|
||||
}
|
||||
|
||||
Log::debug(sprintf('Objectgroup #%d order is now %d', $objectGroup->id, $newOrder));
|
||||
|
||||
return $objectGroup;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function sort(): void
|
||||
{
|
||||
$all = $this->get();
|
||||
/**
|
||||
* @var int $index
|
||||
* @var ObjectGroup $group
|
||||
*/
|
||||
foreach ($all as $index => $group) {
|
||||
$group->order = $index + 1;
|
||||
$group->save();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function update(ObjectGroup $objectGroup, array $data): ObjectGroup
|
||||
{
|
||||
$objectGroup->title = $data['title'];
|
||||
if(array_key_exists('title', $data)) {
|
||||
$objectGroup->title = $data['title'];
|
||||
}
|
||||
|
||||
if (isset($data['order'])) {
|
||||
$order = 0 === $data['order'] ? 1 : $data['order'];
|
||||
$objectGroup->order = $order;
|
||||
if(array_key_exists('order', $data)) {
|
||||
$this->setOrder($objectGroup, (int)$data['order']);
|
||||
}
|
||||
|
||||
$objectGroup->save();
|
||||
@@ -184,4 +184,25 @@ class ObjectGroupRepository implements ObjectGroupRepositoryInterface
|
||||
{
|
||||
$this->user = $user;
|
||||
}
|
||||
|
||||
/**
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function resetOrder(): void
|
||||
{
|
||||
Log::debug('Now in resetOrder');
|
||||
$list = $this->get();
|
||||
$index = 1;
|
||||
/** @var ObjectGroup $objectGroup */
|
||||
foreach ($list as $objectGroup) {
|
||||
if ($index !== (int)$objectGroup->order) {
|
||||
Log::debug(
|
||||
sprintf('objectGroup #%d ("%s"): order should %d be but is %d.', $objectGroup->id, $objectGroup->title, $index, $objectGroup->order)
|
||||
);
|
||||
$objectGroup->order = $index;
|
||||
$objectGroup->save();
|
||||
}
|
||||
$index++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -37,6 +37,11 @@ interface ObjectGroupRepositoryInterface
|
||||
*/
|
||||
public function deleteAll(): void;
|
||||
|
||||
/**
|
||||
* Delete all.
|
||||
*/
|
||||
public function resetOrder(): void;
|
||||
|
||||
/**
|
||||
* Delete empty ones.
|
||||
*/
|
||||
@@ -76,16 +81,11 @@ interface ObjectGroupRepositoryInterface
|
||||
|
||||
/**
|
||||
* @param ObjectGroup $objectGroup
|
||||
* @param int $index
|
||||
* @param int $newOrder
|
||||
*
|
||||
* @return ObjectGroup
|
||||
*/
|
||||
public function setOrder(ObjectGroup $objectGroup, int $index): ObjectGroup;
|
||||
|
||||
/**
|
||||
* Sort
|
||||
*/
|
||||
public function sort(): void;
|
||||
public function setOrder(ObjectGroup $objectGroup, int $newOrder): ObjectGroup;
|
||||
|
||||
/**
|
||||
* @param ObjectGroup $objectGroup
|
||||
|
||||
@@ -53,6 +53,6 @@ trait OrganisesObjectGroups
|
||||
private function sortObjectGroups(): void
|
||||
{
|
||||
$repository = app(ObjectGroupRepositoryInterface::class);
|
||||
$repository->sort();
|
||||
$repository->resetOrder();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -26,7 +26,6 @@ namespace FireflyIII\Repositories\PiggyBank;
|
||||
|
||||
|
||||
use Carbon\Carbon;
|
||||
use DB;
|
||||
use Exception;
|
||||
use FireflyIII\Exceptions\FireflyException;
|
||||
use FireflyIII\Models\Note;
|
||||
@@ -35,7 +34,6 @@ use FireflyIII\Models\PiggyBankEvent;
|
||||
use FireflyIII\Models\PiggyBankRepetition;
|
||||
use FireflyIII\Models\TransactionJournal;
|
||||
use FireflyIII\Repositories\ObjectGroup\CreatesObjectGroups;
|
||||
use FireflyIII\User;
|
||||
use Illuminate\Database\QueryException;
|
||||
use Log;
|
||||
|
||||
@@ -127,12 +125,13 @@ trait ModifiesPiggyBanks
|
||||
/**
|
||||
* Correct order of piggies in case of issues.
|
||||
*/
|
||||
public function correctOrder(): void
|
||||
public function resetOrder(): void
|
||||
{
|
||||
$set = $this->user->piggyBanks()->orderBy('order', 'ASC')->get();
|
||||
$set = $this->user->piggyBanks()->orderBy('piggy_banks.order', 'ASC')->get(['piggy_banks.*']);
|
||||
$current = 1;
|
||||
foreach ($set as $piggyBank) {
|
||||
if ((int)$piggyBank->order !== $current) {
|
||||
Log::debug(sprintf('Piggy bank #%d ("%s") was at place %d but should be on %d', $piggyBank->id, $piggyBank->name, $piggyBank->order, $current));
|
||||
$piggyBank->order = $current;
|
||||
$piggyBank->save();
|
||||
}
|
||||
@@ -259,16 +258,28 @@ trait ModifiesPiggyBanks
|
||||
}
|
||||
|
||||
/**
|
||||
* set id of piggy bank.
|
||||
*
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param int $order
|
||||
*
|
||||
* @return bool
|
||||
* @inheritDoc
|
||||
*/
|
||||
public function setOrder(PiggyBank $piggyBank, int $order): bool
|
||||
public function setOrder(PiggyBank $piggyBank, int $newOrder): bool
|
||||
{
|
||||
$piggyBank->order = $order;
|
||||
$oldOrder = (int)$piggyBank->order;
|
||||
Log::debug(sprintf('Will move piggy bank #%d ("%s") from %d to %d', $piggyBank->id, $piggyBank->name, $oldOrder, $newOrder));
|
||||
if ($newOrder > $oldOrder) {
|
||||
$this->user->piggyBanks()->where('piggy_banks.order', '<=', $newOrder)->where('piggy_banks.order', '>', $oldOrder)
|
||||
->where('piggy_banks.id', '!=', $piggyBank->id)
|
||||
->decrement('piggy_banks.order', 1);
|
||||
$piggyBank->order = $newOrder;
|
||||
Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder));
|
||||
$piggyBank->save();
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
$this->user->piggyBanks()->where('piggy_banks.order', '>=', $newOrder)->where('piggy_banks.order', '<', $oldOrder)
|
||||
->where('piggy_banks.id', '!=', $piggyBank->id)
|
||||
->increment('piggy_banks.order', 1);
|
||||
$piggyBank->order = $newOrder;
|
||||
Log::debug(sprintf('Order of piggy #%d ("%s") is now %d', $piggyBank->id, $piggyBank->name, $newOrder));
|
||||
$piggyBank->save();
|
||||
|
||||
return true;
|
||||
@@ -282,7 +293,11 @@ trait ModifiesPiggyBanks
|
||||
*/
|
||||
public function store(array $data): PiggyBank
|
||||
{
|
||||
$data['order'] = $this->getMaxOrder() + 1;
|
||||
$order = $this->getMaxOrder() + 1;
|
||||
if (array_key_exists('order', $data)) {
|
||||
$order = $data['order'];
|
||||
}
|
||||
$data['order'] = 31337; // very high when creating.
|
||||
$piggyData = $data;
|
||||
// unset fields just in case.
|
||||
unset($piggyData['object_group_title'], $piggyData['object_group_id'], $piggyData['notes'], $piggyData['current_amount']);
|
||||
@@ -294,6 +309,10 @@ trait ModifiesPiggyBanks
|
||||
throw new FireflyException('400005: Could not store new piggy bank.');
|
||||
}
|
||||
|
||||
// reset order then set order:
|
||||
$this->resetOrder();
|
||||
$this->setOrder($piggyBank, $order);
|
||||
|
||||
$this->updateNote($piggyBank, $data['notes']);
|
||||
|
||||
// repetition is auto created.
|
||||
@@ -334,13 +353,15 @@ trait ModifiesPiggyBanks
|
||||
public function update(PiggyBank $piggyBank, array $data): PiggyBank
|
||||
{
|
||||
$piggyBank = $this->updateProperties($piggyBank, $data);
|
||||
$this->updateNote($piggyBank, $data['notes'] ?? '');
|
||||
if (array_key_exists('notes', $data)) {
|
||||
$this->updateNote($piggyBank, (string)$data['notes']);
|
||||
}
|
||||
|
||||
// update the order of the piggy bank:
|
||||
$oldOrder = (int)$piggyBank->order;
|
||||
$newOrder = (int)($data['order'] ?? $oldOrder);
|
||||
if ($oldOrder !== $newOrder) {
|
||||
$this->updateOrder($piggyBank, $oldOrder, $newOrder);
|
||||
$this->setOrder($piggyBank, $newOrder);
|
||||
}
|
||||
|
||||
// if the piggy bank is now smaller than the current relevant rep,
|
||||
@@ -355,8 +376,8 @@ trait ModifiesPiggyBanks
|
||||
}
|
||||
|
||||
// update using name:
|
||||
if (array_key_exists('object_group', $data)) {
|
||||
$objectGroupTitle = (string)$data['object_group'];
|
||||
if (array_key_exists('object_group_title', $data)) {
|
||||
$objectGroupTitle = (string)$data['object_group_title'];
|
||||
if ('' !== $objectGroupTitle) {
|
||||
$objectGroup = $this->findOrCreateObjectGroup($objectGroupTitle);
|
||||
if (null !== $objectGroup) {
|
||||
@@ -441,46 +462,12 @@ trait ModifiesPiggyBanks
|
||||
if (array_key_exists('targetdate', $data) && '' !== $data['targetdate']) {
|
||||
$piggyBank->targetdate = $data['targetdate'];
|
||||
}
|
||||
$piggyBank->startdate = $data['startdate'] ?? $piggyBank->startdate;
|
||||
if (array_key_exists('startdate', $data)) {
|
||||
$piggyBank->startdate = $data['startdate'];
|
||||
|
||||
}
|
||||
$piggyBank->save();
|
||||
|
||||
return $piggyBank;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param int $oldOrder
|
||||
* @param int $newOrder
|
||||
*/
|
||||
private function updateOrder(PiggyBank $piggyBank, int $oldOrder, int $newOrder): void
|
||||
{
|
||||
if ($newOrder > $oldOrder) {
|
||||
// Iedereen [7 en lager] [hoger dan 3] behalve piggy zelf, puntje er af:
|
||||
//piggy zelf naar 7
|
||||
/** @var User $user */
|
||||
$user = $this->user;
|
||||
$user->piggyBanks()->where('piggy_banks.order', '<=', $newOrder)->where('piggy_banks.order', '>', $oldOrder)
|
||||
->where('piggy_banks.id', '!=', $piggyBank->id)
|
||||
->decrement('piggybanks.order',1);
|
||||
|
||||
$piggyBank->order = $newOrder;
|
||||
$piggyBank->save();
|
||||
}
|
||||
if ($newOrder < $oldOrder) {
|
||||
//
|
||||
//Van 8 naar 2
|
||||
// iedereen [2 of hoger] en [kleiner dan 8] puntje er bij.
|
||||
// 8 naar 2
|
||||
/** @var User $user */
|
||||
$user = $this->user;
|
||||
$user->piggyBanks()->where('piggy_banks.order', '>=', $newOrder)->where('piggy_banks.order', '<', $oldOrder)
|
||||
->where('piggy_banks.id', '!=', $piggyBank->id)
|
||||
->increment('piggybanks.order',1);
|
||||
|
||||
$piggyBank->order = $newOrder;
|
||||
$piggyBank->save();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ interface PiggyBankRepositoryInterface
|
||||
/**
|
||||
* Correct order of piggies in case of issues.
|
||||
*/
|
||||
public function correctOrder(): void;
|
||||
public function resetOrder(): void;
|
||||
|
||||
/**
|
||||
* Create a new event.
|
||||
@@ -267,11 +267,11 @@ interface PiggyBankRepositoryInterface
|
||||
* Set specific piggy bank to specific order.
|
||||
*
|
||||
* @param PiggyBank $piggyBank
|
||||
* @param int $order
|
||||
* @param int $newOrder
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function setOrder(PiggyBank $piggyBank, int $order): bool;
|
||||
public function setOrder(PiggyBank $piggyBank, int $newOrder): bool;
|
||||
|
||||
/**
|
||||
* @param User $user
|
||||
|
||||
Reference in New Issue
Block a user