diff --git a/backend/src/graphql/model/Transaction.ts b/backend/src/graphql/model/Transaction.ts index 1b857391b..3334dea84 100644 --- a/backend/src/graphql/model/Transaction.ts +++ b/backend/src/graphql/model/Transaction.ts @@ -47,6 +47,10 @@ export class Transaction { this.linkId = transaction.contribution ? transaction.contribution.contributionLinkId : transaction.transactionLinkId || null + this.previousBalance = + (transaction.previousTransaction && + transaction.previousTransaction.balance.toDecimalPlaces(2, Decimal.ROUND_DOWN)) || + new Decimal(0) } @Field(() => Int) @@ -70,6 +74,9 @@ export class Transaction { @Field(() => Date) balanceDate: Date + @Field(() => Decimal) + previousBalance: Decimal + @Field(() => Decay) decay: Decay diff --git a/backend/src/graphql/resolver/TransactionResolver.ts b/backend/src/graphql/resolver/TransactionResolver.ts index 4c8ab0061..4d546ddc0 100644 --- a/backend/src/graphql/resolver/TransactionResolver.ts +++ b/backend/src/graphql/resolver/TransactionResolver.ts @@ -275,6 +275,7 @@ export class TransactionResolver { firstDate || now, lastDate || now, self, + (userTransactions.length && userTransactions[0].balance) || new Decimal(0), ), ) logger.debug(`transactions=${transactions}`) @@ -291,6 +292,15 @@ export class TransactionResolver { }) logger.debug(`TransactionTypeId.CREATION: transactions=${transactions}`) + transactions.forEach((transaction: Transaction) => { + if (transaction.typeId !== TransactionTypeId.DECAY) { + const { balance, previousBalance, amount } = transaction + transaction.decay.decay = new Decimal( + Number(balance) - Number(amount) - Number(previousBalance), + ).toDecimalPlaces(2, Decimal.ROUND_HALF_UP) + } + }) + // Construct Result return new TransactionList(await balanceResolver.balance(context), transactions) } diff --git a/backend/src/typeorm/repository/Transaction.ts b/backend/src/typeorm/repository/Transaction.ts index 61e87b3c8..0fb9f7ffe 100644 --- a/backend/src/typeorm/repository/Transaction.ts +++ b/backend/src/typeorm/repository/Transaction.ts @@ -2,7 +2,6 @@ import { EntityRepository, Repository } from '@dbTools/typeorm' import { Transaction } from '@entity/Transaction' import { Order } from '@enum/Order' -import { TransactionTypeId } from '@enum/TransactionTypeId' @EntityRepository(Transaction) export class TransactionRepository extends Repository { @@ -11,22 +10,15 @@ export class TransactionRepository extends Repository { limit: number, offset: number, order: Order, - onlyCreation?: boolean, ): Promise<[Transaction[], number]> { const query = this.createQueryBuilder('userTransaction') .leftJoinAndSelect( - 'userTransaction.contribution', - 'contribution', - 'userTransaction.id = contribution.transactionId', + 'userTransaction.previousTransaction', + 'transaction', + 'userTransaction.previous = transaction.id', ) .where('userTransaction.userId = :userId', { userId }) - if (onlyCreation) { - query.andWhere('userTransaction.typeId = :typeId', { - typeId: TransactionTypeId.CREATION, - }) - } - return query .orderBy('userTransaction.balanceDate', order) .limit(limit) diff --git a/backend/src/util/virtualTransactions.ts b/backend/src/util/virtualTransactions.ts index 68a37746b..5d1fbbfd3 100644 --- a/backend/src/util/virtualTransactions.ts +++ b/backend/src/util/virtualTransactions.ts @@ -38,6 +38,7 @@ const virtualLinkTransaction = ( createdAt: Date, validUntil: Date, user: User, + previousBalance: Decimal, ): Transaction => { const linkDbTransaction: dbTransaction = { id: -2, diff --git a/database/entity/0036-unique_previous_in_transactions/Transaction.ts b/database/entity/0036-unique_previous_in_transactions/Transaction.ts index ef8d0abdc..993ffd262 100644 --- a/database/entity/0036-unique_previous_in_transactions/Transaction.ts +++ b/database/entity/0036-unique_previous_in_transactions/Transaction.ts @@ -96,4 +96,8 @@ export class Transaction extends BaseEntity { @OneToOne(() => Contribution, (contribution) => contribution.transaction) @JoinColumn({ name: 'id', referencedColumnName: 'transactionId' }) contribution?: Contribution | null + + @OneToOne(() => Transaction) + @JoinColumn({ name: 'previous' }) + previousTransaction?: Transaction | null } diff --git a/frontend/src/components/DecayInformations/DecayInformation-Decay.vue b/frontend/src/components/DecayInformations/DecayInformation-Decay.vue index 7abdb0f2b..ce679fb30 100644 --- a/frontend/src/components/DecayInformations/DecayInformation-Decay.vue +++ b/frontend/src/components/DecayInformations/DecayInformation-Decay.vue @@ -12,7 +12,7 @@
- {{ previousBookedBalance | GDD }} + {{ previousBalance | GDD }} {{ decay === '0' ? $t('math.minus') : '' }} {{ decay | GDD }} {{ $t('math.equal') }} {{ balance | GDD }} @@ -35,7 +35,7 @@ export default { type: String, required: true, }, - previousBookedBalance: { + previousBalance: { type: String, required: true, }, diff --git a/frontend/src/components/DecayInformations/DecayInformation-Long.vue b/frontend/src/components/DecayInformations/DecayInformation-Long.vue index 782fe049c..d7e943225 100644 --- a/frontend/src/components/DecayInformations/DecayInformation-Long.vue +++ b/frontend/src/components/DecayInformations/DecayInformation-Long.vue @@ -14,7 +14,7 @@
{{ $t('decay.last_transaction') }}
- +
{{ $d(new Date(decay.start), 'long') }} @@ -24,30 +24,44 @@ + + + +
{{ $t('decay.old_balance') }}
+
+ + {{ previousBalance | GDD }} + +
+ - - + +
{{ $t('decay.decay') }}
- {{ decay.decay | GDD }} + + {{ decay.decay | GDD }} +
- + - {{ $t(`decay.types.${typeId.toLowerCase()}`) }} - {{ amount | GDD }} + {{ $t(`decay.types.${typeId.toLowerCase()}`) }} + + {{ amount | GDD }} + - - -
{{ $t('decay.total') }}
+ + +
{{ $t('decay.new_balance') }}
- - {{ (Number(amount) + Number(decay.decay)) | GDD }} + + {{ balance | GDD }}
@@ -63,6 +77,8 @@ export default { DurationRow, }, props: { + balance: { type: String, default: '0' }, + previousBalance: { type: String, default: '0' }, amount: { type: String, default: '0' }, typeId: { type: String, default: '' }, memo: { type: String, default: '' }, diff --git a/frontend/src/components/DecayInformations/DecayInformation.vue b/frontend/src/components/DecayInformations/DecayInformation.vue index 3329fd021..0be12d0de 100644 --- a/frontend/src/components/DecayInformations/DecayInformation.vue +++ b/frontend/src/components/DecayInformations/DecayInformation.vue @@ -7,7 +7,15 @@ :decay="decay" :typeId="typeId" /> - +