distribute saldo

This commit is contained in:
Ilham Dwi Pratama S 2021-12-09 03:57:34 +07:00
parent e25f97ee9c
commit 78a2cadb5e
3 changed files with 71 additions and 38 deletions

View File

@ -51,6 +51,24 @@ export class CoaService {
} }
} }
async findByUserWithRelated(id: string, relatedId: string, typeOfCoa: coaType) {
try {
return await this.coaRepository.findOneOrFail({ user: id, type: typeOfCoa, relatedUser:relatedId });
} catch (e) {
if (e instanceof EntityNotFoundError) {
throw new HttpException(
{
statusCode: HttpStatus.NOT_FOUND,
error: 'Coa Data not found',
},
HttpStatus.NOT_FOUND,
);
} else {
throw e;
}
}
}
async findByName(name: string) { async findByName(name: string) {
try { try {
return await this.coaRepository.findOneOrFail({ name: name }); return await this.coaRepository.findOneOrFail({ name: name });

View File

@ -23,8 +23,11 @@ export class TransactionController {
constructor(private readonly transactionService: TransactionService) {} constructor(private readonly transactionService: TransactionService) {}
@Post('distribute') @Post('distribute')
create(@Body() createTransactionDto: DistributeTransactionDto) { create(
return this.transactionService.distributeDeposit(createTransactionDto); @Body() createTransactionDto: DistributeTransactionDto,
@Request() req
) {
return this.transactionService.distributeDeposit(createTransactionDto,req.user);
} }
@Post('distribute-admin') @Post('distribute-admin')

View File

@ -85,7 +85,6 @@ export class TransactionService {
credit: transactionData.amount credit: transactionData.amount
}] }]
}); });
}); });
return true; return true;
@ -135,49 +134,62 @@ export class TransactionService {
return true; return true;
} }
async distributeDeposit(distributeTransactionDto: DistributeTransactionDto) { async distributeDeposit(distributeTransactionDto: DistributeTransactionDto,currentUser:any) {
//GET USER
const userData = await this.userService.findByUsername(currentUser.username);
// GET COA // GET COA
const coaSender = await this.coaService.findByUser( const coaSenderWallet = await this.coaService.findByUser(
'id_user', userData.id,
coaType.WALLET, coaType.WALLET,
); );
const coaReciever = await this.coaService.findByUser(
'id_user', const coaAP = await this.coaService.findByUserWithRelated(
distributeTransactionDto.destination,
userData.id,
coaType.ACCOUNT_PAYABLE,
);
const coaReceiverWallet = await this.coaService.findByUser(
distributeTransactionDto.destination,
coaType.WALLET, coaType.WALLET,
); );
const coaAR = await this.coaService.findByUserWithRelated(
distributeTransactionDto.destination,
userData.id,
coaType.ACCOUNT_RECEIVABLE,
);
await this.connection.transaction(async (manager) => { await this.connection.transaction(async (manager) => {
//INSERT TRANSACTION let transactionData = new Transactions();
const transactionSaved = await manager.insert(Transactions, { transactionData.id = uuid.v4();
amount: distributeTransactionDto.amount, transactionData.amount = distributeTransactionDto.amount,
user: 'id_user', transactionData.user = userData.id,
userDestination: distributeTransactionDto.destination, transactionData.status = statusTransaction.SUCCESS,
status: statusTransaction.SUCCESS, transactionData.type = typeTransaction.DISTRIBUTION,
type: typeTransaction.DISTRIBUTION,
await manager.insert(Transactions, transactionData);
await this.accountingTransaction({
createTransaction: false,
transactionalEntityManager:manager,
transaction: transactionData,
amount: transactionData.amount,
journals: [{
coa_id: coaSenderWallet.id,
debit: transactionData.amount
}, {
coa_id: coaReceiverWallet.id,
credit: transactionData.amount
}, {
coa_id: coaAR.id,
debit: transactionData.amount
}, {
coa_id: coaAP.id,
credit: transactionData.amount
}]
}); });
//INSERT TRANSACTION JOURNAL FOR SENDER
const journalSender = await manager.insert(TransactionJournal, {
amount: distributeTransactionDto.amount,
transaction: transactionSaved.identifiers[0],
coa: coaSender,
type: balanceType.CREDIT,
});
//INSERT TRANSACTION JOURNAL FOR RECEIVER
const journalReceiver = await manager.insert(TransactionJournal, {
amount: distributeTransactionDto.amount,
transaction: transactionSaved.identifiers[0],
coa: coaReciever,
type: balanceType.DEBIT,
});
//UPDATE AMOUNT COA SENDER
coaSender.amount = coaSender.amount - distributeTransactionDto.amount;
await manager.save(coaSender);
coaReciever.amount = coaReciever.amount + distributeTransactionDto.amount;
await manager.save(coaReciever);
}); });
return true; return true;