mobioffice-cli 0.2.1 → 1.0.1

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 (253) hide show
  1. package/{src/index.ts → lib/index.d.ts} +1 -45
  2. package/lib/models/Feed-Details-Screen.model.d.ts +6 -0
  3. package/lib/models/Feed-Details-Screen.model.js +27 -0
  4. package/lib/models/action.model.d.ts +58 -0
  5. package/lib/models/action.model.js +315 -0
  6. package/lib/models/actions/doffing.d.ts +6 -0
  7. package/lib/models/actions/doffing.js +64 -0
  8. package/lib/models/actions/folding.d.ts +7 -0
  9. package/lib/models/actions/folding.js +37 -0
  10. package/lib/models/attendance.model.d.ts +44 -0
  11. package/lib/models/attendance.model.js +446 -0
  12. package/lib/models/cicoPost.model.d.ts +9 -0
  13. package/lib/models/cicoPost.model.js +19 -0
  14. package/lib/models/company.model.d.ts +67 -0
  15. package/lib/models/company.model.js +725 -0
  16. package/lib/models/contact-us/resquest.model.d.ts +30 -0
  17. package/lib/models/contact-us/resquest.model.js +73 -0
  18. package/lib/models/crud/crud.d.ts +7 -0
  19. package/lib/models/crud/crud.js +27 -0
  20. package/lib/models/customCollection.model.d.ts +9 -0
  21. package/lib/models/customCollection.model.js +40 -0
  22. package/lib/models/customer/customer.model.d.ts +32 -0
  23. package/lib/models/customer/customer.model.js +62 -0
  24. package/lib/models/deviceChangeReq.d.ts +10 -0
  25. package/lib/models/deviceChangeReq.js +138 -0
  26. package/lib/models/dispatch.model.d.ts +14 -0
  27. package/lib/models/dispatch.model.js +93 -0
  28. package/lib/models/feed.models.d.ts +8 -0
  29. package/lib/models/feed.models.js +97 -0
  30. package/lib/models/geofence.model.d.ts +7 -0
  31. package/lib/models/geofence.model.js +61 -0
  32. package/lib/models/leaveApplicationPost.model.d.ts +12 -0
  33. package/lib/models/leaveApplicationPost.model.js +72 -0
  34. package/lib/models/license.model.d.ts +25 -0
  35. package/lib/models/license.model.js +198 -0
  36. package/lib/models/log.model.d.ts +6 -0
  37. package/{src/models/log.model.ts → lib/models/log.model.js} +11 -11
  38. package/lib/models/meeting.model.d.ts +11 -0
  39. package/lib/models/meeting.model.js +79 -0
  40. package/lib/models/meter.model.d.ts +18 -0
  41. package/lib/models/meter.model.js +54 -0
  42. package/lib/models/missingPunchPost.model.d.ts +15 -0
  43. package/lib/models/missingPunchPost.model.js +69 -0
  44. package/lib/models/offline.model.d.ts +70 -0
  45. package/lib/models/offline.model.js +831 -0
  46. package/lib/models/post.model.d.ts +38 -0
  47. package/lib/models/post.model.js +94 -0
  48. package/lib/models/printDetailsScreen.model.d.ts +6 -0
  49. package/lib/models/printDetailsScreen.model.js +27 -0
  50. package/lib/models/pushNotifications/pushNotification.model.d.ts +4 -0
  51. package/lib/models/pushNotifications/pushNotification.model.js +17 -0
  52. package/lib/models/report-actions.model.d.ts +26 -0
  53. package/lib/models/report-actions.model.js +56 -0
  54. package/lib/models/report-definition-details.model.d.ts +13 -0
  55. package/lib/models/report-definition-details.model.js +85 -0
  56. package/lib/models/report-definition.model.d.ts +23 -0
  57. package/lib/models/report-definition.model.js +26 -0
  58. package/lib/models/report-definitions-summary.model.d.ts +8 -0
  59. package/lib/models/report-definitions-summary.model.js +59 -0
  60. package/lib/models/report-detail-data.model.d.ts +46 -0
  61. package/lib/models/report-detail-data.model.js +49 -0
  62. package/lib/models/report-visibility.model.d.ts +7 -0
  63. package/lib/models/report-visibility.model.js +42 -0
  64. package/lib/models/report.model.d.ts +19 -0
  65. package/lib/models/report.model.js +138 -0
  66. package/lib/models/reportGenerator.model.d.ts +164 -0
  67. package/lib/models/reportGenerator.model.js +642 -0
  68. package/lib/models/response.model.d.ts +18 -0
  69. package/lib/models/response.model.js +30 -0
  70. package/lib/models/steps.factory.model.d.ts +172 -0
  71. package/lib/models/steps.factory.model.js +187 -0
  72. package/lib/models/storeGupShupLog.model.d.ts +6 -0
  73. package/lib/models/storeGupShupLog.model.js +51 -0
  74. package/lib/models/summary.model.d.ts +10 -0
  75. package/{src/models/summary.model.ts → lib/models/summary.model.js} +28 -27
  76. package/lib/models/tasks/sub-task-group.model.d.ts +42 -0
  77. package/lib/models/tasks/sub-task-group.model.js +154 -0
  78. package/lib/models/tasks/tags.model.d.ts +29 -0
  79. package/lib/models/tasks/tags.model.js +70 -0
  80. package/lib/models/tasks/task-group.model.d.ts +53 -0
  81. package/lib/models/tasks/task-group.model.js +156 -0
  82. package/lib/models/tasks/task.model.d.ts +163 -0
  83. package/lib/models/tasks/task.model.js +603 -0
  84. package/lib/models/tempCollection.model.d.ts +40 -0
  85. package/{src/models/tempCollection.model.ts → lib/models/tempCollection.model.js} +114 -130
  86. package/lib/models/user.model.d.ts +42 -0
  87. package/lib/models/user.model.js +272 -0
  88. package/lib/models/utility.model.d.ts +13 -0
  89. package/lib/models/utility.model.js +93 -0
  90. package/lib/models/visitorManagement/acknowledgement.model.d.ts +9 -0
  91. package/lib/models/visitorManagement/acknowledgement.model.js +55 -0
  92. package/lib/models/visitorManagement/invite.model.d.ts +32 -0
  93. package/lib/models/visitorManagement/invite.model.js +326 -0
  94. package/lib/models/visitorManagement/newIn.model.d.ts +19 -0
  95. package/lib/models/visitorManagement/newIn.model.js +67 -0
  96. package/lib/models/visitorManagement/selfServe.model.d.ts +13 -0
  97. package/lib/models/visitorManagement/selfServe.model.js +46 -0
  98. package/lib/models/worklogPost.model.d.ts +6 -0
  99. package/lib/models/worklogPost.model.js +9 -0
  100. package/lib/services/customer.d.ts +30 -0
  101. package/lib/services/customer.js +354 -0
  102. package/lib/services/meeting.d.ts +19 -0
  103. package/lib/services/meeting.js +109 -0
  104. package/package.json +4 -1
  105. package/.prettierrc +0 -4
  106. package/a.js +0 -3
  107. package/scripts/1.ts +0 -1300
  108. package/scripts/GCloudPubSub/pub-sub-config.json +0 -12
  109. package/scripts/GCloudPubSub/visitorAutoRejection.ts +0 -86
  110. package/scripts/actions/assignUsersFromOneActionToOther.ts +0 -64
  111. package/scripts/actions/assignUsersListToAction.ts +0 -81
  112. package/scripts/actions/getActionsListOfUser.ts +0 -42
  113. package/scripts/actions/getCompanyUserDetails.ts +0 -49
  114. package/scripts/actions/giveActionToUser.ts +0 -41
  115. package/scripts/actions/giveUsersToActivitySelector.ts +0 -56
  116. package/scripts/actions/groupActionsInActivitySelector.ts +0 -101
  117. package/scripts/actions/modifySummaryReportDB.ts +0 -42
  118. package/scripts/actions/setUrlToActionStep.ts +0 -18
  119. package/scripts/actions/syncMySqlAttendanceDBWithFirebase.ts +0 -93
  120. package/scripts/actions/syncMySqlMeetingsDBWithFirebase.ts +0 -103
  121. package/scripts/actions/test.ts +0 -29
  122. package/scripts/actions/transferFeedsOldIdToNew.ts +0 -40
  123. package/scripts/actions/transformUserIntoManager.ts +0 -89
  124. package/scripts/argvConfig.js +0 -9
  125. package/scripts/backUpData/testCode.ts +0 -131
  126. package/scripts/benaraScripts/addWorkAreaMap.ts +0 -46
  127. package/scripts/benaraScripts/add_customers.ts +0 -26
  128. package/scripts/benaraScripts/add_customers_contact.ts +0 -27
  129. package/scripts/benaraScripts/add_empty_work_area.ts +0 -17
  130. package/scripts/benaraScripts/assignManagers.ts +0 -35
  131. package/scripts/benaraScripts/changeCheckInFlag.ts +0 -45
  132. package/scripts/benaraScripts/createCustomerContactsList.ts +0 -170
  133. package/scripts/benaraScripts/createUserByDeletingOldUser.ts +0 -70
  134. package/scripts/benaraScripts/createUsersAreaMapCollection.ts +0 -23
  135. package/scripts/benaraScripts/createWorkAreaMap.ts +0 -24
  136. package/scripts/benaraScripts/mapWorkAreasToUsers.ts +0 -112
  137. package/scripts/companies_data.json +0 -2496
  138. package/scripts/create_or_update_users.ts +0 -31
  139. package/scripts/csvToJson/csvToJson.ts +0 -90
  140. package/scripts/csvToJson/users.json +0 -3896
  141. package/scripts/db.js +0 -27
  142. package/scripts/db.json +0 -13
  143. package/scripts/dbMySql.ts +0 -63
  144. package/scripts/delete_action_steps.ts +0 -11
  145. package/scripts/delete_user.ts +0 -71
  146. package/scripts/dev_companies_data.json +0 -613
  147. package/scripts/enroll.xlsx +0 -0
  148. package/scripts/export_users.ts +0 -72
  149. package/scripts/files/visitorManagementFiles/displayScreen.json +0 -70
  150. package/scripts/files/visitorManagementFiles/init_report_visibility.ts +0 -79
  151. package/scripts/firebaseConfig.js +0 -12
  152. package/scripts/firebaseDocs/deleteIncommingCollection.ts +0 -47
  153. package/scripts/firebaseDocs/updateDoc.ts +0 -43
  154. package/scripts/getActionDataIntoJSON/getActionData.ts +0 -68
  155. package/scripts/get_attendance_by_any_date.ts +0 -14
  156. package/scripts/get_attendance_by_month.ts +0 -12
  157. package/scripts/get_attendance_monthly_by_team.ts +0 -11
  158. package/scripts/get_daily_report.ts +0 -10
  159. package/scripts/get_mangers.ts +0 -13
  160. package/scripts/grant_user_license.ts +0 -18
  161. package/scripts/init_CustomCollection.ts +0 -16
  162. package/scripts/init_action_steps.ts +0 -28
  163. package/scripts/init_actions.ts +0 -31
  164. package/scripts/init_company.ts +0 -18
  165. package/scripts/init_customer_mysql.ts +0 -12
  166. package/scripts/init_feed.ts +0 -4
  167. package/scripts/init_feed_details_screen.ts +0 -14
  168. package/scripts/init_geofence.ts +0 -26
  169. package/scripts/init_print_details_screen.ts +0 -14
  170. package/scripts/init_report_actions.ts +0 -24
  171. package/scripts/init_report_definition_detail.ts +0 -26
  172. package/scripts/init_report_definition_summary.ts +0 -16
  173. package/scripts/init_report_visibility.ts +0 -46
  174. package/scripts/init_user_customcollection.ts +0 -16
  175. package/scripts/json/action.json +0 -21
  176. package/scripts/json/company.json +0 -24
  177. package/scripts/json/report-action.json +0 -13
  178. package/scripts/json/report-def-deet.json +0 -43
  179. package/scripts/json/resp.json +0 -784
  180. package/scripts/json/steps.json +0 -24
  181. package/scripts/json/test.ts +0 -49
  182. package/scripts/mysqlConfig.ts +0 -9
  183. package/scripts/revoke_or_extend_license.ts +0 -14
  184. package/scripts/stream.js +0 -4
  185. package/scripts/testing1.ts +0 -35
  186. package/scripts/update/doc.json +0 -20
  187. package/scripts/update/getDocByPath.ts +0 -34
  188. package/scripts/update/updateDocByPath.ts +0 -47
  189. package/scripts/update/updateUsersOfCompanies.ts +0 -58
  190. package/scripts/update_actions.ts +0 -19
  191. package/scripts/update_actions_steps.ts +0 -19
  192. package/scripts/update_company.ts +0 -19
  193. package/scripts/update_geofence.ts +0 -20
  194. package/scripts/update_managers.ts +0 -16
  195. package/scripts/visitorMgmt/createArea.ts +0 -68
  196. package/scripts/visitorMgmt/createArea.txt +0 -3
  197. package/scripts/visitorMgmt/createVisitorPathInstructionDocs.ts +0 -130
  198. package/scripts/visitorMgmt/createVisitorPathInstructionDocs.txt +0 -18
  199. package/scripts/visitorMgmt/encryptDateString.ts +0 -71
  200. package/scripts/visitorMgmt/makeHostsManagersOfEachOther.ts +0 -117
  201. package/scripts/whatsapp_gupshup/sendMessage.ts +0 -97
  202. package/src/models/Feed-Details-Screen.model.ts +0 -29
  203. package/src/models/action.model.ts +0 -355
  204. package/src/models/actions/doffing.ts +0 -71
  205. package/src/models/actions/folding.ts +0 -39
  206. package/src/models/attendance.model.ts +0 -615
  207. package/src/models/cicoPost.model.ts +0 -20
  208. package/src/models/company.model.ts +0 -975
  209. package/src/models/contact-us/resquest.model.ts +0 -87
  210. package/src/models/crud/crud.ts +0 -30
  211. package/src/models/customCollection.model.ts +0 -47
  212. package/src/models/customer/customer.model.ts +0 -85
  213. package/src/models/deviceChangeReq.ts +0 -150
  214. package/src/models/dispatch.model.ts +0 -99
  215. package/src/models/feed.models.ts +0 -104
  216. package/src/models/geofence.model.ts +0 -61
  217. package/src/models/leaveApplicationPost.model.ts +0 -79
  218. package/src/models/license.model.ts +0 -215
  219. package/src/models/meeting.model.ts +0 -80
  220. package/src/models/meter.model.ts +0 -62
  221. package/src/models/missingPunchPost.model.ts +0 -84
  222. package/src/models/offline.model.ts +0 -1133
  223. package/src/models/post.model.ts +0 -105
  224. package/src/models/printDetailsScreen.model.ts +0 -30
  225. package/src/models/pushNotifications/pushNotification.model.ts +0 -17
  226. package/src/models/report-actions.model.ts +0 -57
  227. package/src/models/report-definition-details.model.ts +0 -89
  228. package/src/models/report-definition.model.ts +0 -26
  229. package/src/models/report-definitions-summary.model.ts +0 -59
  230. package/src/models/report-detail-data.model.ts +0 -49
  231. package/src/models/report-visibility.model.ts +0 -44
  232. package/src/models/report.model.ts +0 -179
  233. package/src/models/reportGenerator.model.ts +0 -883
  234. package/src/models/response.model.ts +0 -31
  235. package/src/models/steps.factory.model.ts +0 -195
  236. package/src/models/storeGupShupLog.model.ts +0 -49
  237. package/src/models/tasks/sub-task-group.model.ts +0 -173
  238. package/src/models/tasks/tags.model.ts +0 -113
  239. package/src/models/tasks/task-group.model.ts +0 -172
  240. package/src/models/tasks/task.model.ts +0 -681
  241. package/src/models/user.model.ts +0 -319
  242. package/src/models/utility.model.ts +0 -100
  243. package/src/models/visitorManagement/acknowledgement.model.ts +0 -71
  244. package/src/models/visitorManagement/invite.model.ts +0 -406
  245. package/src/models/visitorManagement/newIn.model.ts +0 -82
  246. package/src/models/visitorManagement/selfServe.model.ts +0 -58
  247. package/src/models/worklogPost.model.ts +0 -8
  248. package/src/services/customer.ts +0 -382
  249. package/src/services/meeting.ts +0 -123
  250. package/test/1.ts +0 -13
  251. package/test/db.js +0 -19
  252. package/test/firebaseConfig.js +0 -1
  253. package/tsconfig.json +0 -16
