diff --git a/src/helper/enum-list.ts b/src/helper/enum-list.ts index 2be8537..e8ffaaf 100644 --- a/src/helper/enum-list.ts +++ b/src/helper/enum-list.ts @@ -11,6 +11,7 @@ export enum typeTransaction { ORDER, DEPOSIT_SUPPLIER, DEPOSIT_RETURN, + WITHDRAW, } export enum productType { @@ -31,6 +32,7 @@ export enum coaType { BUDGET, CONTRA_BUDGET, PROFIT, + WITHDRAW, } export enum balanceType { diff --git a/src/transaction/transaction.controller.ts b/src/transaction/transaction.controller.ts index fe3555a..58c896d 100644 --- a/src/transaction/transaction.controller.ts +++ b/src/transaction/transaction.controller.ts @@ -211,4 +211,13 @@ export class TransactionController { message: 'success', }; } + + @Put('withdraw/:id') + async withdrawProfit(@Param('id', ParseUUIDPipe) id: string, @Request() req) { + return { + data: await this.transactionService.withdrawBenefit(id), + statusCode: HttpStatus.OK, + message: 'success', + }; + } } diff --git a/src/transaction/transaction.service.ts b/src/transaction/transaction.service.ts index 1018caf..0541b9b 100644 --- a/src/transaction/transaction.service.ts +++ b/src/transaction/transaction.service.ts @@ -24,7 +24,6 @@ import { SupplierService } from '../users/supplier/supplier.service'; import { ProductHistoryPriceService } from '../product/history-price/history-price.service'; import { CommissionService } from '../configurable/commission.service'; import { DepositReturnDto } from './dto/deposit_return.dto'; -import { User } from '../users/entities/user.entity'; import { UserDetail } from '../users/entities/user_detail.entity'; interface JournalEntry { @@ -719,6 +718,51 @@ export class TransactionService { }); } + async withdrawBenefit(user) { + const userData = await this.userService.findExist(user); + + const coaProfit = await this.coaService.findByUser(user, coaType.PROFIT); + + const coaBank = await this.coaService.findByName( + `${coaType[coaType.BANK]}-SYSTEM`, + ); + + try { + const transactionData = new Transactions(); + + transactionData.id = uuid.v4(); + transactionData.amount = coaProfit.amount; + transactionData.user = userData.id; + transactionData.status = statusTransaction.APPROVED; + transactionData.type = typeTransaction.WITHDRAW; + + await this.connection.transaction(async (manager) => { + await manager.insert(Transactions, transactionData); + + await this.accountingTransaction({ + createTransaction: false, + transactionalEntityManager: manager, + transaction: transactionData, + amount: transactionData.amount, + journals: [ + { + coa_id: coaBank.id, + credit: transactionData.amount, + }, + { + coa_id: coaProfit.id, + debit: transactionData.amount, + }, + ], + }); + }); + + return transactionData; + } catch (e) { + throw e; + } + } + async calculateCommission(data, totalPrice, userData) { const supervisorData = [];