feat(nestjs): migrate to NestJS

This commit is contained in:
Ahmed Bouhuolia
2025-04-07 11:51:24 +02:00
parent f068218a16
commit 55fcc908ef
3779 changed files with 631 additions and 195332 deletions

View File

@@ -0,0 +1,213 @@
import { Warehouse } from '@/modules/Warehouses/models/Warehouse.model';
import { TenantBaseModel } from '@/modules/System/models/TenantBaseModel';
import { Model } from 'objection';
export class Item extends TenantBaseModel {
public readonly quantityOnHand: number;
public readonly name: string;
public readonly active: boolean;
public readonly type: string;
public readonly code: string;
public readonly sellable: boolean;
public readonly purchasable: boolean;
public readonly costPrice: number;
public readonly sellPrice: number;
public readonly currencyCode: string;
public readonly costAccountId: number;
public readonly inventoryAccountId: number;
public readonly categoryId: number;
public readonly pictureUri: string;
public readonly sellAccountId: number;
public readonly sellDescription: string;
public readonly purchaseDescription: string;
public readonly landedCost: boolean;
public readonly note: string;
public readonly userId: number;
public readonly sellTaxRateId: number;
public readonly purchaseTaxRateId: number;
public readonly warehouse!: Warehouse;
static get tableName() {
return 'items';
}
/**
* Model modifiers.
*/
static get modifiers() {
return {
updateQuantityOnHand(query, value: number) {
const q = query.where('type', 'inventory');
if (value > 0) {
q.increment('quantityOnHand', value);
}
if (value < 0) {
q.decrement('quantityOnHand', Math.abs(value));
}
return q;
},
};
}
/**
* Relationship mapping.
*/
static get relationMappings() {
// const { Media } = require('../../Media/models/Media.model');
const { Account } = require('../../Accounts/models/Account.model');
const {
ItemCategory,
} = require('../../ItemCategories/models/ItemCategory.model');
const {
ItemWarehouseQuantity,
} = require('../../Warehouses/models/ItemWarehouseQuantity');
const {
ItemEntry,
} = require('../../TransactionItemEntry/models/ItemEntry');
// const WarehouseTransferEntry = require('../../Warehouses/');
const {
InventoryAdjustmentEntry,
} = require('../../InventoryAdjutments/models/InventoryAdjustmentEntry');
const { TaxRateModel } = require('../../TaxRates/models/TaxRate.model');
return {
/**
* Item may belongs to cateogory model.
*/
category: {
relation: Model.BelongsToOneRelation,
modelClass: ItemCategory,
join: {
from: 'items.categoryId',
to: 'items_categories.id',
},
},
/**
* Item may belongs to cost account.
*/
costAccount: {
relation: Model.BelongsToOneRelation,
modelClass: Account,
join: {
from: 'items.costAccountId',
to: 'accounts.id',
},
},
/**
* Item may belongs to sell account.
*/
sellAccount: {
relation: Model.BelongsToOneRelation,
modelClass: Account,
join: {
from: 'items.sellAccountId',
to: 'accounts.id',
},
},
/**
* Item may belongs to inventory account.
*/
inventoryAccount: {
relation: Model.BelongsToOneRelation,
modelClass: Account,
join: {
from: 'items.inventoryAccountId',
to: 'accounts.id',
},
},
/**
* Item has many warehouses quantities.
*/
itemWarehouses: {
relation: Model.HasManyRelation,
modelClass: ItemWarehouseQuantity,
join: {
from: 'items.id',
to: 'items_warehouses_quantity.itemId',
},
},
/**
* Item may has many item entries.
*/
itemEntries: {
relation: Model.HasManyRelation,
modelClass: ItemEntry,
join: {
from: 'items.id',
to: 'items_entries.itemId',
},
},
/**
* Item may has many warehouses transfers entries.
*/
// warehousesTransfersEntries: {
// relation: Model.HasManyRelation,
// modelClass: WarehouseTransferEntry,
// join: {
// from: 'items.id',
// to: 'warehouses_transfers_entries.itemId',
// },
// },
/**
* Item has many inventory adjustment entries.
*/
inventoryAdjustmentsEntries: {
relation: Model.HasManyRelation,
modelClass: InventoryAdjustmentEntry,
join: {
from: 'items.id',
to: 'inventory_adjustments_entries.itemId',
},
},
/**
*
*/
// media: {
// relation: Model.ManyToManyRelation,
// modelClass: Media.default,
// join: {
// from: 'items.id',
// through: {
// from: 'media_links.model_id',
// to: 'media_links.media_id',
// },
// to: 'media.id',
// },
// },
/**
* Item may has sell tax rate.
*/
sellTaxRate: {
relation: Model.BelongsToOneRelation,
modelClass: TaxRateModel,
join: {
from: 'items.sellTaxRateId',
to: 'tax_rates.id',
},
},
/**
* Item may has purchase tax rate.
*/
purchaseTaxRate: {
relation: Model.BelongsToOneRelation,
modelClass: TaxRateModel,
join: {
from: 'items.purchaseTaxRateId',
to: 'tax_rates.id',
},
},
};
}
}