mirror of
https://github.com/firefly-iii/firefly-iii.git
synced 2025-10-17 01:42:19 +00:00
Fix #6870
This commit is contained in:
@@ -46,5 +46,8 @@ class CategoryDestroyService
|
|||||||
|
|
||||||
// also delete all relations between categories and transactions:
|
// also delete all relations between categories and transactions:
|
||||||
DB::table('category_transaction')->where('category_id', (int)$category->id)->delete();
|
DB::table('category_transaction')->where('category_id', (int)$category->id)->delete();
|
||||||
|
|
||||||
|
// delete references to category from recurring transactions.
|
||||||
|
DB::table('rt_meta')->where('name', 'category_id')->where('value', $category->id)->delete();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -294,7 +294,7 @@ trait RecurringTransactionTrait
|
|||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
$transaction->recurrenceTransactionMeta()->where('name', 'category_name')->delete();
|
||||||
$meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first();
|
$meta = $transaction->recurrenceTransactionMeta()->where('name', 'category_id')->first();
|
||||||
if (null === $meta) {
|
if (null === $meta) {
|
||||||
$meta = new RecurrenceTransactionMeta();
|
$meta = new RecurrenceTransactionMeta();
|
||||||
|
@@ -224,9 +224,10 @@ class RecurrenceUpdateService
|
|||||||
*/
|
*/
|
||||||
private function updateTransactions(Recurrence $recurrence, array $transactions): void
|
private function updateTransactions(Recurrence $recurrence, array $transactions): void
|
||||||
{
|
{
|
||||||
|
Log::debug('Now in updateTransactions()');
|
||||||
$originalCount = $recurrence->recurrenceTransactions()->count();
|
$originalCount = $recurrence->recurrenceTransactions()->count();
|
||||||
if (0 === count($transactions)) {
|
if (0 === count($transactions)) {
|
||||||
// wont drop transactions, rather avoid.
|
// won't drop transactions, rather avoid.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
// user added or removed repetitions, delete all and recreate:
|
// user added or removed repetitions, delete all and recreate:
|
||||||
@@ -240,12 +241,13 @@ class RecurrenceUpdateService
|
|||||||
$currencyFactory = app(TransactionCurrencyFactory::class);
|
$currencyFactory = app(TransactionCurrencyFactory::class);
|
||||||
// loop all and try to match them:
|
// loop all and try to match them:
|
||||||
if ($originalCount === count($transactions)) {
|
if ($originalCount === count($transactions)) {
|
||||||
Log::debug('Loop and find');
|
Log::debug(sprintf('Count is equal (%d), update transactions.', $originalCount));
|
||||||
foreach ($transactions as $current) {
|
foreach ($transactions as $current) {
|
||||||
$match = $this->matchTransaction($recurrence, $current);
|
$match = $this->matchTransaction($recurrence, $current);
|
||||||
if (null === $match) {
|
if (null === $match) {
|
||||||
throw new FireflyException('Cannot match recurring transaction to existing transaction. Not sure what to do. Break.');
|
throw new FireflyException('Cannot match recurring transaction to existing transaction. Not sure what to do. Break.');
|
||||||
}
|
}
|
||||||
|
// complex loop to find currency:
|
||||||
$currency = null;
|
$currency = null;
|
||||||
$foreignCurrency = null;
|
$foreignCurrency = null;
|
||||||
if (array_key_exists('currency_id', $current) || array_key_exists('currency_code', $current)) {
|
if (array_key_exists('currency_id', $current) || array_key_exists('currency_code', $current)) {
|
||||||
@@ -267,7 +269,7 @@ class RecurrenceUpdateService
|
|||||||
$current['foreign_currency_id'] = (int)$foreignCurrency->id;
|
$current['foreign_currency_id'] = (int)$foreignCurrency->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
// update fields
|
// update fields that are part of the recurring transaction itself.
|
||||||
$fields = [
|
$fields = [
|
||||||
'source_id' => 'source_id',
|
'source_id' => 'source_id',
|
||||||
'destination_id' => 'destination_id',
|
'destination_id' => 'destination_id',
|
||||||
@@ -293,11 +295,13 @@ class RecurrenceUpdateService
|
|||||||
// reset category if name is set but empty:
|
// reset category if name is set but empty:
|
||||||
// can be removed when v1 is retired.
|
// can be removed when v1 is retired.
|
||||||
if (array_key_exists('category_name', $current) && '' === (string)$current['category_name']) {
|
if (array_key_exists('category_name', $current) && '' === (string)$current['category_name']) {
|
||||||
|
Log::debug('Category name is submitted but is empty. Set category to be empty.');
|
||||||
$current['category_name'] = null;
|
$current['category_name'] = null;
|
||||||
$current['category_id'] = 0;
|
$current['category_id'] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array_key_exists('category_id', $current)) {
|
if (array_key_exists('category_id', $current)) {
|
||||||
|
Log::debug(sprintf('Category ID is submitted, set category to be %d.', (int)$current['category_id']));
|
||||||
$this->setCategory($match, (int)$current['category_id']);
|
$this->setCategory($match, (int)$current['category_id']);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -319,9 +323,10 @@ class RecurrenceUpdateService
|
|||||||
*/
|
*/
|
||||||
private function matchTransaction(Recurrence $recurrence, array $data): ?RecurrenceTransaction
|
private function matchTransaction(Recurrence $recurrence, array $data): ?RecurrenceTransaction
|
||||||
{
|
{
|
||||||
|
Log::debug('Now in matchTransaction()');
|
||||||
$originalCount = $recurrence->recurrenceTransactions()->count();
|
$originalCount = $recurrence->recurrenceTransactions()->count();
|
||||||
if (1 === $originalCount) {
|
if (1 === $originalCount) {
|
||||||
Log::debug('Return the first one');
|
Log::debug('Return the first one.');
|
||||||
|
|
||||||
return $recurrence->recurrenceTransactions()->first();
|
return $recurrence->recurrenceTransactions()->first();
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user