tt-entities 0.0.43 → 0.0.45

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.
@@ -67,6 +67,12 @@ export class PurchaseOrder extends Model {
67
67
  @Column({ allowNull: true })
68
68
  declare sentBy?: number;
69
69
 
70
+ @Column({
71
+ type: DataType.ENUM('order_fulfillment', 'stock_replenishment'),
72
+ defaultValue: 'order_fulfillment',
73
+ })
74
+ declare poType: string;
75
+
70
76
  // ─── Associations ─────────────────────────────────────────────────────────────
71
77
 
72
78
  @BelongsTo(() => Vendor)
@@ -0,0 +1,45 @@
1
+ import {
2
+ Table, Column, Model, ForeignKey, BelongsTo, DataType,
3
+ } from 'sequelize-typescript';
4
+ import { RunSheet } from './run-sheet.entity';
5
+ import { Order } from './order.entity';
6
+
7
+ export enum RunSheetOrderStatus {
8
+ ASSIGNED = 'assigned', // Order added to runsheet, marked shipped
9
+ DELIVERED = 'delivered', // Confirmed delivered on completion
10
+ RETURNED = 'returned', // Not delivered — returned to packed
11
+ }
12
+
13
+ @Table
14
+ export class RunSheetOrder extends Model {
15
+ @ForeignKey(() => RunSheet)
16
+ @Column({ allowNull: false })
17
+ declare runSheetId: number;
18
+
19
+ @ForeignKey(() => Order)
20
+ @Column({ allowNull: false, unique: true }) // one order belongs to one runsheet at a time
21
+ declare orderId: number;
22
+
23
+ @Column({
24
+ type: DataType.ENUM(...Object.values(RunSheetOrderStatus)),
25
+ allowNull: false,
26
+ defaultValue: RunSheetOrderStatus.ASSIGNED,
27
+ })
28
+ declare status: RunSheetOrderStatus;
29
+
30
+ // Filled when status = returned — why was this order not delivered
31
+ @Column({ type: DataType.TEXT, allowNull: true })
32
+ declare returnReason?: string;
33
+
34
+ // Snapshot of order number for display even if order is modified
35
+ @Column({ allowNull: true })
36
+ declare orderNumber?: string;
37
+
38
+ // ── Associations ─────────────────────────────────────────────────────────────
39
+
40
+ @BelongsTo(() => RunSheet)
41
+ declare runSheet: RunSheet;
42
+
43
+ @BelongsTo(() => Order)
44
+ declare order: Order;
45
+ }
@@ -0,0 +1,68 @@
1
+ import {
2
+ Table, Column, Model, ForeignKey, BelongsTo,
3
+ HasMany, DataType,
4
+ } from 'sequelize-typescript';
5
+ import { SysUser } from './sys.user.entity';
6
+ import { RunSheetOrder } from './run-sheet-order.entity';
7
+
8
+ export enum RunSheetStatus {
9
+ OPEN = 'open', // Created, orders assigned, all moved to shipped
10
+ OUT_FOR_DELIVERY = 'out_for_delivery', // Driver is on the road
11
+ COMPLETED = 'completed', // All orders delivered
12
+ PARTIALLY_COMPLETED = 'partially_completed', // Some delivered, some returned to packed
13
+ CANCELLED = 'cancelled',
14
+ }
15
+
16
+ @Table
17
+ export class RunSheet extends Model {
18
+ // Auto-generated e.g. RS-2026-00001
19
+ @Column({ allowNull: false, unique: true })
20
+ declare runSheetNumber: string;
21
+
22
+ @Column({
23
+ type: DataType.ENUM(...Object.values(RunSheetStatus)),
24
+ allowNull: false,
25
+ defaultValue: RunSheetStatus.OPEN,
26
+ })
27
+ declare status: RunSheetStatus;
28
+
29
+ // Driver / delivery person name
30
+ @Column({ allowNull: true })
31
+ declare driverName?: string;
32
+
33
+ @Column({ allowNull: true })
34
+ declare driverPhone?: string;
35
+
36
+ // Vehicle / route reference
37
+ @Column({ allowNull: true })
38
+ declare vehicleRef?: string;
39
+
40
+ @Column({ type: DataType.TEXT, allowNull: true })
41
+ declare notes?: string;
42
+
43
+ // Timestamps for lifecycle
44
+ @Column({ type: DataType.DATE, allowNull: true })
45
+ declare dispatchedAt?: Date; // when moved to out_for_delivery
46
+
47
+ @Column({ type: DataType.DATE, allowNull: true })
48
+ declare completedAt?: Date;
49
+
50
+ @ForeignKey(() => SysUser)
51
+ @Column({ allowNull: true })
52
+ declare createdBy?: number;
53
+
54
+ @ForeignKey(() => SysUser)
55
+ @Column({ allowNull: true })
56
+ declare completedBy?: number;
57
+
58
+ // ── Associations ─────────────────────────────────────────────────────────────
59
+
60
+ @BelongsTo(() => SysUser, { foreignKey: 'createdBy', as: 'creator' })
61
+ declare creator?: SysUser;
62
+
63
+ @BelongsTo(() => SysUser, { foreignKey: 'completedBy', as: 'completer' })
64
+ declare completer?: SysUser;
65
+
66
+ @HasMany(() => RunSheetOrder)
67
+ declare runSheetOrders: RunSheetOrder[];
68
+ }
@@ -75,6 +75,8 @@ import { OrderItemBundleSelection } from './entities/order-item-bundle-selection
75
75
  import { OrderStatusHistory } from './entities/order-status-history.entity';
76
76
  import { UserTransaction } from './entities/user-transaction.entity';
77
77
  import { PurchaseOrderOrderItem } from './entities/purchase-order-order-item.entity';
78
+ import { RunSheet } from './entities/run-sheet.entity';
79
+ import { RunSheetOrder } from './entities/run-sheet-order.entity';
78
80
 
79
81
  // =============================================================================
80
82
  // EXPORTS
@@ -101,6 +103,11 @@ export {
101
103
  BannerFilters,
102
104
  } from './entities/banner.entity';
103
105
  export { AppConfig } from './entities/app-config.entity';
106
+ export { RunSheet, RunSheetStatus } from './entities/run-sheet.entity';
107
+ export {
108
+ RunSheetOrder,
109
+ RunSheetOrderStatus,
110
+ } from './entities/run-sheet-order.entity';
104
111
 
105
112
  // ─── Catalogue ────────────────────────────────────────────────────────────────
106
113
  export { Category } from './entities/category.entity';
@@ -281,5 +288,8 @@ export function getDbModels(): ModelCtor[] {
281
288
  Banner,
282
289
 
283
290
  AppConfig,
291
+
292
+ RunSheet,
293
+ RunSheetOrder,
284
294
  ];
285
295
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tt-entities",
3
- "version": "0.0.43",
3
+ "version": "0.0.45",
4
4
  "description": "Tatayab entities library",
5
5
  "main": "dist/libs/tatayab-entities-library/index.js",
6
6
  "types": "dist/libs/tatayab-entities-library/index.d.ts",