@plusscommunities/pluss-maintenance-aws 2.1.44 → 2.1.46
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/createJob.js +201 -114
- package/createJobType.js +49 -49
- package/db/maintenance/addMaintenanceJob.js +100 -90
- package/db/maintenance/editMaintenanceJob.js +22 -12
- package/db/maintenance/getJobEmail.js +22 -22
- package/deleteJob.js +58 -58
- package/deleteJobType.js +40 -40
- package/editJob.js +126 -65
- package/editJobStatus.js +57 -57
- package/editJobType.js +61 -61
- package/editNote.js +117 -117
- package/feature.config.js +279 -262
- package/getData.js +48 -41
- package/getJob.js +4 -4
- package/getJobType.js +35 -35
- package/getJobTypes.js +66 -66
- package/getJobs.js +48 -48
- package/integration/IntegrationStrategy.js +52 -52
- package/integration/archibus/ArchibusStrategy.js +42 -28
- package/integration/index.js +19 -19
- package/jobChanged.js +88 -89
- package/jobTypesChanged.js +52 -39
- package/package.json +3 -3
- package/requests/assignRequest.js +81 -81
- package/requests/getAssignees.js +27 -27
- package/requests/getExternalSync.js +100 -100
- package/requests/getPropertyRequests.js +89 -0
- package/requests/getRequest.js +77 -77
- package/requests/getRequests.js +210 -144
- package/requests/helper/hasRequestPermission.js +12 -12
- package/requests/helper/isValidAssignee.js +10 -10
- package/requests/retrySync.js +90 -90
- package/requests/setExternalJobId.js +113 -113
- package/requests/updatePriority.js +33 -33
- package/scheduleJobImport.js +63 -63
- package/sendJobEmail.js +105 -104
- package/updateData.js +34 -34
- package/values.config.a.js +26 -25
- package/values.config.default.js +30 -28
- package/values.config.enquiry.js +222 -221
- package/values.config.feedback.js +194 -193
- package/values.config.food.js +29 -28
- package/values.config.forms.js +29 -28
- package/values.config.js +30 -28
- package/watchJobs.js +154 -154
package/sendJobEmail.js
CHANGED
|
@@ -5,22 +5,23 @@ const sendEmail = require("@plusscommunities/pluss-core-aws/helper/sendEmail");
|
|
|
5
5
|
const getRef = require("@plusscommunities/pluss-core-aws/db/common/getRef");
|
|
6
6
|
const { values } = require("./values.config");
|
|
7
7
|
|
|
8
|
-
module.exports =
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
module.exports = (job, updated) => {
|
|
9
|
+
const whenEvs = job.isHome
|
|
10
|
+
? "Yes - I would like to be present"
|
|
11
|
+
: "No - Work may be done while I am not home.";
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
// Every branch catches, so awaiting this never rejects — failures only log.
|
|
14
|
+
return getRef("sites", "Id", job.site || job.location)
|
|
15
|
+
.then((site) => {
|
|
16
|
+
const siteToUse = site ? site.siteName : job.site || job.location;
|
|
17
|
+
const { customFields } = job;
|
|
18
|
+
const hasCustomFields = customFields && customFields.length > 0;
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
const renderCommon = () => `
|
|
20
21
|
<p>
|
|
21
22
|
<b>${values.textJobEmailTitle} ${job.id != null ? `#${job.id}` : ""}${
|
|
22
|
-
|
|
23
|
-
|
|
23
|
+
updated ? "-DETAILS EDITED- " : " "
|
|
24
|
+
}(${job.type}):</b> ${job.room}
|
|
24
25
|
</p>
|
|
25
26
|
<div>
|
|
26
27
|
<b>Title: </b>${job.title}
|
|
@@ -39,18 +40,18 @@ module.exports = function (job, updated) {
|
|
|
39
40
|
<b>Address: </b>${job.room} <br /><br />
|
|
40
41
|
</div>
|
|
41
42
|
`;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
const renderImages = () => {
|
|
44
|
+
let inner = "";
|
|
45
|
+
if (!_.isNil(job.images)) {
|
|
46
|
+
inner = job.images.map(
|
|
47
|
+
(image) => `<img style="max-height: 400px" src="${image}" />`,
|
|
48
|
+
);
|
|
49
|
+
} else if (!_.isNil(job.image)) {
|
|
50
|
+
inner = `<img style="max-height: 400px" src="${job.image}" />`;
|
|
51
|
+
}
|
|
52
|
+
return _.isEmpty(inner) ? "" : `<div>${inner}</div>`;
|
|
53
|
+
};
|
|
54
|
+
const renderNonCustom = () => `
|
|
54
55
|
<div>
|
|
55
56
|
<b>Person Present During Service: </b>${whenEvs}
|
|
56
57
|
<div>
|
|
@@ -66,97 +67,97 @@ module.exports = function (job, updated) {
|
|
|
66
67
|
</div>
|
|
67
68
|
${renderImages()}
|
|
68
69
|
`;
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
70
|
+
const renderCustom = () => {
|
|
71
|
+
const renderAnswer = (field) => {
|
|
72
|
+
switch (field.type) {
|
|
73
|
+
case "date":
|
|
74
|
+
return field.answer
|
|
75
|
+
? moment(field.answer, "YYYY-MM-DD").format("DD MMM YYYY")
|
|
76
|
+
: "";
|
|
77
|
+
case "time":
|
|
78
|
+
return field.answer
|
|
79
|
+
? moment(field.answer, "HH:mm").format("h:mm a")
|
|
80
|
+
: "";
|
|
81
|
+
case "yn":
|
|
82
|
+
return field.answer ? "Yes" : "No";
|
|
83
|
+
case "checkbox":
|
|
84
|
+
return field.answer && Array.isArray(field.answer)
|
|
85
|
+
? field.answer.join(", ")
|
|
86
|
+
: "";
|
|
87
|
+
case "image":
|
|
88
|
+
return field.answer && Array.isArray(field.answer)
|
|
89
|
+
? `<br>${field.answer.map(
|
|
90
|
+
(image) =>
|
|
91
|
+
`<img style="max-height: 400px" src="${image}" />`,
|
|
92
|
+
)}`
|
|
93
|
+
: "";
|
|
94
|
+
case "document":
|
|
95
|
+
return field.answer && Array.isArray(field.answer)
|
|
96
|
+
? `<br>${field.answer
|
|
97
|
+
.map(
|
|
98
|
+
(doc) =>
|
|
99
|
+
`<a href="${doc.url}" target="_blank">${doc.name}</a><br>`,
|
|
100
|
+
)
|
|
101
|
+
.join("")}`
|
|
102
|
+
: "";
|
|
103
|
+
default:
|
|
104
|
+
return field.answer;
|
|
105
|
+
}
|
|
106
|
+
};
|
|
106
107
|
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
108
|
+
return customFields
|
|
109
|
+
.filter((f) => !["staticTitle", "staticText"].includes(f.type))
|
|
110
|
+
.map((field) => {
|
|
111
|
+
return `
|
|
111
112
|
<div>
|
|
112
113
|
<b>${field.label}: </b>${renderAnswer(field)}
|
|
113
114
|
</div>
|
|
114
115
|
`;
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
116
|
+
})
|
|
117
|
+
.join("\n");
|
|
118
|
+
};
|
|
118
119
|
|
|
119
|
-
|
|
120
|
+
const htmlString = `
|
|
120
121
|
<div>
|
|
121
122
|
${renderCommon()}
|
|
122
123
|
${hasCustomFields ? renderCustom() : renderNonCustom()}
|
|
123
124
|
</div>
|
|
124
125
|
`;
|
|
125
126
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
127
|
+
return getJobEmail(job.site || job.location, job.type)
|
|
128
|
+
.then((obj) => {
|
|
129
|
+
const email = obj.email;
|
|
130
|
+
if (_.isEmpty(email)) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
132
133
|
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
134
|
+
return sendEmail(
|
|
135
|
+
email,
|
|
136
|
+
`${values.textJobEmailTitle} #${job.id}${
|
|
137
|
+
updated ? " -DETAILS EDITED" : ""
|
|
138
|
+
}- (${job.type}) - ${job.room}`,
|
|
139
|
+
htmlString,
|
|
140
|
+
)
|
|
141
|
+
.then((result) => {
|
|
142
|
+
console.log(
|
|
143
|
+
`SUCCESS - Maintenance email --> ${job.type}, ${job.userName}`,
|
|
144
|
+
);
|
|
145
|
+
})
|
|
146
|
+
.catch((error) => {
|
|
147
|
+
console.log(
|
|
148
|
+
`FAIL - Maintenance email --> ${job.type}, ${job.userName}`,
|
|
149
|
+
);
|
|
150
|
+
});
|
|
151
|
+
})
|
|
152
|
+
.catch(() => {
|
|
153
|
+
console.log(
|
|
154
|
+
`FAIL - Maintenance email - fetch email address --> ${job.type}, ${job.userName}`,
|
|
155
|
+
);
|
|
156
|
+
});
|
|
157
|
+
})
|
|
158
|
+
.catch(() => {
|
|
159
|
+
console.log(
|
|
160
|
+
`FAIL - Maintenance email - fetch site --> ${job.site || job.location}`,
|
|
161
|
+
);
|
|
162
|
+
});
|
|
162
163
|
};
|
package/updateData.js
CHANGED
|
@@ -8,43 +8,43 @@ const setExternalJobId = require("./requests/setExternalJobId");
|
|
|
8
8
|
const retrySync = require("./requests/retrySync");
|
|
9
9
|
|
|
10
10
|
module.exports.updateData = async (event, context, callback) => {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
init(config);
|
|
12
|
+
const action = event.pathParameters.action;
|
|
13
|
+
const data = JSON.parse(event.body);
|
|
14
|
+
const logId = log(action, "Input", data);
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
let response;
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
18
|
+
try {
|
|
19
|
+
switch (action) {
|
|
20
|
+
case "assign":
|
|
21
|
+
response = await assignRequest(event, data);
|
|
22
|
+
break;
|
|
23
|
+
case "priority":
|
|
24
|
+
response = await updatePriority(event, data);
|
|
25
|
+
break;
|
|
26
|
+
case "externalid":
|
|
27
|
+
response = await setExternalJobId(event, data);
|
|
28
|
+
break;
|
|
29
|
+
case "retrysync":
|
|
30
|
+
response = await retrySync(event, data);
|
|
31
|
+
break;
|
|
32
|
+
default:
|
|
33
|
+
response = { status: 404, data: { error: "Action not found" } };
|
|
34
|
+
break;
|
|
35
|
+
}
|
|
36
|
+
} catch (err) {
|
|
37
|
+
log(action, "InternalError", err.toString(), logId);
|
|
38
|
+
if (!response) {
|
|
39
|
+
response = { status: 500, data: { error: "Internal Error" } };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
log(action, "Response", response, logId);
|
|
44
44
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
45
|
+
if (!response) {
|
|
46
|
+
response = { status: 500, data: { error: "No response generated" } };
|
|
47
|
+
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
return callback(null, generateJsonResponse(response.status, response.data));
|
|
50
50
|
};
|
package/values.config.a.js
CHANGED
|
@@ -1,28 +1,29 @@
|
|
|
1
1
|
const values = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
entityKey: "maintenancerequestA",
|
|
3
|
+
serviceKey: "maintenanceA",
|
|
4
|
+
updateKey: "jobsA",
|
|
5
|
+
tableKeyJobTypes: "jobtypesA",
|
|
6
|
+
tableKeyMaintenance: "maintenanceA",
|
|
7
|
+
tableKeySupportTickets: "supportticketsA",
|
|
8
|
+
tableNameJobTypes: "jobTypesA",
|
|
9
|
+
tableNameMaintenance: "maintenanceA",
|
|
10
|
+
tableNameSupportTickets: "supportticketsA",
|
|
11
|
+
permissionMaintenanceTracking: "maintenanceTrackingA",
|
|
12
|
+
permissionMaintenanceAssignment: "maintenanceAssignmentA",
|
|
13
|
+
permissionMaintenanceTypes: "maintenanceTypesA",
|
|
14
|
+
routeEntityPath: "/requestsHubA/jobDetails/:id",
|
|
15
|
+
screenMaintenanceDetail: "requestDetailA",
|
|
16
|
+
notificationMaintenanceJobAssigned: "MaintenanceJobAssignedA",
|
|
17
|
+
notificationMaintenanceJobUnassigned: "MaintenanceJobUnassignedA",
|
|
18
|
+
activityDeleteMaintenanceJob: "DeleteMaintenanceJobA",
|
|
19
|
+
activityEditMaintenanceJob: "EditMaintenanceJobA",
|
|
20
|
+
activityMaintenanceJobStatusChanged: "MaintenanceJobStatusChangedA",
|
|
21
|
+
activityAddMaintenanceNote: "AddMaintenanceNoteA",
|
|
22
|
+
activityDeleteMaintenanceNote: "DeleteMaintenanceNoteA",
|
|
23
|
+
activityEditMaintenanceNote: "EditMaintenanceNoteA",
|
|
24
|
+
textJobEmailTitle: "Service Request",
|
|
25
|
+
triggerMaintenanceStatusChanged: "MaintenanceStatusChangedA",
|
|
26
|
+
enableSiteConfigsPropagation: false,
|
|
27
|
+
linkToProperty: false,
|
|
27
28
|
};
|
|
28
29
|
exports.values = values;
|
package/values.config.default.js
CHANGED
|
@@ -1,31 +1,33 @@
|
|
|
1
1
|
const values = {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
2
|
+
entityKey: "maintenancerequest",
|
|
3
|
+
serviceKey: "maintenance",
|
|
4
|
+
updateKey: "jobs",
|
|
5
|
+
tableKeyJobTypes: "jobtypes",
|
|
6
|
+
tableKeyMaintenance: "maintenance",
|
|
7
|
+
tableKeySupportTickets: "supporttickets",
|
|
8
|
+
tableNameJobTypes: "jobTypes",
|
|
9
|
+
tableNameMaintenance: "maintenance",
|
|
10
|
+
tableNameSupportTickets: "supporttickets",
|
|
11
|
+
permissionMaintenanceTracking: "maintenanceTracking",
|
|
12
|
+
permissionMaintenanceAssignment: "maintenanceAssignment",
|
|
13
|
+
permissionMaintenanceTypes: "maintenanceTypes",
|
|
14
|
+
routeEntityPath: "/requestsHub/jobDetails/:id",
|
|
15
|
+
screenMaintenanceDetail: "requestDetail",
|
|
16
|
+
notificationMaintenanceJobAssigned: "MaintenanceJobAssigned",
|
|
17
|
+
notificationMaintenanceJobUnassigned: "MaintenanceJobUnassigned",
|
|
18
|
+
activityAddMaintenanceJob: "AddMaintenanceJob",
|
|
19
|
+
activityDeleteMaintenanceJob: "DeleteMaintenanceJob",
|
|
20
|
+
activityEditMaintenanceJob: "EditMaintenanceJob",
|
|
21
|
+
activityMaintenanceJobStatusChanged: "MaintenanceJobStatusChanged",
|
|
22
|
+
activityAddMaintenanceNote: "AddMaintenanceNote",
|
|
23
|
+
activityDeleteMaintenanceNote: "DeleteMaintenanceNote",
|
|
24
|
+
activityEditMaintenanceNote: "EditMaintenanceNote",
|
|
25
|
+
textJobEmailTitle: "Service Request",
|
|
26
|
+
allowGeneralType: true,
|
|
27
|
+
// Links maintenance requests to a property instead of the free-text room/address field.
|
|
28
|
+
linkToProperty: true,
|
|
29
|
+
defaultJobTypes: [],
|
|
30
|
+
triggerMaintenanceStatusChanged: "MaintenanceStatusChanged",
|
|
31
|
+
enableSiteConfigsPropagation: true,
|
|
30
32
|
};
|
|
31
33
|
exports.values = values;
|