Skip to content

Commit

Permalink
add inventory tracker module
Browse files Browse the repository at this point in the history
  • Loading branch information
bahram1249 committed Jul 2, 2024
1 parent 661051c commit de79137
Show file tree
Hide file tree
Showing 14 changed files with 266 additions and 8 deletions.
1 change: 1 addition & 0 deletions apps/e-commerce/src/admin/product/product.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ import {
} from '@rahino/ecommerce/inventory/constants';
import { InjectQueue } from '@nestjs/bullmq';
import { Queue } from 'bullmq';
import { InventoryTrackChangeService } from '@rahino/ecommerce/inventory-track-change/inventory-track-change.service';

@Injectable()
export class ProductService {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { Module } from '@nestjs/common';
import { SequelizeModule } from '@nestjs/sequelize';
import { ECInventoryTrackChangeStatus } from '@rahino/database/models/ecommerce-eav/ec-inventory-track-change-status.entity';
import { ECInventory } from '@rahino/database/models/ecommerce-eav/ec-inventory.entity';
import { InventoryTrackChangeService } from './inventory-track-change.service';

@Module({
imports: [
SequelizeModule.forFeature([ECInventoryTrackChangeStatus, ECInventory]),
],
providers: [InventoryTrackChangeService],
exports: [InventoryTrackChangeService],
})
export class InventoryTrackChangeModule {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/sequelize';
import { ECInventoryTrackChangeStatus } from '@rahino/database/models/ecommerce-eav/ec-inventory-track-change-status.entity';
import { InventoryTrackChangeStatusEnum } from '../util/enum';
import { Transaction } from 'sequelize';
import { ECInventory } from '@rahino/database/models/ecommerce-eav/ec-inventory.entity';
import { QueryOptionsBuilder } from '@rahino/query-filter/sequelize-query-builder';

@Injectable()
export class InventoryTrackChangeService {
constructor(
@InjectModel(ECInventoryTrackChangeStatus)
private readonly repository: typeof ECInventoryTrackChangeStatus,
@InjectModel(ECInventory)
private readonly inventoryRepository: typeof ECInventory,
) {}

async changeStatus(
inventoryId: bigint,
inventoryTrackChangeStatus: InventoryTrackChangeStatusEnum,
qty: number,
orderId?: bigint,
transaction?: Transaction,
) {
const inventory = await this.inventoryRepository.findOne(
new QueryOptionsBuilder().filter({ id: inventoryId }).build(),
);

await this.repository.create(
{
inventoryId: inventory.id,
productId: inventory.productId,
qty: qty,
inventoryTrackChangeStatusId: inventoryTrackChangeStatus,
orderId: orderId,
},
{
transaction: transaction,
},
);
}
}
2 changes: 2 additions & 0 deletions apps/e-commerce/src/inventory/inventory.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { RevertInventoryQtyProcessor } from './processor/revert-inventory-qty.processor';
import { PaymentServiceProviderModule } from '../user/payment/provider/payment-provider.module';
import { RevertInventoryModule } from './revert-inventory.module';
import { InventoryTrackChangeModule } from '../inventory-track-change/inventory-track-change.module';

@Module({
imports: [
Expand All @@ -54,6 +55,7 @@ import { RevertInventoryModule } from './revert-inventory.module';
VendorAddressModule,
QueryFilterModule,
DBLoggerModule,
InventoryTrackChangeModule,
BullModule.forRootAsync({
imports: [ConfigModule],
inject: [ConfigService],
Expand Down
2 changes: 2 additions & 0 deletions apps/e-commerce/src/inventory/revert-inventory.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,12 @@ import { ECInventory } from '@rahino/database/models/ecommerce-eav/ec-inventory.
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECProduct } from '@rahino/database/models/ecommerce-eav/ec-product.entity';
import { InventoryTrackChangeModule } from '../inventory-track-change/inventory-track-change.module';

@Module({
imports: [
SequelizeModule.forFeature([ECInventory, ECPayment, ECOrder, ECProduct]),
InventoryTrackChangeModule,
],
providers: [RevertInventoryQtyService, inventoryStatusService],
exports: [RevertInventoryQtyService],
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,14 @@ import { Sequelize, Transaction } from 'sequelize';
import { InventoryStatusEnum } from '../enum';
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import {
InventoryTrackChangeStatusEnum,
PaymentStatusEnum,
PaymentTypeEnum,
} from '@rahino/ecommerce/util/enum';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECOrderDetail } from '@rahino/database/models/ecommerce-eav/ec-order-detail.entity';
import { inventoryStatusService } from './inventory-status.service';
import { InventoryTrackChangeService } from '@rahino/ecommerce/inventory-track-change/inventory-track-change.service';

@Injectable()
export class DecreaseInventoryService {
Expand All @@ -28,6 +30,7 @@ export class DecreaseInventoryService {
@InjectModel(ECOrder)
private readonly orderRepository: typeof ECOrder,
private readonly inventoryStatusService: inventoryStatusService,
private readonly inventoryTrackChangeService: InventoryTrackChangeService,
) {}

async decreaseByPayment(paymentId: bigint, transaction?: Transaction) {
Expand Down Expand Up @@ -86,15 +89,30 @@ export class DecreaseInventoryService {
if (inventory.qty == 0) {
inventory.inventoryStatusId = InventoryStatusEnum.unavailable;
}
await this.inventoryRepository.update(
{ qty: inventory.qty, inventoryStatusId: inventory.inventoryStatusId },
{
where: {
id: inventory.id,
inventory = (
await this.inventoryRepository.update(
{
qty: inventory.qty,
inventoryStatusId: inventory.inventoryStatusId,
},
{
where: {
id: inventory.id,
},
transaction: transaction,
returning: true,
},
transaction: transaction,
},
)
)[1][0];

await this.inventoryTrackChangeService.changeStatus(
inventory.id,
InventoryTrackChangeStatusEnum.DecreaseQtyForOrderPurpose,
inventory.qty,
order.id,
transaction,
);

await this.inventoryStatusService.productInventoryStatusUpdate(
detail.productId,
transaction,
Expand Down
20 changes: 20 additions & 0 deletions apps/e-commerce/src/inventory/services/inventory.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,8 @@ import { ECGuarantee } from '@rahino/database/models/ecommerce-eav/ec-guarantee.
import { ECGuaranteeMonth } from '@rahino/database/models/ecommerce-eav/ec-guarantee-month.entity';
import { ECProvince } from '@rahino/database/models/ecommerce-eav/ec-province.entity';
import { ECVariationPrice } from '@rahino/database/models/ecommerce-eav/ec-variation-prices';
import { InventoryTrackChangeService } from '@rahino/ecommerce/inventory-track-change/inventory-track-change.service';
import { InventoryTrackChangeStatusEnum } from '@rahino/ecommerce/util/enum';

@Injectable()
export class InventoryService {
Expand All @@ -29,6 +31,7 @@ export class InventoryService {
private readonly repository: typeof ECInventory,
@InjectModel(ECInventoryPrice)
private readonly inventoryPriceRepository: typeof ECInventoryPrice,
private readonly inventoryTrackChangeService: InventoryTrackChangeService,
@InjectMapper() private readonly mapper: Mapper,
) {}

Expand Down Expand Up @@ -161,6 +164,15 @@ export class InventoryService {
const inventoryInsert = await this.repository.create(insertItem, {
transaction: transaction,
});

await this.inventoryTrackChangeService.changeStatus(
inventoryInsert.id,
InventoryTrackChangeStatusEnum.Create,
inventoryInsert.qty,
null,
transaction,
);

if (inventory.firstPrice) {
await this.inventoryPriceRepository.create(
{
Expand Down Expand Up @@ -230,6 +242,14 @@ export class InventoryService {
? InventoryStatusEnum.available
: InventoryStatusEnum.unavailable;

await this.inventoryTrackChangeService.changeStatus(
updateItem.id,
InventoryTrackChangeStatusEnum.Update,
inventory.qty,
null,
transaction,
);

// deleted all prices
await this.inventoryPriceRepository.update(
{ isDeleted: true, deletedBy: user.id },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,10 +6,14 @@ import { Op } from 'sequelize';
import { Sequelize } from 'sequelize';
import { InventoryStatusEnum } from '../enum';
import { ECPayment } from '@rahino/database/models/ecommerce-eav/ec-payment-entity';
import { PaymentTypeEnum } from '@rahino/ecommerce/util/enum';
import {
InventoryTrackChangeStatusEnum,
PaymentTypeEnum,
} from '@rahino/ecommerce/util/enum';
import { ECOrder } from '@rahino/database/models/ecommerce-eav/ec-order.entity';
import { ECOrderDetail } from '@rahino/database/models/ecommerce-eav/ec-order-detail.entity';
import { inventoryStatusService } from './inventory-status.service';
import { InventoryTrackChangeService } from '@rahino/ecommerce/inventory-track-change/inventory-track-change.service';

@Injectable()
export class RevertInventoryQtyService {
Expand All @@ -20,6 +24,7 @@ export class RevertInventoryQtyService {
private readonly paymentRepository: typeof ECPayment,
@InjectModel(ECOrder)
private readonly orderRepository: typeof ECOrder,
private readonly inventoryTrackChangeService: InventoryTrackChangeService,
private readonly inventoryStatusService: inventoryStatusService,
) {}

Expand Down Expand Up @@ -73,6 +78,13 @@ export class RevertInventoryQtyService {
inventory.inventoryStatusId = InventoryStatusEnum.available;
}
inventory = await inventory.save();

await this.inventoryTrackChangeService.changeStatus(
inventory.id,
InventoryTrackChangeStatusEnum.IncreaseQtyForOrderUnpaidOrder,
inventory.qty,
order.id,
);
await this.inventoryStatusService.productInventoryStatusUpdate(
detail.productId,
);
Expand Down
1 change: 1 addition & 0 deletions apps/e-commerce/src/util/enum/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,4 @@ export * from './order-detail-status.enum';
export * from './order-status.enum';
export * from './vendor-commission-type.enum';
export * from './product-comment-status.enum';
export * from './inventory-track-change-status.enum';
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export enum InventoryTrackChangeStatusEnum {
Create = 1,
Update = 2,
DecreaseQtyForOrderPurpose = 3,
IncreaseQtyForOrderUnpaidOrder = 4,
}
56 changes: 56 additions & 0 deletions apps/main/src/sql/core-v1.sql
Original file line number Diff line number Diff line change
Expand Up @@ -3732,6 +3732,62 @@ END
GO


-- ec-inventorytrackchangestatuses
IF NOT EXISTS (SELECT 1 FROM Migrations WHERE version = 'ec-inventorytrackchangestatuses-v1'
)
AND EXISTS (
SELECT 1 FROM Settings
WHERE ([key] = 'SITE_NAME' AND [value] IN ('ecommerce'))
)
BEGIN

CREATE TABLE ECInventoryTrackChangeStatuses(
id int PRIMARY KEY,
[name] nvarchar(256) NOT NULL,
[createdAt] datetimeoffset NOT NULL,
[updatedAt] datetimeoffset NOT NULL,
);


INSERT INTO Migrations(version, createdAt, updatedAt)
SELECT 'ec-inventorytrackchangestatuses-v1', GETDATE(), GETDATE()
END

GO


-- ec-inventoryhistories-v1
IF NOT EXISTS (SELECT 1 FROM Migrations WHERE version = 'ec-inventoryhistories-v1'
)
AND EXISTS (
SELECT 1 FROM Settings
WHERE ([key] = 'SITE_NAME' AND [value] IN ('ecommerce'))
)
BEGIN

CREATE TABLE ECInventoryHistories(
id bigint identity(1,1) PRIMARY KEY,
inventoryId bigint NOT NULL
CONSTRAINT FK_ECInventoryHistory_Inventoryid
FOREIGN KEY REFERENCES ECInventories(id),
productId bigint NOT NULL
CONSTRAINT FK_ECInventoryHistory_ProductId
FOREIGN KEY REFERENCES ECProducts(id),
inventoryTrackChangeStatusId int NOT NULL
CONSTRAINT FK_ECInventoryHistory_InventoryTrackChangeStatusId
FOREIGN KEY REFERENCES ECInventoryTrackChangeStatuses(id),
qty int NOT NULL,
[createdAt] datetimeoffset NOT NULL,
[updatedAt] datetimeoffset NOT NULL,
);


INSERT INTO Migrations(version, createdAt, updatedAt)
SELECT 'ec-inventoryhistories-v1', GETDATE(), GETDATE()
END

GO



/*
Expand Down
4 changes: 4 additions & 0 deletions libs/database/src/database.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ import { ECEntityTypeFactor } from './models/ecommerce-eav/ec-entitytype-factor.
import { ECProductCommentStatus } from './models/ecommerce-eav/ec-comment-status.entity';
import { ECProductComment } from './models/ecommerce-eav/ec-product-comment.entity';
import { ECProductCommentFactor } from './models/ecommerce-eav/ec-product-comment-factor.entity';
import { ECInventoryTrackChangeStatus } from './models/ecommerce-eav/ec-inventory-track-change-status.entity';
import { ECInventoryHistory } from './models/ecommerce-eav/ec-inventory-history.entity';

@Module({
imports: [
Expand Down Expand Up @@ -182,6 +184,8 @@ import { ECProductCommentFactor } from './models/ecommerce-eav/ec-product-commen
ECProductCommentStatus,
ECProductComment,
ECProductCommentFactor,
ECInventoryTrackChangeStatus,
ECInventoryHistory,
Buffet,
BuffetGallery,
BuffetType,
Expand Down
Loading

0 comments on commit de79137

Please sign in to comment.