From fe7702836e051af28ffb930db65d545187fb0bab Mon Sep 17 00:00:00 2001 From: ilham Date: Wed, 29 Jun 2022 18:07:07 +0700 Subject: [PATCH] fix: rollback --- src/transaction/transaction.controller.ts | 6 +- src/transaction/transaction.service.ts | 70 ++++++++++------------- 2 files changed, 33 insertions(+), 43 deletions(-) diff --git a/src/transaction/transaction.controller.ts b/src/transaction/transaction.controller.ts index 4f37830..8cac296 100644 --- a/src/transaction/transaction.controller.ts +++ b/src/transaction/transaction.controller.ts @@ -132,9 +132,9 @@ export class TransactionController { }; } - @Get('rollback-jurnal/:trxId') - async rollbackJurnal(@Request() req, @Param('trxId') trxId: string) { - const data = await this.transactionService.rollbackJurnal(trxId); + @Post('rollback-jurnal') + async rollbackJurnal(@Body() request, @Request() req) { + const data = await this.transactionService.rollbackJurnal(request.trxId); return { data, statusCode: HttpStatus.OK, diff --git a/src/transaction/transaction.service.ts b/src/transaction/transaction.service.ts index 6d87697..e33c081 100644 --- a/src/transaction/transaction.service.ts +++ b/src/transaction/transaction.service.ts @@ -3,7 +3,7 @@ import { DistributeTransactionDto } from './dto/distribute-transaction.dto'; import { OrderTransactionDto } from './dto/order-transaction.dto'; import { InjectRepository } from '@nestjs/typeorm'; import { Transactions } from './entities/transactions.entity'; -import { Between, Connection, EntityNotFoundError, Repository } from 'typeorm'; +import { Between, Connection, EntityNotFoundError, In, Repository } from 'typeorm'; import { COA } from './entities/coa.entity'; import { TransactionJournal } from './entities/transaction-journal.entity'; import { CoaService } from './coa.service'; @@ -1317,35 +1317,25 @@ export class TransactionService { return res; } - async rollbackJurnal(trxId: string) { - const dataTransaction = await this.transactionRepository.findOne({ - where: { - id: trxId, - }, - relations: ['product_price'], - }); + async rollbackJurnal(trxId: string[]) { + // const dataTransaction = await this.transactionRepository.findOne({ + // where: { + // id: trxId, + // }, + // relations: ['product_price'], + // }); - let dataTransactionJurnal; - if (dataTransaction.type == typeTransaction.ORDER) { - dataTransactionJurnal = await this.transactionJournalRepository.find({ - where: { - transaction_head: trxId, - }, - relations: ['coa'], - skip: 4, - order: { - createdAt: 'ASC', - }, - }); - } else { - dataTransactionJurnal = await this.transactionJournalRepository.find({ - where: { - transaction_head: trxId, - }, - relations: ['coa'], - }); + if (trxId.length % 2 != 0) { + throw Error("Not Balance") } + const dataTransactionJurnal = await this.transactionJournalRepository.find({ + where: { + id: In(trxId), + }, + relations: ['coa'], + }); + let dataRollbackJurnal = []; dataTransactionJurnal.map((it) => { @@ -1362,20 +1352,20 @@ export class TransactionService { dataRollbackJurnal.push(data); }); - if (dataRollbackJurnal.length > 0) { - try { - await this.connection.transaction(async (manager) => { - await this.accountingTransaction({ - createTransaction: false, - transactionalEntityManager: manager, - transaction: dataTransaction, - amount: dataTransaction.amount, - journals: dataRollbackJurnal, - }); + const dataTransaction = new Transactions(); + + try { + await this.connection.transaction(async (manager) => { + await this.accountingTransaction({ + createTransaction: false, + transactionalEntityManager: manager, + transaction: dataTransaction, + amount: dataTransaction.amount, + journals: dataRollbackJurnal, }); - } catch (e) { - throw e; - } + }); + } catch (e) { + throw e; } }