add saldo IRS
This commit is contained in:
@@ -20,6 +20,8 @@ import {
|
||||
import { ProductService } from '../product/product.service';
|
||||
import * as irsService from '../helper/irs-service';
|
||||
import { CreateJournalDto } from './dto/create-journal.dto';
|
||||
import { UsersService } from 'src/users/users.service';
|
||||
import { AddSaldoSupplier } from './dto/add-saldo-supplier.dto';
|
||||
|
||||
interface JournalEntry {
|
||||
coa_id: string;
|
||||
@@ -27,7 +29,6 @@ interface JournalEntry {
|
||||
credit?: string;
|
||||
}
|
||||
|
||||
|
||||
@Injectable()
|
||||
export class TransactionService {
|
||||
constructor(
|
||||
@@ -41,9 +42,55 @@ export class TransactionService {
|
||||
private coaRepository: Repository<COA>,
|
||||
private coaService: CoaService,
|
||||
private productService: ProductService,
|
||||
private userService: UsersService,
|
||||
private connection: Connection,
|
||||
) {}
|
||||
|
||||
async addIRSWallet(addSaldoSupplier: AddSaldoSupplier,currentUser:any) {
|
||||
// GET COA
|
||||
const coaBank = await this.coaService.findByName(
|
||||
coaType[coaType.BANK]+'-SYSTEM',
|
||||
);
|
||||
|
||||
const coaInventory = await this.coaService.findByName(
|
||||
coaType[coaType.INVENTORY]+'-'+addSaldoSupplier.supplier,
|
||||
);
|
||||
console.log(coaInventory);
|
||||
|
||||
//GET USER
|
||||
const userData = await this.userService.findByUsername(currentUser.username);
|
||||
|
||||
|
||||
await this.connection.transaction(async (manager) => {
|
||||
//INSERT TRANSACTION
|
||||
let transactionData = new Transactions();
|
||||
transactionData.id = uuid.v4();
|
||||
transactionData.amount = addSaldoSupplier.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: coaBank.id,
|
||||
debit: transactionData.amount
|
||||
}, {
|
||||
coa_id: coaInventory.id,
|
||||
credit: transactionData.amount
|
||||
}]
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
async distributeDeposit(distributeTransactionDto: DistributeTransactionDto) {
|
||||
// GET COA
|
||||
const coaSender = await this.coaService.findByUser(
|
||||
@@ -158,9 +205,6 @@ export class TransactionService {
|
||||
}
|
||||
|
||||
async accountingTransaction(createJournalDto: CreateJournalDto ) {
|
||||
|
||||
createJournalDto.transactionId = createJournalDto.transactionId ?? uuid.v4();
|
||||
|
||||
let creditSum = createJournalDto.journals.map(it => it.credit).filter(it => it).reduce((a, b) => a.plus(b), new Decimal(0));
|
||||
let debitSum = createJournalDto.journals.map(it => it.debit).filter(it => it).reduce((a, b) => a.plus(b), new Decimal(0));
|
||||
let coaIds = uniq(createJournalDto.journals.map(it => it.coa_id));
|
||||
@@ -171,20 +215,9 @@ export class TransactionService {
|
||||
|
||||
const coas = await this.coaRepository.findByIds(coaIds);
|
||||
|
||||
let transaction: Transactions;
|
||||
console.log("berhasil")
|
||||
|
||||
if(createJournalDto.createTransaction) {
|
||||
transaction = new Transactions();
|
||||
transaction.id = createJournalDto.transactionId;
|
||||
transaction.type = createJournalDto.type;
|
||||
transaction.amount = createJournalDto.amount;
|
||||
transaction.user = createJournalDto.userId;
|
||||
transaction.status = createJournalDto.transactionStatus;
|
||||
|
||||
await this.transactionRepository.save(transaction);
|
||||
} else {
|
||||
transaction = await this.transactionRepository.findOneOrFail(createJournalDto.transactionId);
|
||||
}
|
||||
const transaction = createJournalDto.transaction
|
||||
|
||||
await Promise.all(createJournalDto.journals.map(journal => {
|
||||
const coa = coas.find(it => it.id === journal.coa_id);
|
||||
|
||||
Reference in New Issue
Block a user