truflow 0.0.190 → 0.0.191

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.
@@ -0,0 +1,57 @@
1
+ export interface IAllmoxyContactResponse {
2
+ contact_id: number;
3
+ company_id: number;
4
+ contact_type: "employee" | "individual";
5
+ first_name: string;
6
+ middle_name?: string;
7
+ last_name: string;
8
+ job_title?: string;
9
+ gender?: "male" | "female";
10
+ language?: string;
11
+ email?: string;
12
+ about_text?: string;
13
+ username?: string;
14
+ avatar?: string;
15
+ theme_id?: number;
16
+ sms_phone_number?: string;
17
+ carrier_id?: number;
18
+ digest_time?: number;
19
+ timezone_id?: number;
20
+ tags?: string;
21
+ status: number;
22
+ can_log_in: number;
23
+ createdby?: string;
24
+ createdbyid?: number;
25
+ createddate?: string;
26
+ updatedby?: string;
27
+ updatedbyid?: number;
28
+ updateddate?: string;
29
+ }
30
+ export interface IAllmoxyContact {
31
+ company_id: number;
32
+ contact_type: "employee" | "individual";
33
+ first_name: string;
34
+ middle_name?: string;
35
+ last_name: string;
36
+ job_title?: string;
37
+ gender?: "male" | "female";
38
+ language?: string;
39
+ email?: string;
40
+ about_text?: string;
41
+ status: number;
42
+ can_log_in?: number;
43
+ theme_id?: number;
44
+ timezone_id?: number;
45
+ carrier_id?: number;
46
+ digest_time?: number;
47
+ }
48
+ export interface IAllmoxyContactQuery {
49
+ company_id?: number;
50
+ contact_type?: "employee" | "individual";
51
+ first_name?: string;
52
+ last_name?: string;
53
+ email?: string;
54
+ status?: number;
55
+ page?: number;
56
+ per_page?: number;
57
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -23,6 +23,13 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import mongoose, { Document } from "mongoose";
26
+ export interface INotificationAction {
27
+ label: string;
28
+ type: "navigate" | "modal" | "callback" | "external";
29
+ value: string;
30
+ data?: Record<string, any>;
31
+ }
32
+ export type NotificationTag = "walkthrough" | "order_update" | "mention" | "automation" | "system" | "quality_control" | "inventory" | "schedule" | "general";
26
33
  export type INotification = ILeanNotification & Document;
27
34
  export interface ILeanNotification {
28
35
  _id: mongoose.Types.ObjectId;
@@ -31,4 +38,6 @@ export interface ILeanNotification {
31
38
  read: boolean;
32
39
  target: mongoose.Types.ObjectId;
33
40
  type: "error" | "warning" | "success" | "info";
41
+ tag: NotificationTag;
42
+ actions?: INotificationAction[];
34
43
  }
@@ -0,0 +1,54 @@
1
+ /// <reference types="mongoose/types/aggregate" />
2
+ /// <reference types="mongoose/types/callback" />
3
+ /// <reference types="mongoose/types/collection" />
4
+ /// <reference types="mongoose/types/connection" />
5
+ /// <reference types="mongoose/types/cursor" />
6
+ /// <reference types="mongoose/types/document" />
7
+ /// <reference types="mongoose/types/error" />
8
+ /// <reference types="mongoose/types/expressions" />
9
+ /// <reference types="mongoose/types/helpers" />
10
+ /// <reference types="mongoose/types/middlewares" />
11
+ /// <reference types="mongoose/types/indexes" />
12
+ /// <reference types="mongoose/types/models" />
13
+ /// <reference types="mongoose/types/mongooseoptions" />
14
+ /// <reference types="mongoose/types/pipelinestage" />
15
+ /// <reference types="mongoose/types/populate" />
16
+ /// <reference types="mongoose/types/query" />
17
+ /// <reference types="mongoose/types/schemaoptions" />
18
+ /// <reference types="mongoose/types/schematypes" />
19
+ /// <reference types="mongoose/types/session" />
20
+ /// <reference types="mongoose/types/types" />
21
+ /// <reference types="mongoose/types/utility" />
22
+ /// <reference types="mongoose/types/validation" />
23
+ /// <reference types="mongoose/types/virtuals" />
24
+ /// <reference types="mongoose/types/inferschematype" />
25
+ import mongoose, { Document } from "mongoose";
26
+ export interface IPieceDetails {
27
+ group_num: string;
28
+ line_num: string;
29
+ file_name: string;
30
+ width: number;
31
+ height: number;
32
+ outside_profile: number;
33
+ srw?: number;
34
+ opedges?: number;
35
+ ip_type?: number;
36
+ rail_width?: number;
37
+ wood_type?: number;
38
+ x_offset?: number;
39
+ y_offset?: number;
40
+ front_width?: number;
41
+ }
42
+ export interface ILeanScannerActivity {
43
+ _id: mongoose.Types.ObjectId;
44
+ orderId: number;
45
+ machineId: mongoose.Types.ObjectId;
46
+ groupNum: string;
47
+ lineNum: string;
48
+ quantity: number;
49
+ timestamp: Date;
50
+ pieceDetails: IPieceDetails;
51
+ createdAt: Date;
52
+ updatedAt: Date;
53
+ }
54
+ export type IScannerActivity = ILeanScannerActivity & Document;
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -30,8 +30,31 @@ export interface IScheduleFilterCondition {
30
30
  operator: "equals" | "notEquals" | "contains" | "greaterThan" | "lessThan" | "greaterThanOrEqual" | "lessThanOrEqual";
31
31
  value: string;
32
32
  }
33
+ export interface IViewFilterCondition {
34
+ id?: string;
35
+ fieldType: "standard" | "customField" | "date" | "attribute";
36
+ fieldName: string;
37
+ operator: "equals" | "notEquals" | "contains" | "greaterThan" | "lessThan" | "greaterThanOrEqual" | "lessThanOrEqual" | "in" | "notIn" | "isEmpty" | "isNotEmpty" | "between";
38
+ value?: any;
39
+ label?: string;
40
+ }
41
+ export interface IFilterSortCondition {
42
+ fieldType: "standard" | "customField" | "date" | "attribute";
43
+ fieldName: string;
44
+ direction: "asc" | "desc";
45
+ order: number;
46
+ }
47
+ export interface ISavedViewFilter {
48
+ _id?: mongoose.Types.ObjectId;
49
+ name: string;
50
+ conditions: IViewFilterCondition[];
51
+ conditionOperator: "and" | "or";
52
+ description?: string;
53
+ sortConditions?: IFilterSortCondition[];
54
+ }
33
55
  export interface IScheduleFilterGroup {
34
56
  conditions: IScheduleFilterCondition[];
57
+ conditionOperator?: "and" | "or";
35
58
  }
36
59
  export interface IScheduleColumn {
37
60
  _id?: mongoose.Types.ObjectId;
@@ -67,6 +90,9 @@ export interface IScheduleView {
67
90
  combineAdditionalAttributes?: boolean;
68
91
  groupByMatchingAttributes?: boolean;
69
92
  isDefault?: boolean;
93
+ savedFilters?: ISavedViewFilter[];
94
+ defaultFilterId?: mongoose.Types.ObjectId;
95
+ activeFilterId?: mongoose.Types.ObjectId;
70
96
  }
71
97
  export interface IScheduleCustomField {
72
98
  _id?: mongoose.Types.ObjectId;
@@ -84,12 +110,14 @@ export interface ILeanSchedule {
84
110
  description?: string;
85
111
  enabled: boolean;
86
112
  filterGroups: IScheduleFilterGroup[];
113
+ groupOperator: "and" | "or";
87
114
  columns: IScheduleColumn[];
88
115
  views?: IScheduleView[];
89
116
  customFields?: IScheduleCustomField[];
90
117
  baseDateField: "shipDate" | "startDate";
91
118
  displayColumns?: IScheduleDisplayColumn[];
92
119
  hidePastShipDates?: boolean;
120
+ hideShippedOrders?: boolean;
93
121
  showShipDate?: boolean;
94
122
  showStartDate?: boolean;
95
123
  defaultSortField?: string;
@@ -109,6 +109,7 @@ export interface ILeanTotalsGroup extends ILeanSetting {
109
109
  calculations?: ICalculation[];
110
110
  dailyLimit?: number;
111
111
  buffer?: number;
112
+ visibleOnDashboard?: boolean;
112
113
  }
113
114
  export interface ILeanKeyValue extends ILeanSetting {
114
115
  key: string;
@@ -23,16 +23,19 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import mongoose, { Document } from "mongoose";
26
+ export interface ISupplierContact {
27
+ _id?: mongoose.Types.ObjectId;
28
+ name: string;
29
+ email?: string;
30
+ phone?: string;
31
+ role?: string;
32
+ notifyOnVMIPurchase?: boolean;
33
+ }
26
34
  export interface ISupplier {
27
35
  _id: mongoose.Types.ObjectId;
28
36
  name: string;
29
37
  code: string;
30
- contactInfo: {
31
- email?: string;
32
- phone?: string;
33
- address?: string;
34
- contactPerson?: string;
35
- };
38
+ contacts?: ISupplierContact[];
36
39
  notes?: string;
37
40
  active: boolean;
38
41
  allowedInventoryTypes?: mongoose.Types.ObjectId[];
package/dist/IUser.d.ts CHANGED
@@ -23,6 +23,7 @@
23
23
  /// <reference types="mongoose/types/virtuals" />
24
24
  /// <reference types="mongoose/types/inferschematype" />
25
25
  import mongoose, { Document } from "mongoose";
26
+ import { NotificationTag } from "./INotification";
26
27
  export type IUser = ILeanUser & Document;
27
28
  export interface ILeanUser {
28
29
  _id: mongoose.Types.ObjectId;
@@ -33,6 +34,7 @@ export interface ILeanUser {
33
34
  permissions: any[];
34
35
  groups: any[];
35
36
  pushSubscriptions?: PushSubscription[];
37
+ pushNotificationTags?: NotificationTag[];
36
38
  }
37
39
  export interface PushSubscription {
38
40
  endpoint: string;
@@ -71,6 +71,9 @@ export interface ILocation extends Omit<Document, '_id'>, ILocationComponentBase
71
71
  currentStock?: number;
72
72
  isActive: boolean;
73
73
  allowedInventoryTypes?: Types.ObjectId[];
74
+ isVMI?: boolean;
75
+ allowedSuppliers?: Types.ObjectId[];
76
+ transferRestriction?: "bidirectional" | "inbound_only" | "outbound_only";
74
77
  }
75
78
  export interface ILocationPath {
76
79
  locationId: Types.ObjectId;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "truflow",
3
- "version": "0.0.190",
3
+ "version": "0.0.191",
4
4
  "main": "./dist/index.js",
5
5
  "license": "MIT",
6
6
  "scripts": {
@@ -12,8 +12,10 @@
12
12
  "@hokify/agenda": "^6.3.0",
13
13
  "@types/express": "^4.17.17",
14
14
  "@types/luxon": "^3.3.0",
15
- "mongoose": "^7.3.4",
16
- "socket.io": "^4.7.5"
15
+ "mongoose": "^7.3.4"
16
+ },
17
+ "peerDependencies": {
18
+ "socket.io": "^4.5.1"
17
19
  },
18
20
  "packageManager": "yarn@1.22.22+sha512.a6b2f7906b721bba3d67d4aff083df04dad64c399707841b7acf00f6b133b7ac24255f2652fa22ae3534329dc6180534e98d17432037ff6fd140556e2bb3137e",
19
21
  "devDependencies": {
@@ -21,8 +23,7 @@
21
23
  "@types/node": "^24.10.1",
22
24
  "express": "^5.2.1",
23
25
  "luxon": "^3.7.2",
24
- "mongoose": "^9.0.1",
25
- "socket.io": "^4.8.1",
26
+ "socket.io": "^4.5.1",
26
27
  "typescript": "5.3.3"
27
28
  }
28
29
  }
@@ -1,5 +1,24 @@
1
1
  import mongoose, { Document } from "mongoose";
2
2
 
3
+ export interface INotificationAction {
4
+ label: string;
5
+ type: "navigate" | "modal" | "callback" | "external";
6
+ value: string; // For navigate: path, for modal: modal name, for callback: callback identifier, for external: URL
7
+ data?: Record<string, any>; // Optional data to pass to the action handler
8
+ }
9
+
10
+ // Standard notification tags for categorizing notifications
11
+ export type NotificationTag =
12
+ | "walkthrough" // Walkthrough reminders and submissions
13
+ | "order_update" // Order status changes, ship date updates
14
+ | "mention" // User @mentions
15
+ | "automation" // Automation notifications
16
+ | "system" // System messages, cache reloads
17
+ | "quality_control" // QC related notifications
18
+ | "inventory" // Inventory alerts
19
+ | "schedule" // Scheduling notifications
20
+ | "general"; // General notifications
21
+
3
22
  export type INotification = ILeanNotification & Document;
4
23
  export interface ILeanNotification {
5
24
  _id: mongoose.Types.ObjectId;
@@ -8,4 +27,6 @@ export interface ILeanNotification {
8
27
  read: boolean;
9
28
  target: mongoose.Types.ObjectId;
10
29
  type: "error" | "warning" | "success" | "info";
30
+ tag: NotificationTag;
31
+ actions?: INotificationAction[];
11
32
  }
package/src/ISchedule.ts CHANGED
@@ -9,9 +9,38 @@ export interface IScheduleFilterCondition {
9
9
  value: string;
10
10
  }
11
11
 
12
- // A filter group - conditions are ANDed together
12
+ // Enhanced filter condition for view-level filtering
13
+ export interface IViewFilterCondition {
14
+ id?: string; // Unique identifier for the filter condition
15
+ fieldType: "standard" | "customField" | "date" | "attribute"; // Type of field being filtered
16
+ fieldName: string; // Field name (e.g., "status", "shipDate", custom field name, or attribute name)
17
+ operator: "equals" | "notEquals" | "contains" | "greaterThan" | "lessThan" | "greaterThanOrEqual" | "lessThanOrEqual" | "in" | "notIn" | "isEmpty" | "isNotEmpty" | "between";
18
+ value?: any; // Filter value(s) - can be string, number, array for "in"/"notIn", or object with {start, end} for "between"
19
+ label?: string; // Display label for the field
20
+ }
21
+
22
+ // Sort configuration for filters
23
+ export interface IFilterSortCondition {
24
+ fieldType: "standard" | "customField" | "date" | "attribute"; // Type of field being sorted
25
+ fieldName: string; // Field name to sort by
26
+ direction: "asc" | "desc"; // Sort direction
27
+ order: number; // Priority order (lower number = higher priority)
28
+ }
29
+
30
+ // Saved filter configuration
31
+ export interface ISavedViewFilter {
32
+ _id?: mongoose.Types.ObjectId;
33
+ name: string; // Name of the saved filter
34
+ conditions: IViewFilterCondition[]; // Array of filter conditions
35
+ conditionOperator: "and" | "or"; // How to combine conditions
36
+ description?: string; // Optional description
37
+ sortConditions?: IFilterSortCondition[]; // Sort conditions (applied after filtering)
38
+ }
39
+
40
+ // A filter group - conditions are combined based on conditionOperator
13
41
  export interface IScheduleFilterGroup {
14
42
  conditions: IScheduleFilterCondition[];
43
+ conditionOperator?: "and" | "or";
15
44
  }
16
45
 
17
46
  // Column/Stage configuration for the schedule
@@ -60,6 +89,12 @@ export interface IScheduleView {
60
89
  // Product grouping configuration
61
90
  groupByMatchingAttributes?: boolean; // Whether to group products with matching filter attributes in the same order
62
91
  isDefault?: boolean; // Whether this is the default view
92
+ // Saved filters for this view
93
+ savedFilters?: ISavedViewFilter[];
94
+ // ID of the default filter to apply
95
+ defaultFilterId?: mongoose.Types.ObjectId;
96
+ // Currently active filter (not saved, just for UI state)
97
+ activeFilterId?: mongoose.Types.ObjectId;
63
98
  }
64
99
 
65
100
  // Custom field definition for schedule entries
@@ -82,6 +117,7 @@ export interface ILeanSchedule {
82
117
  enabled: boolean;
83
118
  // Filter configuration - groups are ORed together
84
119
  filterGroups: IScheduleFilterGroup[];
120
+ groupOperator: "and" | "or";
85
121
  // Column/Stage configuration
86
122
  columns: IScheduleColumn[];
87
123
  // Views for this schedule
@@ -93,6 +129,7 @@ export interface ILeanSchedule {
93
129
  // Legacy fields (kept for backward compatibility, will be migrated to default view)
94
130
  displayColumns?: IScheduleDisplayColumn[];
95
131
  hidePastShipDates?: boolean;
132
+ hideShippedOrders?: boolean;
96
133
  showShipDate?: boolean;
97
134
  showStartDate?: boolean;
98
135
  defaultSortField?: string;
package/src/ISetting.ts CHANGED
@@ -111,6 +111,7 @@ export interface ILeanTotalsGroup extends ILeanSetting {
111
111
  calculations?: ICalculation[];
112
112
  dailyLimit?: number;
113
113
  buffer?: number;
114
+ visibleOnDashboard?: boolean;
114
115
  }
115
116
 
116
117
  export interface ILeanKeyValue extends ILeanSetting {
package/src/ISupplier.ts CHANGED
@@ -1,15 +1,20 @@
1
1
  import mongoose, { Document } from "mongoose";
2
2
 
3
+ export interface ISupplierContact {
4
+ _id?: mongoose.Types.ObjectId;
5
+ name: string;
6
+ email?: string;
7
+ phone?: string;
8
+ role?: string;
9
+ notifyOnVMIPurchase?: boolean;
10
+ }
11
+
3
12
  export interface ISupplier {
4
13
  _id: mongoose.Types.ObjectId;
5
14
  name: string;
6
15
  code: string;
7
- contactInfo: {
8
- email?: string;
9
- phone?: string;
10
- address?: string;
11
- contactPerson?: string;
12
- };
16
+ // Contacts array for multiple contacts
17
+ contacts?: ISupplierContact[];
13
18
  notes?: string;
14
19
  active: boolean;
15
20
  allowedInventoryTypes?: mongoose.Types.ObjectId[];
package/src/IUser.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import mongoose, { Document } from "mongoose";
2
+ import { NotificationTag } from "./INotification";
2
3
 
3
4
  export type IUser = ILeanUser & Document;
4
5
 
@@ -11,6 +12,7 @@ export interface ILeanUser {
11
12
  permissions: any[];
12
13
  groups: any[];
13
14
  pushSubscriptions?: PushSubscription[];
15
+ pushNotificationTags?: NotificationTag[]; // Tags user wants to receive push notifications for
14
16
  }
15
17
 
16
18
  export interface PushSubscription {
@@ -60,6 +60,11 @@ export interface ILocation extends Omit<Document, '_id'>, ILocationComponentBase
60
60
  isActive: boolean;
61
61
  // Array of inventory type IDs that can be stored in this location
62
62
  allowedInventoryTypes?: Types.ObjectId[];
63
+ // VMI (Vendor Managed Inventory) configuration
64
+ isVMI?: boolean;
65
+ allowedSuppliers?: Types.ObjectId[]; // Suppliers allowed to manage VMI inventory at this location
66
+ // Transfer restrictions: controls direction of inventory movement
67
+ transferRestriction?: "bidirectional" | "inbound_only" | "outbound_only";
63
68
  }
64
69
 
65
70
  export interface ILocationPath {
package/tsconfig.json CHANGED
@@ -4,7 +4,10 @@
4
4
  "module": "commonjs",
5
5
  "declaration": true,
6
6
  "outDir": "./dist",
7
- "strict": true
7
+ "strict": true,
8
+ "esModuleInterop": true,
9
+ "skipLibCheck": true,
10
+ "resolveJsonModule": true
8
11
  },
9
12
  "include": ["src"],
10
13
  "exclude": ["node_modules"]