mobioffice-cli 0.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 (156) hide show
  1. package/.prettierrc +4 -0
  2. package/README.md +1 -0
  3. package/a.js +3 -0
  4. package/lib/index.js +87 -0
  5. package/package.json +50 -0
  6. package/scripts/1.ts +1300 -0
  7. package/scripts/GCloudPubSub/pub-sub-config.json +12 -0
  8. package/scripts/GCloudPubSub/visitorAutoRejection.ts +86 -0
  9. package/scripts/actions/assignUsersFromOneActionToOther.ts +64 -0
  10. package/scripts/actions/assignUsersListToAction.ts +81 -0
  11. package/scripts/actions/getActionsListOfUser.ts +42 -0
  12. package/scripts/actions/getCompanyUserDetails.ts +49 -0
  13. package/scripts/actions/giveActionToUser.ts +41 -0
  14. package/scripts/actions/giveUsersToActivitySelector.ts +56 -0
  15. package/scripts/actions/groupActionsInActivitySelector.ts +101 -0
  16. package/scripts/actions/modifySummaryReportDB.ts +42 -0
  17. package/scripts/actions/setUrlToActionStep.ts +18 -0
  18. package/scripts/actions/syncMySqlAttendanceDBWithFirebase.ts +93 -0
  19. package/scripts/actions/syncMySqlMeetingsDBWithFirebase.ts +103 -0
  20. package/scripts/actions/test.ts +29 -0
  21. package/scripts/actions/transferFeedsOldIdToNew.ts +40 -0
  22. package/scripts/actions/transformUserIntoManager.ts +89 -0
  23. package/scripts/argvConfig.js +9 -0
  24. package/scripts/backUpData/testCode.ts +131 -0
  25. package/scripts/benaraScripts/addWorkAreaMap.ts +46 -0
  26. package/scripts/benaraScripts/add_customers.ts +26 -0
  27. package/scripts/benaraScripts/add_customers_contact.ts +27 -0
  28. package/scripts/benaraScripts/add_empty_work_area.ts +17 -0
  29. package/scripts/benaraScripts/assignManagers.ts +35 -0
  30. package/scripts/benaraScripts/changeCheckInFlag.ts +45 -0
  31. package/scripts/benaraScripts/createCustomerContactsList.ts +170 -0
  32. package/scripts/benaraScripts/createUserByDeletingOldUser.ts +70 -0
  33. package/scripts/benaraScripts/createUsersAreaMapCollection.ts +23 -0
  34. package/scripts/benaraScripts/createWorkAreaMap.ts +24 -0
  35. package/scripts/benaraScripts/mapWorkAreasToUsers.ts +112 -0
  36. package/scripts/companies_data.json +2496 -0
  37. package/scripts/create_or_update_users.ts +31 -0
  38. package/scripts/csvToJson/csvToJson.ts +90 -0
  39. package/scripts/csvToJson/users.json +3896 -0
  40. package/scripts/db.js +27 -0
  41. package/scripts/db.json +13 -0
  42. package/scripts/dbMySql.ts +63 -0
  43. package/scripts/delete_action_steps.ts +11 -0
  44. package/scripts/delete_user.ts +71 -0
  45. package/scripts/dev_companies_data.json +613 -0
  46. package/scripts/enroll.xlsx +0 -0
  47. package/scripts/export_users.ts +72 -0
  48. package/scripts/files/visitorManagementFiles/displayScreen.json +70 -0
  49. package/scripts/files/visitorManagementFiles/init_report_visibility.ts +79 -0
  50. package/scripts/firebaseConfig.js +12 -0
  51. package/scripts/firebaseDocs/deleteIncommingCollection.ts +47 -0
  52. package/scripts/firebaseDocs/updateDoc.ts +43 -0
  53. package/scripts/getActionDataIntoJSON/getActionData.ts +68 -0
  54. package/scripts/get_attendance_by_any_date.ts +14 -0
  55. package/scripts/get_attendance_by_month.ts +12 -0
  56. package/scripts/get_attendance_monthly_by_team.ts +11 -0
  57. package/scripts/get_daily_report.ts +10 -0
  58. package/scripts/get_mangers.ts +13 -0
  59. package/scripts/grant_user_license.ts +18 -0
  60. package/scripts/init_CustomCollection.ts +16 -0
  61. package/scripts/init_action_steps.ts +28 -0
  62. package/scripts/init_actions.ts +31 -0
  63. package/scripts/init_company.ts +18 -0
  64. package/scripts/init_customer_mysql.ts +12 -0
  65. package/scripts/init_feed.ts +4 -0
  66. package/scripts/init_feed_details_screen.ts +14 -0
  67. package/scripts/init_geofence.ts +26 -0
  68. package/scripts/init_print_details_screen.ts +14 -0
  69. package/scripts/init_report_actions.ts +24 -0
  70. package/scripts/init_report_definition_detail.ts +26 -0
  71. package/scripts/init_report_definition_summary.ts +16 -0
  72. package/scripts/init_report_visibility.ts +46 -0
  73. package/scripts/init_user_customcollection.ts +16 -0
  74. package/scripts/json/action.json +21 -0
  75. package/scripts/json/company.json +24 -0
  76. package/scripts/json/report-action.json +13 -0
  77. package/scripts/json/report-def-deet.json +43 -0
  78. package/scripts/json/resp.json +784 -0
  79. package/scripts/json/steps.json +24 -0
  80. package/scripts/json/test.ts +49 -0
  81. package/scripts/mysqlConfig.ts +9 -0
  82. package/scripts/revoke_or_extend_license.ts +14 -0
  83. package/scripts/stream.js +4 -0
  84. package/scripts/testing1.ts +35 -0
  85. package/scripts/update/doc.json +20 -0
  86. package/scripts/update/getDocByPath.ts +34 -0
  87. package/scripts/update/updateDocByPath.ts +47 -0
  88. package/scripts/update/updateUsersOfCompanies.ts +58 -0
  89. package/scripts/update_actions.ts +19 -0
  90. package/scripts/update_actions_steps.ts +19 -0
  91. package/scripts/update_company.ts +19 -0
  92. package/scripts/update_geofence.ts +20 -0
  93. package/scripts/update_managers.ts +16 -0
  94. package/scripts/visitorMgmt/createArea.ts +68 -0
  95. package/scripts/visitorMgmt/createArea.txt +3 -0
  96. package/scripts/visitorMgmt/createVisitorPathInstructionDocs.ts +130 -0
  97. package/scripts/visitorMgmt/createVisitorPathInstructionDocs.txt +18 -0
  98. package/scripts/visitorMgmt/encryptDateString.ts +71 -0
  99. package/scripts/visitorMgmt/makeHostsManagersOfEachOther.ts +117 -0
  100. package/scripts/whatsapp_gupshup/sendMessage.ts +97 -0
  101. package/src/index.ts +87 -0
  102. package/src/models/Feed-Details-Screen.model.ts +29 -0
  103. package/src/models/action.model.ts +355 -0
  104. package/src/models/actions/doffing.ts +71 -0
  105. package/src/models/actions/folding.ts +39 -0
  106. package/src/models/attendance.model.ts +615 -0
  107. package/src/models/cicoPost.model.ts +20 -0
  108. package/src/models/company.model.ts +975 -0
  109. package/src/models/contact-us/resquest.model.ts +87 -0
  110. package/src/models/crud/crud.ts +30 -0
  111. package/src/models/customCollection.model.ts +47 -0
  112. package/src/models/customer/customer.model.ts +85 -0
  113. package/src/models/deviceChangeReq.ts +150 -0
  114. package/src/models/dispatch.model.ts +99 -0
  115. package/src/models/feed.models.ts +104 -0
  116. package/src/models/geofence.model.ts +61 -0
  117. package/src/models/leaveApplicationPost.model.ts +79 -0
  118. package/src/models/license.model.ts +215 -0
  119. package/src/models/log.model.ts +25 -0
  120. package/src/models/meeting.model.ts +80 -0
  121. package/src/models/meter.model.ts +62 -0
  122. package/src/models/missingPunchPost.model.ts +84 -0
  123. package/src/models/offline.model.ts +1133 -0
  124. package/src/models/post.model.ts +105 -0
  125. package/src/models/printDetailsScreen.model.ts +30 -0
  126. package/src/models/pushNotifications/pushNotification.model.ts +17 -0
  127. package/src/models/report-actions.model.ts +57 -0
  128. package/src/models/report-definition-details.model.ts +89 -0
  129. package/src/models/report-definition.model.ts +26 -0
  130. package/src/models/report-definitions-summary.model.ts +59 -0
  131. package/src/models/report-detail-data.model.ts +49 -0
  132. package/src/models/report-visibility.model.ts +44 -0
  133. package/src/models/report.model.ts +179 -0
  134. package/src/models/reportGenerator.model.ts +883 -0
  135. package/src/models/response.model.ts +31 -0
  136. package/src/models/steps.factory.model.ts +195 -0
  137. package/src/models/storeGupShupLog.model.ts +49 -0
  138. package/src/models/summary.model.ts +63 -0
  139. package/src/models/tasks/sub-task-group.model.ts +173 -0
  140. package/src/models/tasks/tags.model.ts +113 -0
  141. package/src/models/tasks/task-group.model.ts +172 -0
  142. package/src/models/tasks/task.model.ts +681 -0
  143. package/src/models/tempCollection.model.ts +398 -0
  144. package/src/models/user.model.ts +319 -0
  145. package/src/models/utility.model.ts +100 -0
  146. package/src/models/visitorManagement/acknowledgement.model.ts +71 -0
  147. package/src/models/visitorManagement/invite.model.ts +406 -0
  148. package/src/models/visitorManagement/newIn.model.ts +82 -0
  149. package/src/models/visitorManagement/selfServe.model.ts +58 -0
  150. package/src/models/worklogPost.model.ts +8 -0
  151. package/src/services/customer.ts +382 -0
  152. package/src/services/meeting.ts +123 -0
  153. package/test/1.ts +13 -0
  154. package/test/db.js +19 -0
  155. package/test/firebaseConfig.js +1 -0
  156. package/tsconfig.json +16 -0
