@os1-platform/dispatch-mobile 2.1.8 → 2.1.10

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.
Files changed (131) hide show
  1. package/lib/commonjs/analytics/sentry/SentryAnalyticsSingleton.js +0 -2
  2. package/lib/commonjs/analytics/sentry/SentryAnalyticsSingleton.js.map +1 -1
  3. package/lib/commonjs/analytics/sentry/SentryAnalyticsUtils.js +0 -6
  4. package/lib/commonjs/analytics/sentry/SentryAnalyticsUtils.js.map +1 -1
  5. package/lib/commonjs/analytics/sentry/SentrySdkConstants.js +2 -0
  6. package/lib/commonjs/analytics/sentry/SentrySdkConstants.js.map +1 -1
  7. package/lib/commonjs/components/executiontasks/imageCapture/ImageCapture.js +1 -1
  8. package/lib/commonjs/components/executiontasks/imageCapture/ImageCapture.js.map +1 -1
  9. package/lib/commonjs/index.js.map +1 -1
  10. package/lib/commonjs/manager/sdk/DispatchSDKManager.js +5 -4
  11. package/lib/commonjs/manager/sdk/DispatchSDKManager.js.map +1 -1
  12. package/lib/commonjs/manager/sdk/callbacksHandler.js +28 -1
  13. package/lib/commonjs/manager/sdk/callbacksHandler.js.map +1 -1
  14. package/lib/commonjs/manager/syncmanager/AppSyncManager.js +7 -5
  15. package/lib/commonjs/manager/syncmanager/AppSyncManager.js.map +1 -1
  16. package/lib/commonjs/manager/syncmanager/DBConfig.js +3 -1
  17. package/lib/commonjs/manager/syncmanager/DBConfig.js.map +1 -1
  18. package/lib/commonjs/manager/syncmanager/constants.js +4 -1
  19. package/lib/commonjs/manager/syncmanager/constants.js.map +1 -1
  20. package/lib/commonjs/manager/syncmanager/document/DocumentHttpClient.js +37 -20
  21. package/lib/commonjs/manager/syncmanager/document/DocumentHttpClient.js.map +1 -1
  22. package/lib/commonjs/manager/syncmanager/document/DocumentManager.js +26 -4
  23. package/lib/commonjs/manager/syncmanager/document/DocumentManager.js.map +1 -1
  24. package/lib/commonjs/manager/syncmanager/document/DocumentSyncManager.js +276 -20
  25. package/lib/commonjs/manager/syncmanager/document/DocumentSyncManager.js.map +1 -1
  26. package/lib/commonjs/manager/syncmanager/events/ETEventsManager.js +41 -13
  27. package/lib/commonjs/manager/syncmanager/events/ETEventsManager.js.map +1 -1
  28. package/lib/commonjs/manager/syncmanager/events/EventsSyncManager.js +116 -59
  29. package/lib/commonjs/manager/syncmanager/events/EventsSyncManager.js.map +1 -1
  30. package/lib/commonjs/manager/syncmanager/events/SyncHttpClient.js +17 -0
  31. package/lib/commonjs/manager/syncmanager/events/SyncHttpClient.js.map +1 -1
  32. package/lib/commonjs/models/auth.js.map +1 -1
  33. package/lib/commonjs/models/sdk.js.map +1 -1
  34. package/lib/commonjs/network/NetworkClient.js +12 -2
  35. package/lib/commonjs/network/NetworkClient.js.map +1 -1
  36. package/lib/commonjs/network/NetworkUtils.js +14 -7
  37. package/lib/commonjs/network/NetworkUtils.js.map +1 -1
  38. package/lib/commonjs/network/client.js +1 -1
  39. package/lib/commonjs/network/client.js.map +1 -1
  40. package/lib/commonjs/ui/screens/DeliverScreen.js.map +1 -1
  41. package/lib/commonjs/ui/screens/FormsScreen.js.map +1 -1
  42. package/lib/commonjs/utils/SyncManagerUtils.js +29 -2
  43. package/lib/commonjs/utils/SyncManagerUtils.js.map +1 -1
  44. package/lib/commonjs/utils/storage.js +21 -5
  45. package/lib/commonjs/utils/storage.js.map +1 -1
  46. package/lib/commonjs/utils/utils.js +0 -9
  47. package/lib/commonjs/utils/utils.js.map +1 -1
  48. package/lib/module/analytics/sentry/SentryAnalyticsSingleton.js +0 -2
  49. package/lib/module/analytics/sentry/SentryAnalyticsSingleton.js.map +1 -1
  50. package/lib/module/analytics/sentry/SentryAnalyticsUtils.js +0 -6
  51. package/lib/module/analytics/sentry/SentryAnalyticsUtils.js.map +1 -1
  52. package/lib/module/analytics/sentry/SentrySdkConstants.js +2 -0
  53. package/lib/module/analytics/sentry/SentrySdkConstants.js.map +1 -1
  54. package/lib/module/components/executiontasks/imageCapture/ImageCapture.js +1 -1
  55. package/lib/module/components/executiontasks/imageCapture/ImageCapture.js.map +1 -1
  56. package/lib/module/index.js.map +1 -1
  57. package/lib/module/manager/sdk/DispatchSDKManager.js +5 -4
  58. package/lib/module/manager/sdk/DispatchSDKManager.js.map +1 -1
  59. package/lib/module/manager/sdk/callbacksHandler.js +27 -1
  60. package/lib/module/manager/sdk/callbacksHandler.js.map +1 -1
  61. package/lib/module/manager/syncmanager/AppSyncManager.js +7 -5
  62. package/lib/module/manager/syncmanager/AppSyncManager.js.map +1 -1
  63. package/lib/module/manager/syncmanager/DBConfig.js +3 -1
  64. package/lib/module/manager/syncmanager/DBConfig.js.map +1 -1
  65. package/lib/module/manager/syncmanager/constants.js +3 -0
  66. package/lib/module/manager/syncmanager/constants.js.map +1 -1
  67. package/lib/module/manager/syncmanager/document/DocumentHttpClient.js +38 -21
  68. package/lib/module/manager/syncmanager/document/DocumentHttpClient.js.map +1 -1
  69. package/lib/module/manager/syncmanager/document/DocumentManager.js +26 -4
  70. package/lib/module/manager/syncmanager/document/DocumentManager.js.map +1 -1
  71. package/lib/module/manager/syncmanager/document/DocumentSyncManager.js +276 -20
  72. package/lib/module/manager/syncmanager/document/DocumentSyncManager.js.map +1 -1
  73. package/lib/module/manager/syncmanager/events/ETEventsManager.js +42 -14
  74. package/lib/module/manager/syncmanager/events/ETEventsManager.js.map +1 -1
  75. package/lib/module/manager/syncmanager/events/EventsSyncManager.js +119 -61
  76. package/lib/module/manager/syncmanager/events/EventsSyncManager.js.map +1 -1
  77. package/lib/module/manager/syncmanager/events/SyncHttpClient.js +15 -0
  78. package/lib/module/manager/syncmanager/events/SyncHttpClient.js.map +1 -1
  79. package/lib/module/models/auth.js.map +1 -1
  80. package/lib/module/models/sdk.js.map +1 -1
  81. package/lib/module/network/NetworkClient.js +12 -2
  82. package/lib/module/network/NetworkClient.js.map +1 -1
  83. package/lib/module/network/NetworkUtils.js +14 -7
  84. package/lib/module/network/NetworkUtils.js.map +1 -1
  85. package/lib/module/network/client.js +1 -1
  86. package/lib/module/network/client.js.map +1 -1
  87. package/lib/module/ui/screens/DeliverScreen.js.map +1 -1
  88. package/lib/module/ui/screens/FormsScreen.js.map +1 -1
  89. package/lib/module/utils/SyncManagerUtils.js +30 -3
  90. package/lib/module/utils/SyncManagerUtils.js.map +1 -1
  91. package/lib/module/utils/storage.js +21 -5
  92. package/lib/module/utils/storage.js.map +1 -1
  93. package/lib/module/utils/utils.js +0 -9
  94. package/lib/module/utils/utils.js.map +1 -1
  95. package/lib/typescript/analytics/sentry/SentrySdkConstants.d.ts +2 -0
  96. package/lib/typescript/manager/sdk/callbacksHandler.d.ts +3 -1
  97. package/lib/typescript/manager/syncmanager/DBConfig.d.ts +4 -0
  98. package/lib/typescript/manager/syncmanager/constants.d.ts +3 -0
  99. package/lib/typescript/manager/syncmanager/document/DocumentManager.d.ts +2 -0
  100. package/lib/typescript/manager/syncmanager/document/DocumentSyncManager.d.ts +2 -1
  101. package/lib/typescript/manager/syncmanager/events/ETEventsManager.d.ts +2 -0
  102. package/lib/typescript/manager/syncmanager/events/EventsSyncManager.d.ts +1 -1
  103. package/lib/typescript/models/sdk.d.ts +1 -0
  104. package/lib/typescript/utils/storage.d.ts +3 -3
  105. package/package.json +5 -5
  106. package/src/analytics/sentry/SentryAnalyticsSingleton.ts +7 -9
  107. package/src/analytics/sentry/SentryAnalyticsUtils.ts +24 -36
  108. package/src/analytics/sentry/SentrySdkConstants.ts +2 -0
  109. package/src/components/executiontasks/imageCapture/ImageCapture.tsx +1 -3
  110. package/src/index.tsx +1 -1
  111. package/src/manager/sdk/DispatchSDKManager.ts +8 -3
  112. package/src/manager/sdk/callbacksHandler.ts +39 -2
  113. package/src/manager/syncmanager/AppSyncManager.ts +15 -13
  114. package/src/manager/syncmanager/DBConfig.ts +4 -0
  115. package/src/manager/syncmanager/constants.ts +3 -0
  116. package/src/manager/syncmanager/document/DocumentHttpClient.ts +54 -24
  117. package/src/manager/syncmanager/document/DocumentManager.ts +48 -7
  118. package/src/manager/syncmanager/document/DocumentSyncManager.ts +351 -30
  119. package/src/manager/syncmanager/events/ETEventsManager.ts +50 -16
  120. package/src/manager/syncmanager/events/EventsSyncManager.ts +157 -74
  121. package/src/manager/syncmanager/events/SyncHttpClient.ts +30 -1
  122. package/src/models/auth.ts +1 -0
  123. package/src/models/sdk.ts +1 -0
  124. package/src/network/NetworkClient.ts +18 -2
  125. package/src/network/NetworkUtils.ts +9 -1
  126. package/src/network/client.ts +1 -1
  127. package/src/ui/screens/DeliverScreen.tsx +6 -5
  128. package/src/ui/screens/FormsScreen.tsx +8 -6
  129. package/src/utils/SyncManagerUtils.ts +41 -6
  130. package/src/utils/storage.ts +21 -8
  131. package/src/utils/utils.ts +0 -8
