add: parser upload product

This commit is contained in:
ilham
2021-12-22 22:56:44 +07:00
parent 97bcf40ac4
commit 3f57e574a6
12 changed files with 181 additions and 10 deletions

View File

@@ -1,5 +1,5 @@
import { HttpException, HttpStatus } from '@nestjs/common';
import { EntityNotFoundError, Repository } from 'typeorm';
import { EntityNotFoundError, IsNull, Repository } from 'typeorm';
import { Product } from './entities/product.entity';
import { InjectRepository } from '@nestjs/typeorm';
import { CreateProductDto } from './dto/product/create-product.dto';
@@ -10,6 +10,8 @@ import { productType } from '../helper/enum-list';
import { UpdatePriceProductDto } from './dto/product/update-price-product.dto';
import { UsersService } from '../users/users.service';
import { SupplierService } from '../users/supplier/supplier.service';
import { parsingFile } from '../helper/csv-parser';
import { PartnerService } from '../users/partner/partner.service';
export class ProductService {
constructor(
@@ -20,6 +22,7 @@ export class ProductService {
private productSubCategoriesService: ProductSubCategoriesService,
private usersService: UsersService,
private supplierService: SupplierService,
private partnerService: PartnerService,
) {}
async create(createProductDto: CreateProductDto) {
@@ -47,6 +50,83 @@ export class ProductService {
return this.productRepository.findOneOrFail(result.identifiers[0].id);
}
async processUploadCSV() {
const data = await parsingFile('');
data.shift();
await Promise.all(
data.map(async (it) => {
let dataHistoryPrice;
let partnerData;
const subCategories =
await this.productSubCategoriesService.findOneForCSVParser(it[2]);
if (!subCategories) {
return;
}
const productData = await this.productRepository.findOne({
code: it[0],
});
if (productData) {
//TODO : Handle Update Product
productData.name = it[1];
productData.status = it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE';
await this.productRepository.save(productData);
//TODO : Handle History Price
if (it[6] != '-' && it[6] != '') {
partnerData = await this.partnerService.findOne(it[6]);
dataHistoryPrice = await this.productHistoryPrice.findOne({
product: productData,
partner: partnerData,
});
} else {
dataHistoryPrice = await this.productHistoryPrice.findOne({
product: productData,
});
}
dataHistoryPrice.endDate = new Date();
await this.productHistoryPrice.save(dataHistoryPrice);
await this.productHistoryPrice.insert({
product: productData,
mark_up_price: it[4],
price: it[3],
type: productType.NORMAL,
startDate: new Date(),
endDate: null,
partner: it[6] != '-' ? partnerData : null,
});
} else {
let partnerData;
if (it[6] != '-' && it[6] != '') {
partnerData = await this.partnerService.findOne(it[6]);
}
const savedProduct = await this.productRepository.insert({
name: it[1],
code: it[0],
status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE',
sub_categories: subCategories,
});
await this.productHistoryPrice.insert({
product: savedProduct.identifiers[0],
mark_up_price: it[4],
price: it[3],
type: productType.NORMAL,
startDate: new Date(),
endDate: null,
partner: it[6] != '-' ? partnerData : null,
});
}
}),
);
return data;
}
async findAll(
page: number,
supplier: string,