@@ -0,0 +1,79 @@
1
+ import { Post } from "./post.model"
2
+ import * as admin from "firebase-admin";
3
+ import { Action } from "./action.model";
4
+ import { User } from "./user.model";
5
+ import { Company } from "./company.model";
6
+ import { Attendance } from "./attendance.model";
7
+ import { Utilities } from "./utility.model";
8
+
9
+ class LeaveApplication extends Post {
10
+ actionEvent: string = "";
11
+ actionType: string = "worklog";
12
+ actionName: string = "leave-application";
13
+ isProcessed: boolean = false;
14
+
15
+ static async setIncomingInfoToLeaveApplicationPost(info: any, post: LeaveApplication) {
16
+ post.actionEvent = info.extra.actionEvent;
17
+ post.actionId = info.extra.actionId;
18
+ post.actionName = info.extra.actionName;
19
+ post.actionType = info.extra.actionType;
20
+ post.companyId = info.extra.companyId;
21
+ post.createdAt = info.extra.createdAt;
22
+ post.description = `Leave application for ${info.extra.extraData.reason} on ${info.extra.extraData.leaveDate}.`;
23
+ post.eventId = info.extra.eventId;
24
+ post.isGeofence = info.extra.isGeofence;
25
+ post.userId = info.userId;
26
+ const newExtraData = await this.modifyExtraDataForLeave(info);
27
+ post.extraData = newExtraData;
28
+ post.isProcessed = false;
29
+ post.target = info.target || "" ;
30
+ post.time = info.extra.time;
31
+ post.checkInternet = info.extra.checkInternet;
32
+ return post;
33
+ }
34
+
35
+ static async modifyExtraDataForLeave(info: any) {
36
+ const time = info.extra.startAt;
37
+ const date = new Date(info.extra.startAt).toLocaleDateString("en-GB");
38
+ const newExtraData = {
39
+ ...info.extra.extraData,
40
+ date: date,
41
+ time: time,
42
+ reason: info.extra.extraData.reason,
43
+ appliedDate: info.extra.extraData.leaveDate,
44
+ forApprovalText : "Approval Pending"
45
+ }
46
+ return newExtraData;
47
+ }
48
+
49
+ static async getOpenedLeaveRequests(firestore: admin.firestore.Firestore,nickName: string,phone: string,actionName:string) {
50
+ try{
51
+ let teamList = await Company.getTeamListOfManager(firestore, nickName, phone);
52
+ teamList = teamList.map(user => user.id);
53
+ const allOpenRequests = [];
54
+ const companyId = await Company.getCompanyIdByNickName(firestore, nickName);
55
+ const actionId = await Action.getActionId(firestore, companyId, actionName);
56
+ for (let userId of teamList) {
57
+ const openRequestsDocs = await firestore.collection("Companies")
58
+ .doc(companyId)
59
+ .collection("Actions")
60
+ .doc(actionId)
61
+ .collection(actionName)
62
+ .where("isProcessed", "==", false)
63
+ .where("userId", "==", userId)
64
+ .get();
65
+ const openRequests = openRequestsDocs.docs.map(doc => {
66
+ return doc.data();
67
+ })
68
+ allOpenRequests.push(...openRequests);
69
+ }
70
+ return allOpenRequests;
71
+ }
72
+ catch(error:any){
73
+ throw new Error(error.message)
74
+ }
75
+ }
76
+
77
+ }
78
+
79
+ export { LeaveApplication };
@@ -0,0 +1,215 @@
1
+ import * as admin from 'firebase-admin';
2
+ import { Action } from './action.model';
3
+ import { Company } from './company.model';
4
+ import { User } from './user.model';
5
+
6
+ class License {
7
+ company: string = "";
8
+ to_date?: string = "";//new Date();
9
+ from_date?: string = "";//new Date();
10
+ user: string = "";
11
+ license_type?: string = "";
12
+ device_id: string = "";
13
+ static minimumDevices: number = 1;
14
+
15
+ static async validateUserLicense(firestore: admin.firestore.Firestore,
16
+ arrayUnion: any,
17
+ today_date: admin.firestore.Timestamp,
18
+ nickName: string,
19
+ user: string,
20
+ device_id: string,
21
+ modelName: string,
22
+ brand: string) {
23
+ user = user.replace(' ', '+')
24
+ console.log(user)
25
+ let userDetails_snapshot = await firestore.collection('Licenses').where('company', '==', nickName).where('user', '==', user).get();
26
+ if (userDetails_snapshot.empty) {
27
+ return ["User not found", null, null]
28
+ }
29
+ let flag: boolean = false
30
+ let device_flag: boolean = false
31
+ let license_date = await Promise.all(userDetails_snapshot.docs.map(async (doc) => {
32
+ if (doc.data().device_id == 1) {
33
+ doc.ref.update({
34
+ device_id: device_id,
35
+ extraDevices: arrayUnion({
36
+ deviceId: device_id,
37
+ modelName: modelName,
38
+ brandName: brand,
39
+ fromData: Date.now()
40
+ })
41
+ })
42
+ device_flag = true
43
+ if ((today_date.seconds * 1000) <= doc.data().to_date) {
44
+ flag = true
45
+ }
46
+ } else {
47
+ let extraDevices = doc.data().extraDevices ? doc.data().extraDevices : [];
48
+ extraDevices = extraDevices.map((device: any) => {
49
+ return device.deviceId;
50
+ })
51
+ const uniqueExtraDevices = Array.from(new Set([...extraDevices]));
52
+ for (let storedDeviceId of uniqueExtraDevices) {
53
+ if (device_id == storedDeviceId) {
54
+ device_flag = true
55
+ }
56
+ }
57
+ if ((today_date.seconds * 1000) <= doc.data().to_date) {
58
+ flag = true
59
+ }
60
+ if (!device_flag) {
61
+ let userInfo = await Company.getUserDetailsByPhone(firestore, nickName, user);
62
+ userInfo = userInfo[0];
63
+ const devicesLimit = userInfo.devicesLimit ? userInfo.devicesLimit : this.minimumDevices;
64
+ console.log("devicesLimit", devicesLimit);
65
+ if (flag) {
66
+ if (extraDevices.length < Number(devicesLimit)) {
67
+ const objToStore = {
68
+ deviceId: device_id,
69
+ modelName: modelName,
70
+ brandName: brand,
71
+ fromDate: Date.now()
72
+ }
73
+ userDetails_snapshot.forEach((doc) => {
74
+ doc.ref.update({
75
+ extraDevices: arrayUnion(objToStore)
76
+ })
77
+ })
78
+ device_flag = true;
79
+ }
80
+ }
81
+ }
82
+ }
83
+ return doc.data().to_date
84
+ }))
85
+ let filtered_newest_date: any = license_date.reduce((a, b) => { return a > b ? a : b })
86
+ let convert_to_timestamp = await License.convertTimestamptoDate(filtered_newest_date)
87
+ const status = flag && device_flag;
88
+ const action = "requestForm";
89
+ const companyId = await Company.getCompanyIdByNickName(firestore, nickName);
90
+ const actionId = await Action.getActionId(firestore, companyId, action);
91
+ return [status, convert_to_timestamp, device_flag, actionId]
92
+ }
93
+
94
+ static async getUserDevices(firestore: admin.firestore.Firestore, nickName: string, phone: string) {
95
+ let license: any = await firestore.collection("Licenses")
96
+ .where("user", "==", `+${phone}`)
97
+ .where("company", "==", nickName)
98
+ .get();
99
+ license = license.docs[0].data();
100
+ const devicesList = license.extraDevices.map((obj: any) => {
101
+ let label;
102
+ if (obj.modelName && obj.brandName) {
103
+ label = `${obj.brandName}(${obj.modelName})`;
104
+ }
105
+ return {
106
+ id: obj.deviceId,
107
+ label: label ? label : obj.deviceId
108
+ }
109
+ });
110
+ if (devicesList.length > 0) {
111
+ return {
112
+ data: {
113
+ resArray: devicesList,
114
+ },
115
+ message: "success"
116
+ };
117
+ } else {
118
+ return {
119
+ data: {
120
+ resArray: [{
121
+ label: "No devices found"
122
+ }]
123
+ },
124
+ message: "Error"
125
+ }
126
+ }
127
+ }
128
+
129
+ static async grantUserLicense(firestore: admin.firestore.Firestore, nickName: string, newUserDetails: License) {
130
+
131
+ console.log(newUserDetails)
132
+
133
+ newUserDetails.user = "+" + newUserDetails.user
134
+ let to_date = await License.convertDatetoTimestamp(newUserDetails["to_date"])
135
+ let from_date = await License.convertDatetoTimestamp(newUserDetails["from_date"])
136
+
137
+ console.log(to_date, from_date)
138
+
139
+ Object.assign(newUserDetails, { company: nickName }, { to_date: to_date }, { from_date: from_date })
140
+ let company_id = await Company.getCompanyIdbyNickname(firestore, newUserDetails.company)
141
+ if (company_id == 'Not found') {
142
+ return "Company does not exists"
143
+ }
144
+ let snapshot = await firestore.collection('Companies').doc(company_id).collection('Users').where('phone', '==', newUserDetails.user).get()
145
+ if (snapshot.empty) {
146
+ return "User does not exists"
147
+ }
148
+ let user_license = await firestore.collection('Licenses').where('company', '==', `${newUserDetails.company}`).where('user', '==', newUserDetails.user).get();
149
+
150
+ let flag: boolean = false
151
+ let user_list: any = []
152
+ user_license.forEach((doc) => {
153
+ user_list.push(doc.data())
154
+ if (newUserDetails.company == doc.data().company) {
155
+ if (newUserDetails.user == doc.data().user) {
156
+ if (newUserDetails.license_type == doc.data().license_type) {
157
+ if (newUserDetails.to_date == doc.data().to_date) {
158
+ flag = true
159
+ }
160
+ }
161
+ }
162
+ }
163
+ })
164
+ if (flag) {
165
+ return `${newUserDetails.user} data already exists`
166
+ }
167
+ await firestore.collection('Licenses').add(newUserDetails)
168
+ return `${newUserDetails.user} created successfully`
169
+ }
170
+ static async convertDatetoTimestamp(data: any) {
171
+ const [day, month, year] = data.split('-');
172
+ const timestamp = new Date(year, month - 1, day, 24, 0, 0).getTime();
173
+ return timestamp
174
+ }
175
+
176
+ static async convertTimestamptoDate(timestamp: number) {
177
+ let date = new Date(timestamp).toLocaleString()
178
+ return date
179
+ }
180
+
181
+ static async extendLicense(firestore: admin.firestore.Firestore, nickName: string, userDetails: License) {
182
+ userDetails.user = "+" + userDetails.user
183
+ let companyId = await Company.getCompanyIdbyNickname(firestore, nickName)
184
+ let userExist = await firestore.collection('Companies').doc(companyId).collection('Users').where('phone', '==', userDetails.user).get()
185
+ if (userExist.empty) {
186
+ return "User does exists"
187
+ }
188
+ let snapshot = await firestore.collection('Licenses').where('company', '==', nickName).where('user', '==', userDetails.user).where('license_type', '==', userDetails.license_type).get()
189
+ if (snapshot.empty) {
190
+ return "User details not found"
191
+ }
192
+ let toDateTimestamp = await this.convertDatetoTimestamp(userDetails.to_date)
193
+ snapshot.forEach((doc) => {
194
+ doc.ref.update({ to_date: toDateTimestamp })
195
+ })
196
+ return 'Updated successfully'
197
+ }
198
+
199
+ static async resetDeviceIdforUserLicense(firestore: admin.firestore.Firestore, company: string, phone: string) {
200
+ if (phone[0] != "+") {
201
+ phone = "+" + phone
202
+ }
203
+ console.log(phone)
204
+ let userLicense = await firestore.collection("Licenses").where("user", "==", phone).where("company", "==", company).get()
205
+ if (userLicense.empty) {
206
+ return { message: "User not found" }
207
+ }
208
+ userLicense.forEach((doc) => {
209
+ doc.ref.update({ device_id: 1 })
210
+ })
211
+ return { message: "updated" }
212
+ }
213
+ }
214
+
215
+ export { License };
@@ -0,0 +1,25 @@
1
+ import * as admin from 'firebase-admin';
2
+
3
+ class Logs {
4
+
5
+ static async logEduceResponseToDB(firestore: admin.firestore.Firestore, userId: string, companyId: string, responseFromAPI: any, apiName: string) {
6
+ const logToStore = await this.createLogDocToStore(responseFromAPI);
7
+ let responseObj = {
8
+ createdAt: new Date().getTime(),
9
+ logToStore,
10
+ apiName
11
+ }
12
+ await firestore.collection("Logs").doc(userId).collection(companyId).doc().set(responseObj)
13
+ }
14
+
15
+ static async createLogDocToStore(responseFromEduce: any) {
16
+ let logToStore: any = {};
17
+ if (responseFromEduce.data) {
18
+ logToStore.message = responseFromEduce.message;
19
+ } else if (responseFromEduce.error) {
20
+ logToStore.error = responseFromEduce.error;
21
+ }
22
+ return logToStore;
23
+ }
24
+ }
25
+ export { Logs }
@@ -0,0 +1,80 @@
1
+ import { Pool } from "mysql2/typings/mysql/lib/Pool";
2
+ import CurdService from "./crud/crud";
3
+
4
+ class MeetingSummary {
5
+ customerName: string;
6
+ contactName: string;
7
+ meetingImage: string;
8
+ constructor(customerName: string,
9
+ contactName: string,
10
+ meetingImage: string) {
11
+ this.customerName = customerName;
12
+ this.meetingImage = meetingImage;
13
+ this.contactName = contactName;
14
+ }
15
+
16
+ static async syncReportDBFirebaseUserEntries(meetingsDBConnection:Pool,doc:any,employeeName:string) {
17
+ try {
18
+ const reportData = {
19
+ companyId: doc.companyId ?? "",
20
+ employeeName: employeeName ?? "",
21
+ eventId: doc.eventId ?? "",
22
+ userId: doc.userId ?? "",
23
+ phone: doc.phone ?? "",
24
+ meetingDate: doc.extraData.date ?? "",
25
+ meetingStartTime: doc.extraData["Start Time"] ?? "",
26
+ meetingEndTime: doc.extraData["End Time"] ?? "",
27
+ meetingImage: doc.extraData["meetingImage"] ?? "",
28
+ contactName: doc.extraData.contactName ?? "",
29
+ customerName: doc.extraData.customerName ?? "",
30
+ companyNickName: "benara",
31
+ time: doc.date
32
+ }
33
+ await this.uploadEntryToReportDB(meetingsDBConnection, reportData);
34
+ } catch (error: any) {
35
+ console.log(error.message);
36
+ }
37
+ }
38
+
39
+ static async uploadEntryToReportDB(meetingsConnection: Pool, info: any) {
40
+ const curdService = new CurdService(meetingsConnection);
41
+ try {
42
+ const qryString = `INSERT INTO meeting_reports
43
+ (userId, eventId, companyId, name, phone, companyNickName,
44
+ meetingDate, meetingStartTime, meetingEndTime, contactName, customerName,
45
+ meetingImage, createOn )
46
+ VALUES ('${info.userId}',
47
+ '${info.eventId}',
48
+ '${info.companyId}',
49
+ '${info.employeeName}',
50
+ '${info.phone}',
51
+ '${info.companyNickName}',
52
+ '${info.meetingDate}',
53
+ '${info.meetingStartTime}',
54
+ '${info.meetingEndTime}',
55
+ '${info.contactName}',
56
+ '${info.customerName}',
57
+ '${info.meetingImage}',
58
+ '${info.time}')`
59
+ await curdService.query(qryString)
60
+ } catch(error: any) {
61
+ console.log(error.message);
62
+ }
63
+ }
64
+
65
+ static async updateEndTimeToReportDB(meetingsConnection: Pool, eventId: string, meetingEndTime:any){
66
+ const curdService = new CurdService(meetingsConnection)
67
+ try{
68
+ const qryString = `update meeting_reports
69
+ set meetingEndTime = '${meetingEndTime}'
70
+ where eventId = '${eventId}'`
71
+ await curdService.query(qryString)
72
+ }
73
+ catch (error) {
74
+ console.log(error)
75
+ }
76
+ }
77
+
78
+ }
79
+
80
+ export { MeetingSummary };
@@ -0,0 +1,62 @@
1
+ import { Post } from "./post.model"
2
+ import * as admin from "firebase-admin";
3
+ import { Offline } from "./offline.model";
4
+ import { TempCollection } from "./tempCollection.model";
5
+ import { User } from "./user.model";
6
+
7
+ class Meter extends Post {
8
+ actionEvent: string = "";
9
+ actionType: string = "worklog";
10
+ actionName: string = "meter_reading";
11
+
12
+ static async createPostForMeter(firestore: admin.firestore.Firestore,postInfo: any){
13
+ let post = new Meter();
14
+ post = await Meter.setIncomingInfoToMeter(postInfo, post);
15
+ let eventId = await Post.createNewPost(firestore,post)
16
+ return eventId
17
+ }
18
+
19
+
20
+ static async setIncomingInfoToMeter(info:any, post:Meter){
21
+ post.actionEvent = info.extra.actionEvent;
22
+ post.id = info.id
23
+ post.actionId = info.extra.actionId;
24
+ post.companyId = info.extra.companyId;
25
+ post.createdAt = info.extra.createdAt;
26
+ post.description = info.description;
27
+ post.eventId = info.extra.eventId;
28
+ post.isGeofence = info.extra.isGeofence;
29
+ post.userId = info.userId;
30
+ const newExtraData = await this.modifyExtraDataForMeter(info);
31
+ post.extraData = newExtraData;
32
+ post.seen = info.extra.seen;
33
+ post.startAt = "";
34
+ post.startLat = info.extra.startLat;
35
+ post.startLong = info.extra.startLong;
36
+ post.endAt = "";
37
+ post.endLat = info.extra.endLat;
38
+ post.endLong = info.extra.endLong;
39
+ post.stepValues = info.extra.stepValues;
40
+ post.time = info.extra.time;
41
+ post.checkInternet = info.extra.checkInternet;
42
+ return post;
43
+ }
44
+
45
+ static async modifyExtraDataForMeter(info: any) {
46
+ const time = info.createdAt;
47
+ const date = new Date(time).toLocaleDateString("en-GB");
48
+ const newExtraData = {
49
+ // ...info.extra.extraData,
50
+ status: info.status,
51
+ machineMeterId:info.machineMeterId,
52
+ currentReading:info.currentReading,
53
+ consumption:info.consumption,
54
+ date: date,
55
+ time: time
56
+ }
57
+ return newExtraData;
58
+ }
59
+
60
+ }
61
+
62
+ export { Meter };
@@ -0,0 +1,84 @@
1
+ import { Post } from "./post.model"
2
+ import * as admin from "firebase-admin";
3
+ import { Action } from "./action.model";
4
+ import { User } from "./user.model";
5
+ import { Company } from "./company.model";
6
+ import { Attendance } from "./attendance.model";
7
+
8
+ class MissingPunch extends Post {
9
+ actionEvent: string = "";
10
+ actionType: string = "worklog";
11
+ actionName: string = "mp";
12
+ description: string = "";
13
+ isProcessed: boolean = false;
14
+ missedEvent: string = "";
15
+
16
+ static async getOpenedMpRequests(firestore: admin.firestore.Firestore,
17
+ nickName: string,
18
+ phone: string) {
19
+ let teamList = await Company.getTeamListOfManager(firestore, nickName, phone);
20
+ teamList = teamList.map(user => user.id);
21
+ const allOpenRequests = [];
22
+ const companyId = await Company.getCompanyIdByNickName(firestore, nickName);
23
+ const actionId = await Action.getActionId(firestore, companyId, "mp");
24
+ for (let userId of teamList) {
25
+ const openRequestsDocs = await firestore.collection("Companies")
26
+ .doc(companyId)
27
+ .collection("Actions")
28
+ .doc(actionId)
29
+ .collection("mp")
30
+ .where("isProcessed", "==", false)
31
+ .where("userId", "==", userId)
32
+ .get();
33
+ const openRequests = openRequestsDocs.docs.map(doc => {
34
+ return doc.data();
35
+ })
36
+ allOpenRequests.push(...openRequests);
37
+ }
38
+ return allOpenRequests;
39
+ }
40
+
41
+ static async createUpdatedFeed(requestDoc: any,
42
+ description: string,
43
+ forApprovalText: string) {
44
+ const extraData = {
45
+ ...requestDoc.extraData,
46
+ forApprovalText
47
+ }
48
+ const updatedFeed = {
49
+ ...requestDoc,
50
+ description: description,
51
+ forApprovalText,
52
+ extraData
53
+ }
54
+ return updatedFeed;
55
+ }
56
+
57
+ static async updateFeedByUserId(firestore: admin.firestore.Firestore,
58
+ updatedFeed: any,
59
+ userId: string,
60
+ companyId: string) {
61
+ const oldFeeds = await firestore.collection("Feeds")
62
+ .doc(userId)
63
+ .collection(companyId)
64
+ .where("eventId", "==", updatedFeed.eventId)
65
+ .get();
66
+ oldFeeds.forEach((doc) => {
67
+ doc.ref.set(updatedFeed);
68
+ })
69
+ }
70
+
71
+ static async updateUserManagersFeed(firestore: admin.firestore.Firestore,
72
+ updatedFeed: any,
73
+ userId: string,
74
+ companyId: string) {
75
+ updatedFeed.description = updatedFeed.description.slice(5);
76
+ const userDetails: any = await User.getUserInfoById(firestore, userId, companyId);
77
+ const managersList = userDetails.reportingTo;
78
+ for (let id of managersList) {
79
+ await this.updateFeedByUserId(firestore, updatedFeed, id, companyId);
80
+ }
81
+ }
82
+ }
83
+
84
+ export { MissingPunch };