@tomei/product
Version:
NestJS package for product module
440 lines (356 loc) • 10.5 kB
text/typescript
import { ProductBase } from '../product/product.base';
import { ProductWithInventoryRepository } from './product-with-inventory.repository';
import { ProductWithInventoryModel } from '../../entities/product-with-inventory.entity';
import { IProductWithInventoryAttrBase } from '../../interfaces';
import { LoginUser } from '@tomei/sso';
import { Activity, ActionEnum } from '@tomei/activity-history';
import cuid from '../../helpers/cuid';
export abstract class ProductWithInventoryBase extends ProductBase {
ObjectType = 'ProductWithInventory';
private _UOM: string;
private _TotalUnits = 0;
private _TotalUnitsAvailable = 0;
private _TotalUnitsInCurrentOrder = 0;
private _TotalUnitsSold = 0;
private _TotalUnitsReserved = 0;
private _TotalUnitsOnConsignment = 0;
private _TotalUnitsUnderMaintenance = 0;
private _TotalUnitsVoid = 0;
private _TotalUnitsInTransit = 0;
private _TotalUnitsBackOrdered = 0;
private _TotalUnitsPreOrdered = 0;
private _StockLowAlertLevel = 0;
private _StockReorderLevel = 0;
private _BufferStockLevel = 0;
protected static _ProductWithInventoryRepository =
new ProductWithInventoryRepository();
constructor(product?: IProductWithInventoryAttrBase) {
// NOTE: got error if super() is not called first, not sure why happen only in this class
super(product);
if (product) {
this._UOM = product.UOM;
this._TotalUnits = product.TotalUnits;
this._TotalUnitsAvailable = product.TotalUnitsAvailable;
this._TotalUnitsInCurrentOrder = product.TotalUnitsInCurrentOrder;
this._TotalUnitsSold = product.TotalUnitsSold;
this._TotalUnitsReserved = product.TotalUnitsReserved;
this._TotalUnitsOnConsignment = product.TotalUnitsOnConsignment;
this._TotalUnitsUnderMaintenance = product.TotalUnitsUnderMaintenance;
this._TotalUnitsVoid = product.TotalUnitsVoid;
this._TotalUnitsInTransit = product.TotalUnitsInTransit;
this._TotalUnitsBackOrdered = product.TotalUnitsBackOrdered;
this._TotalUnitsPreOrdered = product.TotalUnitsPreOrdered;
this._StockLowAlertLevel = product.StockLowAlertLevel;
this._StockReorderLevel = product.StockReorderLevel;
this._BufferStockLevel = product.BufferStockLevel;
}
}
get ProductId(): string {
return super.ProductId;
}
set ProductId(value: string) {
super.ProductId = value;
}
get Name(): string {
return super.Name;
}
set Name(value: string) {
super.Name = value;
}
get Description(): string {
return super.Description;
}
set Description(value: string) {
super.Description = value;
}
get SKU(): string {
return super.SKU;
}
set SKU(value: string) {
super.SKU = value;
}
get Type(): string {
return super.Type;
}
set Type(value: string) {
super.Type = value;
}
get Remark(): string {
return super.Remark;
}
set Remark(value: string) {
super.Remark = value;
}
get IsTaxableYN(): string {
return super.IsTaxableYN;
}
set IsTaxableYN(value: string) {
super.IsTaxableYN = value;
}
get TaxCode(): string {
return super.TaxCode;
}
set TaxCode(value: string) {
super.TaxCode = value;
}
get IsPriceInclusiveTaxYN(): string {
return super.IsPriceInclusiveTaxYN;
}
set IsPriceInclusiveTaxYN(value: string) {
super.IsPriceInclusiveTaxYN = value;
}
get Status(): string {
return super.Status;
}
protected set Status(value: any) {
super.Status = value;
}
get VerifiedYN(): string {
return super.VerifiedYN;
}
protected set VerifiedYN(value: any) {
super.VerifiedYN = value;
}
get VerifiedAt(): Date {
return super.VerifiedAt;
}
protected set VerifiedAt(value: any) {
super.VerifiedAt = value;
}
get VerifiedById(): string {
return super.VerifiedById;
}
protected set VerifiedById(value: any) {
super.VerifiedById = value;
}
get VariantLevels(): number {
return super.VariantLevels;
}
set VariantLevels(value: number) {
super.VariantLevels = value;
}
get VariantTypeLevel1(): string {
return super.VariantTypeLevel1;
}
set VariantTypeLevel1(value: string) {
super.VariantTypeLevel1 = value;
}
get VariantTypeLevel2(): string {
return super.VariantTypeLevel2;
}
set VariantTypeLevel2(value: string) {
super.VariantTypeLevel2 = value;
}
get VariantTypeLevel3(): string {
return super.VariantTypeLevel3;
}
set VariantTypeLevel3(value: string) {
super.VariantTypeLevel3 = value;
}
get CreatedAt(): Date {
return super.CreatedAt;
}
protected set CreatedAt(value: any) {
super.CreatedAt = value;
}
get CreatedById(): string {
return super.CreatedById;
}
protected set CreatedById(value: any) {
super.CreatedById = value;
}
get UpdatedAt(): Date {
return super.UpdatedAt;
}
protected set UpdatedAt(value: any) {
super.UpdatedAt = value;
}
get UpdatedById(): string {
return super.UpdatedById;
}
protected set UpdatedById(value: any) {
super.UpdatedById = value;
}
get UpdatedSSYN(): string {
return super.UpdatedSSYN;
}
protected set UpdatedSSYN(value: any) {
super.UpdatedSSYN = value;
}
get UOM(): string {
return this._UOM;
}
set UOM(value: string) {
this._UOM = value;
}
get TotalUnits(): number {
return this._TotalUnits;
}
set TotalUnits(value: number) {
this._TotalUnits = value;
}
get TotalUnitsAvailable(): number {
return this._TotalUnitsAvailable;
}
protected set TotalUnitsAvailable(value: number) {
this._TotalUnitsAvailable = value;
}
get TotalUnitsInCurrentOrder(): number {
return this._TotalUnitsInCurrentOrder;
}
protected set TotalUnitsInCurrentOrder(value: number) {
this._TotalUnitsInCurrentOrder = value;
}
get TotalUnitsSold(): number {
return this._TotalUnitsSold;
}
protected set TotalUnitsSold(value: number) {
this._TotalUnitsSold = value;
}
get TotalUnitsReserved(): number {
return this._TotalUnitsReserved;
}
protected set TotalUnitsReserved(value: number) {
this._TotalUnitsReserved = value;
}
get TotalUnitsOnConsignment(): number {
return this._TotalUnitsOnConsignment;
}
protected set TotalUnitsOnConsignment(value: number) {
this._TotalUnitsOnConsignment = value;
}
get TotalUnitsUnderMaintenance(): number {
return this._TotalUnitsUnderMaintenance;
}
protected set TotalUnitsUnderMaintenance(value: number) {
this._TotalUnitsUnderMaintenance = value;
}
get TotalUnitsVoid(): number {
return this._TotalUnitsVoid;
}
protected set TotalUnitsVoid(value: number) {
this._TotalUnitsVoid = value;
}
get TotalUnitsInTransit(): number {
return this._TotalUnitsInTransit;
}
protected set TotalUnitsInTransit(value: number) {
this._TotalUnitsInTransit = value;
}
get TotalUnitsBackOrdered(): number {
return this._TotalUnitsBackOrdered;
}
protected set TotalUnitsBackOrdered(value: number) {
this._TotalUnitsBackOrdered = value;
}
get TotalUnitsPreOrdered(): number {
return this._TotalUnitsPreOrdered;
}
protected set TotalUnitsPreOrdered(value: number) {
this._TotalUnitsPreOrdered = value;
}
get StockLowAlertLevel(): number {
return this._StockLowAlertLevel;
}
set StockLowAlertLevel(value: number) {
this._StockLowAlertLevel = value;
}
get StockReorderLevel(): number {
return this._StockReorderLevel;
}
set StockReorderLevel(value: number) {
this._StockReorderLevel = value;
}
get BufferStockLevel(): number {
return this._BufferStockLevel;
}
set BufferStockLevel(value: number) {
this._BufferStockLevel = value;
}
async create(
loginUser: LoginUser,
dbTransaction?: any,
): Promise<ProductWithInventoryModel | any> {
try {
const productCreated = await super.create(loginUser, dbTransaction);
const data = {
ProductId: productCreated.ProductId,
UOM: this.UOM,
TotalUnits: this.TotalUnits,
TotalUnitsAvailable: this.TotalUnitsAvailable,
TotalUnitsInCurrentOrder: this.TotalUnitsInCurrentOrder,
TotalUnitsSold: this.TotalUnitsSold,
TotalUnitsReserved: this.TotalUnitsReserved,
TotalUnitsOnConsignment: this.TotalUnitsOnConsignment,
TotalUnitsUnderMaintenance: this.TotalUnitsUnderMaintenance,
TotalUnitsVoid: this.TotalUnitsVoid,
TotalUnitsInTransit: this.TotalUnitsInTransit,
TotalUnitsBackOrdered: this.TotalUnitsBackOrdered,
TotalUnitsPreOrdered: this.TotalUnitsPreOrdered,
StockLowAlertLevel: this.StockLowAlertLevel,
StockReorderLevel: this.StockReorderLevel,
BufferStockLevel: this.BufferStockLevel,
};
const productWithInventoryCreated =
await ProductWithInventoryBase._ProductWithInventoryRepository.create(
data,
{
transaction: dbTransaction,
},
);
const activity = new Activity();
activity.ActivityId = cuid();
activity.Action = ActionEnum.CREATE;
activity.Description = 'Add new product with inventory';
activity.EntityType = 'ProductWithInventory';
activity.EntityId = data.ProductId;
activity.EntityValueBefore = JSON.stringify({});
activity.EntityValueAfter = JSON.stringify(
productWithInventoryCreated.get({ plain: true }),
);
await activity.create(loginUser.ObjectId, dbTransaction);
return {
...productCreated.get({ plain: true }),
...productWithInventoryCreated.get({ plain: true }),
};
} catch (err) {
throw err;
}
}
public async deactivate(
loginUser: LoginUser,
dbTransaction?: any,
): Promise<void> {
super.deactivate(loginUser, dbTransaction);
}
public async verify(
loginUser: LoginUser,
dbTransaction?: any,
): Promise<void> {
try {
await super.verify(loginUser, dbTransaction);
} catch (error) {
throw error;
}
}
public async delete(
loginUser: LoginUser,
dbTransaction?: any,
): Promise<void> {
try {
await super.delete(loginUser, dbTransaction);
} catch (error) {
throw error;
}
}
public async activate(
loginUser: LoginUser,
dbTransaction?: any,
): Promise<void> {
try {
await super.activate(loginUser, dbTransaction);
} catch (error) {
throw error;
}
}
}