From 9e51516519f12c0e438d881a1e84b972daac30f5 Mon Sep 17 00:00:00 2001 From: mfadiln2018 Date: Thu, 25 Aug 2022 23:01:59 +0700 Subject: [PATCH 01/17] Feat: add insert product history status at upload product csv --- src/product/product.module.ts | 2 ++ src/product/product.service.ts | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/src/product/product.module.ts b/src/product/product.module.ts index 231478e..ee5250e 100644 --- a/src/product/product.module.ts +++ b/src/product/product.module.ts @@ -10,6 +10,7 @@ import { ProductSubCategories } from './entities/product-sub-category.entity'; import { ProductSubCategoriesService } from './product-sub-categories.service'; import { UsersModule } from '../users/users.module'; import { ProductHistoryPriceService } from './history-price/history-price.service'; +import {ProductHistoryStatus} from "./entities/product-history-status.entity"; @Module({ imports: [ @@ -17,6 +18,7 @@ import { ProductHistoryPriceService } from './history-price/history-price.servic Product, ProductCategories, ProductHistoryPrice, + ProductHistoryStatus, ProductSubCategories, ]), forwardRef(() => UsersModule), diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 8457093..7169d62 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -13,6 +13,7 @@ import { SupplierService } from '../users/supplier/supplier.service'; import { parsingFile } from '../helper/csv-parser'; import { PartnerService } from '../users/partner/partner.service'; import { mapSeries } from 'bluebird'; +import { ProductHistoryStatus } from './entities/product-history-status.entity'; export class ProductService { constructor( @@ -20,6 +21,8 @@ export class ProductService { private productRepository: Repository, @InjectRepository(ProductHistoryPrice) private productHistoryPrice: Repository, + @InjectRepository(ProductHistoryStatus) + private productHistoryStatus: Repository, private productSubCategoriesService: ProductSubCategoriesService, private usersService: UsersService, private supplierService: SupplierService, @@ -103,6 +106,13 @@ export class ProductService { }); } + await this.productHistoryStatus.insert({ + product: productData, + partner: it[6] != '-' ? partnerData : null, + status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', + + }); + await this.productHistoryPrice.insert({ product: productData, mark_up_price: it[4], @@ -123,12 +133,18 @@ export class ProductService { const savedProduct = await this.productRepository.insert({ name: it[1], code: it[0], - status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', + status: null, sub_categories: subCategories, supplier: supplierData, type: it[7] == 'postpaid' ? 'postpaid' : 'prepaid', }); + await this.productHistoryStatus.insert({ + product: savedProduct.identifiers[0], + partner: partnerData, + status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', + }); + return await this.productHistoryPrice.insert({ product: savedProduct.identifiers[0], mark_up_price: it[4], From 2f0e191e5acc6fc769bc12cef606d8a99c672769 Mon Sep 17 00:00:00 2001 From: mfadiln2018 Date: Fri, 26 Aug 2022 15:47:21 +0700 Subject: [PATCH 02/17] Feat: add insert product history status at upload product csv --- .../entities/product-history-status.entity.ts | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/product/entities/product-history-status.entity.ts diff --git a/src/product/entities/product-history-status.entity.ts b/src/product/entities/product-history-status.entity.ts new file mode 100644 index 0000000..8ad3458 --- /dev/null +++ b/src/product/entities/product-history-status.entity.ts @@ -0,0 +1,20 @@ +import { Column, Entity, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; +import { Product } from './product.entity'; +import { BaseModel } from '../../config/basemodel.entity'; +import { productType } from '../../helper/enum-list'; +import { Partner } from '../../users/entities/partner.entity'; + +@Entity() +export class ProductHistoryStatus extends BaseModel { + @PrimaryGeneratedColumn('uuid') + id: string; + + @ManyToOne(() => Product, (product) => product.id) + product: Product; + + @ManyToOne(() => Partner, (partner) => partner.id) + partner: Partner; + + @Column() + status: string; +} From b13a38590c60168d1c16deba2de8082dc0d69db6 Mon Sep 17 00:00:00 2001 From: mfadiln2018 Date: Sat, 27 Aug 2022 13:42:11 +0700 Subject: [PATCH 03/17] Feat: add insert product history status at update product --- src/product/product.service.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 7169d62..bae2bef 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -513,6 +513,10 @@ export class ProductService { updateProductDto.subCategoriesId, ); + await this.productHistoryStatus.update(id, { + status: updateProductDto.status, + }); + const result = await this.productRepository.update(id, { name: updateProductDto.name, code: updateProductDto.code, From 25a48ff39f6e3388c5bb95bcbde9c84ac1452c92 Mon Sep 17 00:00:00 2001 From: Fadli Date: Mon, 29 Aug 2022 12:11:49 +0700 Subject: [PATCH 04/17] - change status to product history status --- src/product/entities/product.entity.ts | 12 ++++++++++++ src/transaction/transaction.service.ts | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/product/entities/product.entity.ts b/src/product/entities/product.entity.ts index 2b2f92b..3a2d5aa 100644 --- a/src/product/entities/product.entity.ts +++ b/src/product/entities/product.entity.ts @@ -3,6 +3,7 @@ import { ProductSubCategories } from './product-sub-category.entity'; import { BaseModel } from '../../config/basemodel.entity'; import { Supplier } from '../../users/entities/supplier.entity'; import { ProductHistoryPrice } from './product-history-price.entity'; +import {ProductHistoryStatus} from "./product-history-status.entity"; @Entity() export class Product extends BaseModel { @@ -53,6 +54,17 @@ export class Product extends BaseModel { ) supplier: Supplier; + + @OneToMany( + () => { + return ProductHistoryStatus; + }, + (php) => { + return php.product; + }, + ) + statusHistory: ProductHistoryStatus; + @OneToMany( () => { return ProductHistoryPrice; diff --git a/src/transaction/transaction.service.ts b/src/transaction/transaction.service.ts index a8cdcc8..2fc835d 100644 --- a/src/transaction/transaction.service.ts +++ b/src/transaction/transaction.service.ts @@ -310,7 +310,7 @@ export class TransactionService { 'prepaid', ); - if (!productData.status.includes('ACTIVE')) { + if (!productData.statusHistory.status.includes('ACTIVE')) { throw new HttpException( { statusCode: HttpStatus.INTERNAL_SERVER_ERROR, @@ -467,7 +467,7 @@ export class TransactionService { 'prepaid', ); - if (!productData.status.includes('ACTIVE')) { + if (!productData.statusHistory.status.includes('ACTIVE')) { throw new HttpException( { statusCode: HttpStatus.INTERNAL_SERVER_ERROR, From c6d4b123079327f5187d14204c981dda0f9f6d85 Mon Sep 17 00:00:00 2001 From: Fadli Date: Mon, 29 Aug 2022 14:49:01 +0700 Subject: [PATCH 05/17] - change status to product history status --- src/product/product.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index bae2bef..1afedee 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -282,8 +282,9 @@ export class ProductService { 'current_price', 'current_price.partner_id is NULL and current_price.end_date is NULL', ) + .leftJoin('product.statusHistory', 'status_history') .where( - `product.supplier_id = :supplier_id and product.status = 'ACTIVE'`, + `product.supplier_id = :supplier_id and status_history.status = 'ACTIVE'`, { supplier_id: supplier, }, @@ -451,7 +452,6 @@ export class ProductService { relations: ['supplier'], where: { code: code, - status: 'ACTIVE', }, }); } catch (e) { From 4f03fee759c2416902656812e2a3308fb74d481d Mon Sep 17 00:00:00 2001 From: mfadiln2018 Date: Mon, 29 Aug 2022 15:46:02 +0700 Subject: [PATCH 06/17] Feat: add get status from product history status --- src/product/entities/product.entity.ts | 2 ++ src/product/product.service.ts | 23 +++++++++++++++++------ 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/product/entities/product.entity.ts b/src/product/entities/product.entity.ts index 3a2d5aa..1f6fda9 100644 --- a/src/product/entities/product.entity.ts +++ b/src/product/entities/product.entity.ts @@ -65,6 +65,8 @@ export class Product extends BaseModel { ) statusHistory: ProductHistoryStatus; + currentStatus: ProductHistoryStatus; + @OneToMany( () => { return ProductHistoryPrice; diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 1afedee..5d9fb8c 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -194,6 +194,12 @@ export class ProductService { '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', @@ -201,8 +207,8 @@ export class ProductService { 'sub_categories.name', 'supplier.name', 'category.name', - 'product.status', ]) + .addSelect('history_status.status', 'status') .addSelect('current_price.price', 'price') .addSelect('current_price.partner_fee', 'partner_fee') .addSelect('current_price.admin_price', 'admin_price') @@ -282,7 +288,6 @@ export class ProductService { 'current_price', 'current_price.partner_id is NULL and current_price.end_date is NULL', ) - .leftJoin('product.statusHistory', 'status_history') .where( `product.supplier_id = :supplier_id and status_history.status = 'ACTIVE'`, { @@ -346,7 +351,6 @@ export class ProductService { 'supplier', 'supplier.status = true', ) - .where(`product.status = 'ACTIVE'`) .innerJoinAndMapOne( 'product.currentPrice', 'product.priceHistory', @@ -356,18 +360,25 @@ export class ProductService { id_partner: user.partner.id, }, ) - .select(['product.id']) + .innerJoinAndMapOne( + 'product.currentStatus', + 'product.statusHistory', + 'history_status', + 'history_status.deleted_at is NULL' + ) + .where(`history_status.status = 'ACTIVE'`) + .select(['product.id']) .addSelect([ 'product.name', 'product.code', 'product.type', - 'product.status', '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') // .addSelect( // '(current_price.price + current_price.mark_up_price) as price', // ); @@ -386,7 +397,7 @@ export class ProductService { if (subCategories && filterSubCategories.length > 0) { baseQuery.where('product.sub_categories_id IN (:...subCategoryId)', { subCategoryId: filterSubCategories, - }).andWhere(`product.status = 'ACTIVE'`) + }).andWhere(`history_status.status = 'ACTIVE'`) } const newData = [] From 09e13a043563fb04aaa0ecc45993b1c13aa3b5fc Mon Sep 17 00:00:00 2001 From: mfadiln2018 Date: Mon, 29 Aug 2022 16:10:14 +0700 Subject: [PATCH 07/17] fix: update status product --- src/product/product.service.ts | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 5d9fb8c..0cb84fe 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -524,10 +524,15 @@ export class ProductService { updateProductDto.subCategoriesId, ); - await this.productHistoryStatus.update(id, { - status: updateProductDto.status, + const dataStatus = await this.productHistoryStatus.findOne({ + where: { + product: id, + }, }); + await this.productHistoryStatus.update(dataStatus.id, { + status: updateProductDto.status, + }); const result = await this.productRepository.update(id, { name: updateProductDto.name, code: updateProductDto.code, From f6d896cf8b07a30d9f9ada061cf80220b8654f36 Mon Sep 17 00:00:00 2001 From: Fadli Date: Mon, 29 Aug 2022 23:19:20 +0700 Subject: [PATCH 08/17] - change status to product history status --- src/product/product.service.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 0cb84fe..d1f4b33 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -282,6 +282,8 @@ export class ProductService { .createQueryBuilder('product') .leftJoin('product.sub_categories', 'sub_categories') + .leftJoin('product.statusHistory', 'status_history') + .leftJoinAndMapOne( 'product.currentPrice', 'product.priceHistory', From 74d1e6f422de4367b5a6876b564275b4486e9db0 Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:18:17 +0700 Subject: [PATCH 09/17] - change status to product history status --- src/product/product.service.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index d1f4b33..e4f5694 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -368,7 +368,11 @@ export class ProductService { 'history_status', 'history_status.deleted_at is NULL' ) - .where(`history_status.status = 'ACTIVE'`) + .where(`history_status.partner_id = :id_partner and history_status.status = 'ACTIVE'`, + { + id_partner: user.partner.id, + }, + ) .select(['product.id']) .addSelect([ 'product.name', From b0ff71cf419bba19c5829e862ea12884219a8da1 Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:24:58 +0700 Subject: [PATCH 10/17] - change status to product history status --- src/product/product.service.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index e4f5694..df1642f 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -366,9 +366,7 @@ export class ProductService { 'product.currentStatus', 'product.statusHistory', 'history_status', - 'history_status.deleted_at is NULL' - ) - .where(`history_status.partner_id = :id_partner and history_status.status = 'ACTIVE'`, + 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = ACTIVE', { id_partner: user.partner.id, }, From 38935e40a999caa42cbfbb09b37fd6ed7309df1d Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:29:31 +0700 Subject: [PATCH 11/17] - change status to product history status --- src/product/product.service.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index df1642f..d1f4b33 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -366,11 +366,9 @@ export class ProductService { 'product.currentStatus', 'product.statusHistory', 'history_status', - 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = ACTIVE', - { - id_partner: user.partner.id, - }, + 'history_status.deleted_at is NULL' ) + .where(`history_status.status = 'ACTIVE'`) .select(['product.id']) .addSelect([ 'product.name', From 0db3bd8c32bbc0a0097bf881e8b2ea24b63ed578 Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:31:31 +0700 Subject: [PATCH 12/17] - change status to product history status --- src/product/product.service.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index d1f4b33..df1642f 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -366,9 +366,11 @@ export class ProductService { 'product.currentStatus', 'product.statusHistory', 'history_status', - 'history_status.deleted_at is NULL' + 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = ACTIVE', + { + id_partner: user.partner.id, + }, ) - .where(`history_status.status = 'ACTIVE'`) .select(['product.id']) .addSelect([ 'product.name', From 7cdd33cd5abb0c912680e0f64451caf170e69ebf Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:39:29 +0700 Subject: [PATCH 13/17] - change status to product history status --- src/product/product.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index df1642f..7653ea0 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -366,7 +366,7 @@ export class ProductService { 'product.currentStatus', 'product.statusHistory', 'history_status', - 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = ACTIVE', + 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = `ACTIVE`', { id_partner: user.partner.id, }, From af2953148559c6c11fd744cddba760b831d6af6f Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 00:41:45 +0700 Subject: [PATCH 14/17] - change status to product history status --- src/product/product.service.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index 7653ea0..c02b6e1 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -366,11 +366,13 @@ export class ProductService { 'product.currentStatus', 'product.statusHistory', 'history_status', - 'history_status.deleted_at is NULL and history_status.partner_id = :id_partner and history_status.status = `ACTIVE`', + 'history_status.deleted_at is NULL' + ) + .where(`history_status.partner_id = :id_partner and history_status.status = 'ACTIVE'`, { id_partner: user.partner.id, }, - ) + ) .select(['product.id']) .addSelect([ 'product.name', From 8e2106b8319a9fcd2367c84228c7ddc2494e05fa Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 01:05:18 +0700 Subject: [PATCH 15/17] - change status to product history status --- src/product/product.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index c02b6e1..eafd101 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -133,7 +133,7 @@ export class ProductService { const savedProduct = await this.productRepository.insert({ name: it[1], code: it[0], - status: null, + status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', sub_categories: subCategories, supplier: supplierData, type: it[7] == 'postpaid' ? 'postpaid' : 'prepaid', From 112662d0692697fff77cba66b9c57cb5f47168a3 Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 01:06:35 +0700 Subject: [PATCH 16/17] - change status to product history status --- src/product/product.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index eafd101..c02b6e1 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -133,7 +133,7 @@ export class ProductService { const savedProduct = await this.productRepository.insert({ name: it[1], code: it[0], - status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', + status: null, sub_categories: subCategories, supplier: supplierData, type: it[7] == 'postpaid' ? 'postpaid' : 'prepaid', From 42e0ab57dd710fd4a814fac6f4d6f22f5a2d3a0c Mon Sep 17 00:00:00 2001 From: Fadli Date: Tue, 30 Aug 2022 01:18:57 +0700 Subject: [PATCH 17/17] - change status to product history status --- src/product/product.service.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/product/product.service.ts b/src/product/product.service.ts index c02b6e1..eafd101 100644 --- a/src/product/product.service.ts +++ b/src/product/product.service.ts @@ -133,7 +133,7 @@ export class ProductService { const savedProduct = await this.productRepository.insert({ name: it[1], code: it[0], - status: null, + status: it[5] == 'active' ? 'ACTIVE' : 'NOT ACTIVE', sub_categories: subCategories, supplier: supplierData, type: it[7] == 'postpaid' ? 'postpaid' : 'prepaid',