diff --git a/src/helper/irs-api.ts b/src/helper/irs-api.ts index 3357f4e..bef4935 100644 --- a/src/helper/irs-api.ts +++ b/src/helper/irs-api.ts @@ -7,28 +7,46 @@ const irs_user = 'D10BD0'; const irs_pass = '6251F3'; export const doTransaction = async ( - productCode, - destination, - idtrx, - supplier, + productCode, + destination, + idtrx, + supplier, + authorization, + typePaid, ) => { try { - if(supplier.code == 'IRS'){ + if (supplier.code == 'IRS') { const res = await axios.get( - `${irs_url}?id=${irs_id}&pin=${irs_pin}&user=${irs_user}&pass=${irs_pass}&kodeproduk=${productCode}&tujuan=${destination}&counter=1&idtrx=${idtrx}`, + `${irs_url}?id=${irs_id}&pin=${irs_pin}&user=${irs_user}&pass=${irs_pass}&kodeproduk=${productCode}&tujuan=${destination}&counter=1&idtrx=${idtrx}`, ); + return res.data; } else if (supplier.code == 'NIRS') { const res = await axios.get( `${supplier.url}?id=${supplier.irs_id}&pin=${supplier.irs_pin}&user=${supplier.irs_user}&pass=${supplier.irs_pass}&kodeproduk=${productCode}&tujuan=${destination}&counter=1&idtrx=${idtrx}`, ); + return res.data; - } else { - const res = await axios.get( - `${supplier.url}?memberID=${supplier.irs_id}&pin=${supplier.irs_pin}&password=${supplier.irs_pass}&product=${productCode}&dest=${destination}&counter=1&refID=${idtrx}`, - ); + } else if (supplier.code == 'Hemat') { + const options = { + headers: { Authorization: `${authorization}` }, + }; + const data = { + idtransaction: idtrx, + destination: `${destination}`, + code: `${productCode}`, + type: `${typePaid}`, + }; + const res = await axios.post(`${supplier.url}`, data, options); + return res.data; } + + const res = await axios.get( + `${supplier.url}?memberID=${supplier.irs_id}&pin=${supplier.irs_pin}&password=${supplier.irs_pass}&product=${productCode}&dest=${destination}&counter=1&refID=${idtrx}`, + ); + + return res.data; } catch (err) { throw err; } diff --git a/src/helper/sihemat-authorization.ts b/src/helper/sihemat-authorization.ts new file mode 100644 index 0000000..f9b7511 --- /dev/null +++ b/src/helper/sihemat-authorization.ts @@ -0,0 +1,15 @@ +import axios from 'axios'; + +export const doAuthorizeHemat = async (user, pass, supplier) => { + try { + const data = { + username: `${user}`, + password: `${pass}`, + }; + const res = await axios.post(`${supplier.url}`, data); + + return res.data; + } catch (err) { + throw err; + } +}; diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 0d328f1..6b0f31a 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -17,21 +17,21 @@ import { ProductHistoryStatus } from './entities/product-history-status.entity'; export class ProductService { constructor( - @InjectRepository(Product) - private productRepository: Repository, - @InjectRepository(ProductHistoryPrice) - private productHistoryPrice: Repository, - @InjectRepository(ProductHistoryStatus) - private productHistoryStatus: Repository, - private productSubCategoriesService: ProductSubCategoriesService, - private usersService: UsersService, - private supplierService: SupplierService, - private partnerService: PartnerService, + @InjectRepository(Product) + private productRepository: Repository, + @InjectRepository(ProductHistoryPrice) + private productHistoryPrice: Repository, + @InjectRepository(ProductHistoryStatus) + private productHistoryStatus: Repository, + private productSubCategoriesService: ProductSubCategoriesService, + private usersService: UsersService, + private supplierService: SupplierService, + private partnerService: PartnerService, ) {} async create(createProductDto: CreateProductDto) { const subCategories = await this.productSubCategoriesService.findOne( - createProductDto.subCategoriesId, + createProductDto.subCategoriesId, ); const result = await this.productRepository.insert({ @@ -66,7 +66,7 @@ export class ProductService { let productStatusPartner; const subCategories = - await this.productSubCategoriesService.findOneForCSVParser(it[2]); + await this.productSubCategoriesService.findOneForCSVParser(it[2]); if (!subCategories) { return; @@ -193,10 +193,10 @@ export class ProductService { } async findAll( - page: number, - supplier: string, - subCategories: string, - pageSize?: number, + page: number, + supplier: string, + subCategories: string, + pageSize?: number, ) { let filterSupplier, filterSubCategories; @@ -213,40 +213,40 @@ export class ProductService { } const baseQuery = this.productRepository - .createQueryBuilder('product') - .leftJoin('product.sub_categories', 'sub_categories') - .leftJoin('sub_categories.category', 'category') - .leftJoin('product.supplier', 'supplier') - .where('supplier.status = :status', { status: true }) - .innerJoinAndMapOne( - 'product.currentPrice', - 'product.priceHistory', - 'current_price', - 'current_price.end_date is NULL', - ) - .innerJoinAndMapOne( - 'product.currentStatus', - 'product.statusHistory', - 'history_status', - 'history_status.deleted_at is NULL', - ) - .select(['product.id']) - .addSelect([ - 'product.name', - 'product.code', - 'sub_categories.name', - 'supplier.name', - 'category.name', - ]) - .addSelect('history_status.status', 'status') - .addSelect('current_price.price', 'price') - .addSelect('current_price.partner_fee', 'partner_fee') - .addSelect('current_price.admin_price', 'admin_price') - .addSelect( - '(current_price.price + current_price.mark_up_price) as mark_up_price', - ) - .orderBy('product.code') - .distinct(); + .createQueryBuilder('product') + .leftJoin('product.sub_categories', 'sub_categories') + .leftJoin('sub_categories.category', 'category') + .leftJoin('product.supplier', 'supplier') + .where('supplier.status = :status', { status: true }) + .innerJoinAndMapOne( + 'product.currentPrice', + 'product.priceHistory', + 'current_price', + 'current_price.end_date is NULL', + ) + .innerJoinAndMapOne( + 'product.currentStatus', + 'product.statusHistory', + 'history_status', + 'history_status.deleted_at is NULL', + ) + .select(['product.id']) + .addSelect([ + 'product.name', + 'product.code', + 'sub_categories.name', + 'supplier.name', + 'category.name', + ]) + .addSelect('history_status.status', 'status') + .addSelect('current_price.price', 'price') + .addSelect('current_price.partner_fee', 'partner_fee') + .addSelect('current_price.admin_price', 'admin_price') + .addSelect( + '(current_price.price + current_price.mark_up_price) as mark_up_price', + ) + .orderBy('product.code') + .distinct(); if (subCategories && filterSubCategories.length > 0) { baseQuery.where('product.sub_categories_id IN (:...subCategoryId)', { @@ -261,9 +261,9 @@ export class ProductService { } const data = await baseQuery - .offset(page * (pageSize || 10)) - .limit(pageSize || 10) - .getRawMany(); + .offset(page * (pageSize || 10)) + .limit(pageSize || 10) + .getRawMany(); const totalData = await baseQuery.getCount(); @@ -275,26 +275,26 @@ export class ProductService { async findAllByCategories(page, subCategories, supplier) { const baseQuery = this.productRepository - .createQueryBuilder('product') - .leftJoin('product.sub_categories', 'sub_categories') - .where( - 'sub_categories.category_id = :id and product.supplier_id = :supplier_id', - { - id: subCategories, - supplier_id: supplier, - }, - ) - .leftJoinAndMapOne( - 'product.currentPrice', - 'product.priceHistory', - 'current_price', - 'current_price.partner_id is null', - ); + .createQueryBuilder('product') + .leftJoin('product.sub_categories', 'sub_categories') + .where( + 'sub_categories.category_id = :id and product.supplier_id = :supplier_id', + { + id: subCategories, + supplier_id: supplier, + }, + ) + .leftJoinAndMapOne( + 'product.currentPrice', + 'product.priceHistory', + 'current_price', + 'current_price.partner_id is null', + ); const data = await baseQuery - .skip(page * 10) - .take(10) - .getMany(); + .skip(page * 10) + .take(10) + .getMany(); const totalData = await baseQuery.getCount(); @@ -312,18 +312,18 @@ export class ProductService { console.log(supplier, 'asldklaksd') const baseQuery = this.productRepository - .createQueryBuilder('product') - .leftJoin('product.sub_categories', 'sub_categories') + .createQueryBuilder('product') + .leftJoin('product.sub_categories', 'sub_categories') .leftJoin('product.supplier', 'supplier') // .leftJoin('product.statusHistory', 'status_history') - .leftJoinAndMapOne( - 'product.currentPrice', - 'product.priceHistory', - 'current_price', - 'current_price.partner_id is NULL and current_price.end_date is NULL', - ) + .leftJoinAndMapOne( + 'product.currentPrice', + 'product.priceHistory', + 'current_price', + 'current_price.partner_id is NULL and current_price.end_date is NULL', + ) .innerJoinAndMapOne( 'product.currentStatus', 'product.statusHistory', @@ -333,12 +333,12 @@ export class ProductService { status: 'ACTIVE', }, ) - // .where( - // `product.supplier_id = :supplier_id`, - // { - // supplier_id: supplier, - // }, - // ) + // .where( + // `product.supplier_id = :supplier_id`, + // { + // supplier_id: supplier, + // }, + // ) .where( `history_status.partner_id is NULL`, { @@ -351,14 +351,14 @@ export class ProductService { status: true, }, ) - .select(['product.id']) - .addSelect(['product.name', 'product.code', 'sub_categories.name']) - .addSelect('(current_price.price + current_price.mark_up_price) as price') + .select(['product.id']) + .addSelect(['product.name', 'product.code', 'sub_categories.name']) + .addSelect('(current_price.price + current_price.mark_up_price) as price') .addSelect('product.supplier_id', 'supplier') .addSelect('supplier.status', 'status') .addSelect('history_status.partner_id', 'partner') .orderBy('price', 'ASC') - .distinct(); + .distinct(); if (subCategories != 'null' && subCategories) { baseQuery.andWhere('product.sub_categories_id = :id', { @@ -367,9 +367,9 @@ export class ProductService { } const data = await baseQuery - .offset(page * 1000) - .limit(1000) - .getRawMany(); + .offset(page * 1000) + .limit(1000) + .getRawMany(); const totalData = await baseQuery.getCount(); @@ -380,10 +380,10 @@ export class ProductService { } async findAllForPartner( - page: number, - pageSize: number, - subCategories: string, - username: string, + page: number, + pageSize: number, + subCategories: string, + username: string, ) { let filterSubCategories; const user = await this.usersService.findOneByUsername(username); @@ -396,68 +396,68 @@ export class ProductService { if (user.partner === null) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Partner id not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Partner id not found', + }, + HttpStatus.NOT_FOUND, ); } const baseQuery = await this.productRepository - .createQueryBuilder('product') - .leftJoin('product.sub_categories', 'sub_categories') + .createQueryBuilder('product') + .leftJoin('product.sub_categories', 'sub_categories') .leftJoin('product.supplier', 'supplier') // .leftJoinAndSelect( - // 'product.supplier', - // 'supplier', - // 'supplier.status = true', - // { - // status: true - // } - // - // ) - .innerJoinAndMapOne( - 'product.currentPrice', - 'product.priceHistory', - 'current_price', - 'current_price.partner_id = :id_partner and current_price.end_date is NULL', - { - id_partner: user.partner.id, - }, - ) - .innerJoinAndMapOne( - 'product.currentStatus', - 'product.statusHistory', - 'history_status', - 'history_status.partner_id = :id_partner and history_status.deleted_at is NULL', - { - id_partner: user.partner.id, - }, - ) - // .where(`history_status.partner_id = :id_partner`, { - // partner: user.partner.id, - // }) - .where(`history_status.status = 'ACTIVE'`, { - status: 'ACTIVE', - }) + // 'product.supplier', + // 'supplier', + // 'supplier.status = true', + // { + // status: true + // } + // + // ) + .innerJoinAndMapOne( + 'product.currentPrice', + 'product.priceHistory', + 'current_price', + 'current_price.partner_id = :id_partner and current_price.end_date is NULL', + { + id_partner: user.partner.id, + }, + ) + .innerJoinAndMapOne( + 'product.currentStatus', + 'product.statusHistory', + 'history_status', + 'history_status.partner_id = :id_partner and history_status.deleted_at is NULL', + { + id_partner: user.partner.id, + }, + ) + // .where(`history_status.partner_id = :id_partner`, { + // partner: user.partner.id, + // }) + .where(`history_status.status = 'ACTIVE'`, { + status: 'ACTIVE', + }) .andWhere('supplier.status = TRUE', { status: true }) - .select(['product.id']) - .addSelect([ - 'product.name', - 'product.code', - 'product.type', - 'product.supplier_id', - 'sub_categories.name', - 'current_price.admin_price as admin_price', - 'current_price.mark_up_price as markup_price', - 'current_price.partner_fee as partner_fee', - 'current_price.price as price', - ]) - .addSelect('history_status.status', 'status') - .distinct(); + .select(['product.id']) + .addSelect([ + 'product.name', + 'product.code', + 'product.type', + 'product.supplier_id', + 'sub_categories.name', + 'current_price.admin_price as admin_price', + 'current_price.mark_up_price as markup_price', + 'current_price.partner_fee as partner_fee', + 'current_price.price as price', + ]) + .addSelect('history_status.status', 'status') + .distinct(); // .addSelect( // '(current_price.price + current_price.mark_up_price) as price', // ); @@ -474,18 +474,18 @@ export class ProductService { if (subCategories && filterSubCategories.length > 0) { baseQuery - .where('product.sub_categories_id IN (:...subCategoryId)', { - subCategoryId: filterSubCategories, - }) - .andWhere(`history_status.status = 'ACTIVE'`); + .where('product.sub_categories_id IN (:...subCategoryId)', { + subCategoryId: filterSubCategories, + }) + .andWhere(`history_status.status = 'ACTIVE'`); } const newData = []; const data = await baseQuery - .offset(page * pageSize) - .limit(pageSize) - .getRawMany(); + .offset(page * pageSize) + .limit(pageSize) + .getRawMany(); data.map((dataa) => { let actualPrice = 0; @@ -496,8 +496,8 @@ export class ProductService { if (dataa.product_type === 'postpaid') { actualPrice = - Number(dataa['admin_price']) - - (Number(dataa['partner_fee']) + Number(dataa['markup_price'])); + Number(dataa['admin_price']) - + (Number(dataa['partner_fee']) + Number(dataa['markup_price'])); } dataa.price = actualPrice; @@ -515,22 +515,23 @@ export class ProductService { }; } - async findOne(code: string, type: string) { + async findOne(code: string, type: string, productId: string) { try { return await this.productRepository.findOneOrFail({ relations: ['supplier'], where: { code: code, + id: productId }, }); } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Product not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Product not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e; @@ -539,31 +540,31 @@ export class ProductService { } async findOneActive( - code: string, - type: string, - productId: string + code: string, + type: string, + productId: string ) { - try { - return await this.productRepository.findOneOrFail({ - relations: ['supplier'], - where: { - code: code, - id: productId - }, - }); - } catch (e) { - if (e instanceof EntityNotFoundError) { - throw new HttpException( + try { + return await this.productRepository.findOneOrFail({ + relations: ['supplier'], + where: { + code: code, + id: productId + }, + }); + } catch (e) { + if (e instanceof EntityNotFoundError) { + throw new HttpException( { statusCode: HttpStatus.NOT_FOUND, error: 'Product not found', }, HttpStatus.NOT_FOUND, - ); - } else { - throw e; - } + ); + } else { + throw e; } + } } @@ -578,11 +579,11 @@ export class ProductService { } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Product not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Product not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e; @@ -596,11 +597,11 @@ export class ProductService { } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Product not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Product not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e; @@ -608,7 +609,7 @@ export class ProductService { } const subCategories = await this.productSubCategoriesService.findOne( - updateProductDto.subCategoriesId, + updateProductDto.subCategoriesId, ); const dataStatus = await this.productHistoryStatus.findOne({ @@ -632,19 +633,19 @@ export class ProductService { } async updatePrice( - code: string, - updatePriceProductDto: UpdatePriceProductDto, + code: string, + updatePriceProductDto: UpdatePriceProductDto, ) { - const product = await this.findOne(code, updatePriceProductDto.productType); + // const product = await this.findOne(code, updatePriceProductDto.productType); - await this.productHistoryPrice.insert({ - product: product, - type: updatePriceProductDto.type, - price: updatePriceProductDto.price, - mark_up_price: updatePriceProductDto.markUpPrice, - startDate: updatePriceProductDto.startDate, - endDate: updatePriceProductDto.endDate, - }); + // await this.productHistoryPrice.insert({ + // product: product, + // type: updatePriceProductDto.type, + // price: updatePriceProductDto.price, + // mark_up_price: updatePriceProductDto.markUpPrice, + // startDate: updatePriceProductDto.startDate, + // endDate: updatePriceProductDto.endDate, + // }); return true; } @@ -655,11 +656,11 @@ export class ProductService { } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Product not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Product not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e; diff --git a/src/transaction/transaction.service.ts b/src/transaction/transaction.service.ts index 006bcef..3a8d02d 100644 --- a/src/transaction/transaction.service.ts +++ b/src/transaction/transaction.service.ts @@ -1,81 +1,93 @@ -import {HttpException, HttpStatus, Injectable, Logger} from '@nestjs/common'; -import {DistributeTransactionDto} from './dto/distribute-transaction.dto'; -import {OrderTransactionDto} from './dto/order-transaction.dto'; -import {InjectRepository} from '@nestjs/typeorm'; -import {Transactions} from './entities/transactions.entity'; -import {Between, Connection, EntityNotFoundError, In, Repository} from 'typeorm'; -import {COA} from './entities/coa.entity'; -import {TransactionJournal} from './entities/transaction-journal.entity'; -import {CoaService} from './coa.service'; +import { HttpException, HttpStatus, Injectable, Logger } from '@nestjs/common'; +import { DistributeTransactionDto } from './dto/distribute-transaction.dto'; +import { OrderTransactionDto } from './dto/order-transaction.dto'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Transactions } from './entities/transactions.entity'; +import { + Between, + Connection, + EntityNotFoundError, + In, + Repository, +} from 'typeorm'; +import { COA } from './entities/coa.entity'; +import { TransactionJournal } from './entities/transaction-journal.entity'; +import { CoaService } from './coa.service'; import * as uuid from 'uuid'; -import {uniq} from 'lodash'; -import {Decimal} from 'decimal.js'; -import {balanceType, coaType, statusTransaction, typeTransaction,} from '../helper/enum-list'; -import {ProductService} from '../product/product.service'; -import {CreateJournalDto} from './dto/create-journal.dto'; -import {UsersService} from 'src/users/users.service'; -import {AddSaldoSupplier} from './dto/add-saldo-supplier.dto'; -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 {UserDetail} from '../users/entities/user_detail.entity'; -import {doTransaction} from '../helper/irs-api'; -import {ProductHistoryPrice} from '../product/entities/product-history-price.entity'; +import { uniq } from 'lodash'; +import { Decimal } from 'decimal.js'; +import { + balanceType, + coaType, + statusTransaction, + typeTransaction, +} from '../helper/enum-list'; +import { ProductService } from '../product/product.service'; +import { CreateJournalDto } from './dto/create-journal.dto'; +import { UsersService } from 'src/users/users.service'; +import { AddSaldoSupplier } from './dto/add-saldo-supplier.dto'; +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 { UserDetail } from '../users/entities/user_detail.entity'; +import { doTransaction } from '../helper/irs-api'; +import { ProductHistoryPrice } from '../product/entities/product-history-price.entity'; import axios from 'axios'; -import {CheckBillHistory} from './entities/check-bill-history.entity'; -import {CallbackPartner} from './entities/callback-partner.entity'; +import { CheckBillHistory } from './entities/check-bill-history.entity'; +import { CallbackPartner } from './entities/callback-partner.entity'; +import { doAuthorizeHemat } from '../helper/sihemat-authorization'; @Injectable() export class TransactionService { private readonly logger = new Logger(TransactionService.name); constructor( - @InjectRepository(Transactions) - private transactionRepository: Repository, - @InjectRepository(TransactionJournal) - private transactionJournalRepository: Repository, - @InjectRepository(ProductHistoryPrice) - private productPriceRepository: Repository, - @InjectRepository(COA) - private coaRepository: Repository, - @InjectRepository(CheckBillHistory) - private checkBillHistoryRepository: Repository, - @InjectRepository(CallbackPartner) - private callbackPartnerRepository: Repository, - private coaService: CoaService, - private productService: ProductService, - private productHistoryPriceService: ProductHistoryPriceService, - private userService: UsersService, - private commissionService: CommissionService, - private supplierService: SupplierService, - private connection: Connection, + @InjectRepository(Transactions) + private transactionRepository: Repository, + @InjectRepository(TransactionJournal) + private transactionJournalRepository: Repository, + @InjectRepository(ProductHistoryPrice) + private productPriceRepository: Repository, + @InjectRepository(COA) + private coaRepository: Repository, + @InjectRepository(CheckBillHistory) + private checkBillHistoryRepository: Repository, + @InjectRepository(CallbackPartner) + private callbackPartnerRepository: Repository, + private coaService: CoaService, + private productService: ProductService, + private productHistoryPriceService: ProductHistoryPriceService, + private userService: UsersService, + private commissionService: CommissionService, + private supplierService: SupplierService, + private connection: Connection, ) {} async addSupplierSaldo(addSaldoSupplier: AddSaldoSupplier, currentUser: any) { const supplier = await this.supplierService.findByCode( - addSaldoSupplier.supplier, + addSaldoSupplier.supplier, ); // GET COA const coaBank = await this.coaService.findByName( - `${coaType[coaType.BANK]}-SYSTEM`, + `${coaType[coaType.BANK]}-SYSTEM`, ); const coaInventory = await this.coaService.findByName( - `${coaType[coaType.INVENTORY]}-${supplier.code}`, + `${coaType[coaType.INVENTORY]}-${supplier.code}`, ); const coaBudget = await this.coaService.findByName( - `${coaType[coaType.BUDGET]}-${supplier.code}`, + `${coaType[coaType.BUDGET]}-${supplier.code}`, ); const coaContraBudget = await this.coaService.findByName( - `${coaType[coaType.CONTRA_BUDGET]}-${supplier.code}`, + `${coaType[coaType.CONTRA_BUDGET]}-${supplier.code}`, ); //GET USER const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); await this.connection.transaction(async (manager) => { @@ -121,12 +133,12 @@ export class TransactionService { } async distributeFromAdmin( - distributeTransactionDto: DistributeTransactionDto, - currentUser: any, + distributeTransactionDto: DistributeTransactionDto, + currentUser: any, ) { //GET USER const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); const supplier = await this.supplierService.findByActive(); @@ -134,41 +146,43 @@ export class TransactionService { try { if (userData.roles.name != 'Admin') { throw new HttpException( - { - statusCode: HttpStatus.NOT_ACCEPTABLE, - error: 'Roles Not Admin', - }, - HttpStatus.NOT_ACCEPTABLE, + { + statusCode: HttpStatus.NOT_ACCEPTABLE, + error: 'Roles Not Admin', + }, + HttpStatus.NOT_ACCEPTABLE, ); } // GET COA const coaBudget = await this.coaService.findByName( - `${coaType[coaType.BUDGET]}-${supplier.code}`, + `${coaType[coaType.BUDGET]}-${supplier.code}`, ); if (coaBudget.amount < distributeTransactionDto.amount) { throw new HttpException( - { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: `Transaction Failed because saldo not enough`, - }, - HttpStatus.INTERNAL_SERVER_ERROR, + { + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: `Transaction Failed because saldo not enough`, + }, + HttpStatus.INTERNAL_SERVER_ERROR, ); } const coaContraBudget = await this.coaService.findByName( - `${coaType[coaType.CONTRA_BUDGET]}-${supplier.code}`, + `${coaType[coaType.CONTRA_BUDGET]}-${supplier.code}`, ); const coaAR = await this.coaService.findByTwoUser( - distributeTransactionDto.destination, - currentUser.userId, - coaType.ACCOUNT_RECEIVABLE, + distributeTransactionDto.destination, + currentUser.userId, + coaType.ACCOUNT_RECEIVABLE, ); - console.log('coamsk1', 'coa') + + console.log('coamsk1', 'coa'); + const coaWallet = await this.coaService.findByUser( - distributeTransactionDto.destination, - coaType.WALLET, + distributeTransactionDto.destination, + coaType.WALLET, ); await this.connection.transaction(async (manager) => { @@ -218,46 +232,48 @@ export class TransactionService { } async distributeDeposit( - distributeTransactionDto: DistributeTransactionDto, - currentUser: any, + distributeTransactionDto: DistributeTransactionDto, + currentUser: any, ) { //GET USER const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); // GET COA - console.log('coamsk2', 'coa') + console.log('coamsk2', 'coa'); + const coaSenderWallet = await this.coaService.findByUser( - userData.id, - coaType.WALLET, + userData.id, + coaType.WALLET, ); const coaAP = await this.coaService.findByUserWithRelated( - distributeTransactionDto.destination, - userData.id, - coaType.ACCOUNT_PAYABLE, + distributeTransactionDto.destination, + userData.id, + coaType.ACCOUNT_PAYABLE, ); - console.log('coamsk3', 'coa') + console.log('coamsk3', 'coa'); + const coaReceiverWallet = await this.coaService.findByUser( - distributeTransactionDto.destination, - coaType.WALLET, + distributeTransactionDto.destination, + coaType.WALLET, ); const coaAR = await this.coaService.findByUserWithRelated( - distributeTransactionDto.destination, - userData.id, - coaType.ACCOUNT_RECEIVABLE, + distributeTransactionDto.destination, + userData.id, + coaType.ACCOUNT_RECEIVABLE, ); if (coaSenderWallet.amount < distributeTransactionDto.amount) { throw new HttpException( - { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: `Transaction Failed because saldo not enough`, - }, - HttpStatus.INTERNAL_SERVER_ERROR, + { + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: `Transaction Failed because saldo not enough`, + }, + HttpStatus.INTERNAL_SERVER_ERROR, ); } @@ -304,13 +320,13 @@ export class TransactionService { } async orderTransaction( - orderTransactionDto: OrderTransactionDto, - currentUser: any, + orderTransactionDto: OrderTransactionDto, + currentUser: any, ) { - const productData = await this.productService.findOne( orderTransactionDto.productCode, 'prepaid', + orderTransactionDto.productId ); // if (!productData.statusHistory.status.includes('ACTIVE')) { @@ -323,17 +339,17 @@ export class TransactionService { // ); // } else { - const trxId = Array(6) - .fill(null) - .map(() => { - return Math.round(Math.random() * 16).toString(16); - }) - .join(''); + const trxId = Array(6) + .fill(null) + .map(() => { + return Math.round(Math.random() * 16).toString(16); + }) + .join(''); - //GET USER - const userData = await this.userService.findByUsername( - currentUser.username, - ); + //GET USER + const userData = await this.userService.findByUsername( + currentUser.username, + ); // const supplierData = await this.supplierService.findByCode('IRS'); @@ -341,137 +357,138 @@ export class TransactionService { const product = await this.productService.findOneActive( orderTransactionDto.productCode, 'prepaid', - orderTransactionDto.productId + orderTransactionDto.productId, ); - const product_price = await this.productHistoryPriceService.findOne( - product.id, - userData.partner?.id, + const product_price = await this.productHistoryPriceService.findOne( + product.id, + userData.partner?.id, + ); + + let supervisorData = []; + let profit = product_price.mark_up_price; + + //GET COA + console.log('coamsk4', 'coa'); + + const coaAccount = await this.coaService.findByUser( + userData.id, + coaType.WALLET, + ); + + const coaInventory = await this.coaService.findByName( + `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, + ); + + const coaCostOfSales = await this.coaService.findByName( + `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, + ); + + const coaSales = await this.coaService.findByName( + `${coaType[coaType.SALES]}-SYSTEM`, + ); + + const coaExpense = await this.coaService.findByName( + `${coaType[coaType.EXPENSE]}-SYSTEM`, + ); + + if (!userData.partner) { + //GET SALES + supervisorData = await this.calculateCommission( + supervisorData, + profit, + userData, ); + profit = supervisorData + .map((item) => { + return item.credit; + }) + .reduce((prev, curr) => { + return prev + curr; + }, 0); - let supervisorData = []; - let profit = product_price.mark_up_price; + supervisorData = supervisorData.concat([ + { + coa_id: coaExpense.id, + debit: profit, + }, + ]); + } - //GET COA - console.log('coamsk4', 'coa') - const coaAccount = await this.coaService.findByUser( - userData.id, - coaType.WALLET, - ); - - const coaInventory = await this.coaService.findByName( - `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, - ); - - const coaCostOfSales = await this.coaService.findByName( - `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, - ); - - const coaSales = await this.coaService.findByName( - `${coaType[coaType.SALES]}-SYSTEM`, - ); - - const coaExpense = await this.coaService.findByName( - `${coaType[coaType.EXPENSE]}-SYSTEM`, - ); - - if (!userData.partner) { - //GET SALES - supervisorData = await this.calculateCommission( - supervisorData, - profit, - userData, - ); - profit = supervisorData - .map((item) => { - return item.credit; - }) - .reduce((prev, curr) => { - return prev + curr; - }, 0); - - supervisorData = supervisorData.concat([ + if (coaAccount.amount < product_price.mark_up_price + product_price.price) { + throw new HttpException( { - coa_id: coaExpense.id, - debit: profit, + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: `Transaction Failed because saldo not enough`, }, - ]); - } + HttpStatus.INTERNAL_SERVER_ERROR, + ); + } - if (coaAccount.amount < product_price.mark_up_price + product_price.price) { - throw new HttpException( + try { + await this.connection.transaction(async (manager) => { + const transactionData = new Transactions(); + + transactionData.id = uuid.v4(); + transactionData.amount = + product_price.mark_up_price + product_price.price; + transactionData.user = userData.id; + transactionData.status = statusTransaction.SUCCESS; + transactionData.type = typeTransaction.ORDER; + transactionData.product_price = product_price; + transactionData.destination = orderTransactionDto.destination; + transactionData.partner_trx_id = orderTransactionDto.trx_id; + transactionData.supplier_trx_id = trxId; + await manager.insert(Transactions, transactionData); + + await this.accountingTransaction({ + createTransaction: false, + transactionalEntityManager: manager, + transaction: transactionData, + amount: transactionData.amount, + journals: [ { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: `Transaction Failed because saldo not enough`, + coa_id: coaInventory.id, + credit: product_price.price, }, - HttpStatus.INTERNAL_SERVER_ERROR, - ); - } - - try { - await this.connection.transaction(async (manager) => { - const transactionData = new Transactions(); - - transactionData.id = uuid.v4(); - transactionData.amount = - product_price.mark_up_price + product_price.price; - transactionData.user = userData.id; - transactionData.status = statusTransaction.SUCCESS; - transactionData.type = typeTransaction.ORDER; - transactionData.product_price = product_price; - transactionData.destination = orderTransactionDto.destination; - transactionData.partner_trx_id = orderTransactionDto.trx_id; - transactionData.supplier_trx_id = trxId; - await manager.insert(Transactions, transactionData); - - await this.accountingTransaction({ - createTransaction: false, - transactionalEntityManager: manager, - transaction: transactionData, - amount: transactionData.amount, - journals: [ - { - coa_id: coaInventory.id, - credit: product_price.price, - }, - { - coa_id: coaCostOfSales.id, - debit: product_price.price, - }, - { - coa_id: coaAccount.id, - debit: product_price.mark_up_price + product_price.price, - }, - { - // eslint-disable-next-line camelcase - coa_id: coaSales.id, - credit: product_price.mark_up_price + product_price.price, - }, - ].concat(supervisorData), - }); + { + coa_id: coaCostOfSales.id, + debit: product_price.price, + }, + { + coa_id: coaAccount.id, + debit: product_price.mark_up_price + product_price.price, + }, + { + // eslint-disable-next-line camelcase + coa_id: coaSales.id, + credit: product_price.mark_up_price + product_price.price, + }, + ].concat(supervisorData), }); - } catch (e) { - throw e; - } + }); + } catch (e) { + throw e; + } - return { - trx_id: trxId, - client_trx_id: orderTransactionDto.trx_id, - product: orderTransactionDto.productCode, - amount: product_price.mark_up_price + product_price.price, - status: statusTransaction[statusTransaction.SUCCESS], - }; + return { + trx_id: trxId, + client_trx_id: orderTransactionDto.trx_id, + product: orderTransactionDto.productCode, + amount: product_price.mark_up_price + product_price.price, + status: statusTransaction[statusTransaction.SUCCESS], + }; // } } async orderTransactionProd( - orderTransactionDto: OrderTransactionDto, - currentUser: any, + orderTransactionDto: OrderTransactionDto, + currentUser: any, ) { - const productData = await this.productService.findOne( orderTransactionDto.productCode, 'prepaid', + orderTransactionDto.productId ); // if (!productData.statusHistory.status.includes('ACTIVE')) { @@ -496,21 +513,23 @@ export class TransactionService { const product = await this.productService.findOneActive( orderTransactionDto.productCode, 'prepaid', - orderTransactionDto.productId + orderTransactionDto.productId, ); const supplier = await this.supplierService.findByCode( product.supplier.code, ); - console.log('userdatapartnerid', userData.partner?.id) + console.log('userdatapartnerid', userData.partner?.id); + let product_price = await this.productHistoryPriceService.findOne( product.id, userData.partner?.id, ); //GET COA - console.log('coamsk5', product_price.id) + console.log('coamsk5', product_price.id); + const coaAccount = await this.coaService.findByUser( userData.id, coaType.WALLET, @@ -532,9 +551,10 @@ export class TransactionService { try { const billId = await this.checkBillHistoryRepository.findOneOrFail({ where: { - trx_id: orderTransactionDto.bill_trx_id + trx_id: orderTransactionDto.bill_trx_id, }, }); + product_price.price = billId.amount; } catch (e) { if (e instanceof EntityNotFoundError) { @@ -569,11 +589,18 @@ export class TransactionService { }) .join(''); + const hitLoginHemat = + supplier.code == 'Hemat' ? + await doAuthorizeHemat('wndpt001', '3NHESIJ5', supplier) : + ''; + let hitSupplier = await doTransaction( orderTransactionDto.productCode, orderTransactionDto.destination, trxId, supplier, + hitLoginHemat.data, + product.type == 'prepaid' ? 'PURCHASE' : 'PAYMENT', ); // let hitSupplier; @@ -586,7 +613,9 @@ export class TransactionService { ), msg: hitSupplier, }; + hitSupplier = newHitSupplier; + if (orderTransactionDto.bill_trx_id !== null) { hitSupplier.harga = product_price.price; } @@ -603,35 +632,37 @@ export class TransactionService { let costInventory = product_price.price; - if (hitSupplier.harga != undefined) { - if (hitSupplier.harga != product_price.price) { - console.log("priceupdate1supplier", hitSupplier.harga) - console.log("priceupdate1normal", product_price.price) - product_price.endDate = new Date(); - costInventory = hitSupplier.harga; - const listActivePrice = - await this.productHistoryPriceService.getAllActivePriceByProduct( - product.id, - ); + if (hitSupplier.harga != undefined) { + if (hitSupplier.harga != product_price.price) { + console.log('priceupdate1supplier', hitSupplier.harga); + console.log('priceupdate1normal', product_price.price); + product_price.endDate = new Date(); + costInventory = hitSupplier.harga; - await this.productHistoryPriceService.updateEndDate(product.id); + const listActivePrice = + await this.productHistoryPriceService.getAllActivePriceByProduct( + product.id, + ); - listActivePrice.map(async (x) => { - const newProductPrice = new ProductHistoryPrice(); + await this.productHistoryPriceService.updateEndDate(product.id); - newProductPrice.id = uuid.v4(); - newProductPrice.type = x.type; - newProductPrice.price = hitSupplier.harga; - newProductPrice.mark_up_price = x.mark_up_price; - newProductPrice.startDate = new Date(); - newProductPrice.product = product; - newProductPrice.partner = x.partner; - await this.productHistoryPriceService.create(newProductPrice); + listActivePrice.map(async (x) => { + const newProductPrice = new ProductHistoryPrice(); - product_price = newProductPrice; - }); - } + newProductPrice.id = uuid.v4(); + newProductPrice.type = x.type; + newProductPrice.price = hitSupplier.harga; + newProductPrice.mark_up_price = x.mark_up_price; + newProductPrice.startDate = new Date(); + newProductPrice.product = product; + newProductPrice.partner = x.partner; + await this.productHistoryPriceService.create(newProductPrice); + + product_price = newProductPrice; + }); } + } + try { //TRANSACTION DATA await this.connection.transaction(async (manager) => { @@ -647,7 +678,8 @@ export class TransactionService { transactionData.partner_trx_id = orderTransactionDto.trx_id; transactionData.supplier_trx_id = trxId; transactionData.check_bill = orderTransactionDto.bill_trx_id; - transactionData.balance_remaining = coaAccount.amount - product_price.mark_up_price - costInventory; + transactionData.balance_remaining = + coaAccount.amount - product_price.mark_up_price - costInventory; if (!hitSupplier.success) { transactionData.status = statusTransaction.FAILED; @@ -704,85 +736,95 @@ export class TransactionService { amount: product_price.mark_up_price + product_price.price, status: status, }; - // } + // } } async orderTransactionBillProd( - orderTransactionDto: OrderTransactionDto, - currentUser: any, + orderTransactionDto: OrderTransactionDto, + currentUser: any, ) { let status; const amount = 0; //GET USER DATA const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); //GET PRODUCT AND PRICE const product = await this.productService.findOne( - orderTransactionDto.productCode, - 'postpaid', + orderTransactionDto.productCode, + 'postpaid', + orderTransactionDto.productId ); const supplier = await this.supplierService.findByCode( - product.supplier.code, + product.supplier.code, ); - let product_price = await this.productHistoryPriceService.findOne( - product.id, - userData.partner?.id, + const product_price = await this.productHistoryPriceService.findOne( + product.id, + userData.partner?.id, ); //GET COA - console.log('coamsk6', 'coa') + console.log('coamsk6', 'coa'); + const coaAccount = await this.coaService.findByUser( - userData.id, - coaType.WALLET, + userData.id, + coaType.WALLET, ); const coaInventory = await this.coaService.findByName( - `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, + `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, ); const coaCostOfSales = await this.coaService.findByName( - `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, + `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, ); const coaSales = await this.coaService.findByName( - `${coaType[coaType.SALES]}-SYSTEM`, + `${coaType[coaType.SALES]}-SYSTEM`, ); if (coaAccount.amount < product_price.mark_up_price + product_price.price) { throw new HttpException( - { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: `Transaction Failed because saldo not enough`, - }, - HttpStatus.INTERNAL_SERVER_ERROR, + { + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: `Transaction Failed because saldo not enough`, + }, + HttpStatus.INTERNAL_SERVER_ERROR, ); } //HIT API SUPPLIER const trxId = Array(6) - .fill(null) - .map(() => { - return Math.round(Math.random() * 16).toString(16); - }) - .join(''); + .fill(null) + .map(() => { + return Math.round(Math.random() * 16).toString(16); + }) + .join(''); + + const hitLoginHemat = + supplier.code == 'Hemat' ? + await doAuthorizeHemat('wndpt001', '3NHESIJ5', supplier) : + ''; let hitSupplier = await doTransaction( - orderTransactionDto.productCode, - orderTransactionDto.destination, - trxId, - supplier, + orderTransactionDto.productCode, + orderTransactionDto.destination, + trxId, + supplier, + hitLoginHemat.data, + product ); if (supplier.code != 'IRS') { const parsingResponse = hitSupplier.split(' '); + hitSupplier = { success: hitSupplier.includes('diproses'), harga: parseInt( - parsingResponse[parsingResponse.length - 2].replaceAll('.', ''), + parsingResponse[parsingResponse.length - 2].replaceAll('.', ''), ), msg: hitSupplier, }; @@ -811,7 +853,7 @@ export class TransactionService { transactionData.id = uuid.v4(); transactionData.amount = - product_price.mark_up_price + product_price.price; + product_price.mark_up_price + product_price.price; transactionData.user = userData.id; transactionData.type = typeTransaction.ORDER; transactionData.product_price = product_price; @@ -824,11 +866,11 @@ export class TransactionService { status = statusTransaction[transactionData.status]; await this.transactionRepository.insert(transactionData); throw new HttpException( - { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: hitSupplier.msg, - }, - HttpStatus.INTERNAL_SERVER_ERROR, + { + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: hitSupplier.msg, + }, + HttpStatus.INTERNAL_SERVER_ERROR, ); } else { transactionData.status = statusTransaction.PENDING; @@ -879,41 +921,50 @@ export class TransactionService { async checkBill(orderTransactionDto: OrderTransactionDto, currentUser: any) { //GET USER DATA const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); //GET PRODUCT AND PRICE const product = await this.productService.findOne( - orderTransactionDto.productCode, - 'postpaid', + orderTransactionDto.productCode, + 'postpaid', + orderTransactionDto.productId ); const supplier = await this.supplierService.findByCode( - product.supplier.code, + product.supplier.code, ); - let product_price = await this.productHistoryPriceService.findOne( - product.id, - userData.partner?.id, + const product_price = await this.productHistoryPriceService.findOne( + product.id, + userData.partner?.id, ); //HIT API SUPPLIER const trxId = Array(6) - .fill(null) - .map(() => { - return Math.round(Math.random() * 16).toString(16); - }) - .join(''); + .fill(null) + .map(() => { + return Math.round(Math.random() * 16).toString(16); + }) + .join(''); let status; try { + const hitLoginHemat = + supplier.code == 'Hemat' ? + await doAuthorizeHemat('wndpt001', '3NHESIJ5', supplier) : + ''; + let hitSupplier = await doTransaction( - 'CEK' + orderTransactionDto.productCode.slice(3), - orderTransactionDto.destination, - trxId, - supplier, + `CEK${orderTransactionDto.productCode.slice(3)}`, + orderTransactionDto.destination, + trxId, + supplier, + hitLoginHemat.data, + 'INQUIRY' ); const parsingResponse = hitSupplier.split(' '); + hitSupplier = { success: hitSupplier.includes('diproses'), msg: hitSupplier, @@ -922,11 +973,11 @@ export class TransactionService { if (!hitSupplier.success) { status = statusTransaction[statusTransaction.FAILED]; throw new HttpException( - { - statusCode: HttpStatus.INTERNAL_SERVER_ERROR, - error: hitSupplier.msg, - }, - HttpStatus.INTERNAL_SERVER_ERROR, + { + statusCode: HttpStatus.INTERNAL_SERVER_ERROR, + error: hitSupplier.msg, + }, + HttpStatus.INTERNAL_SERVER_ERROR, ); } else { status = statusTransaction[statusTransaction.SUCCESS]; @@ -956,7 +1007,7 @@ export class TransactionService { async createDepositReturn(currentUser, depositReturnDto: DepositReturnDto) { const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); try { @@ -980,9 +1031,9 @@ export class TransactionService { } async confirmationDepositReturn( - id: string, - userData, - statusApproval: string, + id: string, + userData, + statusApproval: string, ) { const transactionData = await this.findApprovalDepositReturn(id); @@ -1058,28 +1109,28 @@ export class TransactionService { } async confirmationAdminDepositReturn( - id: string, - userData, - statusApproval: string, + id: string, + userData, + statusApproval: string, ) { const transactionData = await this.findApprovalDepositReturn(id); const coaAR = await this.coaService.findByUserWithRelated( - userData.userId, - transactionData.user_destination, - coaType.ACCOUNT_RECEIVABLE, + userData.userId, + transactionData.user_destination, + coaType.ACCOUNT_RECEIVABLE, ); const coaBank = await this.coaService.findByName( - `${coaType[coaType.BANK]}-SYSTEM`, + `${coaType[coaType.BANK]}-SYSTEM`, ); try { await this.connection.transaction(async (manager) => { transactionData.status = - statusApproval === 'Accept' - ? statusTransaction.APPROVED - : statusTransaction.REJECTED; + statusApproval === 'Accept' ? + statusTransaction.APPROVED : + statusTransaction.REJECTED; await manager.save(transactionData); await this.accountingTransaction({ @@ -1109,9 +1160,8 @@ export class TransactionService { } async checkCallbackOrderFailed(supplier_trx_id: string, callback: any) { - const transactionData = await this.findDataTransactionBySupplierTrxId( - supplier_trx_id + supplier_trx_id, ); if (transactionData.status == statusTransaction.FAILED) { @@ -1132,9 +1182,9 @@ export class TransactionService { ); } else { const updateTransaction = await this.callbackOrderFailed( - supplier_trx_id, - callback, - ); + supplier_trx_id, + callback, + ); throw new HttpException( { @@ -1144,15 +1194,12 @@ export class TransactionService { }, HttpStatus.BAD_REQUEST, ); - } - } async checkCallbackOrderSuccess(supplier_trx_id: string, callback: any) { - const transactionData = await this.findDataTransactionBySupplierTrxId( - supplier_trx_id + supplier_trx_id, ); if (transactionData.status == statusTransaction.FAILED) { @@ -1172,12 +1219,10 @@ export class TransactionService { HttpStatus.BAD_REQUEST, ); } else { - - const updateTransaction = - await this.callbackOrderSuccess( - supplier_trx_id, - callback, - ); + const updateTransaction = await this.callbackOrderSuccess( + supplier_trx_id, + callback, + ); throw new HttpException( { @@ -1187,9 +1232,7 @@ export class TransactionService { }, HttpStatus.OK, ); - } - } async findDataTransactionBySupplierTrxId(supplier_trx_id: string) { @@ -1202,13 +1245,13 @@ export class TransactionService { }); } catch (e) { if (e instanceof EntityNotFoundError) { - throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'data not found', - }, - HttpStatus.NOT_FOUND, - ); + throw new HttpException( + { + statusCode: HttpStatus.NOT_FOUND, + error: 'data not found', + }, + HttpStatus.NOT_FOUND, + ); } else { throw e; } @@ -1235,46 +1278,49 @@ export class TransactionService { const userData = await this.userService.findExist(dataTransaction.user); const product_price = await this.productHistoryPriceService.findById( - dataTransaction.product_price.id, + dataTransaction.product_price.id, ); const product = await this.productService.findOneById( - product_price.product.id, + product_price.product.id, ); - console.log("inipricetable", dataTransaction.product_price.price) - console.log("inipricecallback", callback['price']) - if(callback['message']) { + console.log('inipricetable', dataTransaction.product_price.price); + console.log('inipricecallback', callback['price']); + + if (callback['message']) { if (callback['message'].includes('METRO')) { if (callback['price'] != dataTransaction.product_price.price) { - console.log("mskupdt", "msk") - dataTransaction.product_price.price = parseInt(callback['price']) + console.log('mskupdt', 'msk'); + dataTransaction.product_price.price = parseInt(callback['price']); } } } //GET COA - console.log('coamsk7', 'coa') + console.log('coamsk7', 'coa'); + const coaAccount = await this.coaService.findByUser( - userData.id, - coaType.WALLET, + userData.id, + coaType.WALLET, ); dataTransaction.status = statusTransaction.FAILED; dataTransaction.callback_json = callback; dataTransaction.failed_reason = `Trx ${product.code} ke ${dataTransaction.destination} gagal`; - dataTransaction.balance_remaining = coaAccount.amount + dataTransaction.amount; + dataTransaction.balance_remaining = + coaAccount.amount + dataTransaction.amount; const coaInventory = await this.coaService.findByName( - `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, + `${coaType[coaType.INVENTORY]}-${product.supplier.code}`, ); const coaCostOfSales = await this.coaService.findByName( - `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, + `${coaType[coaType.COST_OF_SALES]}-${product.supplier.code}`, ); const coaSales = await this.coaService.findByName( - `${coaType[coaType.SALES]}-SYSTEM`, + `${coaType[coaType.SALES]}-SYSTEM`, ); try { @@ -1313,15 +1359,16 @@ export class TransactionService { if (userData.partner) { const message = `Transaksi ${product.code} dengan tujuan ${dataTransaction.destination} telah gagal.`; + this.callbackToPartner( - userData.partner.id, - message, - dataTransaction.partner_trx_id, - dataTransaction.amount, - product.code, - dataTransaction.destination, - '-', - 'gagal', + userData.partner.id, + message, + dataTransaction.partner_trx_id, + dataTransaction.amount, + product.code, + dataTransaction.destination, + '-', + 'gagal', ); } } @@ -1341,25 +1388,28 @@ export class TransactionService { }); dataTransaction.status = statusTransaction.SUCCESS; + if (callback['sn']) { dataTransaction.seri_number = callback['sn']; - console.log("msksn1", dataTransaction.seri_number) + console.log('msksn1', dataTransaction.seri_number); } else { const response = callback['message']; const responseBaru = response.split(' '); + dataTransaction.seri_number = responseBaru[10].length > 1 ? responseBaru[10] : responseBaru[9]; if (dataTransaction.seri_number == 'SN:') { - dataTransaction.seri_number = responseBaru[11] + dataTransaction.seri_number = responseBaru[11]; } } + dataTransaction.callback_json = callback; if (callback['message']) { if (callback['message'].includes('METRO')) { if (callback['price'] != dataTransaction.product_price.price) { - dataProductHistoryPrice.price = parseInt(callback['price']) + dataProductHistoryPrice.price = parseInt(callback['price']); } } } @@ -1386,7 +1436,7 @@ export class TransactionService { // dataTransaction.balance_remaining = coaAccount.amount - product_price.mark_up_price - costInventory; if (userData.partner == null) { - console.log('partnernull', 'masuk') + console.log('partnernull', 'masuk'); //GET SALES supervisorData = await this.calculateCommission( supervisorData, @@ -1412,7 +1462,7 @@ export class TransactionService { try { await this.connection.transaction(async (manager) => { await manager.save(dataTransaction); - await manager.save(dataProductHistoryPrice) + await manager.save(dataProductHistoryPrice); await this.accountingTransaction({ createTransaction: false, @@ -1425,25 +1475,28 @@ export class TransactionService { } catch (e) { throw e; } + if (userData.partner != null) { - if (userData.partner) { - console.log('partnernotnull', 'masuk') - const message = `Transaksi ${product.code} dengan tujuan ${dataTransaction.destination} telah berhasil.`; - this.callbackToPartner( - userData.partner.id, - message, - dataTransaction.partner_trx_id, - dataTransaction.amount, - product.code, - dataTransaction.destination, - dataTransaction.seri_number, - 'berhasil', - ); + if (userData.partner) { + console.log('partnernotnull', 'masuk'); + + const message = `Transaksi ${product.code} dengan tujuan ${dataTransaction.destination} telah berhasil.`; + + this.callbackToPartner( + userData.partner.id, + message, + dataTransaction.partner_trx_id, + dataTransaction.amount, + product.code, + dataTransaction.destination, + dataTransaction.seri_number, + 'berhasil', + ); + } } } - } - async resendOrderToPartner(supplier_trx_id: string, status: boolean){ + async resendOrderToPartner(supplier_trx_id: string, status: boolean) { const dataTransaction = await this.transactionRepository.findOne({ where: { supplier_trx_id: supplier_trx_id, @@ -1454,63 +1507,65 @@ export class TransactionService { const userData = await this.userService.findExist(dataTransaction.user); const product_price = await this.productHistoryPriceService.findById( - dataTransaction.product_price.id, + dataTransaction.product_price.id, ); const product = await this.productService.findOneById( - product_price.product.id, + product_price.product.id, ); if (status) { const message = `Transaksi ${product.code} dengan tujuan ${dataTransaction.destination} telah berhasil.`; + await this.callbackToPartner( - userData.partner.id, - message, - dataTransaction.partner_trx_id, - dataTransaction.amount, - product.code, - dataTransaction.destination, - dataTransaction.seri_number, - 'berhasil', + userData.partner.id, + message, + dataTransaction.partner_trx_id, + dataTransaction.amount, + product.code, + dataTransaction.destination, + dataTransaction.seri_number, + 'berhasil', ); } else { const message = `Transaksi ${product.code} dengan tujuan ${dataTransaction.destination} telah gagal.`; + this.callbackToPartner( - userData.partner.id, - message, - dataTransaction.partner_trx_id, - dataTransaction.amount, - product.code, - dataTransaction.destination, - '-', - 'gagal', + userData.partner.id, + message, + dataTransaction.partner_trx_id, + dataTransaction.amount, + product.code, + dataTransaction.destination, + '-', + 'gagal', ); } - - } async callbackToPartner( - partnerId: string, - message: string, - trxId: string, - harga: number, - productCode: string, - destination: string, - seriNumber: string, - status: string, + partnerId: string, + message: string, + trxId: string, + harga: number, + productCode: string, + destination: string, + seriNumber: string, + status: string, ) { const partnerData = await this.userService.findPartner(partnerId); const userData = await this.userService.findOneByPartner(partnerId); - console.log('coamsk8', 'coa') + console.log('coamsk8', 'coa'); + const coaAccount = await this.coaService.findByUser( - userData.id, - coaType.WALLET, + userData.id, + coaType.WALLET, ); if (!partnerData.callback_url) { this.logger.error(`Call to partner failed, reason: no callback url`); + return false; } @@ -1527,6 +1582,7 @@ export class TransactionService { return res; } catch (e) { this.logger.error(`Call to partner failed, reason: ${e.message}`); + return false; } } @@ -1540,7 +1596,7 @@ export class TransactionService { // }); if (trxId.length % 2 != 0) { - throw Error("Not Balance") + throw Error('Not Balance'); } const dataTransactionJurnal = await this.transactionJournalRepository.find({ @@ -1550,10 +1606,10 @@ export class TransactionService { relations: ['coa'], }); - let dataRollbackJurnal = []; + const dataRollbackJurnal = []; dataTransactionJurnal.map((it) => { - let data = { + const data = { coa_id: it.coa.id, }; @@ -1586,11 +1642,12 @@ export class TransactionService { async withdrawBenefit(user) { const userData = await this.userService.findExist(user); - console.log('coamsk9', 'coa') + console.log('coamsk9', 'coa'); + const coaProfit = await this.coaService.findByUser(user, coaType.PROFIT); const coaBank = await this.coaService.findByName( - `${coaType[coaType.BANK]}-SYSTEM`, + `${coaType[coaType.BANK]}-SYSTEM`, ); try { @@ -1630,19 +1687,19 @@ export class TransactionService { } async transactionHistoryByUser( - page: number, - user: string, - startDate: string, - endDate: string, - pageSize?: number, + page: number, + user: string, + startDate: string, + endDate: string, + pageSize?: number, ) { const userData = await this.userService.findExist(user); let userBySupperior = []; if ( - userData.roles.id != 'e4dfb6a3-2338-464a-8fb8-5cbc089d4209' && - userData.roles.id != '21dceea2-416e-4b55-b74c-12605e1f8d1b' + userData.roles.id != 'e4dfb6a3-2338-464a-8fb8-5cbc089d4209' && + userData.roles.id != '21dceea2-416e-4b55-b74c-12605e1f8d1b' ) { let roleNumber; @@ -1655,8 +1712,8 @@ export class TransactionService { } const listUser = await this.userService.findAllSubordinate( - userData.id, - roleNumber, + userData.id, + roleNumber, ); if (listUser.length < 1) { @@ -1669,32 +1726,32 @@ export class TransactionService { } const baseQuery = this.transactionRepository - .createQueryBuilder('transaction') - .select('transaction.id', 'id') - .addSelect('transaction.created_at', 'created_at') - .where('transaction.user IN (:...id) and transaction.type = 1', { - id: userBySupperior, - }) - .leftJoinAndMapOne( - 'transaction.userData', - UserDetail, - 'userData', - 'userData.user = transaction.user', - ) - .leftJoin('transaction.product_price', 'product_price') - .leftJoin('product_price.product', 'product') + .createQueryBuilder('transaction') + .select('transaction.id', 'id') + .addSelect('transaction.created_at', 'created_at') + .where('transaction.user IN (:...id) and transaction.type = 1', { + id: userBySupperior, + }) + .leftJoinAndMapOne( + 'transaction.userData', + UserDetail, + 'userData', + 'userData.user = transaction.user', + ) + .leftJoin('transaction.product_price', 'product_price') + .leftJoin('product_price.product', 'product') .leftJoin('product.supplier', 'supplier') .addSelect('transaction.amount', 'price') - .addSelect('transaction.destination') + .addSelect('transaction.destination') .addSelect('transaction.balance_remaining', 'balance_remaining') .addSelect('transaction.seri_number', 'seri_number') - .addSelect('transaction.supplier_trx_id', 'transaction_code') - .addSelect('transaction.status', 'status') - .addSelect('transaction.partner_trx_id', 'partner_transaction_code') - .addSelect('transaction.failed_reason', 'failed_reason') - .addSelect('userData.name', 'buyer') - .addSelect('product.name', 'name') - .addSelect('product_price.price', 'product_price') + .addSelect('transaction.supplier_trx_id', 'transaction_code') + .addSelect('transaction.status', 'status') + .addSelect('transaction.partner_trx_id', 'partner_transaction_code') + .addSelect('transaction.failed_reason', 'failed_reason') + .addSelect('userData.name', 'buyer') + .addSelect('product.name', 'name') + .addSelect('product_price.price', 'product_price') .addSelect('product_price.mark_up_price', 'mark_up_price') .addSelect('product.name', 'supplier_name') .addSelect('supplier.name', 'supplier_name') @@ -1702,18 +1759,18 @@ export class TransactionService { if (startDate && endDate) { baseQuery.andWhere( - 'transaction.created_at between :startDate and :enDate', - { - startDate: new Date(startDate), - enDate: new Date(endDate), - }, + 'transaction.created_at between :startDate and :enDate', + { + startDate: new Date(startDate), + enDate: new Date(endDate), + }, ); } const data = await baseQuery - .offset(page * (pageSize || 10)) - .limit(pageSize || 10) - .getRawMany(); + .offset(page * (pageSize || 10)) + .limit(pageSize || 10) + .getRawMany(); const totalData = await baseQuery.getCount(); @@ -1732,13 +1789,13 @@ export class TransactionService { }, }); } catch (e) { - throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Billing not found', - }, - HttpStatus.NOT_FOUND, - ); + throw new HttpException( + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Billing not found', + }, + HttpStatus.NOT_FOUND, + ); } } @@ -1762,71 +1819,71 @@ export class TransactionService { take: pageSize || 10, order: { createdAt: 'DESC', - } + }, }); } catch (e) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Billing not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Billing not found', + }, + HttpStatus.NOT_FOUND, ); } } async topUpHistoryByUser( - page: number, - user: string, - destinationUser: string, - type: string, - pageSize?: number, + page: number, + user: string, + destinationUser: string, + type: string, + pageSize?: number, ) { const userData = await this.userService.findExist(user); const baseQuery = this.transactionRepository - .createQueryBuilder('transaction') - .leftJoinAndMapOne( - 'transaction.userData', - UserDetail, - 'userData', - 'userData.user = transaction.user', - ); + .createQueryBuilder('transaction') + .leftJoinAndMapOne( + 'transaction.userData', + UserDetail, + 'userData', + 'userData.user = transaction.user', + ); if ( - userData.roles.name == 'Admin' || - userData.roles.name == 'Customer Service' || - type == 'profile' + userData.roles.name == 'Admin' || + userData.roles.name == 'Customer Service' || + type == 'profile' ) { baseQuery.where( - 'transaction.type = 0 and transaction.user_destination = :destinationId', - { - destinationId: destinationUser, - }, + 'transaction.type = 0 and transaction.user_destination = :destinationId', + { + destinationId: destinationUser, + }, ); } else { baseQuery.where( - 'transaction.user = :id and transaction.type = 0 and transaction.user_destination = :destinationId', - { - id: user, - destinationId: destinationUser, - }, + 'transaction.user = :id and transaction.type = 0 and transaction.user_destination = :destinationId', + { + id: user, + destinationId: destinationUser, + }, ); } baseQuery - .select([ - 'transaction.id', - 'transaction.created_at as transaction_date', - 'amount', - 'userData.name as sender_name', - ]) - .orderBy('transaction.created_at', 'DESC'); + .select([ + 'transaction.id', + 'transaction.created_at as transaction_date', + 'amount', + 'userData.name as sender_name', + ]) + .orderBy('transaction.created_at', 'DESC'); const data = await baseQuery - .offset(page * (pageSize || 10)) - .limit(pageSize || 10) - .getRawMany(); + .offset(page * (pageSize || 10)) + .limit(pageSize || 10) + .getRawMany(); const totalData = await baseQuery.getCount(); @@ -1848,11 +1905,11 @@ export class TransactionService { } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Return Deposit not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Return Deposit not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e; @@ -1861,11 +1918,11 @@ export class TransactionService { } async getAllDepositReturnFromUser( - user: string, - page: number, - startDate: string, - endDate: string, - pageSize?: number, + user: string, + page: number, + startDate: string, + endDate: string, + pageSize?: number, ) { const filter = { user: user, @@ -1889,41 +1946,41 @@ export class TransactionService { } async getAllDepositReturnToUser( - user: string, - page: number, - sender: string, - startDate: string, - endDate: string, - pageSize?: number, + user: string, + page: number, + sender: string, + startDate: string, + endDate: string, + pageSize?: number, ) { const baseQuery = this.transactionRepository - .createQueryBuilder('transaction') - .where('transaction.user_destination = :id and transaction.type = 3', { - id: user, - }) - .leftJoinAndMapOne( - 'transaction.userData', - UserDetail, - 'userData', - 'userData.user = transaction.user', - ) - .select('transaction.id', 'id') - .addSelect([ - 'transaction.created_at', - 'image_prove', - 'amount', - 'status', - 'userData.name', - ]) - .orderBy('transaction.created_at', 'DESC'); + .createQueryBuilder('transaction') + .where('transaction.user_destination = :id and transaction.type = 3', { + id: user, + }) + .leftJoinAndMapOne( + 'transaction.userData', + UserDetail, + 'userData', + 'userData.user = transaction.user', + ) + .select('transaction.id', 'id') + .addSelect([ + 'transaction.created_at', + 'image_prove', + 'amount', + 'status', + 'userData.name', + ]) + .orderBy('transaction.created_at', 'DESC'); if (startDate && endDate) { baseQuery.andWhere( - 'transaction.created_at between :startDate and :enDate', - { - startDate: new Date(startDate), - enDate: new Date(endDate), - }, + 'transaction.created_at between :startDate and :enDate', + { + startDate: new Date(startDate), + enDate: new Date(endDate), + }, ); } @@ -1934,9 +1991,9 @@ export class TransactionService { } const data = await baseQuery - .offset(page * (pageSize || 10)) - .limit(pageSize || 10) - .getRawMany(); + .offset(page * (pageSize || 10)) + .limit(pageSize || 10) + .getRawMany(); const totalData = await baseQuery.getCount(); @@ -1960,26 +2017,26 @@ export class TransactionService { async getTotalSell(currentUser) { const baseQuery = this.transactionRepository - .createQueryBuilder('transactions') - .innerJoin('transactions.product_price', 'product_price') - .where( - 'transactions.type = 1 and partner_trx_id is NULL and transactions.status = 1', - ); + .createQueryBuilder('transactions') + .innerJoin('transactions.product_price', 'product_price') + .where( + 'transactions.type = 1 and partner_trx_id is NULL and transactions.status = 1', + ); const data = await baseQuery - .select('SUM(transactions.amount) as total_amount') - .addSelect('SUM(product_price.price) as total_modal') - .addSelect('SUM(product_price.mark_up_price) as total_profit') - .addSelect('COUNT(transactions.id) as total_transaction') - .getRawOne(); + .select('SUM(transactions.amount) as total_amount') + .addSelect('SUM(product_price.price) as total_modal') + .addSelect('SUM(product_price.mark_up_price) as total_profit') + .addSelect('COUNT(transactions.id) as total_transaction') + .getRawOne(); const { total_expense } = await baseQuery - .select('SUM(transaction_journal.amount) as total_expense') - .innerJoin('transactions.transactionJournal', 'transaction_journal') - .where( - `transaction_journal.type = '0' and transaction_journal.amount < product_price.price`, - ) - .getRawOne(); + .select('SUM(transaction_journal.amount) as total_expense') + .innerJoin('transactions.transactionJournal', 'transaction_journal') + .where( + `transaction_journal.type = '0' and transaction_journal.amount < product_price.price`, + ) + .getRawOne(); return { total_amount: parseInt(data.total_amount), @@ -1992,11 +2049,11 @@ export class TransactionService { async getTotalSellB2B(currentUser) { const baseQuery = this.transactionRepository - .createQueryBuilder('transactions') - .innerJoin('transactions.product_price', 'product_price') - .where( - 'transactions.type = 1 and partner_trx_id is not NULL and transactions.status = 1', - ); + .createQueryBuilder('transactions') + .innerJoin('transactions.product_price', 'product_price') + .where( + 'transactions.type = 1 and partner_trx_id is not NULL and transactions.status = 1', + ); const data = await baseQuery .select('SUM(transactions.amount) as total_amount') @@ -2026,21 +2083,21 @@ export class TransactionService { async getTotalSellPartner(currentUser) { const userData = await this.userService.findByUsername( - currentUser.username, + currentUser.username, ); const baseQuery = this.transactionRepository - .createQueryBuilder('transactions') - .innerJoin('transactions.product_price', 'product_price') - .where('transactions.type = 1 and transactions.status = 1') - .andWhere('transactions.user = :id', { - id: userData.id, - }); + .createQueryBuilder('transactions') + .innerJoin('transactions.product_price', 'product_price') + .where('transactions.type = 1 and transactions.status = 1') + .andWhere('transactions.user = :id', { + id: userData.id, + }); const data = await baseQuery - .select('SUM(transactions.amount) as total_amount') - .addSelect('COUNT(transactions.id) as total_transaction') - .getRawOne(); + .select('SUM(transactions.amount) as total_amount') + .addSelect('COUNT(transactions.id) as total_transaction') + .getRawOne(); return { total_amount: parseInt(data.total_amount), @@ -2052,60 +2109,61 @@ export class TransactionService { const supervisorData = []; supervisorData.push( - await this.userService.findByUsername(userData.superior.username), + await this.userService.findByUsername(userData.superior.username), ); //GET Supervisor supervisorData.push( - await this.userService.findByUsername( - supervisorData[0].superior.username, - ), + await this.userService.findByUsername( + supervisorData[0].superior.username, + ), ); - console.log('coamsk10', 'coa') - return Promise.all( - supervisorData.map(async (it) => { - const coaAccount = await this.coaService.findByUser( - it.id, - coaType.PROFIT, - ); - const commissionValue = await this.commissionService.findOne( - it.roles.id, - ); + console.log('coamsk10', 'coa'); - return { - coa_id: coaAccount.id, - credit: Math.floor((totalPrice * commissionValue.commission) / 100), - }; - }), + return Promise.all( + supervisorData.map(async (it) => { + const coaAccount = await this.coaService.findByUser( + it.id, + coaType.PROFIT, + ); + const commissionValue = await this.commissionService.findOne( + it.roles.id, + ); + + return { + coa_id: coaAccount.id, + credit: Math.floor((totalPrice * commissionValue.commission) / 100), + }; + }), ); } async accountingTransaction(createJournalDto: CreateJournalDto) { const creditSum = createJournalDto.journals - .map((it) => { - return it.credit; - }) - .filter((it) => { - return it; - }) - .reduce((a, b) => { - return a.plus(b); - }, new Decimal(0)); + .map((it) => { + return it.credit; + }) + .filter((it) => { + return it; + }) + .reduce((a, b) => { + return a.plus(b); + }, new Decimal(0)); const debitSum = createJournalDto.journals - .map((it) => { - return it.debit; - }) - .filter((it) => { - return it; - }) - .reduce((a, b) => { - return a.plus(b); - }, new Decimal(0)); + .map((it) => { + return it.debit; + }) + .filter((it) => { + return it; + }) + .reduce((a, b) => { + return a.plus(b); + }, new Decimal(0)); const coaIds = uniq( - createJournalDto.journals.map((it) => { - return it.coa_id; - }), + createJournalDto.journals.map((it) => { + return it.coa_id; + }), ); if (!creditSum.equals(debitSum)) { @@ -2117,133 +2175,136 @@ export class TransactionService { const transaction = createJournalDto.transaction; await Promise.all( - createJournalDto.journals.map((journal) => { - const coa = coas.find((it) => { - return it.id === journal.coa_id; - }); + createJournalDto.journals.map((journal) => { + const coa = coas.find((it) => { + return it.id === journal.coa_id; + }); - if (!coa) { - throw new Error(`coa ${journal.coa_id} not found`); - } + if (!coa) { + throw new Error(`coa ${journal.coa_id} not found`); + } - const journalEntry = new TransactionJournal(); + const journalEntry = new TransactionJournal(); - journalEntry.coa = coa; - journalEntry.type = journal.debit - ? balanceType.DEBIT - : balanceType.CREDIT; - journalEntry.amount = journal.debit ? journal.debit : journal.credit; - journalEntry.transaction_head = transaction; + journalEntry.coa = coa; + journalEntry.type = journal.debit ? + balanceType.DEBIT : + balanceType.CREDIT; + journalEntry.amount = journal.debit ? journal.debit : journal.credit; + journalEntry.transaction_head = transaction; - return createJournalDto.transactionalEntityManager.save(journalEntry); - }), + return createJournalDto.transactionalEntityManager.save(journalEntry); + }), ); await Promise.all( - coaIds.map((coaId) => { - const journalPerCoa = createJournalDto.journals.filter((journal) => { - return journal.coa_id == coaId; - }); + coaIds.map((coaId) => { + const journalPerCoa = createJournalDto.journals.filter((journal) => { + return journal.coa_id == coaId; + }); - const creditSum = journalPerCoa - .map((it) => { - return it.credit; - }) - .filter((it) => { - return it; - }) - .reduce((a, b) => { - return a.plus(b); - }, new Decimal(0)); - const debitSum = journalPerCoa - .map((it) => { - return it.debit; - }) - .filter((it) => { - return it; - }) - .reduce((a, b) => { - return a.plus(b); - }, new Decimal(0)); + const creditSum = journalPerCoa + .map((it) => { + return it.credit; + }) + .filter((it) => { + return it; + }) + .reduce((a, b) => { + return a.plus(b); + }, new Decimal(0)); + const debitSum = journalPerCoa + .map((it) => { + return it.debit; + }) + .filter((it) => { + return it; + }) + .reduce((a, b) => { + return a.plus(b); + }, new Decimal(0)); - const coa = coas.find((it) => { - return it.id.toLowerCase() === coaId.toLowerCase(); - }); + const coa = coas.find((it) => { + return it.id.toLowerCase() === coaId.toLowerCase(); + }); - let balance = new Decimal(coa.amount); + let balance = new Decimal(coa.amount); - if (coa.balanceType == balanceType.DEBIT) { - balance = balance.plus(debitSum.minus(creditSum)); - } else if (coa.balanceType == balanceType.CREDIT) { - balance = balance.plus(creditSum.minus(debitSum)); - } + if (coa.balanceType == balanceType.DEBIT) { + balance = balance.plus(debitSum.minus(creditSum)); + } else if (coa.balanceType == balanceType.CREDIT) { + balance = balance.plus(creditSum.minus(debitSum)); + } - const diff = balance.minus(new Decimal(coa.amount)); + const diff = balance.minus(new Decimal(coa.amount)); - return createJournalDto.transactionalEntityManager - .createQueryBuilder() - .update(COA) - .set({ - amount: () => { - return `amount + ${diff.toString()}`; - }, - }) - .where('id = :id', { id: coa.id }) - .execute(); - }), + return createJournalDto.transactionalEntityManager + .createQueryBuilder() + .update(COA) + .set({ + amount: () => { + return `amount + ${diff.toString()}`; + }, + }) + .where('id = :id', { id: coa.id }) + .execute(); + }), ); return transaction; } async updateBill( - trxId: string, - amount: number, - admin: number, - status: boolean, - message: string, + trxId: string, + amount: number, + admin: number, + status: boolean, + message: string, ) { const billData = await this.findOneBillById(trxId); - console.log(billData,"ini dia") + + console.log(billData, 'ini dia'); + const userData = await this.userService.findExist(billData.user); const product_price = await this.productHistoryPriceService.findById( - billData.product_price.id, + billData.product_price.id, ); await this.checkBillHistoryRepository.update( - { - trx_id: trxId, - }, - { - amount: status - ? amount - - admin + - product_price.partner_fee + - product_price.mark_up_price - : 0, - admin_price: admin, - status: status ? 'SUCCESS' : 'FAILED', - callback_json: JSON.stringify(message), - }, + { + trx_id: trxId, + }, + { + amount: status ? + amount - + admin + + product_price.partner_fee + + product_price.mark_up_price : + 0, + admin_price: admin, + status: status ? 'SUCCESS' : 'FAILED', + callback_json: JSON.stringify(message), + }, ); if (userData.partner) { - const message = status - ? `Bill dari ${billData.destination} adalah ${ - amount + product_price.partner_fee + product_price.mark_up_price - }.` - : ''; + const message = status ? + `Bill dari ${billData.destination} adalah ${ + amount + product_price.partner_fee + product_price.mark_up_price + }.` : + ''; const statusResponse = status ? 'berhasil' : 'gagal'; + this.callbackToPartner( - userData.id, - message, - billData.partner_trx_id, - amount + product_price.partner_fee + product_price.mark_up_price, - billData.product_code, - billData.destination, - '-', - statusResponse, + userData.id, + message, + billData.partner_trx_id, + amount + product_price.partner_fee + product_price.mark_up_price, + billData.product_code, + billData.destination, + '-', + statusResponse, ); } } @@ -2259,11 +2320,11 @@ export class TransactionService { } catch (e) { if (e instanceof EntityNotFoundError) { throw new HttpException( - { - statusCode: HttpStatus.NOT_FOUND, - error: 'Bill not found', - }, - HttpStatus.NOT_FOUND, + { + statusCode: HttpStatus.NOT_FOUND, + error: 'Bill not found', + }, + HttpStatus.NOT_FOUND, ); } else { throw e;