UNPKG

@tomei/product

Version:

NestJS package for product module

312 lines 12.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ProductCollection = void 0; const status_enum_1 = require("../../enum/status.enum"); const collection_product_repository_1 = require("./collection-product.repository"); const config_1 = require("@tomei/config"); const activity_history_1 = require("@tomei/activity-history"); const cuid = require("cuid"); const sequelize_1 = require("sequelize"); const general_1 = require("@tomei/general"); const product_collection_product_1 = require("../product-collection-product/product-collection-product"); class ProductCollection extends general_1.ObjectBase { get Status() { return this._Status; } set Status(value) { this._Status = value; } get Code() { return this.ObjectId; } set Code(value) { this.ObjectId = value; } get CreatedById() { return this._CreatedById; } set CreatedById(value) { this._CreatedById = value; } get CreatedAt() { return this._CreatedAt; } set CreatedAt(value) { this._CreatedAt = value; } get UpdatedById() { return this._UpdatedById; } set UpdatedById(value) { this._UpdatedById = value; } get UpdatedAt() { return this._UpdatedAt; } set UpdatedAt(value) { this._UpdatedAt = value; } constructor(productCollection) { super(); this.ObjectType = 'ProductCollection'; this._Status = status_enum_1.StatusEnum.ACTIVE; if (productCollection) { this.Code = productCollection.Code; this.Name = productCollection.Name; this.Description = productCollection.Description; this._Status = productCollection.Status; this._CreatedById = productCollection.CreatedById; this._CreatedAt = productCollection.CreatedAt; this._UpdatedById = productCollection.UpdatedById; this._UpdatedAt = productCollection.UpdatedAt; } } static async init(options) { try { if (options) { const { code, collectionInfo } = options; if (code) { const productCollection = await ProductCollection._Repo.findByPk(code); if (!productCollection) { throw Error('Product Collection not found.'); } return new ProductCollection(productCollection); } else if (!collectionInfo) { throw Error('Group Collection or code is required.'); } else { return new ProductCollection(collectionInfo); } } else { return new ProductCollection(); } } catch (error) { throw error; } } static async findAll(loginUser, dbTransaction, page, rows, search = {}) { try { const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code'); const isPrivileged = await loginUser.checkPrivileges(systemCode, 'ProductCollection - View'); if (!isPrivileged) { throw new Error(`Forbidden Error, does not have right privilege - "ProductCollection - View"`); } let result; if (page && rows) { const offset = rows * (page - 1); const options = { offset, limit: rows, order: [['CreatedAt', 'DESC']], transaction: dbTransaction, }; const whereObj = {}; Object.entries(search).forEach(([key, value]) => { if (key === 'Status') { whereObj[key] = value; } else { whereObj[key] = { [sequelize_1.Op.substring]: value, }; } }); if (!whereObj['Status']) { whereObj['Status'] = { [sequelize_1.Op.ne]: status_enum_1.StatusEnum.DEACTIVATED, }; } if (whereObj) { options.where = whereObj; } result = await ProductCollection._Repo.findAndCountAll(options); } else { result = await ProductCollection._Repo.findAndCountAll(); } return result; } catch (error) { throw error; } } async create(loginUser, dbTransaction) { try { const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code'); const isPrivileged = await loginUser.checkPrivileges(systemCode, 'ProductCollection - Create'); if (!isPrivileged) { throw new Error(`Forbidden Error, does not have right privilege - "ProductCollection - Create"`); } this.CreatedById = loginUser.ObjectId; this.CreatedAt = new Date(); this.UpdatedById = loginUser.ObjectId; this.UpdatedAt = new Date(); if (!this.Code) { throw Error('Code is required.'); } if (!this.Name) { throw Error('Name is required.'); } if (!this.Description) { throw Error('Description is required.'); } if (!this.Status) { this.Status = status_enum_1.StatusEnum.ACTIVE; } const collectionProduct = await ProductCollection._Repo.create({ Code: this.Code, Name: this.Name, Description: this.Description, Status: this.Status, CreatedById: this.CreatedById, CreatedAt: this.CreatedAt, UpdatedById: this.UpdatedById, UpdatedAt: this.UpdatedAt, }); const entityValueAfter = { Code: this.Code, Name: this.Name, Description: this.Description, Status: this.Status, CreatedById: this.CreatedById, CreatedAt: this.CreatedAt, UpdatedById: this.UpdatedById, UpdatedAt: this.UpdatedAt, }; const activity = new activity_history_1.Activity(); activity.ActivityId = cuid(); activity.Action = activity_history_1.ActionEnum.CREATE; activity.Description = 'Create Product Collection'; activity.EntityType = 'ProductCollection'; activity.EntityId = this.Code; activity.EntityValueBefore = JSON.stringify({}); activity.EntityValueAfter = JSON.stringify(entityValueAfter); await activity.create(loginUser.ObjectId, dbTransaction); return collectionProduct; } catch (error) { throw error; } } async update(loginUser, collectionInfo, dbTransaction) { try { const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code'); const isPrivileged = await loginUser.checkPrivileges(systemCode, 'ProductCollection - Update'); if (!isPrivileged) { throw new Error(`Forbidden Error, does not have right privilege - "ProductCollection - Update"`); } const EntityValueBefore = { Code: this.Code, Name: this.Name, Description: this.Description, Status: this.Status, CreatedById: this.CreatedById, CreatedAt: this.CreatedAt, UpdatedById: this.UpdatedById, UpdatedAt: this.UpdatedAt, }; this.Code = collectionInfo.Code; this.Name = collectionInfo.Name; this.Description = collectionInfo.Description; this.Status = collectionInfo.Status; this.CreatedById = collectionInfo.CreatedById; this.CreatedAt = collectionInfo.CreatedAt; this.UpdatedById = loginUser.ObjectId; this.UpdatedAt = new Date(); const collection = await ProductCollection._Repo.findOne({ where: { Code: this.Code }, transaction: dbTransaction, }); if (!collection) { throw new Error('Product Collection not found.'); } collection.Code = this.Code; collection.Name = this.Name; collection.Description = this.Description; collection.Status = this.Status; collection.CreatedById = this.CreatedById; collection.CreatedAt = this.CreatedAt; collection.UpdatedById = this.UpdatedById; collection.UpdatedAt = this.UpdatedAt; const updatedInfo = await collection.save({ transaction: dbTransaction, }); const entityValueAfter = collectionInfo; const activity = new activity_history_1.Activity(); activity.ActivityId = cuid(); activity.Action = activity_history_1.ActionEnum.UPDATE; activity.Description = 'Update Product Collection'; activity.EntityType = 'ProductCollection'; activity.EntityId = this.Code; activity.EntityValueBefore = JSON.stringify(EntityValueBefore); activity.EntityValueAfter = JSON.stringify(entityValueAfter); await activity.create(loginUser.ObjectId, dbTransaction); return updatedInfo; } catch (error) { throw error; } } async delete(loginUser, dbTransaction) { try { const systemCode = config_1.ApplicationConfig.getComponentConfigValue('system-code'); const isPrivileged = await loginUser.checkPrivileges(systemCode, 'ProductCollection - Delete'); if (!isPrivileged) { throw new Error(`Forbidden Error, does not have right privilege - "ProductCollection - Delete"`); } const EntityValueBefore = { Code: this.Code, Name: this.Name, Description: this.Description, Status: this.Status, CreatedById: this.CreatedById, CreatedAt: this.CreatedAt, UpdatedById: this.UpdatedById, UpdatedAt: this.UpdatedAt, }; const checkProduct = await product_collection_product_1.ProductProductCollection.CheckProductAssignToCollection(this.Code, dbTransaction); if (checkProduct) { this._Status = status_enum_1.StatusEnum.DEACTIVATED; this.update(loginUser, { Code: this.Code, Name: this.Name, Description: this.Description, Status: this.Status, CreatedById: this.CreatedById, CreatedAt: this.CreatedAt, UpdatedById: this.UpdatedById, UpdatedAt: this.UpdatedAt, }); return; } const collection = await ProductCollection._Repo.findOne({ where: { Code: this.Code }, transaction: dbTransaction, }); if (!collection) { throw new Error('Product Collection not found.'); } await ProductCollection._Repo.delete(this.Code, dbTransaction); const entityValueAfter = {}; const activity = new activity_history_1.Activity(); activity.ActivityId = cuid(); activity.Action = activity_history_1.ActionEnum.DELETE; activity.Description = 'Delete Product Collection'; activity.EntityType = 'ProductCollection'; activity.EntityId = this.Code; activity.EntityValueBefore = JSON.stringify(EntityValueBefore); activity.EntityValueAfter = JSON.stringify(entityValueAfter); await activity.create(loginUser.ObjectId, dbTransaction); return; } catch (error) { throw error; } } } exports.ProductCollection = ProductCollection; ProductCollection._Repo = new collection_product_repository_1.ProductCollectionRepository(); //# sourceMappingURL=collection-product.js.map