add saldo IRS
This commit is contained in:
parent
84fda27e2d
commit
1f44cf484c
15
.vscode/launch.json
vendored
Normal file
15
.vscode/launch.json
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
// Use IntelliSense to learn about possible attributes.
|
||||||
|
// Hover to view descriptions of existing attributes.
|
||||||
|
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||||
|
"version": "0.2.0",
|
||||||
|
"configurations": [
|
||||||
|
{
|
||||||
|
"type": "pwa-chrome",
|
||||||
|
"request": "launch",
|
||||||
|
"name": "Launch Chrome against localhost",
|
||||||
|
"url": "http://localhost:8080",
|
||||||
|
"webRoot": "${workspaceFolder}"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
|
@ -8,7 +8,6 @@ export enum typeTransaction {
|
||||||
DISTRIBUTION,
|
DISTRIBUTION,
|
||||||
ORDER,
|
ORDER,
|
||||||
DEPOSIT_IRS,
|
DEPOSIT_IRS,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export enum productType {
|
export enum productType {
|
||||||
|
|
|
@ -50,4 +50,22 @@ export class CoaService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async findByName(name: string) {
|
||||||
|
try {
|
||||||
|
return await this.coaRepository.findOneOrFail({ name: name });
|
||||||
|
} catch (e) {
|
||||||
|
if (e instanceof EntityNotFoundError) {
|
||||||
|
throw new HttpException(
|
||||||
|
{
|
||||||
|
statusCode: HttpStatus.NOT_FOUND,
|
||||||
|
error: 'COA Data not found',
|
||||||
|
},
|
||||||
|
HttpStatus.NOT_FOUND,
|
||||||
|
);
|
||||||
|
} else {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
12
src/transaction/dto/add-saldo-supplier.dto.ts
Normal file
12
src/transaction/dto/add-saldo-supplier.dto.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { IsNotEmpty, IsUUID } from 'class-validator';
|
||||||
|
import { balanceType, coaType, statusTransaction, typeTransaction } from 'src/helper/enum-list';
|
||||||
|
import { EntityManager } from 'typeorm';
|
||||||
|
|
||||||
|
|
||||||
|
export class AddSaldoSupplier {
|
||||||
|
@IsNotEmpty()
|
||||||
|
supplier?: string;
|
||||||
|
|
||||||
|
@IsNotEmpty()
|
||||||
|
amount?: number;
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
import { IsNotEmpty, IsUUID } from 'class-validator';
|
import { IsNotEmpty, IsUUID } from 'class-validator';
|
||||||
import { balanceType, coaType, statusTransaction, typeTransaction } from 'src/helper/enum-list';
|
import { balanceType, coaType, statusTransaction, typeTransaction } from 'src/helper/enum-list';
|
||||||
import { EntityManager } from 'typeorm';
|
import { EntityManager } from 'typeorm';
|
||||||
|
import { Transactions } from '../entities/transactions.entity';
|
||||||
|
|
||||||
interface JournalEntry {
|
interface JournalEntry {
|
||||||
coa_id: string;
|
coa_id: string;
|
||||||
|
@ -19,7 +20,7 @@ export class CreateJournalDto {
|
||||||
userId?: string;
|
userId?: string;
|
||||||
|
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
transactionId?: string;
|
transaction?: Transactions;
|
||||||
|
|
||||||
@IsNotEmpty()
|
@IsNotEmpty()
|
||||||
type?: typeTransaction;
|
type?: typeTransaction;
|
||||||
|
|
|
@ -6,11 +6,14 @@ import {
|
||||||
Patch,
|
Patch,
|
||||||
Param,
|
Param,
|
||||||
Delete,
|
Delete,
|
||||||
|
Request,
|
||||||
|
HttpStatus
|
||||||
} from '@nestjs/common';
|
} from '@nestjs/common';
|
||||||
import { TransactionService } from './transaction.service';
|
import { TransactionService } from './transaction.service';
|
||||||
import { DistributeTransactionDto } from './dto/distribute-transaction.dto';
|
import { DistributeTransactionDto } from './dto/distribute-transaction.dto';
|
||||||
import { OrderTransactionDto } from './dto/order-transaction.dto';
|
import { OrderTransactionDto } from './dto/order-transaction.dto';
|
||||||
import { UpdateTransactionDto } from './dto/update-transaction.dto';
|
import { UpdateTransactionDto } from './dto/update-transaction.dto';
|
||||||
|
import { AddSaldoSupplier } from './dto/add-saldo-supplier.dto';
|
||||||
|
|
||||||
@Controller({
|
@Controller({
|
||||||
path: 'transaction',
|
path: 'transaction',
|
||||||
|
@ -24,6 +27,20 @@ export class TransactionController {
|
||||||
return this.transactionService.distributeDeposit(createTransactionDto);
|
return this.transactionService.distributeDeposit(createTransactionDto);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Post('add-saldo-supplier')
|
||||||
|
async addSaldoSupplier(
|
||||||
|
@Body() addSaldoSupplier: AddSaldoSupplier,
|
||||||
|
@Request() req
|
||||||
|
) {
|
||||||
|
|
||||||
|
return {
|
||||||
|
data: await this.transactionService.addIRSWallet(addSaldoSupplier,req.user),
|
||||||
|
statusCode: HttpStatus.CREATED,
|
||||||
|
message: 'success',
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Post('order')
|
@Post('order')
|
||||||
orderTransaction(@Body() orderTransactionDto: OrderTransactionDto) {
|
orderTransaction(@Body() orderTransactionDto: OrderTransactionDto) {
|
||||||
return this.transactionService.orderTransaction(orderTransactionDto);
|
return this.transactionService.orderTransaction(orderTransactionDto);
|
||||||
|
|
|
@ -20,6 +20,8 @@ import {
|
||||||
import { ProductService } from '../product/product.service';
|
import { ProductService } from '../product/product.service';
|
||||||
import * as irsService from '../helper/irs-service';
|
import * as irsService from '../helper/irs-service';
|
||||||
import { CreateJournalDto } from './dto/create-journal.dto';
|
import { CreateJournalDto } from './dto/create-journal.dto';
|
||||||
|
import { UsersService } from 'src/users/users.service';
|
||||||
|
import { AddSaldoSupplier } from './dto/add-saldo-supplier.dto';
|
||||||
|
|
||||||
interface JournalEntry {
|
interface JournalEntry {
|
||||||
coa_id: string;
|
coa_id: string;
|
||||||
|
@ -27,7 +29,6 @@ interface JournalEntry {
|
||||||
credit?: string;
|
credit?: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class TransactionService {
|
export class TransactionService {
|
||||||
constructor(
|
constructor(
|
||||||
|
@ -41,9 +42,55 @@ export class TransactionService {
|
||||||
private coaRepository: Repository<COA>,
|
private coaRepository: Repository<COA>,
|
||||||
private coaService: CoaService,
|
private coaService: CoaService,
|
||||||
private productService: ProductService,
|
private productService: ProductService,
|
||||||
|
private userService: UsersService,
|
||||||
private connection: Connection,
|
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) {
|
async distributeDeposit(distributeTransactionDto: DistributeTransactionDto) {
|
||||||
// GET COA
|
// GET COA
|
||||||
const coaSender = await this.coaService.findByUser(
|
const coaSender = await this.coaService.findByUser(
|
||||||
|
@ -158,9 +205,6 @@ export class TransactionService {
|
||||||
}
|
}
|
||||||
|
|
||||||
async accountingTransaction(createJournalDto: CreateJournalDto ) {
|
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 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 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));
|
let coaIds = uniq(createJournalDto.journals.map(it => it.coa_id));
|
||||||
|
@ -171,20 +215,9 @@ export class TransactionService {
|
||||||
|
|
||||||
const coas = await this.coaRepository.findByIds(coaIds);
|
const coas = await this.coaRepository.findByIds(coaIds);
|
||||||
|
|
||||||
let transaction: Transactions;
|
console.log("berhasil")
|
||||||
|
|
||||||
if(createJournalDto.createTransaction) {
|
const transaction = createJournalDto.transaction
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
await Promise.all(createJournalDto.journals.map(journal => {
|
await Promise.all(createJournalDto.journals.map(journal => {
|
||||||
const coa = coas.find(it => it.id === journal.coa_id);
|
const coa = coas.find(it => it.id === journal.coa_id);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user