distribute saldo
This commit is contained in:
parent
e25f97ee9c
commit
78a2cadb5e
|
@ -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 });
|
||||||
|
|
|
@ -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')
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user