@@ -0,0 +1,831 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.Offline = void 0;
27
+ const missingPunchPost_model_1 = require("./missingPunchPost.model");
28
+ const user_model_1 = require("./user.model");
29
+ const attendance_model_1 = require("./attendance.model");
30
+ const pushNotification_model_1 = require("./pushNotifications/pushNotification.model");
31
+ const cicoPost_model_1 = require("./cicoPost.model");
32
+ const worklogPost_model_1 = require("./worklogPost.model");
33
+ const summary_model_1 = require("./summary.model");
34
+ const post_model_1 = require("./post.model");
35
+ const qr = __importStar(require("qr-image"));
36
+ const action_model_1 = require("./action.model");
37
+ const utility_model_1 = require("./utility.model");
38
+ const company_model_1 = require("./company.model");
39
+ class Offline {
40
+ static async deleteDocFromOfflineLocation(firestore, offlineLocationId) {
41
+ let snapshot = await firestore
42
+ .collection("offline-location")
43
+ .doc(offlineLocationId)
44
+ .collection("location")
45
+ .listDocuments();
46
+ snapshot.forEach((doc) => {
47
+ doc.delete();
48
+ });
49
+ return `${offlineLocationId} deleted successfully`;
50
+ }
51
+ static async OfflineLocationDocsbyDeviceId(firestore, offlineLocationId) {
52
+ let snapshot = await firestore
53
+ .collection("offline-location")
54
+ .doc(offlineLocationId)
55
+ .collection("location")
56
+ .get();
57
+ let listOfDocs = await Promise.all(snapshot.docs.map(async (doc) => {
58
+ return doc.data();
59
+ }));
60
+ return listOfDocs;
61
+ }
62
+ static async mpApprovalOffline(firestore, incomingCollectionDocId, missingPunchInfo, forApprovalText, format) {
63
+ try {
64
+ let missingPunchDoc = new missingPunchPost_model_1.MissingPunch();
65
+ missingPunchDoc = JSON.parse(JSON.stringify(missingPunchDoc));
66
+ await this.setIncomingInfoToMissingPunchPost(missingPunchInfo, missingPunchDoc);
67
+ let updatedDocForFeed = await this.createUpdatedDocForFeed(missingPunchDoc, forApprovalText, format);
68
+ try {
69
+ let userSnapshot = await this.createRefForUser(firestore, missingPunchDoc.companyId, missingPunchDoc.userId);
70
+ await this.sendFeedToManagers(firestore, updatedDocForFeed.companyId, updatedDocForFeed.userId, updatedDocForFeed);
71
+ updatedDocForFeed.id = userSnapshot.id;
72
+ userSnapshot.set(updatedDocForFeed);
73
+ }
74
+ catch (e) {
75
+ console.log("the error in updating the activity in approval is ", e);
76
+ }
77
+ await this.deleteInfoFromIncoming(firestore, incomingCollectionDocId);
78
+ await this.updateFeedsTextForMissingPunch(firestore, forApprovalText, missingPunchDoc, missingPunchDoc.userId);
79
+ const managersList = await this.getUserManagersList(firestore, missingPunchDoc.companyId, missingPunchDoc.userId);
80
+ for (let managerId of managersList) {
81
+ await this.updateFeedsTextForMissingPunch(firestore, forApprovalText, missingPunchDoc, managerId);
82
+ }
83
+ if (forApprovalText == "Approved") {
84
+ console.log("inside Approved");
85
+ if (missingPunchDoc.actionEvent == "1" ||
86
+ missingPunchDoc.actionEvent == "2") {
87
+ const cicoFetch = await firestore
88
+ .collection("Companies")
89
+ .doc(missingPunchDoc.companyId)
90
+ .collection("Actions")
91
+ .where("name", "==", "check_in_out")
92
+ .get();
93
+ const cicoData = cicoFetch.docs.map((doc) => doc.data());
94
+ let docForCico = await this.createDocForCico(cicoData, missingPunchDoc);
95
+ console.log("missing punch ", docForCico);
96
+ await firestore
97
+ .collection("Companies")
98
+ .doc(missingPunchDoc.companyId)
99
+ .collection("Actions")
100
+ .doc(docForCico.actionId)
101
+ .collection(docForCico.actionName)
102
+ .doc(missingPunchDoc["eventId"])
103
+ .set(docForCico);
104
+ await Offline.changingCheckInCheckoutStatus(firestore, missingPunchDoc.actionEvent, missingPunchInfo.extra.startAt, missingPunchDoc.companyId, missingPunchDoc.userId);
105
+ }
106
+ }
107
+ return "success";
108
+ }
109
+ catch (error) {
110
+ console.log(error);
111
+ return error;
112
+ }
113
+ }
114
+ static async changingCheckInCheckoutStatus(firestore, actionEvent, logTime, companyId, userId) {
115
+ let today_date = await attendance_model_1.Attendance.getCurrentdate();
116
+ let doc_date = new Date(logTime).toLocaleDateString();
117
+ if (today_date == doc_date) {
118
+ let check_in_out_status = false;
119
+ if (actionEvent == "1") {
120
+ check_in_out_status = true;
121
+ }
122
+ await firestore
123
+ .collection("Companies")
124
+ .doc(companyId)
125
+ .collection("Users")
126
+ .doc(userId)
127
+ .update({ hasCheckedIn: check_in_out_status });
128
+ }
129
+ return;
130
+ }
131
+ static async updateFeedsTextForMissingPunch(firestore, forApprovalText, missingPunchDoc, userId) {
132
+ let rejectedsnapshot = await firestore
133
+ .collection("Feeds")
134
+ .doc(userId)
135
+ .collection(missingPunchDoc.companyId)
136
+ .where("eventId", "==", missingPunchDoc.eventId)
137
+ .get();
138
+ await Promise.all(rejectedsnapshot.docs.map(async (doc) => {
139
+ doc.ref.update({ forApprovalText: forApprovalText });
140
+ }));
141
+ }
142
+ static async createDocForCico(cicoData, missingPunchDoc) {
143
+ let docForCico = JSON.parse(JSON.stringify(missingPunchDoc));
144
+ docForCico.actionId = cicoData[0]["id"];
145
+ docForCico.actionName = cicoData[0]["name"];
146
+ docForCico.actionType = cicoData[0]["actionType"];
147
+ docForCico.forApproval = null;
148
+ docForCico.forApproval = false;
149
+ docForCico.fromType = "missing punch";
150
+ docForCico.eventId = missingPunchDoc["eventId"];
151
+ if (missingPunchDoc.actionEvent == "2") {
152
+ docForCico.endAt = missingPunchDoc.startAt;
153
+ docForCico.endLat = missingPunchDoc.startLat;
154
+ docForCico.endLong = missingPunchDoc.startLong;
155
+ docForCico.startAt = null;
156
+ docForCico.startLat = null;
157
+ docForCico.startLong = null;
158
+ }
159
+ return docForCico;
160
+ }
161
+ static async getInfoForEduce(firestore, userId, entryOrExitTime, format) {
162
+ console.log(userId);
163
+ var phoneNumber = await user_model_1.User.getUserPhonebyUserId(firestore, userId);
164
+ phoneNumber = phoneNumber.replace("+", "");
165
+ var dateEpoch = new Date(entryOrExitTime);
166
+ var time = new Date(dateEpoch).toLocaleString("en-US", {
167
+ timeZone: "Asia/Kolkata",
168
+ hour12: false,
169
+ });
170
+ var checkInTime = time.split(" ")[1];
171
+ var date = format(dateEpoch, "dd/MM/yy");
172
+ return { checkInTime, date, phoneNumber };
173
+ }
174
+ static async createUpdatedDocForFeed(missingPunchDoc, forApprovalText, format) {
175
+ let updatedDocForFeed = JSON.parse(JSON.stringify(missingPunchDoc));
176
+ updatedDocForFeed["forApproval"] = false;
177
+ updatedDocForFeed["actionName"] = "worklog";
178
+ updatedDocForFeed["description"] = `Your missing punch for ${updatedDocForFeed.actionEvent == "1" ? "Check In" : "Check Out"} on ${format(new Date(updatedDocForFeed.startAt), "dd/MM/yyyy")} is ${forApprovalText}`;
179
+ updatedDocForFeed["actionEvent"] = "";
180
+ return updatedDocForFeed;
181
+ }
182
+ static async createNewPost(firestore, admin, storageRef, postInfo) {
183
+ console.log("inside createnewpost");
184
+ console.log(postInfo.extra.startAt);
185
+ try {
186
+ let post = await this.determineTypeAndCreatePost(postInfo);
187
+ let userRef = await Offline.createRefForUser(firestore, postInfo.companyId, postInfo.userId);
188
+ console.log("created Ref for user");
189
+ post.id = userRef.id;
190
+ if (postInfo.extra.actionName == "mp") {
191
+ console.log(postInfo.extra.startAt);
192
+ await Offline.setIncomingInfoToMissingPunchPost(postInfo, post);
193
+ console.log("____after setiting post");
194
+ console.log(post);
195
+ console.log("info set into missingPunch");
196
+ }
197
+ else if (postInfo.extra.actionName == "check_in_out") {
198
+ await this.setIncomingInfoToPost(postInfo, post);
199
+ const imageUrl = await this.uploadImg(storageRef, postInfo.extra.imgAsBase64, postInfo.extra.actionName, postInfo.extra.createdAt);
200
+ if (imageUrl) {
201
+ post.image = imageUrl;
202
+ }
203
+ console.log("checkInOut post created");
204
+ }
205
+ else if (postInfo.extra.actionName == "summary") {
206
+ const planImageUrl = await this.uploadImg(storageRef, postInfo.extra.extraData.planImage, postInfo.extra.actionName, postInfo.extra.createdAt);
207
+ const groupImageUrl = await this.uploadImg(storageRef, postInfo.extra.extraData.groupImage, postInfo.extra.actionName, postInfo.extra.createdAt + 1);
208
+ const images = {
209
+ planImage: planImageUrl,
210
+ groupImage: groupImageUrl,
211
+ };
212
+ await Offline.setIncomingInfoToSummary(postInfo, post, images);
213
+ post.startAt = "";
214
+ console.log(post);
215
+ console.log("summary post created");
216
+ }
217
+ else if (postInfo.extra.actionName == "worklog") {
218
+ await Offline.setIncomingInfoToPost(postInfo, post);
219
+ console.log("worklog post created");
220
+ }
221
+ else {
222
+ return "undefined actionName";
223
+ }
224
+ const postToSave = JSON.parse(JSON.stringify(post));
225
+ console.log(postToSave.startAt, "------before saving in company");
226
+ let postEventId = await this.addDetailsToCompanyActions(firestore, postInfo.companyId, postInfo.extra.actionId, postToSave, postInfo.actionName);
227
+ postToSave.eventId = postEventId;
228
+ await userRef.set(postToSave);
229
+ console.log("post sent to user feed");
230
+ await this.sendFeedToManagers(firestore, postInfo.companyId, postInfo.userId, postToSave);
231
+ if (postInfo.extra.actionName == "mp") {
232
+ const userName = await Offline.getUserNameFromId(firestore, postInfo.companyId, postInfo.userId);
233
+ const message = {
234
+ notification: {
235
+ title: "Missing Punch Request",
236
+ body: `MP request from ${userName}`,
237
+ },
238
+ };
239
+ await this.sendNotificationsToManagers(firestore, admin, postInfo.companyId, postInfo.userId, message);
240
+ }
241
+ console.log("post sent to managers' feed", postToSave.startAt);
242
+ await this.deleteInfoFromIncoming(firestore, postInfo.id);
243
+ console.log("document deleted from incoming");
244
+ return "Success";
245
+ }
246
+ catch (error) {
247
+ await firestore.collection("Incoming").doc(postInfo.id).update({
248
+ message: "Error",
249
+ errorDetail: error,
250
+ errorId: "err101",
251
+ });
252
+ console.log(error);
253
+ return error;
254
+ }
255
+ }
256
+ static async sendFeedToManagers(firestore, companyId, userId, postToSave) {
257
+ let managersList = await this.getUserManagersList(firestore, companyId, userId);
258
+ for (let manager of managersList) {
259
+ let managerRef = await Offline.createRefForUser(firestore, companyId, manager);
260
+ postToSave.id = managerRef.id;
261
+ managerRef.set(postToSave);
262
+ }
263
+ }
264
+ static async sendNotificationsToManagers(firestore, admin, companyId, userId, message) {
265
+ const managersList = await this.getUserManagersList(firestore, companyId, userId);
266
+ const managersPhoneList = await this.getUsersPhonesListFromIds(firestore, managersList);
267
+ const userName = await this.getUserNameFromId(firestore, companyId, userId);
268
+ if (!userName)
269
+ throw new Error("user not found");
270
+ if (managersPhoneList.length > 0) {
271
+ let fcmTokens = await this.getFCMTokensFromPhonesList(firestore, managersPhoneList);
272
+ if (fcmTokens.length) {
273
+ fcmTokens = fcmTokens.filter((token) => (token ? true : false));
274
+ console.log("sending", message);
275
+ await pushNotification_model_1.PushNotifications.sendPushNotification(admin, fcmTokens, message);
276
+ console.log(fcmTokens);
277
+ }
278
+ else {
279
+ return new Error("FCM Tokens Not Found");
280
+ }
281
+ }
282
+ }
283
+ static async getUserNameFromId(firestore, companyId, userId) {
284
+ const userDoc_snapshot = await firestore
285
+ .collection("Companies")
286
+ .doc(companyId)
287
+ .collection("Users")
288
+ .doc(userId)
289
+ .get();
290
+ if (userDoc_snapshot.exists) {
291
+ return userDoc_snapshot.data().name;
292
+ }
293
+ else {
294
+ return null;
295
+ }
296
+ }
297
+ static async getFCMTokensFromPhonesList(firestore, phoneList) {
298
+ const userDocs = await firestore
299
+ .collection("Users")
300
+ .where("phone", "in", phoneList)
301
+ .get();
302
+ let fcmTokens;
303
+ try {
304
+ fcmTokens = userDocs.docs.map((doc) => {
305
+ if (!doc.data().fcmToken) {
306
+ console.log("fcmToken not found for", doc.data().name);
307
+ }
308
+ return doc.data().fcmToken;
309
+ });
310
+ fcmTokens = fcmTokens.filter((token) => Boolean(token));
311
+ return fcmTokens;
312
+ }
313
+ catch (e) {
314
+ console.log("returned empty array");
315
+ return [];
316
+ }
317
+ }
318
+ static async getUsersPhonesListFromIds(firestore, idsList) {
319
+ const phonesList = [];
320
+ for (let userId of idsList) {
321
+ let phone = await user_model_1.User.getUserPhonebyUserId(firestore, userId);
322
+ phonesList.push(phone);
323
+ }
324
+ return phonesList;
325
+ }
326
+ static async getUserManagersList(firestore, companyId, userId) {
327
+ let usersList_Snapshot = await firestore
328
+ .collection("Companies")
329
+ .doc(companyId)
330
+ .collection("Users")
331
+ .where("id", "==", userId)
332
+ .get();
333
+ let managersList = usersList_Snapshot.docs[0].data().reportingTo;
334
+ managersList = managersList ? managersList : [];
335
+ return managersList;
336
+ }
337
+ static async determineTypeAndCreatePost(postInfo) {
338
+ if (postInfo.extra.actionName == "mp") {
339
+ return new missingPunchPost_model_1.MissingPunch();
340
+ }
341
+ else if (postInfo.extra.actionName == "check_in_out") {
342
+ return new cicoPost_model_1.CheckInCheckOutPost();
343
+ }
344
+ else if (postInfo.extra.actionName == "worklog") {
345
+ return new worklogPost_model_1.WorklogPost();
346
+ }
347
+ else if (postInfo.extra.actionName == "summary") {
348
+ return new summary_model_1.Summary();
349
+ }
350
+ else {
351
+ return new post_model_1.Post();
352
+ }
353
+ }
354
+ static async addDetailsToCompanyActions(firestore, companyId, actionId, doc, actionName) {
355
+ let snapshot = await firestore
356
+ .collection("Companies")
357
+ .doc(companyId)
358
+ .collection("Actions")
359
+ .doc(actionId)
360
+ .collection(actionName)
361
+ .doc();
362
+ doc.eventId = snapshot.id;
363
+ await snapshot.set(doc);
364
+ return snapshot.id;
365
+ }
366
+ static async deleteInfoFromIncoming(firestore, docId) {
367
+ await firestore.collection("Incoming").doc(docId).delete();
368
+ }
369
+ static async setIncomingInfoToMissingPunchPost(info, post) {
370
+ post.actionEvent = info.extra.actionEvent;
371
+ post.actionId = info.extra.actionId;
372
+ post.actionName = info.extra.actionName;
373
+ post.actionType = info.extra.actionType;
374
+ post.companyId = info.extra.companyId;
375
+ post.createdAt = info.extra.createdAt;
376
+ post.description = `Missing punch for ${info.extra.extraData.eventTypeId == "1" ? "Check In" : "Check Out"} at ${await utility_model_1.Utilities.getTimeFromEpoch(info.extra.startAt)} on ${info.extra.extraData.date} has been filed.`;
377
+ post.eventId = info.extra.eventId;
378
+ post.isGeofence = info.extra.isGeofence;
379
+ post.userId = info.userId;
380
+ const newExtraData = await this.modifyExtraDataForMp(info);
381
+ post.extraData = newExtraData;
382
+ post.forApproval = info.extra.forApproval;
383
+ post.forApprovalText = info.extra.forApprovalText;
384
+ post.object = info.extra.startAt ?? "object";
385
+ post.seen = info.extra.seen;
386
+ post.startAt = info.extra.startAt;
387
+ post.startLat = info.extra.startLat;
388
+ post.startLong = info.extra.startLong;
389
+ post.endAt = "";
390
+ post.endLat = "";
391
+ post.endLong = "";
392
+ post.stepValues = info.extra.stepValues;
393
+ post.target = info.target || "";
394
+ post.time = info.extra.time;
395
+ post.checkInternet = info.extra.checkInternet;
396
+ post.missedEvent = info.missedEvent;
397
+ return post;
398
+ }
399
+ static async modifyExtraDataForMp(info) {
400
+ const time = info.extra.startAt;
401
+ const date = info.extra.extraData.date;
402
+ const newExtraData = {
403
+ ...info.extra.extraData,
404
+ eventType: info.extra.extraData.eventTypeId == "1" ? "Check In" : "Check Out",
405
+ date: date,
406
+ time: time,
407
+ };
408
+ return newExtraData;
409
+ }
410
+ static async setIncomingInfoToWorkLogPost(info, post) {
411
+ post.actionEvent = info.extra.actionEvent;
412
+ post.actionId = info.extra.actionId;
413
+ post.companyId = info.extra.companyId;
414
+ post.createdAt = info.extra.createdAt;
415
+ post.description = info.extra.extraData.description;
416
+ post.eventId = info.extra.eventId;
417
+ post.isGeofence = info.extra.isGeofence;
418
+ post.userId = info.userId;
419
+ const newExtraData = await this.modifyExtraDataForWorkLog(info);
420
+ post.extraData = newExtraData;
421
+ post.object = info.extra.startAt ?? "object";
422
+ post.origin = `${info.userId}--${info.companyId}--${info.actionName}`;
423
+ post.seen = info.extra.seen;
424
+ post.startAt = info.extra.startAt;
425
+ post.startLat = info.extra.startLat;
426
+ post.startLong = info.extra.startLong;
427
+ post.endAt = info.extra.endAt;
428
+ post.endLat = info.extra.endLat;
429
+ post.endLong = info.extra.endLong;
430
+ post.stepValues = info.extra.stepValues;
431
+ post.target = info.target || "";
432
+ post.time = info.extra.time;
433
+ post.checkInternet = info.extra.checkInternet;
434
+ return post;
435
+ }
436
+ static async modifyExtraDataForWorkLog(info) {
437
+ const time = info.extra.startAt;
438
+ const date = new Date(info.extra.startAt).toLocaleDateString("en-GB");
439
+ const newExtraData = {
440
+ ...info.extra.extraData,
441
+ description: info.extra.extraData.description,
442
+ date: date,
443
+ time: time,
444
+ };
445
+ return newExtraData;
446
+ }
447
+ static async setIncomingInfoToPost(info, post) {
448
+ post.actionEvent = info.extra.actionEvent;
449
+ post.actionId = info.extra.actionId;
450
+ post.companyId = info.extra.companyId;
451
+ post.createdAt = info.extra.createdAt;
452
+ post.description = info.extra.description;
453
+ post.eventId = info.extra.eventId;
454
+ post.isGeofence = info.extra.isGeofence;
455
+ post.userId = info.userId;
456
+ post.extraData = info.extra.extraData;
457
+ post.object = info.extra.startAt ?? "object";
458
+ post.origin = `${info.userId}--${info.companyId}--${info.actionName}`;
459
+ post.seen = info.extra.seen;
460
+ post.startAt = info.extra.startAt;
461
+ post.startLat = info.extra.startLat;
462
+ post.startLong = info.extra.startLong;
463
+ post.endAt = info.extra.endAt;
464
+ post.endLat = info.extra.endLat;
465
+ post.endLong = info.extra.endLong;
466
+ post.stepValues = info.extra.stepValues;
467
+ post.target = info.target || "";
468
+ post.time = info.extra.time;
469
+ post.checkInternet = info.extra.checkInternet;
470
+ return post;
471
+ }
472
+ static async setIncomingInfoToSummary(info, post, images) {
473
+ post.actionEvent = info.extra.actionEvent;
474
+ post.actionId = info.extra.actionId;
475
+ post.companyId = info.extra.companyId;
476
+ post.createdAt = info.extra.createdAt;
477
+ post.description = info.extra.description;
478
+ post.eventId = info.extra.eventId;
479
+ post.isGeofence = info.extra.isGeofence;
480
+ post.userId = info.userId;
481
+ let extraData = await this.restructureExtraData(info.extra.extraData, images);
482
+ extraData = { ...extraData, description: info.extra.description };
483
+ post.extraData = extraData;
484
+ post.object = info.extra.startAt ?? "object";
485
+ post.origin = `${info.userId}--${info.companyId}--${info.actionName}`;
486
+ post.seen = info.extra.seen;
487
+ post.startAt = info.extra.startAt;
488
+ post.startLat = info.extra.startLat;
489
+ post.startLong = info.extra.startLong;
490
+ post.endAt = info.extra.endAt;
491
+ post.endLat = info.extra.endLat;
492
+ post.endLong = info.extra.endLong;
493
+ post.stepValues = info.extra.stepValues;
494
+ post.target = info.target || "";
495
+ post.time = info.extra.time;
496
+ post.checkInternet = info.extra.checkInternet;
497
+ return post;
498
+ }
499
+ static async restructureExtraData(extraData, images) {
500
+ let newExtraData = { ...extraData };
501
+ newExtraData.startTime =
502
+ extraData.startTime["_seconds"] * 1000 +
503
+ parseInt((extraData.startTime["_nanoseconds"] / 1000000).toString());
504
+ newExtraData.endTime =
505
+ extraData.endTime["_seconds"] * 1000 +
506
+ parseInt((extraData.endTime["_nanoseconds"] / 1000000).toString());
507
+ let level = extraData.level;
508
+ newExtraData.level = level;
509
+ let groundName = extraData.ground;
510
+ newExtraData.ground = groundName;
511
+ newExtraData.planImage = images.planImage;
512
+ newExtraData.groupImage = images.groupImage;
513
+ delete newExtraData.planImageArray;
514
+ delete newExtraData.groupImageArray;
515
+ return newExtraData;
516
+ }
517
+ static createRefForUser(firestore, companyId, userId) {
518
+ let snapshot = firestore
519
+ .collection("Feeds")
520
+ .doc(userId)
521
+ .collection(companyId)
522
+ .doc();
523
+ return snapshot;
524
+ }
525
+ static async uploadImg(storageRef, imgAsBase64, actionName, createdAt) {
526
+ console.log("imgAsBase64");
527
+ let imageBuffer = Buffer.from(imgAsBase64, "base64");
528
+ let file = await storageRef.file(`${actionName}/${createdAt}`);
529
+ await file.save(imageBuffer, {
530
+ metadata: { contentType: "image/jpeg" },
531
+ }, () => {
532
+ return "Unable to upload the image.";
533
+ });
534
+ let options = {
535
+ action: "read",
536
+ expires: "03-17-2025",
537
+ };
538
+ const url = await file.getSignedUrl(options);
539
+ return url[0];
540
+ }
541
+ // static async updateImage(
542
+ // firestore: admin.firestore.Firestore,
543
+ // idOfIncomingCollection: string,
544
+ // eventId: string,
545
+ // imgURL: any,
546
+ // event: string,
547
+ // companyId: string,
548
+ // actionId: string,
549
+ // userId: string,
550
+ // actionName: string
551
+ // ) {
552
+ // let modelFetchingSnap = await firestore
553
+ // .collection(`Feeds/${userId}/${companyId}`)
554
+ // .where("eventId", "==", eventId)
555
+ // .get();
556
+ // const modelData = modelFetchingSnap.docs.map((doc) => doc.data());
557
+ // var modelForImageUpdate = modelData[0];
558
+ // var activityTime = new Date(modelForImageUpdate["startAt"]);
559
+ // var streamId = `${modelForImageUpdate["userId"]}--${modelForImageUpdate["companyId"]}`;
560
+ // var activity = {
561
+ // actor: streamId,
562
+ // verb: modelForImageUpdate["actionName"],
563
+ // object:
564
+ // modelForImageUpdate["startAt"] ??
565
+ // modelForImageUpdate["endAt"] ??
566
+ // "object",
567
+ // time: activityTime,
568
+ // foreign_id: modelForImageUpdate["eventId"],
569
+ // };
570
+ // if (event == "IN") {
571
+ // modelForImageUpdate["userUploadedImage"] = imgURL;
572
+ // } else if (event == "OUT") {
573
+ // modelForImageUpdate["userUploadedEndImage"] = imgURL;
574
+ // }
575
+ // var mainActivity: any = {
576
+ // ...activity,
577
+ // ...modelForImageUpdate,
578
+ // };
579
+ // if (event == "IN") {
580
+ // await firestore
581
+ // .doc(
582
+ // `Feeds/${modelForImageUpdate["userId"]}/${modelForImageUpdate["companyId"]}/${modelForImageUpdate["streamActivityId"]}`
583
+ // )
584
+ // .update({ userUploadedImage: imgURL });
585
+ // } else if (event == "OUT") {
586
+ // await firestore
587
+ // .doc(
588
+ // `Feeds/${modelForImageUpdate["userId"]}/${modelForImageUpdate["companyId"]}/${modelForImageUpdate["streamActivityId"]}`
589
+ // )
590
+ // .update({ userUploadedEndImage: imgURL });
591
+ // }
592
+ // console.log("After updating feeds collection I am here");
593
+ // console.log("After Updating Activity");
594
+ // await firestore.doc(`Incoming/${idOfIncomingCollection}`).delete();
595
+ // console.log("After Everything");
596
+ // return;
597
+ // }
598
+ static async refreshFeeds(firestore, companyId, userId) {
599
+ await this.deleteUpdateDocsOfUser(firestore, userId);
600
+ await this.updateLeftDocsInIncoming(firestore, userId, companyId);
601
+ }
602
+ static async deleteUpdateDocsOfUser(firestore, userId) {
603
+ const updateDoc = await firestore
604
+ .collection("Incoming")
605
+ .where("userId", "==", userId)
606
+ .where("type", "==", "update")
607
+ .get();
608
+ if (updateDoc.empty) {
609
+ console.log("No update Docs");
610
+ return "No update Docs";
611
+ }
612
+ updateDoc.forEach(async (doc) => {
613
+ await doc.ref.delete();
614
+ });
615
+ }
616
+ static async updateLeftDocsInIncoming(firestore, userId, companyId) {
617
+ const userDocsInIncoming = await firestore
618
+ .collection("Incoming")
619
+ .where("userId", "==", userId)
620
+ .where("companyId", "==", companyId)
621
+ .get();
622
+ if (userDocsInIncoming.empty) {
623
+ console.log("No docs to update");
624
+ return "No docs to update";
625
+ }
626
+ userDocsInIncoming.forEach((doc) => {
627
+ let time = new Date().getTime();
628
+ doc.ref.update({ updatedAt: time });
629
+ });
630
+ }
631
+ static async updateFeeds(firestore, companyId, userId, incomingId) {
632
+ let listOfActivities_snapshot = await firestore
633
+ .collection("Feeds")
634
+ .doc(userId)
635
+ .collection(companyId)
636
+ .limit(20)
637
+ .get();
638
+ let listOfActivities = listOfActivities_snapshot.docs.map((doc) => doc);
639
+ for (let activity of listOfActivities) {
640
+ activity["actor"] = null;
641
+ activity["verb"] = null;
642
+ activity["foreign_id"] = null;
643
+ if (activity["streamActivityId"] == null) {
644
+ activity["streamActivityId"] = activity["id"];
645
+ }
646
+ let cleanModel = new Object();
647
+ for (var key of Object.keys(activity)) {
648
+ if (activity[key] != null) {
649
+ cleanModel[key] = activity[key];
650
+ }
651
+ }
652
+ let docSnap = await firestore
653
+ .collection(`Feeds/${userId}/${companyId}`)
654
+ .where("id", "==", activity["id"])
655
+ .get();
656
+ if (docSnap.docs.length != 0) {
657
+ await firestore
658
+ .doc(`Feeds/${userId}/${companyId}/${activity["id"]}`)
659
+ .update(cleanModel);
660
+ }
661
+ else {
662
+ await firestore
663
+ .doc(`Feeds/${userId}/${companyId}/${activity["id"]}`)
664
+ .set(cleanModel);
665
+ }
666
+ }
667
+ await firestore.doc(`Incoming/${incomingId}`).delete();
668
+ console.log("Feeds Collection Is Synced With Get Stream...");
669
+ }
670
+ static async clearUserdetails(firestore, companyId, userId, id) {
671
+ await firestore
672
+ .collection(`Feeds/${userId}/${companyId}`)
673
+ .listDocuments()
674
+ .then((val) => {
675
+ val.map((doc) => {
676
+ doc.delete();
677
+ });
678
+ });
679
+ await firestore.collection("Users").doc(userId).delete();
680
+ await firestore.collection("Incoming").doc(id).delete();
681
+ return { message: "Successfully deleted" };
682
+ }
683
+ static async punchInErp(firestore, companyId) {
684
+ console.log(companyId);
685
+ let e10x_support = false;
686
+ let company_snapshot = await firestore
687
+ .collection("Companies")
688
+ .where("id", "==", companyId)
689
+ .get();
690
+ let companyApi = "";
691
+ company_snapshot.forEach((doc) => {
692
+ e10x_support = doc.data().e10xSupport;
693
+ if (e10x_support) {
694
+ companyApi = doc.data()["endpoints"]["punching-api"];
695
+ }
696
+ });
697
+ console.log(companyApi);
698
+ return { e10x_support: e10x_support, companyApi: companyApi };
699
+ }
700
+ static async fetchUrlFromFirebase(firestore, nickName, endpointName) {
701
+ let company_snapshot = await firestore
702
+ .collection("Companies")
703
+ .where("nickname", "==", nickName)
704
+ .get();
705
+ let companyApi = "";
706
+ let firmId = "";
707
+ let firmName = "";
708
+ company_snapshot.forEach((doc) => {
709
+ companyApi = doc.data()["endpoints"][endpointName];
710
+ firmId = doc.data()["apiId"];
711
+ firmName = doc.data()["apiName"];
712
+ });
713
+ return { companyApi: companyApi, firmId: firmId, firmName: firmName };
714
+ }
715
+ static async generateQRCodeString(qrCodeString) {
716
+ var pngString = await qr.imageSync(qrCodeString, { type: "png" });
717
+ return pngString;
718
+ }
719
+ static async deleteImageFromStorage(storageRef, filePath) {
720
+ await storageRef.file(filePath).delete();
721
+ console.log("after");
722
+ }
723
+ static async updateCompanyActionDoc(firestore, companyId, actionName, eventId, updatedDoc) {
724
+ const actionId = await action_model_1.Action.getActionId(firestore, companyId, actionName);
725
+ const docArr = await firestore
726
+ .collection("Companies")
727
+ .doc(companyId)
728
+ .collection("Actions")
729
+ .doc(actionId)
730
+ .collection(actionName)
731
+ .where("eventId", "==", eventId)
732
+ .get();
733
+ docArr.docs.map((doc) => doc.ref.update(updatedDoc));
734
+ }
735
+ static async updateCompanyActionDocByEnrollId(firestore, companyId, actionName, enrollId, updatedDoc) {
736
+ const actionId = await action_model_1.Action.getActionId(firestore, companyId, actionName);
737
+ const docArr = await firestore
738
+ .collection("Companies")
739
+ .doc(companyId)
740
+ .collection("Actions")
741
+ .doc(actionId)
742
+ .collection(actionName)
743
+ .where("refId", "==", enrollId)
744
+ .get();
745
+ docArr.docs.map((doc) => doc.ref.update(updatedDoc));
746
+ }
747
+ static async updateRelatedFeeds(firestore, companyId, userId, eventId, updateObj) {
748
+ const managersList = await Offline.getUserManagersList(firestore, companyId, userId);
749
+ const feedUpdationTargets = [...managersList, userId];
750
+ console.log("feedUpdation targets", feedUpdationTargets);
751
+ for (let userId of feedUpdationTargets) {
752
+ console.log("userId", userId);
753
+ await this.updateUserFeed(firestore, companyId, userId, eventId, updateObj);
754
+ }
755
+ }
756
+ static async updateUserFeed(firestore, companyId, userId, eventId, updateObj) {
757
+ const targetDocsSnapshot = await firestore
758
+ .collection("Feeds")
759
+ .doc(userId)
760
+ .collection(companyId)
761
+ .where("eventId", "==", eventId)
762
+ .get();
763
+ await Promise.all(targetDocsSnapshot.docs.map((doc) => doc.ref.update(updateObj)));
764
+ }
765
+ static async createSummaryReports(firestore, connection) {
766
+ try {
767
+ console.log("Creating Summary");
768
+ const nickName = "uset";
769
+ const companyId = await company_model_1.Company.getCompanyIdByNickName(firestore, nickName);
770
+ const actionName = "summary";
771
+ const actionId = await action_model_1.Action.getActionId(firestore, companyId, actionName);
772
+ let i = 0;
773
+ const reportObjects = await firestore
774
+ .collection("Companies")
775
+ .doc(companyId)
776
+ .collection("Actions")
777
+ .doc(actionId)
778
+ .collection(actionName)
779
+ .get();
780
+ reportObjects.docs.map(async (doc) => {
781
+ i++;
782
+ console.log(doc.data().eventId, i);
783
+ });
784
+ }
785
+ catch (error) {
786
+ throw new Error(error.message);
787
+ }
788
+ }
789
+ static getEpochTimeFromTimeObj(timeObj) {
790
+ return timeObj._seconds * 1000 + Math.floor(timeObj._nanoseconds / 1000000);
791
+ }
792
+ static async enrollOrUpdateNewFace(firestore, faceInfo, companyId) {
793
+ try {
794
+ const faceInfoRef = await firestore
795
+ .collection("Companies")
796
+ .doc(companyId)
797
+ .collection("Enroll")
798
+ .doc(faceInfo.id)
799
+ .get();
800
+ if (faceInfoRef.exists == false) {
801
+ await faceInfoRef.ref.set(faceInfo);
802
+ console.log("FaceInfo update in company database");
803
+ }
804
+ }
805
+ catch (error) {
806
+ console.log(error.message);
807
+ throw {
808
+ message: "Error while adding new face",
809
+ };
810
+ }
811
+ }
812
+ static async enrollOrUpdateNewFaceForWorkers(firestore, faceInfo, companyId) {
813
+ try {
814
+ const faceInfoRef = await firestore
815
+ .collection("Companies")
816
+ .doc(companyId)
817
+ .collection("Workers")
818
+ .doc(faceInfo.id)
819
+ .get();
820
+ await faceInfoRef.ref.set(faceInfo);
821
+ console.log("FaceInfo update in company database");
822
+ }
823
+ catch (error) {
824
+ console.log(error.message);
825
+ throw {
826
+ message: "Error while adding new face",
827
+ };
828
+ }
829
+ }
830
+ }
831
+ exports.Offline = Offline;