@@ -11,6 +11,9 @@ import BaseErrorCodes, {
11
11
  import Logger, { LOG_TYPE } from '../../../utils/Logger';
12
12
  import type { SQLResultSet } from 'expo-sqlite';
13
13
  import NetworkUtil from '../../../utils/NetworkUtil';
14
+ import ETEventsManager from '../events/ETEventsManager';
15
+ import { LAST_SYNCED_EVENT_ID, MAX_RETRY_COUNT, POD_DOC } from '../../syncmanager/constants';
16
+ import EventsSyncManager from '../events/EventsSyncManager';
14
17
  import Marker, {
15
18
  Position,
16
19
  TextBackgroundType,
@@ -29,9 +32,8 @@ export default class DocumentSyncManager {
29
32
  private inProgress: boolean = false;
30
33
  private static instance: DocumentSyncManager;
31
34
  private docManager: DocumentManager | undefined;
32
- private maxRetryCount: number = 3;
35
+ private maxRetryCount: number = MAX_RETRY_COUNT;
33
36
  private _retries = 0;
34
-
35
37
  get retries(): number {
36
38
  return this._retries;
37
39
  }
@@ -71,31 +73,97 @@ export default class DocumentSyncManager {
71
73
  if (documentRows?.length > 0) {
72
74
  await this.uploadDocToServer(documentRows[0]);
73
75
  } else {
76
+ let cta = 'startDocumentSync-NoData'
77
+ fireEventWithScreenName({
78
+ severityLevel: SeverityLevelValue.LOG,
79
+ eventName: SentryEventNameSdkConstants.APP_LOG,
80
+ screenName: cta,
81
+ cta: cta,
82
+ extraParams: {
83
+ msg:'No data to sync'
84
+ },
85
+ });
74
86
  Logger.getInstance().logEvent(
75
- 'startDocumentSync',
87
+ cta,
76
88
  'No data to sync',
77
- LOG_TYPE.SDK_INFO
89
+ LOG_TYPE.SDK_ERROR
78
90
  );
79
91
  }
80
92
  } else {
93
+ let cta = 'startDocumentSync-NoNetwork'
94
+ fireEventWithScreenName({
95
+ severityLevel: SeverityLevelValue.LOG,
96
+ eventName: SentryEventNameSdkConstants.APP_LOG,
97
+ screenName: cta,
98
+ cta: cta,
99
+ extraParams: {
100
+ msg:'No Network'
101
+ },
102
+ });
81
103
  Logger.getInstance().logEvent(
82
- 'startDocumentSync',
104
+ cta,
83
105
  'No Network',
84
- LOG_TYPE.SDK_INFO
106
+ LOG_TYPE.SDK_ERROR
85
107
  );
86
108
  }
87
109
  } catch (error: any) {
110
+ let cta = 'startDocumentSync-error'
111
+ fireEventWithScreenName({
112
+ severityLevel: SeverityLevelValue.LOG,
113
+ eventName: SentryEventNameSdkConstants.APP_LOG,
114
+ screenName: cta,
115
+ cta: cta,
116
+ extraParams: {
117
+ msg:flattenObject(error)
118
+ },
119
+ });
120
+ Logger.getInstance().logEvent(
121
+ cta,
122
+ flattenObject(error),
123
+ LOG_TYPE.SDK_ERROR
124
+ );
88
125
  } finally {
89
126
  this.inProgress = false;
90
- if ((await this.isSyncPending()) && hasNetwork) {
127
+ let syncPending = await this.isSyncPending();
128
+ if (syncPending && hasNetwork) {
91
129
  await this.startDocumentSync();
130
+ }else{
131
+ let cta = 'startDocumentSync-error'
132
+ let extraParameters = {
133
+ hasNetwork: hasNetwork,
134
+ pending: syncPending,
135
+ };
136
+ fireEventWithScreenName({
137
+ severityLevel: SeverityLevelValue.LOG,
138
+ eventName: SentryEventNameSdkConstants.APP_LOG,
139
+ screenName: cta,
140
+ cta: cta,
141
+ extraParams: {
142
+ msg:flattenObject(extraParameters)
143
+ },
144
+ });
145
+ Logger.getInstance().logEvent(
146
+ cta,
147
+ flattenObject(extraParameters),
148
+ LOG_TYPE.SDK_ERROR
149
+ );
92
150
  }
93
151
  }
94
152
  } else {
153
+ let cta = 'startDocumentSync'
154
+ fireEventWithScreenName({
155
+ severityLevel: SeverityLevelValue.LOG,
156
+ eventName: SentryEventNameSdkConstants.APP_LOG,
157
+ screenName: cta,
158
+ cta: cta,
159
+ extraParams: {
160
+ msg:'sync already in progress or max count reached'
161
+ },
162
+ });
95
163
  Logger.getInstance().logEvent(
96
- 'startDocumentSync',
97
- 'sync already in progress ',
98
- LOG_TYPE.SDK_INFO
164
+ cta,
165
+ 'sync already in progress or max count reached',
166
+ LOG_TYPE.SDK_ERROR
99
167
  );
100
168
  }
101
169
  }
@@ -137,10 +205,20 @@ export default class DocumentSyncManager {
137
205
  );
138
206
  else {
139
207
  if (!this.docManager) {
208
+ let cta = 'insertDocument'
209
+ fireEventWithScreenName({
210
+ severityLevel: SeverityLevelValue.LOG,
211
+ eventName: SentryEventNameSdkConstants.APP_LOG,
212
+ screenName: cta,
213
+ cta: cta,
214
+ extraParams: {
215
+ msg:'INIT DOC SYNC AGAIN'
216
+ },
217
+ });
140
218
  Logger.getInstance().logEvent(
141
- 'insertDocument',
219
+ cta,
142
220
  'INIT DOC SYNC AGAIN',
143
- LOG_TYPE.SDK_INFO
221
+ LOG_TYPE.SDK_ERROR
144
222
  );
145
223
  this.docManager = await DocumentManager.getInstance();
146
224
  }
@@ -170,14 +248,77 @@ export default class DocumentSyncManager {
170
248
  await this.startDocumentSync();
171
249
  }
172
250
 
173
- private async updateDocument(documentRow: DocumentRow, fmsID: string) {
251
+ // private async updateDocument(documentRow: DocumentRow, fmsID: string) {
252
+ // if (!this.docManager) this.docManager = await DocumentManager.getInstance();
253
+ // try {
254
+ // await this.docManager.markDocumentSynced(documentRow.id, fmsID);
255
+ // let eventsManager = await ETEventsManager.getInstance();
256
+ // let podId = POD_DOC + '_' + documentRow.id;
257
+ // await eventsManager.markPODDocEventSynced(1, 1, podId);
258
+ // EventsSyncManager.getInstance().startSync();
259
+ // } catch (err: any) {
260
+ // Logger.getInstance().logEvent(
261
+ // 'updateDocument',
262
+ // err.message,
263
+ // LOG_TYPE.SDK_WARNING
264
+ // );
265
+ // }
266
+ // }
267
+
268
+ // This function will update document row with attempt count and sync status
269
+ private async updateDocumentWithAttempt(
270
+ documentRow: DocumentRow,
271
+ fmsID: string,
272
+ attempt: number,
273
+ sync: number
274
+ ) {
174
275
  if (!this.docManager) this.docManager = await DocumentManager.getInstance();
175
276
  try {
176
- await this.docManager.markDocumentSynced(documentRow.id, fmsID);
277
+ // Calling document row update method for attempt count and sync.
278
+ await this.docManager.markDocumentSyncedWithAttempt(
279
+ documentRow.id,
280
+ fmsID,
281
+ attempt,
282
+ sync
283
+ );
284
+ let eventsManager = await ETEventsManager.getInstance();
285
+ let podId = POD_DOC + '_' + documentRow.id;
286
+
287
+ let extraParameters = {
288
+ podId: podId,
289
+ };
290
+ Logger.getInstance().logEvent(
291
+ 'updateDocumentWithAttempt-success',
292
+ flattenObject(extraParameters),
293
+ LOG_TYPE.SDK_ERROR
294
+ );
295
+ // Calling update method for attempt count and sync to update event row of type POD_DOC
296
+ await eventsManager.markPODDocEventSynced(sync, attempt, podId);
297
+ if(sync == 1){
298
+ const lastSyncedEventId = await Storage.getInstance().getSharedItem(
299
+ LAST_SYNCED_EVENT_ID
300
+ );
301
+ const syncEventId = parseInt(lastSyncedEventId) + 1;
302
+ await Storage.getInstance().setSharedItem(
303
+ LAST_SYNCED_EVENT_ID,
304
+ `${syncEventId}`
305
+ );
306
+ }
307
+ EventsSyncManager.getInstance().startSync();
177
308
  } catch (err: any) {
309
+ let cta = 'updateDocumentWithAttempt'
310
+ fireEventWithScreenName({
311
+ severityLevel: SeverityLevelValue.LOG,
312
+ eventName: SentryEventNameSdkConstants.APP_LOG,
313
+ screenName: cta,
314
+ cta: cta,
315
+ extraParams: {
316
+ msg:flattenObject(err)
317
+ },
318
+ });
178
319
  Logger.getInstance().logEvent(
179
- 'updateDocument',
180
- err.message,
320
+ cta,
321
+ flattenObject(err),
181
322
  LOG_TYPE.SDK_WARNING
182
323
  );
183
324
  }
@@ -197,9 +338,19 @@ export default class DocumentSyncManager {
197
338
  processedPath
198
339
  );
199
340
  } catch (err: any) {
341
+ let cta = 'updateDocument-updateDocumentProcessedPath'
342
+ fireEventWithScreenName({
343
+ severityLevel: SeverityLevelValue.ERROR,
344
+ eventName: SentryEventNameSdkConstants.APP_ERROR,
345
+ screenName: cta,
346
+ cta: cta,
347
+ extraParams: {
348
+ msg:flattenObject(err)
349
+ },
350
+ });
200
351
  Logger.getInstance().logEvent(
201
- 'updateDocument',
202
- err.message,
352
+ cta,
353
+ flattenObject(err),
203
354
  LOG_TYPE.SDK_WARNING
204
355
  );
205
356
  }
@@ -210,9 +361,19 @@ export default class DocumentSyncManager {
210
361
  try {
211
362
  await this.docManager.updateDocSyncError(documentRow.id, uploadError);
212
363
  } catch (err: any) {
364
+ let cta = 'updateDocError'
365
+ fireEventWithScreenName({
366
+ severityLevel: SeverityLevelValue.ERROR,
367
+ eventName: SentryEventNameSdkConstants.APP_ERROR,
368
+ screenName: cta,
369
+ cta: cta,
370
+ extraParams: {
371
+ msg:flattenObject(err)
372
+ },
373
+ });
213
374
  Logger.getInstance().logEvent(
214
- 'updateDocError',
215
- err.message,
375
+ cta,
376
+ flattenObject(err),
216
377
  LOG_TYPE.SDK_WARNING
217
378
  );
218
379
  }
@@ -233,6 +394,25 @@ export default class DocumentSyncManager {
233
394
  documentRow.processed_file_path === null ||
234
395
  documentRow.processed_file_path === ''
235
396
  ) {
397
+ let cta = 'processImageData-started';
398
+ let extra = {
399
+ msg: 'processImageData-started',
400
+ fName: documentRow.file_name && documentRow.file_name.length != 0 ? documentRow.file_name.substring(4): '',
401
+ dName: documentRow.fms_folder_id && documentRow.fms_folder_id.length != 0 ? documentRow.fms_folder_id.substring(4): '',
402
+ dispId: documentRow.dispatch_id && documentRow.dispatch_id.length != 0 ? documentRow.dispatch_id.substring(9): ''
403
+ };
404
+ fireEventWithScreenName({
405
+ severityLevel: SeverityLevelValue.LOG,
406
+ eventName: SentryEventNameSdkConstants.APP_LOG,
407
+ screenName: cta,
408
+ cta: cta,
409
+ extraParams: extra,
410
+ });
411
+ Logger.getInstance().logEvent(
412
+ cta,
413
+ flattenObject(extra),
414
+ LOG_TYPE.SDK_ERROR
415
+ );
236
416
  let pFilePath = 'processed_' + documentRow.file_name; // File name for processed file.
237
417
  let strGeoStamp = documentRow.geo_timestamp; // Saved geostamp string
238
418
  let objGeoStamp = JSON.parse(strGeoStamp); // Conversion to geostamp object
@@ -293,6 +473,25 @@ export default class DocumentSyncManager {
293
473
  documentRow.processed_file_path = completeFilePath;
294
474
  }
295
475
  }
476
+ let cta = 'processImageData-completed';
477
+ let extra = {
478
+ msg: 'processImageData-completed',
479
+ fName: documentRow.file_name && documentRow.file_name.length != 0 ? documentRow.file_name.substring(4): '',
480
+ dName: documentRow.fms_folder_id && documentRow.fms_folder_id.length != 0 ? documentRow.fms_folder_id.substring(4): '',
481
+ dispId: documentRow.dispatch_id && documentRow.dispatch_id.length != 0 ? documentRow.dispatch_id.substring(9): ''
482
+ };
483
+ fireEventWithScreenName({
484
+ severityLevel: SeverityLevelValue.LOG,
485
+ eventName: SentryEventNameSdkConstants.APP_LOG,
486
+ screenName: cta,
487
+ cta: cta,
488
+ extraParams: extra,
489
+ });
490
+ Logger.getInstance().logEvent(
491
+ cta,
492
+ flattenObject(extra),
493
+ LOG_TYPE.SDK_ERROR
494
+ );
296
495
  return documentRow;
297
496
  }
298
497
 
@@ -303,6 +502,25 @@ export default class DocumentSyncManager {
303
502
  documentRow.processed_file_path === null ||
304
503
  documentRow.processed_file_path === ''
305
504
  ) {
505
+ let cta = 'processBase64Data-started';
506
+ let extra = {
507
+ msg: 'processBase64Data-started',
508
+ fName: documentRow.file_name && documentRow.file_name.length != 0 ? documentRow.file_name.substring(4): '',
509
+ dName: documentRow.fms_folder_id && documentRow.fms_folder_id.length != 0 ? documentRow.fms_folder_id.substring(4): '',
510
+ dispId: documentRow.dispatch_id && documentRow.dispatch_id.length != 0 ? documentRow.dispatch_id.substring(9): ''
511
+ };
512
+ fireEventWithScreenName({
513
+ severityLevel: SeverityLevelValue.LOG,
514
+ eventName: SentryEventNameSdkConstants.APP_LOG,
515
+ screenName: cta,
516
+ cta: cta,
517
+ extraParams: extra,
518
+ });
519
+ Logger.getInstance().logEvent(
520
+ cta,
521
+ flattenObject(extra),
522
+ LOG_TYPE.SDK_ERROR
523
+ );
306
524
  let filePath = '';
307
525
  // If templrary base 64 file already exist then do not create again
308
526
  if (documentRow.file_path === null || documentRow.file_path === '') {
@@ -372,6 +590,25 @@ export default class DocumentSyncManager {
372
590
  documentRow.processed_file_path = splittedDase64Data[1];
373
591
  }
374
592
  }
593
+ let cta = 'processBase64Data-completed';
594
+ let extra = {
595
+ msg: 'processBase64Data-completed',
596
+ fName: documentRow.file_name && documentRow.file_name.length != 0 ? documentRow.file_name.substring(4): '',
597
+ dName: documentRow.fms_folder_id && documentRow.fms_folder_id.length != 0 ? documentRow.fms_folder_id.substring(4): '',
598
+ dispId: documentRow.dispatch_id && documentRow.dispatch_id.length != 0 ? documentRow.dispatch_id.substring(9): ''
599
+ };
600
+ fireEventWithScreenName({
601
+ severityLevel: SeverityLevelValue.LOG,
602
+ eventName: SentryEventNameSdkConstants.APP_LOG,
603
+ screenName: cta,
604
+ cta: cta,
605
+ extraParams: extra,
606
+ });
607
+ Logger.getInstance().logEvent(
608
+ cta,
609
+ flattenObject(extra),
610
+ LOG_TYPE.SDK_ERROR
611
+ );
375
612
  return documentRow;
376
613
  }
377
614
 
@@ -386,29 +623,84 @@ export default class DocumentSyncManager {
386
623
 
387
624
  private async uploadDocToServer(documentRow: DocumentRow) {
388
625
  try {
389
- let docRow = await this.processPODData(documentRow);
626
+ let docRow = documentRow;
627
+ let cta = 'uploadDocToServer-geoStamp';
628
+ let geoStampAvailable = false
629
+ if(documentRow.geo_timestamp && documentRow.geo_timestamp.length != 0){
630
+ geoStampAvailable = true;
631
+ docRow = await this.processPODData(documentRow);
632
+ }
633
+ let extra = {
634
+ msg: geoStampAvailable ? "geoStamp availale" : 'geoStamp not availale',
635
+ fName: docRow.file_name && docRow.file_name.length != 0 ? docRow.file_name.substring(4): '',
636
+ dName: docRow.fms_folder_id && docRow.fms_folder_id.length != 0 ? docRow.fms_folder_id.substring(4): '',
637
+ dispId: docRow.dispatch_id && docRow.dispatch_id.length != 0 ? docRow.dispatch_id.substring(9): ''
638
+ };
639
+ fireEventWithScreenName({
640
+ severityLevel: SeverityLevelValue.LOG,
641
+ eventName: SentryEventNameSdkConstants.APP_LOG,
642
+ screenName: cta,
643
+ cta: cta,
644
+ extraParams: extra,
645
+ });
646
+ Logger.getInstance().logEvent(
647
+ cta,
648
+ flattenObject(extra),
649
+ LOG_TYPE.SDK_ERROR
650
+ );
390
651
  console.log('uploadDocToServer999:', docRow);
391
- let fmsID = await this.documentHttpClient?.uploadDocument(documentRow);
652
+ let fmsID = await this.documentHttpClient?.uploadDocument(docRow);
392
653
 
393
654
  let extraParameters = {
394
655
  fmsID: fmsID ?? '',
395
- fileName: docRow.file_name,
396
- folderName: docRow.fms_folder_id
656
+ fName: docRow.file_name && docRow.file_name.length != 0 ? docRow.file_name.substring(4): '',
657
+ dName: docRow.fms_folder_id && docRow.fms_folder_id.length != 0 ? docRow.fms_folder_id.substring(4): '',
658
+ dispId: docRow.dispatch_id && docRow.dispatch_id.length != 0 ? docRow.dispatch_id.substring(9): ''
397
659
  };
398
660
  // TODO: SOLELY DEPENDS ON FMS_ID WHICH IS WRONG => IT SHOULD BE Response.status = 202
399
661
  if (fmsID) {
662
+ // Calling function updating document row along with attempt count and sync as true.
663
+ await this.updateDocumentWithAttempt(
664
+ documentRow,
665
+ fmsID,
666
+ this._retries + 1,
667
+ 1
668
+ );
400
669
  this._retries = 0;
401
- await this.updateDocument(docRow, fmsID);
670
+ // await this.updateDocument(docRow, fmsID);
402
671
  } else {
672
+ // Calling function updating document row withalong attempt count and sync as false.
673
+ await this.updateDocumentWithAttempt(
674
+ documentRow,
675
+ '',
676
+ this._retries + 1,
677
+ 0
678
+ );
403
679
  this._retries++;
680
+ let cta = 'uploadDocToServer-empty-fms-id'
681
+ fireEventWithScreenName({
682
+ severityLevel: SeverityLevelValue.LOG,
683
+ eventName: SentryEventNameSdkConstants.APP_LOG,
684
+ screenName: cta,
685
+ cta: cta,
686
+ extraParams: extraParameters,
687
+ });
404
688
  Logger.getInstance().logEvent(
405
- 'uploadDocToServer-empty-fms-id',
689
+ cta,
406
690
  flattenObject(extraParameters),
407
691
  LOG_TYPE.SDK_ERROR
408
692
  );
693
+ this.startSyncAfterMaxRetry(extraParameters, null);
409
694
  await this.updateDocError(docRow, 'Unexpected Error');
410
695
  }
411
696
  } catch (error: any) {
697
+ // Calling function updating document row withalong attempt count and sync as false.
698
+ await this.updateDocumentWithAttempt(
699
+ documentRow,
700
+ '',
701
+ this._retries + 1,
702
+ 0
703
+ );
412
704
  const cta = 'uploadDocToServer-error';
413
705
  fireEventWithScreenName({
414
706
  severityLevel: SeverityLevelValue.ERROR,
@@ -416,15 +708,16 @@ export default class DocumentSyncManager {
416
708
  screenName: cta,
417
709
  cta: cta,
418
710
  extraParams: {
419
- error: error.message,
711
+ error: flattenObject(error),
420
712
  },
421
713
  });
422
- this._retries++;
423
714
  Logger.getInstance().logEvent(
424
- 'uploadDocToServer-sync-error',
425
- error.message,
715
+ cta,
716
+ flattenObject(error),
426
717
  LOG_TYPE.SDK_ERROR
427
718
  );
719
+ this._retries++;
720
+ this.startSyncAfterMaxRetry(null, error);
428
721
  await this.updateDocError(
429
722
  documentRow,
430
723
  JSON.stringify({
@@ -436,6 +729,34 @@ export default class DocumentSyncManager {
436
729
  }
437
730
  }
438
731
 
732
+ private async startSyncAfterMaxRetry(extraParameters:any, error:any){
733
+ if(this.retries >= this.maxRetryCount){
734
+ let cta = 'startSyncAfterMaxRetry-max-retry-reached'
735
+ fireEventWithScreenName({
736
+ severityLevel: SeverityLevelValue.LOG,
737
+ eventName: SentryEventNameSdkConstants.APP_LOG,
738
+ screenName: cta,
739
+ cta: cta,
740
+ extraParams: extraParameters ? extraParameters : error,
741
+ });
742
+ Logger.getInstance().logEvent(
743
+ cta,
744
+ extraParameters ? flattenObject(extraParameters) : error,
745
+ LOG_TYPE.SDK_ERROR
746
+ );
747
+ if (!this.docManager) {
748
+ this.docManager = await DocumentManager.getInstance();
749
+ }
750
+ let documentRows: DocumentRow[] =
751
+ await this.docManager.getUnsyncedDocument();
752
+ if (documentRows?.length > 0) {
753
+ await this.docManager.updateDocPriority(documentRows[0].id, documentRows[0].priority + 1);
754
+ this._retries = 0;
755
+ this.startDocumentSync();
756
+ }
757
+ }
758
+ }
759
+
439
760
  public async getAllDocuments(dispatchID?: string): Promise<DocumentRow[]> {
440
761
  if (!this.docManager) this.docManager = await DocumentManager.getInstance();
441
762
  return this.docManager.getAllDocuments(dispatchID);
@@ -21,7 +21,7 @@ import BaseErrorCodes, {
21
21
  InvalidArgumentsError,
22
22
  } from '../../../errors/ErrorCodes';
23
23
  import Logger, { LOG_TYPE } from '../../../utils/Logger';
24
- import { BULK_DATA_LIMIT } from '../constants';
24
+ import { BULK_DATA_LIMIT, MAX_RETRY_COUNT, PROCESS_MAX_RETRIED_ROWS } from '../constants';
25
25
  import Storage from '../../../utils/storage';
26
26
 
27
27
  // NEW CODE
@@ -33,7 +33,7 @@ const SyncType = IDispatch.SyncType;
33
33
 
34
34
  export default class ETEventsManager {
35
35
  private static instance: ETEventsManager;
36
- private maxRetryCount: number = 3;
36
+ private maxRetryCount: number = MAX_RETRY_COUNT;
37
37
  private _retries = 0;
38
38
 
39
39
  private constructor() {}
@@ -59,11 +59,20 @@ export default class ETEventsManager {
59
59
  ${EVENTS_COLUMNS.DATA_LENGTH} INTEGER DEFAULT 0 NOT NULL,\
60
60
  ${EVENTS_COLUMNS.META} TEXT NOT NULL,\
61
61
  ${EVENTS_COLUMNS.SYNCED} INTEGER DEFAULT 0 NOT NULL,\
62
+ ${EVENTS_COLUMNS.ATTEMPT_COUNT} INTEGER DEFAULT 0 NOT NULL,\
62
63
  ${EVENTS_COLUMNS.SYNC_ERROR} TEXT);`,
63
64
  []
64
65
  );
65
66
  }
66
67
 
68
+ // This is the function to insert POD_DOC type event in event table.
69
+ async insertPODDocEvent(dspID: string, syncType: string): Promise<void> {
70
+ await Database.executeQuery(
71
+ `INSERT INTO ${EVENTS_TABLE}(${EVENTS_COLUMNS.DISPATCH_ID},${EVENTS_COLUMNS.SYNC_TYPE},${EVENTS_COLUMNS.PAYLOAD},${EVENTS_COLUMNS.DATA_LENGTH},${EVENTS_COLUMNS.META},${EVENTS_COLUMNS.SYNCED},${EVENTS_COLUMNS.CONFIG},${EVENTS_COLUMNS.SYNC_ERROR}) values (?,?,?,?,?,?,?,?)`,
72
+ [dspID, syncType, '', 1, '', 0, '', '']
73
+ );
74
+ }
75
+
67
76
  async insertEvent(
68
77
  sequence: number,
69
78
  payload: string,
@@ -570,6 +579,15 @@ export default class ETEventsManager {
570
579
  );
571
580
  }
572
581
 
582
+ // This function will actualy update the POD_DOC type of event as sync along with attempt count.
583
+ async markPODDocEventSynced(sync: number, attempt:number, podDocId: String): Promise<void> {
584
+ if (!podDocId) throw new TypeError('podDocId cannot be null');
585
+ await Database.executeQuery(
586
+ `UPDATE ${EVENTS_TABLE} SET ${EVENTS_COLUMNS.SYNCED} = ?, ${EVENTS_COLUMNS.ATTEMPT_COUNT} = ? WHERE ${EVENTS_COLUMNS.SYNC_TYPE} = ?;`,
587
+ [sync,attempt,podDocId]
588
+ );
589
+ }
590
+
573
591
  async markEventSynced(id: number): Promise<void> {
574
592
  if (!id) throw new TypeError('Event ID cannot be null');
575
593
  await Database.executeQuery(
@@ -629,19 +647,35 @@ export default class ETEventsManager {
629
647
  }
630
648
 
631
649
  async getBulkRowsToSync(id: string, dispatchId: string): Promise<EventRow[]> {
632
- const query = `SELECT * FROM \
633
- (SELECT *, \
634
- (SELECT SUM(${EVENTS_COLUMNS.DATA_LENGTH}) \
635
- FROM ${EVENTS_TABLE} \
636
- WHERE id <= t.id and ${EVENTS_COLUMNS.ID} > ${id} and ${EVENTS_COLUMNS.DISPATCH_ID} \ = '${dispatchId}' and ${EVENTS_COLUMNS.DATA_LENGTH} > 0 \
637
- ) total \
638
- FROM ${EVENTS_TABLE} t \
639
- ) q \
640
- WHERE total <= ${BULK_DATA_LIMIT} \
641
- ORDER BY ${EVENTS_COLUMNS.ID};`;
642
-
643
- const sqlResult = await Database.executeQuery(query, []);
644
-
645
- return sqlResult.rows._array;
650
+ // If it is allowed max_retried_rows are allowed to process then it will refetch those data which are even have tried max attempt otherwise it will skip those events.
651
+ if(PROCESS_MAX_RETRIED_ROWS){
652
+ const query = `SELECT * FROM \
653
+ (SELECT *, \
654
+ (SELECT SUM(${EVENTS_COLUMNS.DATA_LENGTH}) \
655
+ FROM ${EVENTS_TABLE} \
656
+ WHERE id <= t.id and ${EVENTS_COLUMNS.ID} > ${id} and ${EVENTS_COLUMNS.DISPATCH_ID} \ = '${dispatchId}' and ${EVENTS_COLUMNS.DATA_LENGTH} > 0 and ${EVENTS_COLUMNS.SYNCED} = 0 \
657
+ ) total \
658
+ FROM ${EVENTS_TABLE} t \
659
+ ) q \
660
+ WHERE total <= ${BULK_DATA_LIMIT} \
661
+ ORDER BY ${EVENTS_COLUMNS.ID};`;
662
+
663
+ const sqlResult = await Database.executeQuery(query, []);
664
+ return sqlResult.rows._array;
665
+ }else{
666
+ const query = `SELECT * FROM \
667
+ (SELECT *, \
668
+ (SELECT SUM(${EVENTS_COLUMNS.DATA_LENGTH}) \
669
+ FROM ${EVENTS_TABLE} \
670
+ WHERE id <= t.id and ${EVENTS_COLUMNS.ID} > ${id} and ${EVENTS_COLUMNS.DISPATCH_ID} \ = '${dispatchId}' and ${EVENTS_COLUMNS.DATA_LENGTH} > 0 and ${EVENTS_COLUMNS.SYNCED} = 0 and ${EVENTS_COLUMNS.ATTEMPT_COUNT} < ${MAX_RETRY_COUNT} \
671
+ ) total \
672
+ FROM ${EVENTS_TABLE} t \
673
+ ) q \
674
+ WHERE total <= ${BULK_DATA_LIMIT} \
675
+ ORDER BY ${EVENTS_COLUMNS.ID};`;
676
+
677
+ const sqlResult = await Database.executeQuery(query, []);
678
+ return sqlResult.rows._array;
679
+ }
646
680
  }
647
681
  }