add: withdraw

This commit is contained in:
ilham 2021-12-23 22:33:25 +07:00
parent 7b0056f2ae
commit c5e1df20b8
3 changed files with 56 additions and 1 deletions

View File

@ -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 {

View File

@ -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',
};
}
}

View File

@ -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 = [];