diff --git a/apps/e-commerce/src/admin/product-comment/services/calculate-comment-score.service.ts b/apps/e-commerce/src/admin/product-comment/services/calculate-comment-score.service.ts index bd33faef..d9e8f02a 100644 --- a/apps/e-commerce/src/admin/product-comment/services/calculate-comment-score.service.ts +++ b/apps/e-commerce/src/admin/product-comment/services/calculate-comment-score.service.ts @@ -24,18 +24,6 @@ export class CalculateCommentScoreService { new QueryOptionsBuilder() .filter({ id: commentId }) .filter({ statusId: ProductCommentStatusEnum.confirm }) - .filter( - Sequelize.where( - Sequelize.fn( - 'isnull', - Sequelize.col('ECProductComment.isDeleted'), - 0, - ), - { - [Op.eq]: 0, - }, - ), - ) .build(), ); if (!comment) { @@ -94,6 +82,18 @@ export class CalculateCommentScoreService { ]) .filter({ entityId: product.id }) .filter({ statusId: ProductCommentStatusEnum.confirm }) + .filter( + Sequelize.where( + Sequelize.fn( + 'isnull', + Sequelize.col('ECProductComment.isDeleted'), + 0, + ), + { + [Op.eq]: 0, + }, + ), + ) .raw(true) .build(), ); diff --git a/apps/e-commerce/src/report/admin-sale/admin-sale.service.ts b/apps/e-commerce/src/report/admin-sale/admin-sale.service.ts index 02f8b62e..e4238b78 100644 --- a/apps/e-commerce/src/report/admin-sale/admin-sale.service.ts +++ b/apps/e-commerce/src/report/admin-sale/admin-sale.service.ts @@ -42,6 +42,7 @@ export class AdminSaleService { .init(false) .nonDeleted() .onlyPaid() + .includeInventoryPrice() .addBeginDate(filter.beginDate) .addEndDate(filter.endDate); @@ -49,6 +50,10 @@ export class AdminSaleService { queryBuilder = queryBuilder.onlyVendor(filter.vendorId); } + if (filter.variationPriceId) { + queryBuilder = queryBuilder.addVariationPriceId(filter.variationPriceId); + } + const count = await this.orderDetailRepository.count(queryBuilder.build()); queryBuilder = queryBuilder @@ -95,7 +100,7 @@ export class AdminSaleService { .includeProduct() .includeInventory() .includeVendor() - .includeInventoryPrice() + .offset(filter.offset) .limit(filter.limit); @@ -127,6 +132,7 @@ export class AdminSaleService { .init(true) .nonDeleted() .onlyPaid() + .includeInventoryPrice() .addBeginDate(filter.beginDate) .addEndDate(filter.endDate); @@ -134,6 +140,10 @@ export class AdminSaleService { queryBuilder = queryBuilder.onlyVendor(filter.vendorId); } + if (filter.variationPriceId) { + queryBuilder = queryBuilder.addVariationPriceId(filter.variationPriceId); + } + queryBuilder = queryBuilder .attributes([ [ @@ -218,7 +228,6 @@ export class AdminSaleService { 'profitAmount', ], ]) - .includeInventoryPrice() .rawQuery(true); const findOptions = queryBuilder.build(); diff --git a/apps/e-commerce/src/report/admin-sale/dto/admin-sale-dto.ts b/apps/e-commerce/src/report/admin-sale/dto/admin-sale-dto.ts index 20d05b73..b548379c 100644 --- a/apps/e-commerce/src/report/admin-sale/dto/admin-sale-dto.ts +++ b/apps/e-commerce/src/report/admin-sale/dto/admin-sale-dto.ts @@ -32,4 +32,16 @@ export class AdminSaleDto { }) @Type(() => Number) vendorId?: number; + + @ApiProperty({ + required: true, + type: IsNumber, + description: 'variationPriceId', + }) + @IsInt({ + message: i18nValidationMessage('validation.NUMBER'), + }) + @Type(() => Number) + @IsOptional() + variationPriceId?: number; } diff --git a/apps/e-commerce/src/report/sale-query-builder/sale-query-builder.service.ts b/apps/e-commerce/src/report/sale-query-builder/sale-query-builder.service.ts index a127d0fe..ccc7ed3c 100644 --- a/apps/e-commerce/src/report/sale-query-builder/sale-query-builder.service.ts +++ b/apps/e-commerce/src/report/sale-query-builder/sale-query-builder.service.ts @@ -9,8 +9,9 @@ import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity'; import { ECProduct } from '@rahino/database/models/ecommerce-eav/ec-product.entity'; import { ECVendor } from '@rahino/database/models/ecommerce-eav/ec-vendor.entity'; import { OrderStatusEnum } from '@rahino/ecommerce/util/enum'; +import { Order } from '@rahino/query-filter'; import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builder'; -import { FindAttributeOptions, Op, Sequelize } from 'sequelize'; +import { FindAttributeOptions, GroupOption, Op, Sequelize } from 'sequelize'; @Injectable({ scope: Scope.REQUEST }) export class SaleQueryBuilderService { @@ -53,6 +54,15 @@ export class SaleQueryBuilderService { return this; } + addVariationPriceId(variationPriceId: number) { + this.builder = this.builder.filter( + Sequelize.where(Sequelize.col('inventoryPrice.variationPriceId'), { + [Op.eq]: variationPriceId, + }), + ); + return this; + } + onlyVendor(vendorId: number) { this.builder = this.builder.filter({ vendorId: vendorId }); return this; @@ -167,7 +177,9 @@ export class SaleQueryBuilderService { includeInventoryPrice() { this.builder = this.builder.thenInlcude({ - attributes: this.groupByQuery ? [] : ['id', 'buyPrice'], + attributes: this.groupByQuery + ? [] + : ['id', 'buyPrice', 'variationPriceId'], model: ECInventoryPrice, as: 'inventoryPrice', required: true, @@ -180,6 +192,16 @@ export class SaleQueryBuilderService { return this; } + group(group: GroupOption) { + this.builder = this.builder.group(group); + return this; + } + + order(orderArg: Order) { + this.builder = this.builder.order(orderArg); + return this; + } + build() { return this.builder.build(); } diff --git a/apps/e-commerce/src/report/vendor-sale/dto/vendor-sale-dto.ts b/apps/e-commerce/src/report/vendor-sale/dto/vendor-sale-dto.ts index e6dbeb82..e14f3572 100644 --- a/apps/e-commerce/src/report/vendor-sale/dto/vendor-sale-dto.ts +++ b/apps/e-commerce/src/report/vendor-sale/dto/vendor-sale-dto.ts @@ -31,4 +31,16 @@ export class VendorSaleDto { }) @Type(() => Number) vendorId: number; + + @ApiProperty({ + required: true, + type: IsNumber, + description: 'variationPriceId', + }) + @IsInt({ + message: i18nValidationMessage('validation.NUMBER'), + }) + @Type(() => Number) + @IsOptional() + variationPriceId?: number; } diff --git a/apps/e-commerce/src/report/vendor-sale/vendor-sale.service.ts b/apps/e-commerce/src/report/vendor-sale/vendor-sale.service.ts index db615446..b068e63a 100644 --- a/apps/e-commerce/src/report/vendor-sale/vendor-sale.service.ts +++ b/apps/e-commerce/src/report/vendor-sale/vendor-sale.service.ts @@ -60,9 +60,14 @@ export class VendorSaleService { .init(false) .nonDeleted() .onlyPaid() + .includeInventoryPrice() .addBeginDate(filter.beginDate) .addEndDate(filter.endDate); + if (filter.variationPriceId) { + queryBuilder = queryBuilder.addVariationPriceId(filter.variationPriceId); + } + if (filter.vendorId) { queryBuilder = queryBuilder.onlyVendor(filter.vendorId); } @@ -113,7 +118,7 @@ export class VendorSaleService { .includeProduct() .includeInventory() .includeVendor() - .includeInventoryPrice() + .offset(filter.offset) .limit(filter.limit); @@ -156,6 +161,7 @@ export class VendorSaleService { .init(true) .nonDeleted() .onlyPaid() + .includeInventoryPrice() .addBeginDate(filter.beginDate) .addEndDate(filter.endDate); @@ -163,6 +169,10 @@ export class VendorSaleService { queryBuilder = queryBuilder.onlyVendor(filter.vendorId); } + if (filter.variationPriceId) { + queryBuilder = queryBuilder.addVariationPriceId(filter.variationPriceId); + } + queryBuilder = queryBuilder .attributes([ [ @@ -247,7 +257,6 @@ export class VendorSaleService { 'profitAmount', ], ]) - .includeInventoryPrice() .rawQuery(true); const findOptions = queryBuilder.build(); diff --git a/libs/query-filter/src/sequelize-query-builder/query-options.builder.ts b/libs/query-filter/src/sequelize-query-builder/query-options.builder.ts index d0b47564..721a4929 100644 --- a/libs/query-filter/src/sequelize-query-builder/query-options.builder.ts +++ b/libs/query-filter/src/sequelize-query-builder/query-options.builder.ts @@ -60,7 +60,8 @@ export class QueryOptionsBuilder { this.options.subQuery = flag; return this; } - build(): Omit, 'group'> { + build(): FindAndCountOptions { + //Omit, 'group'> { return this.options; } transaction(transaction: Transaction) {