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) {
try {
return await this.coaRepository.findOneOrFail({ name: name });

View File

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

View File

@ -85,7 +85,6 @@ export class TransactionService {
credit: transactionData.amount
}]
});
});
return true;
@ -135,49 +134,62 @@ export class TransactionService {
return true;
}
async distributeDeposit(distributeTransactionDto: DistributeTransactionDto) {
async distributeDeposit(distributeTransactionDto: DistributeTransactionDto,currentUser:any) {
//GET USER
const userData = await this.userService.findByUsername(currentUser.username);
// GET COA
const coaSender = await this.coaService.findByUser(
'id_user',
const coaSenderWallet = await this.coaService.findByUser(
userData.id,
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,
);
const coaAR = await this.coaService.findByUserWithRelated(
distributeTransactionDto.destination,
userData.id,
coaType.ACCOUNT_RECEIVABLE,
);
await this.connection.transaction(async (manager) => {
//INSERT TRANSACTION
const transactionSaved = await manager.insert(Transactions, {
amount: distributeTransactionDto.amount,
user: 'id_user',
userDestination: distributeTransactionDto.destination,
status: statusTransaction.SUCCESS,
type: typeTransaction.DISTRIBUTION,
let transactionData = new Transactions();
transactionData.id = uuid.v4();
transactionData.amount = distributeTransactionDto.amount,
transactionData.user = userData.id,
transactionData.status = statusTransaction.SUCCESS,
transactionData.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;