@spytecgps/nova-orm 1.0.21 → 1.0.23

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.
@@ -7,17 +7,23 @@ export const completeTask = async (novaDataSource, params, logger) => {
7
7
  return novaDataSource.safeQuery(async (dataSource) => {
8
8
  const taskRepository = dataSource.getRepository(Task);
9
9
  const now = new Date();
10
+ const includeTimeInCompletedAt = params.includeTimeInCompletedAt ?? true;
11
+ const completedAt = params.completedAt ?? now;
12
+ if (!includeTimeInCompletedAt) {
13
+ completedAt.setHours(0, 0, 0, 0);
14
+ }
10
15
  const result = await taskRepository
11
16
  .createQueryBuilder()
12
17
  .update(Task)
13
18
  .set({
14
19
  status: 'completed',
15
20
  completedBy: params.completedBy,
16
- completedAt: params.completedAt ?? now,
21
+ completedAt,
17
22
  completionNotes: params.completionNotes,
18
23
  completionOdometer: params.completionOdometer,
19
24
  completionActiveHours: params.completionActiveHours,
20
25
  completionMetadata: params.completionMetadata,
26
+ includeTimeInCompletedAt,
21
27
  })
22
28
  .where('id = :id', { id: params.id })
23
29
  .execute();
@@ -1 +1 @@
1
- {"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../../src/repositories/tasks/completeTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAKrC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,cAA8B,EAC9B,MAA0B,EAC1B,MAAc,EACI,EAAE;IACpB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2DAA2D,CAAC,CAAA;QACpF,OAAO,KAAK,CAAA;KACb;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAA0B,EAAoB,EAAE;QACrF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAErD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QAEtB,MAAM,MAAM,GAAG,MAAM,cAAc;aAChC,kBAAkB,EAAE;aACpB,MAAM,CAAC,IAAI,CAAC;aACZ,GAAG,CAAC;YACH,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,GAAG;YACtC,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;SAC9C,CAAC;aACD,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACpC,OAAO,EAAE,CAAA;QAEZ,OAAO,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAA;IAC5B,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC,CAAA"}
1
+ {"version":3,"file":"completeTask.js","sourceRoot":"","sources":["../../../src/repositories/tasks/completeTask.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AAKrC,MAAM,CAAC,MAAM,YAAY,GAAG,KAAK,EAC/B,cAA8B,EAC9B,MAA0B,EAC1B,MAAc,EACI,EAAE;IACpB,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE;QACf,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,2DAA2D,CAAC,CAAA;QACpF,OAAO,KAAK,CAAA;KACb;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAA0B,EAAoB,EAAE;QACrF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAErD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAA;QAEtB,MAAM,wBAAwB,GAAG,MAAM,CAAC,wBAAwB,IAAI,IAAI,CAAA;QAExE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,GAAG,CAAA;QAE7C,IAAI,CAAC,wBAAwB,EAAE;YAC7B,WAAW,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;SACjC;QAED,MAAM,MAAM,GAAG,MAAM,cAAc;aAChC,kBAAkB,EAAE;aACpB,MAAM,CAAC,IAAI,CAAC;aACZ,GAAG,CAAC;YACH,MAAM,EAAE,WAAW;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW;YACX,eAAe,EAAE,MAAM,CAAC,eAAe;YACvC,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,qBAAqB,EAAE,MAAM,CAAC,qBAAqB;YACnD,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;YAC7C,wBAAwB;SACzB,CAAC;aACD,KAAK,CAAC,UAAU,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;aACpC,OAAO,EAAE,CAAA;QAEZ,OAAO,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAA;IAC5B,CAAC,EAAE,+BAA+B,CAAC,CAAA;AACrC,CAAC,CAAA"}
@@ -15,8 +15,47 @@ export const getTasks = async (novaDataSource, params, logger) => {
15
15
  else if (params.filters.title || params.filters.description) {
16
16
  queryBuilder = queryBuilder.innerJoin('task.taskSchedule', 'taskSchedule');
17
17
  }
18
+ if (params.projectionOptions?.includeDeviceStatus ||
19
+ params.filters?.dueInActiveHoursFilter?.minValue != null ||
20
+ params.filters?.dueInActiveHoursFilter?.maxValue != null ||
21
+ params.filters?.dueInOdometerFilter?.maxValue != null ||
22
+ params.filters?.dueInOdometerFilter?.minValue != null) {
23
+ queryBuilder = queryBuilder.leftJoinAndSelect('task.deviceStatus', 'deviceStatus', 'deviceStatus.imei = task.imei');
24
+ }
18
25
  queryBuilder = addFilters(queryBuilder, params.filters, tasksFilterMapping, 'task');
19
26
  queryBuilder = addFilters(queryBuilder, params.filters, tasksFilterMappingWithSchedule, 'taskSchedule');
27
+ if (params.filters?.dueInOdometerFilter?.maxValue != null) {
28
+ queryBuilder = queryBuilder.andWhere(`(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') IS NOT NULL
29
+ AND task.dueOdometer IS NOT NULL
30
+ AND (task.dueOdometer > CAST(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') AS DECIMAL(15,4))
31
+ AND task.dueOdometer - CAST(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') AS DECIMAL(15,4)) <= :dueInMaxOdometer))`, {
32
+ dueInMaxOdometer: params.filters.dueInOdometerFilter.maxValue,
33
+ });
34
+ }
35
+ if (params.filters?.dueInOdometerFilter?.minValue != null) {
36
+ queryBuilder = queryBuilder.andWhere(`(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') IS NOT NULL
37
+ AND task.dueOdometer IS NOT NULL
38
+ AND (task.dueOdometer > CAST(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') AS DECIMAL(15,4))
39
+ AND task.dueOdometer - CAST(JSON_EXTRACT(deviceStatus.data, '$.odoMileage') AS DECIMAL(15,4)) >= :dueInMinOdometer))`, {
40
+ dueInMinOdometer: params.filters.dueInOdometerFilter.minValue,
41
+ });
42
+ }
43
+ if (params.filters?.dueInActiveHoursFilter?.maxValue != null) {
44
+ queryBuilder = queryBuilder.andWhere(`(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') IS NOT NULL
45
+ AND task.dueActiveHours IS NOT NULL
46
+ AND (task.dueActiveHours > CAST(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') AS DECIMAL(15,4))
47
+ AND task.dueActiveHours - CAST(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') AS DECIMAL(15,4)) <= :dueInMaxActiveHours))`, {
48
+ dueInMaxActiveHours: params.filters.dueInActiveHoursFilter.maxValue,
49
+ });
50
+ }
51
+ if (params.filters?.dueInActiveHoursFilter?.minValue != null) {
52
+ queryBuilder = queryBuilder.andWhere(`(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') IS NOT NULL
53
+ AND task.dueActiveHours IS NOT NULL
54
+ AND (task.dueActiveHours > CAST(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') AS DECIMAL(15,4))
55
+ AND task.dueActiveHours - CAST(JSON_EXTRACT(deviceStatus.data, '$.hoursOfOperation') AS DECIMAL(15,4)) >= :dueInMinActiveHours))`, {
56
+ dueInMinActiveHours: params.filters.dueInActiveHoursFilter.minValue,
57
+ });
58
+ }
20
59
  const sortField = params.sortOptions?.sortField ?? 'id';
21
60
  const sortOrder = params.sortOptions?.sortOrder ?? 'DESC';
22
61
  queryBuilder = queryBuilder.orderBy(`task.${sortField}`, sortOrder);
@@ -1 +1 @@
1
- {"version":3,"file":"getTasks.js","sourceRoot":"","sources":["../../../src/repositories/tasks/getTasks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAgB,MAAM,gBAAgB,CAAA;AAInD,OAAO,EAAE,oBAAoB,EAAE,MAAM,kCAAkC,CAAA;AACvE,OAAO,EACL,UAAU,EACV,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,yBAAyB,CAAA;AAEhC,MAAM,CAAC,MAAM,QAAQ,GAAG,KAAK,EAC3B,cAA8B,EAC9B,MAAsB,EACtB,MAAc,EACG,EAAE;IACnB,IAAI,CAAC,oBAAoB,CAAkB,MAAM,EAAE,OAAO,CAAC,EAAE;QAC3D,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,EAAE,uDAAuD,CAAC,CAAA;QAChF,OAAO,EAAE,CAAA;KACV;IAED,OAAO,cAAc,CAAC,SAAS,CAAC,KAAK,EAAE,UAA0B,EAAmB,EAAE;QACpF,MAAM,cAAc,GAAG,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAA;QAErD,IAAI,YAAY,GAAG,cAAc,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAA;QAE5D,IAAI,MAAM,CAAC,iBAAiB,EAAE,mBAAmB,EAAE;YACjD,YAAY,GAAG,YAAY,CAAC,iBAAiB,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;SACnF;aAAM,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,EAAE;YAC7D,YAAY,GAAG,YAAY,CAAC,SAAS,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAA;SAC3E;QAED,YAAY,GAAG,UAAU,CAAa,YAAY,EAAE,MAAM,CAAC,OAAO,EAAE,kBAAkB,EAAE,MAAM,CAAC,CAAA;QAC/F,YAAY,GAAG,UAAU,CACvB,YAAY,EACZ,MAAM,CAAC,OAAO,EACd,8BAA8B,EAC9B,cAAc,CACf,CAAA;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,IAAI,CAAA;QACvD,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,EAAE,SAAS,IAAI,MAAM,CAAA;QAEzD,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,QAAQ,SAAS,EAAE,EAAE,SAAS,CAAC,CAAA;QAEnE,MAAM,MAAM,GAAG,MAAM,YAAY;aAC9B,KAAK,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,IAAI,GAAG,CAAC;aAC7C,MAAM,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,QAAQ,IAAI,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,SAAS,IAAI,CAAC,CAAC,CAAC;aAC1F,OAAO,EAAE,CAAA;QAEZ,OAAO,MAAM,CAAA;IACf,CAAC,EAAE,2BAA2B,CAAC,CAAA;AACjC,CAAC,CAAA"}
1
+ {"version":3,"file":"getTasks.js","sourceRoot":"","sources":["../../../src/repositories/tasks/getTasks.ts"],"names":[],"mappings":"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"}
@@ -135,7 +135,9 @@ export interface GetTasksFilters {
135
135
  clientId?: number | null;
136
136
  dueDateFilter?: RangeFilter<Date> | null;
137
137
  dueOdometerFilter?: RangeFilter<number> | null;
138
+ dueInOdometerFilter?: RangeFilter<number> | null;
138
139
  dueActiveHoursFilter?: RangeFilter<number> | null;
140
+ dueInActiveHoursFilter?: RangeFilter<number> | null;
139
141
  startDateFilter?: RangeFilter<Date> | null;
140
142
  startingOdometerFilter?: RangeFilter<number> | null;
141
143
  startingActiveHoursFilter?: RangeFilter<number> | null;
@@ -160,6 +162,7 @@ export interface GetTasksParams {
160
162
  filters: GetTasksFilters;
161
163
  projectionOptions?: {
162
164
  includeTaskSchedule?: boolean;
165
+ includeDeviceStatus?: boolean;
163
166
  };
164
167
  pagingOptions?: {
165
168
  pageSize?: number;
@@ -199,6 +202,7 @@ export interface CompleteTaskParams {
199
202
  completionOdometer?: number;
200
203
  completionActiveHours?: number;
201
204
  completionMetadata?: object;
205
+ includeTimeInCompletedAt?: boolean;
202
206
  }
203
207
  export interface SetTaskAsPastDueParams {
204
208
  id: number;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spytecgps/nova-orm",
3
- "version": "1.0.21",
3
+ "version": "1.0.23",
4
4
  "description": "ORM with PlanetScale",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",