mobioffice-cli 1.0.0 → 1.0.2
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.
- package/{src/index.ts → lib/index.d.ts} +1 -45
- package/lib/models/Feed-Details-Screen.model.d.ts +6 -0
- package/lib/models/Feed-Details-Screen.model.js +27 -0
- package/lib/models/action.model.d.ts +58 -0
- package/lib/models/action.model.js +315 -0
- package/lib/models/actions/doffing.d.ts +6 -0
- package/lib/models/actions/doffing.js +64 -0
- package/lib/models/actions/folding.d.ts +7 -0
- package/lib/models/actions/folding.js +37 -0
- package/lib/models/attendance.model.d.ts +44 -0
- package/lib/models/attendance.model.js +446 -0
- package/lib/models/cicoPost.model.d.ts +9 -0
- package/lib/models/cicoPost.model.js +19 -0
- package/lib/models/company.model.d.ts +67 -0
- package/lib/models/company.model.js +725 -0
- package/lib/models/contact-us/resquest.model.d.ts +30 -0
- package/lib/models/contact-us/resquest.model.js +73 -0
- package/lib/models/crud/crud.d.ts +7 -0
- package/lib/models/crud/crud.js +27 -0
- package/lib/models/customCollection.model.d.ts +9 -0
- package/lib/models/customCollection.model.js +40 -0
- package/lib/models/customer/customer.model.d.ts +32 -0
- package/lib/models/customer/customer.model.js +62 -0
- package/lib/models/deviceChangeReq.d.ts +10 -0
- package/lib/models/deviceChangeReq.js +138 -0
- package/lib/models/dispatch.model.d.ts +14 -0
- package/lib/models/dispatch.model.js +93 -0
- package/lib/models/feed.models.d.ts +8 -0
- package/lib/models/feed.models.js +97 -0
- package/lib/models/geofence.model.d.ts +7 -0
- package/lib/models/geofence.model.js +61 -0
- package/lib/models/leaveApplicationPost.model.d.ts +12 -0
- package/lib/models/leaveApplicationPost.model.js +72 -0
- package/lib/models/license.model.d.ts +25 -0
- package/lib/models/license.model.js +198 -0
- package/lib/models/log.model.d.ts +6 -0
- package/{src/models/log.model.ts → lib/models/log.model.js} +11 -11
- package/lib/models/meeting.model.d.ts +11 -0
- package/lib/models/meeting.model.js +79 -0
- package/lib/models/meter.model.d.ts +18 -0
- package/lib/models/meter.model.js +54 -0
- package/lib/models/missingPunchPost.model.d.ts +15 -0
- package/lib/models/missingPunchPost.model.js +69 -0
- package/lib/models/offline.model.d.ts +70 -0
- package/lib/models/offline.model.js +831 -0
- package/lib/models/post.model.d.ts +38 -0
- package/lib/models/post.model.js +94 -0
- package/lib/models/printDetailsScreen.model.d.ts +6 -0
- package/lib/models/printDetailsScreen.model.js +27 -0
- package/lib/models/pushNotifications/pushNotification.model.d.ts +4 -0
- package/lib/models/pushNotifications/pushNotification.model.js +17 -0
- package/lib/models/report-actions.model.d.ts +26 -0
- package/lib/models/report-actions.model.js +56 -0
- package/lib/models/report-definition-details.model.d.ts +13 -0
- package/lib/models/report-definition-details.model.js +85 -0
- package/lib/models/report-definition.model.d.ts +23 -0
- package/lib/models/report-definition.model.js +26 -0
- package/lib/models/report-definitions-summary.model.d.ts +8 -0
- package/lib/models/report-definitions-summary.model.js +59 -0
- package/lib/models/report-detail-data.model.d.ts +46 -0
- package/lib/models/report-detail-data.model.js +49 -0
- package/lib/models/report-visibility.model.d.ts +7 -0
- package/lib/models/report-visibility.model.js +42 -0
- package/lib/models/report.model.d.ts +19 -0
- package/lib/models/report.model.js +138 -0
- package/lib/models/reportGenerator.model.d.ts +164 -0
- package/lib/models/reportGenerator.model.js +642 -0
- package/lib/models/response.model.d.ts +18 -0
- package/lib/models/response.model.js +30 -0
- package/lib/models/steps.factory.model.d.ts +172 -0
- package/lib/models/steps.factory.model.js +187 -0
- package/lib/models/storeGupShupLog.model.d.ts +6 -0
- package/lib/models/storeGupShupLog.model.js +51 -0
- package/lib/models/summary.model.d.ts +10 -0
- package/{src/models/summary.model.ts → lib/models/summary.model.js} +28 -27
- package/lib/models/tasks/sub-task-group.model.d.ts +42 -0
- package/lib/models/tasks/sub-task-group.model.js +154 -0
- package/lib/models/tasks/tags.model.d.ts +29 -0
- package/lib/models/tasks/tags.model.js +70 -0
- package/lib/models/tasks/task-group.model.d.ts +53 -0
- package/lib/models/tasks/task-group.model.js +156 -0
- package/lib/models/tasks/task.model.d.ts +163 -0
- package/lib/models/tasks/task.model.js +603 -0
- package/lib/models/tempCollection.model.d.ts +40 -0
- package/{src/models/tempCollection.model.ts → lib/models/tempCollection.model.js} +114 -130
- package/lib/models/user.model.d.ts +42 -0
- package/lib/models/user.model.js +272 -0
- package/lib/models/utility.model.d.ts +13 -0
- package/lib/models/utility.model.js +93 -0
- package/lib/models/visitorManagement/acknowledgement.model.d.ts +9 -0
- package/lib/models/visitorManagement/acknowledgement.model.js +55 -0
- package/lib/models/visitorManagement/invite.model.d.ts +32 -0
- package/lib/models/visitorManagement/invite.model.js +326 -0
- package/lib/models/visitorManagement/newIn.model.d.ts +19 -0
- package/lib/models/visitorManagement/newIn.model.js +67 -0
- package/lib/models/visitorManagement/selfServe.model.d.ts +13 -0
- package/lib/models/visitorManagement/selfServe.model.js +46 -0
- package/lib/models/worklogPost.model.d.ts +6 -0
- package/lib/models/worklogPost.model.js +9 -0
- package/lib/services/customer.d.ts +30 -0
- package/lib/services/customer.js +354 -0
- package/lib/services/meeting.d.ts +19 -0
- package/lib/services/meeting.js +109 -0
- package/package.json +4 -1
- package/.prettierrc +0 -4
- package/a.js +0 -3
- package/scripts/1.ts +0 -1300
- package/scripts/GCloudPubSub/pub-sub-config.json +0 -12
- package/scripts/GCloudPubSub/visitorAutoRejection.ts +0 -86
- package/scripts/actions/assignUsersFromOneActionToOther.ts +0 -64
- package/scripts/actions/assignUsersListToAction.ts +0 -81
- package/scripts/actions/getActionsListOfUser.ts +0 -42
- package/scripts/actions/getCompanyUserDetails.ts +0 -49
- package/scripts/actions/giveActionToUser.ts +0 -41
- package/scripts/actions/giveUsersToActivitySelector.ts +0 -56
- package/scripts/actions/groupActionsInActivitySelector.ts +0 -101
- package/scripts/actions/modifySummaryReportDB.ts +0 -42
- package/scripts/actions/setUrlToActionStep.ts +0 -18
- package/scripts/actions/syncMySqlAttendanceDBWithFirebase.ts +0 -93
- package/scripts/actions/syncMySqlMeetingsDBWithFirebase.ts +0 -103
- package/scripts/actions/test.ts +0 -29
- package/scripts/actions/transferFeedsOldIdToNew.ts +0 -40
- package/scripts/actions/transformUserIntoManager.ts +0 -89
- package/scripts/argvConfig.js +0 -9
- package/scripts/backUpData/testCode.ts +0 -131
- package/scripts/benaraScripts/addWorkAreaMap.ts +0 -46
- package/scripts/benaraScripts/add_customers.ts +0 -26
- package/scripts/benaraScripts/add_customers_contact.ts +0 -27
- package/scripts/benaraScripts/add_empty_work_area.ts +0 -17
- package/scripts/benaraScripts/assignManagers.ts +0 -35
- package/scripts/benaraScripts/changeCheckInFlag.ts +0 -45
- package/scripts/benaraScripts/createCustomerContactsList.ts +0 -170
- package/scripts/benaraScripts/createUserByDeletingOldUser.ts +0 -70
- package/scripts/benaraScripts/createUsersAreaMapCollection.ts +0 -23
- package/scripts/benaraScripts/createWorkAreaMap.ts +0 -24
- package/scripts/benaraScripts/mapWorkAreasToUsers.ts +0 -112
- package/scripts/companies_data.json +0 -2496
- package/scripts/create_or_update_users.ts +0 -31
- package/scripts/csvToJson/csvToJson.ts +0 -90
- package/scripts/csvToJson/users.json +0 -3896
- package/scripts/db.js +0 -27
- package/scripts/db.json +0 -13
- package/scripts/dbMySql.ts +0 -63
- package/scripts/delete_action_steps.ts +0 -11
- package/scripts/delete_user.ts +0 -71
- package/scripts/dev_companies_data.json +0 -613
- package/scripts/enroll.xlsx +0 -0
- package/scripts/export_users.ts +0 -72
- package/scripts/files/visitorManagementFiles/displayScreen.json +0 -70
- package/scripts/files/visitorManagementFiles/init_report_visibility.ts +0 -79
- package/scripts/firebaseConfig.js +0 -12
- package/scripts/firebaseDocs/deleteIncommingCollection.ts +0 -47
- package/scripts/firebaseDocs/updateDoc.ts +0 -43
- package/scripts/getActionDataIntoJSON/getActionData.ts +0 -68
- package/scripts/get_attendance_by_any_date.ts +0 -14
- package/scripts/get_attendance_by_month.ts +0 -12
- package/scripts/get_attendance_monthly_by_team.ts +0 -11
- package/scripts/get_daily_report.ts +0 -10
- package/scripts/get_mangers.ts +0 -13
- package/scripts/grant_user_license.ts +0 -18
- package/scripts/init_CustomCollection.ts +0 -16
- package/scripts/init_action_steps.ts +0 -28
- package/scripts/init_actions.ts +0 -31
- package/scripts/init_company.ts +0 -18
- package/scripts/init_customer_mysql.ts +0 -12
- package/scripts/init_feed.ts +0 -4
- package/scripts/init_feed_details_screen.ts +0 -14
- package/scripts/init_geofence.ts +0 -26
- package/scripts/init_print_details_screen.ts +0 -14
- package/scripts/init_report_actions.ts +0 -24
- package/scripts/init_report_definition_detail.ts +0 -26
- package/scripts/init_report_definition_summary.ts +0 -16
- package/scripts/init_report_visibility.ts +0 -46
- package/scripts/init_user_customcollection.ts +0 -16
- package/scripts/json/action.json +0 -21
- package/scripts/json/company.json +0 -24
- package/scripts/json/report-action.json +0 -13
- package/scripts/json/report-def-deet.json +0 -43
- package/scripts/json/resp.json +0 -784
- package/scripts/json/steps.json +0 -24
- package/scripts/json/test.ts +0 -49
- package/scripts/mysqlConfig.ts +0 -9
- package/scripts/revoke_or_extend_license.ts +0 -14
- package/scripts/stream.js +0 -4
- package/scripts/testing1.ts +0 -35
- package/scripts/update/doc.json +0 -20
- package/scripts/update/getDocByPath.ts +0 -34
- package/scripts/update/updateDocByPath.ts +0 -47
- package/scripts/update/updateUsersOfCompanies.ts +0 -58
- package/scripts/update_actions.ts +0 -19
- package/scripts/update_actions_steps.ts +0 -19
- package/scripts/update_company.ts +0 -19
- package/scripts/update_geofence.ts +0 -20
- package/scripts/update_managers.ts +0 -16
- package/scripts/visitorMgmt/createArea.ts +0 -68
- package/scripts/visitorMgmt/createArea.txt +0 -3
- package/scripts/visitorMgmt/createVisitorPathInstructionDocs.ts +0 -130
- package/scripts/visitorMgmt/createVisitorPathInstructionDocs.txt +0 -18
- package/scripts/visitorMgmt/encryptDateString.ts +0 -71
- package/scripts/visitorMgmt/makeHostsManagersOfEachOther.ts +0 -117
- package/scripts/whatsapp_gupshup/sendMessage.ts +0 -97
- package/src/models/Feed-Details-Screen.model.ts +0 -29
- package/src/models/action.model.ts +0 -355
- package/src/models/actions/doffing.ts +0 -71
- package/src/models/actions/folding.ts +0 -39
- package/src/models/attendance.model.ts +0 -615
- package/src/models/cicoPost.model.ts +0 -20
- package/src/models/company.model.ts +0 -975
- package/src/models/contact-us/resquest.model.ts +0 -87
- package/src/models/crud/crud.ts +0 -30
- package/src/models/customCollection.model.ts +0 -47
- package/src/models/customer/customer.model.ts +0 -85
- package/src/models/deviceChangeReq.ts +0 -150
- package/src/models/dispatch.model.ts +0 -99
- package/src/models/feed.models.ts +0 -104
- package/src/models/geofence.model.ts +0 -61
- package/src/models/leaveApplicationPost.model.ts +0 -79
- package/src/models/license.model.ts +0 -215
- package/src/models/meeting.model.ts +0 -80
- package/src/models/meter.model.ts +0 -62
- package/src/models/missingPunchPost.model.ts +0 -84
- package/src/models/offline.model.ts +0 -1133
- package/src/models/post.model.ts +0 -105
- package/src/models/printDetailsScreen.model.ts +0 -30
- package/src/models/pushNotifications/pushNotification.model.ts +0 -17
- package/src/models/report-actions.model.ts +0 -57
- package/src/models/report-definition-details.model.ts +0 -89
- package/src/models/report-definition.model.ts +0 -26
- package/src/models/report-definitions-summary.model.ts +0 -59
- package/src/models/report-detail-data.model.ts +0 -49
- package/src/models/report-visibility.model.ts +0 -44
- package/src/models/report.model.ts +0 -179
- package/src/models/reportGenerator.model.ts +0 -883
- package/src/models/response.model.ts +0 -31
- package/src/models/steps.factory.model.ts +0 -195
- package/src/models/storeGupShupLog.model.ts +0 -49
- package/src/models/tasks/sub-task-group.model.ts +0 -173
- package/src/models/tasks/tags.model.ts +0 -113
- package/src/models/tasks/task-group.model.ts +0 -172
- package/src/models/tasks/task.model.ts +0 -681
- package/src/models/user.model.ts +0 -319
- package/src/models/utility.model.ts +0 -100
- package/src/models/visitorManagement/acknowledgement.model.ts +0 -71
- package/src/models/visitorManagement/invite.model.ts +0 -406
- package/src/models/visitorManagement/newIn.model.ts +0 -82
- package/src/models/visitorManagement/selfServe.model.ts +0 -58
- package/src/models/worklogPost.model.ts +0 -8
- package/src/services/customer.ts +0 -382
- package/src/services/meeting.ts +0 -123
- package/test/1.ts +0 -13
- package/test/db.js +0 -19
- package/test/firebaseConfig.js +0 -1
- 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;
|