Merge pull request #6872 from firefly-iii/fix-6870

Fix 6870
This commit is contained in:
James Cole 2023-01-16 06:55:20 +01:00 committed by GitHub
commit 10db3d63ac
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 14 additions and 22 deletions

View File

@ -83,8 +83,6 @@ class StoreRequest extends FormRequest
$data = $this->appendLocationData($data, null); $data = $this->appendLocationData($data, null);
if ('liability' === $data['account_type_name'] || 'liabilities' === $data['account_type_name']) { if ('liability' === $data['account_type_name'] || 'liabilities' === $data['account_type_name']) {
$data['opening_balance'] = app('steam')->negative($this->convertString('liability_amount'));
$data['opening_balance_date'] = $this->getCarbonDate('liability_start_date');
$data['account_type_name'] = $this->convertString('liability_type'); $data['account_type_name'] = $this->convertString('liability_type');
$data['liability_direction'] = $this->convertString('liability_direction'); $data['liability_direction'] = $this->convertString('liability_direction');
$data['account_type_id'] = null; $data['account_type_id'] = null;

View File

@ -76,22 +76,8 @@ class UpdateRequest extends FormRequest
'liability_amount' => ['liability_amount', 'convertString'], 'liability_amount' => ['liability_amount', 'convertString'],
'liability_start_date' => ['liability_start_date', 'date'], 'liability_start_date' => ['liability_start_date', 'date'],
]; ];
/** @var Account $account */
$account = $this->route()->parameter('account');
$data = $this->getAllData($fields); $data = $this->getAllData($fields);
$data = $this->appendLocationData($data, null); return $this->appendLocationData($data, null);
$valid = config('firefly.valid_liabilities');
if (array_key_exists('liability_amount', $data) && in_array($account->accountType->type, $valid, true)) {
$data['opening_balance'] = app('steam')->negative($data['liability_amount']);
Log::debug(sprintf('Opening balance for liability is "%s".', $data['opening_balance']));
}
if (array_key_exists('liability_start_date', $data) && in_array($account->accountType->type, $valid, true)) {
$data['opening_balance_date'] = $data['liability_start_date'];
Log::debug(sprintf('Opening balance date for liability is "%s".', $data['opening_balance_date']));
}
return $data;
} }
/** /**

View File

@ -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();
} }
} }

View File

@ -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();

View File

@ -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();
} }