tt-entities 0.1.25 → 0.1.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/libs/tatayab-entities-library/entities/inventory-location.entity.d.ts +9 -0
- package/dist/libs/tatayab-entities-library/entities/inventory-location.entity.js +41 -0
- package/dist/libs/tatayab-entities-library/entities/inventory-location.entity.js.map +1 -0
- package/dist/libs/tatayab-entities-library/entities/inventory-shelf.entity.d.ts +10 -0
- package/dist/libs/tatayab-entities-library/entities/inventory-shelf.entity.js +46 -0
- package/dist/libs/tatayab-entities-library/entities/inventory-shelf.entity.js.map +1 -0
- package/dist/libs/tatayab-entities-library/index.js +4 -0
- package/dist/libs/tatayab-entities-library/index.js.map +1 -1
- package/libs/tatayab-entities-library/src/entities/inventory-location.entity.ts +28 -0
- package/libs/tatayab-entities-library/src/entities/inventory-shelf.entity.ts +34 -0
- package/libs/tatayab-entities-library/src/index.ts +4 -0
- package/package.json +1 -1
- package/src/database/migrations/20260827100000-create-inventory-locations.js +61 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Model } from 'sequelize-typescript';
|
|
2
|
+
import { InventoryShelf } from './inventory-shelf.entity';
|
|
3
|
+
export declare class InventoryLocation extends Model {
|
|
4
|
+
name: string;
|
|
5
|
+
code: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
isActive: boolean;
|
|
8
|
+
shelves: InventoryShelf[];
|
|
9
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.InventoryLocation = void 0;
|
|
13
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
14
|
+
const inventory_shelf_entity_1 = require("./inventory-shelf.entity");
|
|
15
|
+
let InventoryLocation = class InventoryLocation extends sequelize_typescript_1.Model {
|
|
16
|
+
};
|
|
17
|
+
exports.InventoryLocation = InventoryLocation;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, sequelize_typescript_1.Column)({ allowNull: false }),
|
|
20
|
+
__metadata("design:type", String)
|
|
21
|
+
], InventoryLocation.prototype, "name", void 0);
|
|
22
|
+
__decorate([
|
|
23
|
+
(0, sequelize_typescript_1.Column)({ type: sequelize_typescript_1.DataType.STRING(50), allowNull: false, unique: true }),
|
|
24
|
+
__metadata("design:type", String)
|
|
25
|
+
], InventoryLocation.prototype, "code", void 0);
|
|
26
|
+
__decorate([
|
|
27
|
+
(0, sequelize_typescript_1.Column)({ type: sequelize_typescript_1.DataType.TEXT, allowNull: true }),
|
|
28
|
+
__metadata("design:type", String)
|
|
29
|
+
], InventoryLocation.prototype, "description", void 0);
|
|
30
|
+
__decorate([
|
|
31
|
+
(0, sequelize_typescript_1.Column)({ defaultValue: true }),
|
|
32
|
+
__metadata("design:type", Boolean)
|
|
33
|
+
], InventoryLocation.prototype, "isActive", void 0);
|
|
34
|
+
__decorate([
|
|
35
|
+
(0, sequelize_typescript_1.HasMany)(() => inventory_shelf_entity_1.InventoryShelf),
|
|
36
|
+
__metadata("design:type", Array)
|
|
37
|
+
], InventoryLocation.prototype, "shelves", void 0);
|
|
38
|
+
exports.InventoryLocation = InventoryLocation = __decorate([
|
|
39
|
+
(0, sequelize_typescript_1.Table)({ paranoid: true })
|
|
40
|
+
], InventoryLocation);
|
|
41
|
+
//# sourceMappingURL=inventory-location.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-location.entity.js","sourceRoot":"","sources":["../../../../libs/tatayab-entities-library/src/entities/inventory-location.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAM8B;AAC9B,qEAA0D;AAGnD,IAAM,iBAAiB,GAAvB,MAAM,iBAAkB,SAAQ,4BAAK;CAiB3C,CAAA;AAjBY,8CAAiB;AAEpB;IADP,IAAA,6BAAM,EAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;+CACR;AAGb;IADP,IAAA,6BAAM,EAAC,EAAE,IAAI,EAAE,+BAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;;+CACjD;AAGb;IADP,IAAA,6BAAM,EAAC,EAAE,IAAI,EAAE,+BAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;sDACpB;AAGrB;IADP,IAAA,6BAAM,EAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;mDACL;AAKlB;IADP,IAAA,8BAAO,EAAC,GAAG,EAAE,CAAC,uCAAc,CAAC;;kDACI;4BAhBvB,iBAAiB;IAD7B,IAAA,4BAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;GACb,iBAAiB,CAiB7B"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Model } from 'sequelize-typescript';
|
|
2
|
+
import { InventoryLocation } from './inventory-location.entity';
|
|
3
|
+
export declare class InventoryShelf extends Model {
|
|
4
|
+
locationId: number;
|
|
5
|
+
name: string;
|
|
6
|
+
code: string;
|
|
7
|
+
description?: string;
|
|
8
|
+
isActive: boolean;
|
|
9
|
+
location: InventoryLocation;
|
|
10
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.InventoryShelf = void 0;
|
|
13
|
+
const sequelize_typescript_1 = require("sequelize-typescript");
|
|
14
|
+
const inventory_location_entity_1 = require("./inventory-location.entity");
|
|
15
|
+
let InventoryShelf = class InventoryShelf extends sequelize_typescript_1.Model {
|
|
16
|
+
};
|
|
17
|
+
exports.InventoryShelf = InventoryShelf;
|
|
18
|
+
__decorate([
|
|
19
|
+
(0, sequelize_typescript_1.ForeignKey)(() => inventory_location_entity_1.InventoryLocation),
|
|
20
|
+
(0, sequelize_typescript_1.Column)({ allowNull: false }),
|
|
21
|
+
__metadata("design:type", Number)
|
|
22
|
+
], InventoryShelf.prototype, "locationId", void 0);
|
|
23
|
+
__decorate([
|
|
24
|
+
(0, sequelize_typescript_1.Column)({ allowNull: false }),
|
|
25
|
+
__metadata("design:type", String)
|
|
26
|
+
], InventoryShelf.prototype, "name", void 0);
|
|
27
|
+
__decorate([
|
|
28
|
+
(0, sequelize_typescript_1.Column)({ type: sequelize_typescript_1.DataType.STRING(50), allowNull: false }),
|
|
29
|
+
__metadata("design:type", String)
|
|
30
|
+
], InventoryShelf.prototype, "code", void 0);
|
|
31
|
+
__decorate([
|
|
32
|
+
(0, sequelize_typescript_1.Column)({ type: sequelize_typescript_1.DataType.TEXT, allowNull: true }),
|
|
33
|
+
__metadata("design:type", String)
|
|
34
|
+
], InventoryShelf.prototype, "description", void 0);
|
|
35
|
+
__decorate([
|
|
36
|
+
(0, sequelize_typescript_1.Column)({ defaultValue: true }),
|
|
37
|
+
__metadata("design:type", Boolean)
|
|
38
|
+
], InventoryShelf.prototype, "isActive", void 0);
|
|
39
|
+
__decorate([
|
|
40
|
+
(0, sequelize_typescript_1.BelongsTo)(() => inventory_location_entity_1.InventoryLocation),
|
|
41
|
+
__metadata("design:type", inventory_location_entity_1.InventoryLocation)
|
|
42
|
+
], InventoryShelf.prototype, "location", void 0);
|
|
43
|
+
exports.InventoryShelf = InventoryShelf = __decorate([
|
|
44
|
+
(0, sequelize_typescript_1.Table)({ paranoid: true })
|
|
45
|
+
], InventoryShelf);
|
|
46
|
+
//# sourceMappingURL=inventory-shelf.entity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory-shelf.entity.js","sourceRoot":"","sources":["../../../../libs/tatayab-entities-library/src/entities/inventory-shelf.entity.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,+DAO8B;AAC9B,2EAAgE;AAGzD,IAAM,cAAc,GAApB,MAAM,cAAe,SAAQ,4BAAK;CAsBxC,CAAA;AAtBY,wCAAc;AAGjB;IAFP,IAAA,iCAAU,EAAC,GAAG,EAAE,CAAC,6CAAiB,CAAC;IACnC,IAAA,6BAAM,EAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;kDACF;AAGnB;IADP,IAAA,6BAAM,EAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;4CACR;AAIb;IADP,IAAA,6BAAM,EAAC,EAAE,IAAI,EAAE,+BAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;;4CACnC;AAGb;IADP,IAAA,6BAAM,EAAC,EAAE,IAAI,EAAE,+BAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;;mDACpB;AAGrB;IADP,IAAA,6BAAM,EAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;;gDACL;AAKlB;IADP,IAAA,gCAAS,EAAC,GAAG,EAAE,CAAC,6CAAiB,CAAC;8BACjB,6CAAiB;gDAAC;yBArBzB,cAAc;IAD1B,IAAA,4BAAK,EAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;GACb,cAAc,CAsB1B"}
|
|
@@ -42,6 +42,8 @@ const store_inventory_entity_1 = require("./entities/store-inventory.entity");
|
|
|
42
42
|
const inventory_stock_entity_1 = require("./entities/inventory-stock.entity");
|
|
43
43
|
const stock_movement_entity_1 = require("./entities/stock-movement.entity");
|
|
44
44
|
const shipping_rule_entity_1 = require("./entities/shipping-rule.entity");
|
|
45
|
+
const inventory_location_entity_1 = require("./entities/inventory-location.entity");
|
|
46
|
+
const inventory_shelf_entity_1 = require("./entities/inventory-shelf.entity");
|
|
45
47
|
const vendor_entity_1 = require("./entities/vendor.entity");
|
|
46
48
|
const vendor_product_entity_1 = require("./entities/vendor-product.entity");
|
|
47
49
|
const purchase_order_entity_1 = require("./entities/purchase-order.entity");
|
|
@@ -335,6 +337,8 @@ function getDbModels() {
|
|
|
335
337
|
inventory_stock_entity_1.InventoryStock,
|
|
336
338
|
stock_movement_entity_1.StockMovement,
|
|
337
339
|
shipping_rule_entity_1.ShippingRule,
|
|
340
|
+
inventory_location_entity_1.InventoryLocation,
|
|
341
|
+
inventory_shelf_entity_1.InventoryShelf,
|
|
338
342
|
vendor_entity_1.Vendor,
|
|
339
343
|
vendor_product_entity_1.VendorProduct,
|
|
340
344
|
purchase_order_entity_1.PurchaseOrder,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/tatayab-entities-library/src/index.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../libs/tatayab-entities-library/src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Table,
|
|
3
|
+
Column,
|
|
4
|
+
Model,
|
|
5
|
+
HasMany,
|
|
6
|
+
DataType,
|
|
7
|
+
} from 'sequelize-typescript';
|
|
8
|
+
import { InventoryShelf } from './inventory-shelf.entity';
|
|
9
|
+
|
|
10
|
+
@Table({ paranoid: true })
|
|
11
|
+
export class InventoryLocation extends Model {
|
|
12
|
+
@Column({ allowNull: false })
|
|
13
|
+
declare name: string;
|
|
14
|
+
|
|
15
|
+
@Column({ type: DataType.STRING(50), allowNull: false, unique: true })
|
|
16
|
+
declare code: string;
|
|
17
|
+
|
|
18
|
+
@Column({ type: DataType.TEXT, allowNull: true })
|
|
19
|
+
declare description?: string;
|
|
20
|
+
|
|
21
|
+
@Column({ defaultValue: true })
|
|
22
|
+
declare isActive: boolean;
|
|
23
|
+
|
|
24
|
+
// ─── Associations ─────────────────────────────────────────────────────────────
|
|
25
|
+
|
|
26
|
+
@HasMany(() => InventoryShelf)
|
|
27
|
+
declare shelves: InventoryShelf[];
|
|
28
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import {
|
|
2
|
+
Table,
|
|
3
|
+
Column,
|
|
4
|
+
Model,
|
|
5
|
+
ForeignKey,
|
|
6
|
+
BelongsTo,
|
|
7
|
+
DataType,
|
|
8
|
+
} from 'sequelize-typescript';
|
|
9
|
+
import { InventoryLocation } from './inventory-location.entity';
|
|
10
|
+
|
|
11
|
+
@Table({ paranoid: true })
|
|
12
|
+
export class InventoryShelf extends Model {
|
|
13
|
+
@ForeignKey(() => InventoryLocation)
|
|
14
|
+
@Column({ allowNull: false })
|
|
15
|
+
declare locationId: number;
|
|
16
|
+
|
|
17
|
+
@Column({ allowNull: false })
|
|
18
|
+
declare name: string;
|
|
19
|
+
|
|
20
|
+
// Unique within the location (e.g. "A-01", "A-02")
|
|
21
|
+
@Column({ type: DataType.STRING(50), allowNull: false })
|
|
22
|
+
declare code: string;
|
|
23
|
+
|
|
24
|
+
@Column({ type: DataType.TEXT, allowNull: true })
|
|
25
|
+
declare description?: string;
|
|
26
|
+
|
|
27
|
+
@Column({ defaultValue: true })
|
|
28
|
+
declare isActive: boolean;
|
|
29
|
+
|
|
30
|
+
// ─── Associations ─────────────────────────────────────────────────────────────
|
|
31
|
+
|
|
32
|
+
@BelongsTo(() => InventoryLocation)
|
|
33
|
+
declare location: InventoryLocation;
|
|
34
|
+
}
|
|
@@ -47,6 +47,8 @@ import { StoreInventory } from './entities/store-inventory.entity';
|
|
|
47
47
|
import { InventoryStock } from './entities/inventory-stock.entity';
|
|
48
48
|
import { StockMovement } from './entities/stock-movement.entity';
|
|
49
49
|
import { ShippingRule } from './entities/shipping-rule.entity';
|
|
50
|
+
import { InventoryLocation } from './entities/inventory-location.entity';
|
|
51
|
+
import { InventoryShelf } from './entities/inventory-shelf.entity';
|
|
50
52
|
|
|
51
53
|
// ─── Purchasing ───────────────────────────────────────────────────────────────
|
|
52
54
|
import { Vendor } from './entities/vendor.entity';
|
|
@@ -337,6 +339,8 @@ export function getDbModels(): ModelCtor[] {
|
|
|
337
339
|
InventoryStock,
|
|
338
340
|
StockMovement,
|
|
339
341
|
ShippingRule,
|
|
342
|
+
InventoryLocation,
|
|
343
|
+
InventoryShelf,
|
|
340
344
|
|
|
341
345
|
// Purchasing
|
|
342
346
|
Vendor,
|
package/package.json
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
/** @type {import('sequelize-cli').Migration} */
|
|
4
|
+
module.exports = {
|
|
5
|
+
async up(queryInterface, Sequelize) {
|
|
6
|
+
// ── Warehouse zones / areas ───────────────────────────────────────────────
|
|
7
|
+
await queryInterface.createTable('InventoryLocations', {
|
|
8
|
+
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
|
|
9
|
+
name: { type: Sequelize.STRING, allowNull: false },
|
|
10
|
+
// Short unique code used on picking lists, e.g. "ZONE-A", "COLD"
|
|
11
|
+
code: { type: Sequelize.STRING(50), allowNull: false, unique: true },
|
|
12
|
+
description: { type: Sequelize.TEXT, allowNull: true },
|
|
13
|
+
isActive: { type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true },
|
|
14
|
+
createdAt: { type: Sequelize.DATE, allowNull: false },
|
|
15
|
+
updatedAt: { type: Sequelize.DATE, allowNull: false },
|
|
16
|
+
deletedAt: { type: Sequelize.DATE, allowNull: true },
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
await queryInterface.addIndex('InventoryLocations', ['code'], {
|
|
20
|
+
name: 'idx_inventory_locations_code',
|
|
21
|
+
unique: true,
|
|
22
|
+
});
|
|
23
|
+
await queryInterface.addIndex('InventoryLocations', ['isActive'], {
|
|
24
|
+
name: 'idx_inventory_locations_active',
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
// ── Shelves within a location ─────────────────────────────────────────────
|
|
28
|
+
await queryInterface.createTable('InventoryShelves', {
|
|
29
|
+
id: { type: Sequelize.INTEGER, autoIncrement: true, primaryKey: true },
|
|
30
|
+
locationId: {
|
|
31
|
+
type: Sequelize.INTEGER,
|
|
32
|
+
allowNull: false,
|
|
33
|
+
references: { model: 'InventoryLocations', key: 'id' },
|
|
34
|
+
onUpdate: 'CASCADE',
|
|
35
|
+
onDelete: 'RESTRICT',
|
|
36
|
+
},
|
|
37
|
+
name: { type: Sequelize.STRING, allowNull: false },
|
|
38
|
+
// Unique within the location, e.g. "A-01", "A-02"
|
|
39
|
+
code: { type: Sequelize.STRING(50), allowNull: false },
|
|
40
|
+
description: { type: Sequelize.TEXT, allowNull: true },
|
|
41
|
+
isActive: { type: Sequelize.BOOLEAN, allowNull: false, defaultValue: true },
|
|
42
|
+
createdAt: { type: Sequelize.DATE, allowNull: false },
|
|
43
|
+
updatedAt: { type: Sequelize.DATE, allowNull: false },
|
|
44
|
+
deletedAt: { type: Sequelize.DATE, allowNull: true },
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
await queryInterface.addIndex('InventoryShelves', ['locationId'], {
|
|
48
|
+
name: 'idx_inventory_shelves_location',
|
|
49
|
+
});
|
|
50
|
+
// code is unique per location (not globally), so a composite index
|
|
51
|
+
await queryInterface.addIndex('InventoryShelves', ['locationId', 'code'], {
|
|
52
|
+
name: 'idx_inventory_shelves_location_code',
|
|
53
|
+
unique: true,
|
|
54
|
+
});
|
|
55
|
+
},
|
|
56
|
+
|
|
57
|
+
async down(queryInterface) {
|
|
58
|
+
await queryInterface.dropTable('InventoryShelves');
|
|
59
|
+
await queryInterface.dropTable('InventoryLocations');
|
|
60
|
+
},
|
|
61
|
+
};
|