@getjones/test-infra 2.6.6 → 2.6.7
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/package.json +1 -1
- package/src/common/commonFlows/records/records.js +4 -4
- package/src/common/consts/recordTypes.js +5 -0
- package/src/common/requests/apiKeyAuth/requests.js +6 -0
- package/src/common/requests/requestHandlers.js +18 -0
- package/src/common/utils/timeUtils.js +10 -7
- package/src/defaults/configs/auditConfigs.js +5 -1
- package/src/defaults/configs/polices.js +2 -1
- package/src/defaults/configs/requirement.js +6 -3
- package/src/factory/records/records.js +33 -16
- package/src/index.js +6 -5
- package/src/saas/internal-api/accounts/api/core/accounts.core.service.js +1 -1
- package/src/saas/internal-api/accounts/api/settings/settings.service.js +1 -2
- package/src/saas/internal-api/accounts/models/settings/update.settings.model.js +9 -7
- package/src/saas/internal-api/auth/api/auth.service.js +8 -1
- package/src/saas/internal-api/compliance/api/waive/waive.service.js +16 -1
- package/src/saas/internal-api/compliance/utils/util.js +25 -1
- package/src/saas/internal-api/dashboard/api/recordList.api.js +38 -0
- package/src/saas/internal-api/dashboard/api/recordList.service.js +60 -0
- package/src/saas/internal-api/dbEmails/api/db.emails.service.js +2 -2
- package/src/saas/internal-api/globalRecord/api/global.record.api.js +8 -2
- package/src/saas/internal-api/globalRecord/api/global.record.service.js +13 -1
- package/src/saas/internal-api/requests/api/requests.api.js +6 -0
- package/src/saas/internal-api/requests/api/requests.service.js +5 -0
- package/src/saas/internal-api/requirements/api/requirements.service.js +22 -1
- package/src/saas/internal-api/requirements/index.js +2 -1
- package/src/saas/internal-api/thread-scheduler/runner.js +1 -1
- package/src/saas/internal-api/users/api/users.service.js +2 -2
- package/src/saas/openapi/coi/coi.api.js +20 -0
- package/src/saas/openapi/coi/coi.service.js +13 -0
- package/src/saas/openapi/requests/index.js +2 -1
- package/src/saas/openapi/requests/models/invite.request.model.js +11 -11
- package/src/saas/openapi/requests/models/update.request.model.js +35 -0
- package/src/saas/openapi/requests/requests.api.js +64 -8
- package/src/saas/openapi/requests/requests.service.js +52 -5
- package/src/saas/openapi/requirements/requirements.api.js +18 -4
- package/src/saas/openapi/requirements/requirements.service.js +14 -2
- package/src/saas/internal-api/dashboardInnerPage/api/recordList.api.js +0 -12
- package/src/saas/internal-api/dashboardInnerPage/api/recordList.service.js +0 -7
- /package/src/saas/internal-api/{dashboardInnerPage → dashboard}/index.js +0 -0
- /package/src/saas/internal-api/{dashboardInnerPage → dashboard}/models/dashboard.filter.criteria.model.js +0 -0
package/package.json
CHANGED
|
@@ -19,13 +19,13 @@ const updateInviteDate = async function(recordId, inviteDate, context) {
|
|
|
19
19
|
const updateResponse = await contractors.services.updateInviteDate(recordId, inviteDate, context);
|
|
20
20
|
|
|
21
21
|
if (updateResponse.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
22
|
-
throw new Error(
|
|
22
|
+
throw new Error(`Record invite date could not be updated\n${updateResponse}`);
|
|
23
23
|
}
|
|
24
24
|
|
|
25
25
|
const threadSchedulerResponse = await threadScheduler.runForRecords([recordId]);
|
|
26
26
|
|
|
27
27
|
if (threadSchedulerResponse.status !== httpResponseStatusCodes.OK) {
|
|
28
|
-
throw new Error(
|
|
28
|
+
throw new Error(`Thread scheduler has failed to run\n${threadSchedulerResponse}`);
|
|
29
29
|
}
|
|
30
30
|
|
|
31
31
|
await timeUtils.waitFor(2.5).seconds; // calls for the same records can override each other
|
|
@@ -43,13 +43,13 @@ const updatePolicyExpiryDateForRecord = async function(recordId, expiryDate, pol
|
|
|
43
43
|
const updateResponse = await contractors.services.updateExpiryDate(recordId, expiryDate, policyName);
|
|
44
44
|
|
|
45
45
|
if (updateResponse.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
46
|
-
throw new Error(
|
|
46
|
+
throw new Error(`Record expiry date could not be updated\n${updateResponse}`);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
const threadSchedulerResponse = await threadScheduler.runForRecords([recordId]);
|
|
50
50
|
|
|
51
51
|
if (threadSchedulerResponse.status !== httpResponseStatusCodes.OK) {
|
|
52
|
-
throw new Error(
|
|
52
|
+
throw new Error(`Thread scheduler has failed to run\n${threadSchedulerResponse}`);
|
|
53
53
|
}
|
|
54
54
|
|
|
55
55
|
await timeUtils.waitFor(2.5).seconds; // calls for the same records can override each other
|
|
@@ -15,6 +15,11 @@ const putRequestHandler = (url, apiKey, body, headers = {}, params = {}) => {
|
|
|
15
15
|
return requestHandler.putRequestHandler(url, body, headers, params);
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
const putFileRequestHandler = (url, apiKey, fileData, headers = {}) => {
|
|
19
|
+
enrichApiKey(headers, apiKey);
|
|
20
|
+
return requestHandler.putFileRequestHandler(url, fileData, headers);
|
|
21
|
+
};
|
|
22
|
+
|
|
18
23
|
const patchRequestHandler = (url, apiKey, body, headers = {}) => {
|
|
19
24
|
enrichApiKey(headers, apiKey);
|
|
20
25
|
return requestHandler.patchRequestHandler(url, body, headers);
|
|
@@ -33,6 +38,7 @@ module.exports = {
|
|
|
33
38
|
getRequestHandler,
|
|
34
39
|
postRequestHandler,
|
|
35
40
|
putRequestHandler,
|
|
41
|
+
putFileRequestHandler,
|
|
36
42
|
patchRequestHandler,
|
|
37
43
|
deleteRequestHandler
|
|
38
44
|
};
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const axios = require('axios');
|
|
2
|
+
const axiosFile = require('axios-file');
|
|
3
|
+
|
|
2
4
|
const errorValidation = require('../validations/errorValidation');
|
|
3
5
|
|
|
4
6
|
const getRequestHandler = async (url, headers = {}, params = {}) => {
|
|
@@ -31,6 +33,21 @@ const putRequestHandler = async (url, body, headers = {}, params = {}) => {
|
|
|
31
33
|
}
|
|
32
34
|
};
|
|
33
35
|
|
|
36
|
+
const putFileRequestHandler = async (url, fileData, headers = {}) => {
|
|
37
|
+
try {
|
|
38
|
+
const response = await axiosFile({
|
|
39
|
+
url,
|
|
40
|
+
method: 'put',
|
|
41
|
+
headers,
|
|
42
|
+
data: { file: fileData }
|
|
43
|
+
});
|
|
44
|
+
return response;
|
|
45
|
+
} catch (error) {
|
|
46
|
+
errorValidation.validateClientErrorResponseStatus(error);
|
|
47
|
+
return error.response;
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
34
51
|
const patchRequestHandler = async (url, body, headers = {}) => {
|
|
35
52
|
try {
|
|
36
53
|
const response = await axios.patch(url, body, { headers });
|
|
@@ -55,6 +72,7 @@ module.exports = {
|
|
|
55
72
|
getRequestHandler,
|
|
56
73
|
postRequestHandler,
|
|
57
74
|
putRequestHandler,
|
|
75
|
+
putFileRequestHandler,
|
|
58
76
|
patchRequestHandler,
|
|
59
77
|
deleteRequestHandler
|
|
60
78
|
};
|
|
@@ -12,7 +12,8 @@ const formats = {
|
|
|
12
12
|
fullMonthDayYear: 'MMMM DD, YYYY',
|
|
13
13
|
threadScheduler: '', // Passing empty string resolves moment.js format to ISO8601 standard like 2020-04-12T09:49:59Z;
|
|
14
14
|
monthDayYear12hTime: 'MMM D, YYYY h:mm A',
|
|
15
|
-
amPmTime: 'h:mm A'
|
|
15
|
+
amPmTime: 'h:mm A',
|
|
16
|
+
yearMonthDay: 'YYYY-MM-DD'
|
|
16
17
|
};
|
|
17
18
|
|
|
18
19
|
const peroids = {
|
|
@@ -34,6 +35,7 @@ const getThirtyFiveDaysAgoDate = format => moment().utc().subtract(35, peroids.d
|
|
|
34
35
|
const getCurrentDate = format => moment().utc().format(format || formats.threadScheduler);
|
|
35
36
|
const getDateInOneDay = format => moment().utc().add(1, peroids.days).format(format || formats.threadScheduler);
|
|
36
37
|
const getDateinSixDays = format => moment().utc().add(6, peroids.days).format(format || formats.threadScheduler);
|
|
38
|
+
const getDateInTwoMonths = format => moment().utc().add(2, peroids.months).format(format || formats.dayMonthYear);
|
|
37
39
|
const getDateinThirteenDays = format => moment().utc().add(13, peroids.days).format(format || formats.threadScheduler);
|
|
38
40
|
const getDateinTwentyNineDays = format => moment().utc().add(29, peroids.days).format(format || formats.threadScheduler);
|
|
39
41
|
const getOneWeekAgoDate = () => moment().utc().subtract(7, peroids.days).format(formats.dayMonthYear);
|
|
@@ -68,10 +70,6 @@ const getYearMonthDayFormat = date => {
|
|
|
68
70
|
return `${year}-${month}-${day}`;
|
|
69
71
|
};
|
|
70
72
|
|
|
71
|
-
const dateToIsoFormat = date => {
|
|
72
|
-
return new Date(date).toISOString();
|
|
73
|
-
};
|
|
74
|
-
|
|
75
73
|
const extractDateFromDateTime = date => {
|
|
76
74
|
let extractedDate = date;
|
|
77
75
|
|
|
@@ -134,6 +132,10 @@ const convertDateToNewFormat = (value, currentFormat, newFormat = formats.dayMon
|
|
|
134
132
|
return moment(value, currentFormat).format(newFormat);
|
|
135
133
|
};
|
|
136
134
|
|
|
135
|
+
const convertDateToLongInt = value => {
|
|
136
|
+
return Date.parse(value);
|
|
137
|
+
};
|
|
138
|
+
|
|
137
139
|
module.exports = {
|
|
138
140
|
formats,
|
|
139
141
|
getOneYearAgoDate,
|
|
@@ -151,6 +153,7 @@ module.exports = {
|
|
|
151
153
|
getDateinSixDays,
|
|
152
154
|
getDateinThirteenDays,
|
|
153
155
|
getDateinTwentyNineDays,
|
|
156
|
+
getDateInTwoMonths,
|
|
154
157
|
getInvitationDatesForNotResponsiveVendor,
|
|
155
158
|
getInvitationDatesForNotResponsiveTenant,
|
|
156
159
|
getAutomaticRenewalsExpirationDates,
|
|
@@ -159,7 +162,6 @@ module.exports = {
|
|
|
159
162
|
getAuditDateFormat,
|
|
160
163
|
getDateWithOffset,
|
|
161
164
|
getYearMonthDayFormat,
|
|
162
|
-
dateToIsoFormat,
|
|
163
165
|
getDayInMilliseconds,
|
|
164
166
|
extractDateFromDateTime,
|
|
165
167
|
getPreviousDateByDays,
|
|
@@ -167,5 +169,6 @@ module.exports = {
|
|
|
167
169
|
isDateAfterOther,
|
|
168
170
|
convertDateToNewFormat,
|
|
169
171
|
getOneWeekAgoDate,
|
|
170
|
-
getOneWeekAheadDate
|
|
172
|
+
getOneWeekAheadDate,
|
|
173
|
+
convertDateToLongInt
|
|
171
174
|
};
|
|
@@ -81,5 +81,9 @@ module.exports = {
|
|
|
81
81
|
getCompliantAuditConfig,
|
|
82
82
|
getNotCompliantConfig,
|
|
83
83
|
getAboutExpiredConfig,
|
|
84
|
-
getExpiredConfig
|
|
84
|
+
getExpiredConfig,
|
|
85
|
+
policySelections,
|
|
86
|
+
defaultPolicyDate: DEFAULT_POLICY_DATE,
|
|
87
|
+
defaultAMScore: DEFAULT_AM_SCORE,
|
|
88
|
+
defaultPolicyNumber: DEFAULT_POLICY_NUMBER
|
|
85
89
|
};
|
|
@@ -4,6 +4,7 @@ const { cloneObject } = require('../../common/utils/objectUtils');
|
|
|
4
4
|
const { eachOccurrence } = attributeNames;
|
|
5
5
|
const { generalLiability } = policyNames;
|
|
6
6
|
|
|
7
|
+
const { REQUIREMENT_SHARING_LEVELS } = require('../../saas/internal-api/requirements/consts/consts');
|
|
7
8
|
const DEFAULT_REQUIREMENT_NAME = 'Integration Requirement';
|
|
8
9
|
const DEFAULT_COVERAGE_VALUE = 1000000;
|
|
9
10
|
|
|
@@ -15,15 +16,17 @@ const getDefaultRequirementPolices = () => {
|
|
|
15
16
|
});
|
|
16
17
|
};
|
|
17
18
|
|
|
18
|
-
const defaultRequirementConfig = () => {
|
|
19
|
+
const defaultRequirementConfig = ({ name = DEFAULT_REQUIREMENT_NAME, sharingLevel = REQUIREMENT_SHARING_LEVELS.TAB } = {}) => {
|
|
19
20
|
return {
|
|
20
|
-
name
|
|
21
|
-
policies: getDefaultRequirementPolices()
|
|
21
|
+
name,
|
|
22
|
+
policies: getDefaultRequirementPolices(),
|
|
23
|
+
sharingLevel
|
|
22
24
|
};
|
|
23
25
|
};
|
|
24
26
|
|
|
25
27
|
module.exports = {
|
|
26
28
|
name: DEFAULT_REQUIREMENT_NAME,
|
|
29
|
+
value: DEFAULT_COVERAGE_VALUE,
|
|
27
30
|
getDefaultRequirementPolices,
|
|
28
31
|
defaultRequirementConfig
|
|
29
32
|
};
|
|
@@ -1,14 +1,20 @@
|
|
|
1
|
-
const
|
|
2
|
-
|
|
1
|
+
const path = require('path');
|
|
2
|
+
|
|
3
|
+
const { getEnv } = require('../../env');
|
|
4
|
+
const { credentials } = getEnv();
|
|
5
|
+
|
|
6
|
+
const auth = require('../../saas/internal-api/auth');
|
|
3
7
|
const coi = require('../../saas/internal-api/coi');
|
|
4
8
|
const compliance = require('../../saas/internal-api/compliance');
|
|
5
|
-
const auth = require('../../saas/internal-api/auth');
|
|
6
9
|
const contractors = require('../../saas/internal-api/contractors');
|
|
10
|
+
const requests = require('../../saas/internal-api/requests');
|
|
11
|
+
|
|
7
12
|
const auditConfigs = require('../../defaults/configs/auditConfigs');
|
|
8
13
|
const httpResponseStatusCodes = require('../../common/httpResponseStatusCodes.json');
|
|
9
14
|
const timeUtils = require('../../common/utils/timeUtils');
|
|
10
15
|
|
|
11
|
-
const filePath = '
|
|
16
|
+
const filePath = path.join(__dirname, '../../resources/coi/coi.pdf');
|
|
17
|
+
|
|
12
18
|
const complianceStatuses = {
|
|
13
19
|
complaint: 'complaint',
|
|
14
20
|
notCompliant: 'notCompliant',
|
|
@@ -22,7 +28,7 @@ const prepareRecord = async (recordCompany, recordEmail, status, tabId, requirem
|
|
|
22
28
|
context,
|
|
23
29
|
tabId,
|
|
24
30
|
requirementId,
|
|
25
|
-
{
|
|
31
|
+
{ // record
|
|
26
32
|
inviterEmail: credentials.superUser,
|
|
27
33
|
email: recordEmail,
|
|
28
34
|
companyName: recordCompany
|
|
@@ -30,21 +36,22 @@ const prepareRecord = async (recordCompany, recordEmail, status, tabId, requirem
|
|
|
30
36
|
);
|
|
31
37
|
|
|
32
38
|
if (!(requestData && requestData.id)) {
|
|
33
|
-
throw Error(`Failed to create record ${
|
|
39
|
+
throw Error(`Failed to create record ${recordCompany}\n${requestData}`);
|
|
34
40
|
}
|
|
35
41
|
|
|
36
42
|
const accountId = requestData.record.userId;
|
|
37
43
|
const projectId = requestData.projectInfo.projectId;
|
|
44
|
+
const recordId = requestData.record.contractorId;
|
|
38
45
|
|
|
39
46
|
const coiUpload = await coi.utils.uploadCoi(
|
|
40
|
-
|
|
47
|
+
recordId,
|
|
41
48
|
filePath,
|
|
42
49
|
uploaderType = coi.consts.UPLOADER_TYPES.ICS,
|
|
43
50
|
uploaderEmail = credentials.superUser
|
|
44
51
|
);
|
|
45
52
|
|
|
46
53
|
if (!(coiUpload && coiUpload.name)) {
|
|
47
|
-
throw Error(`Failed to upload COI for record ${
|
|
54
|
+
throw Error(`Failed to upload COI for record ${recordCompany}\n${coiUpload}`);
|
|
48
55
|
}
|
|
49
56
|
|
|
50
57
|
const auditorContext = await auth.services.getAuditorCookie();
|
|
@@ -73,17 +80,17 @@ const prepareRecord = async (recordCompany, recordEmail, status, tabId, requirem
|
|
|
73
80
|
auditorContext,
|
|
74
81
|
accountId,
|
|
75
82
|
projectId,
|
|
76
|
-
|
|
77
|
-
|
|
83
|
+
requirementId,
|
|
84
|
+
recordId,
|
|
78
85
|
auditConfig
|
|
79
86
|
);
|
|
80
87
|
} while (auditResponse.status !== httpResponseStatusCodes.NO_CONTENT && retries--);
|
|
81
88
|
|
|
82
89
|
if (auditResponse.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
83
|
-
throw Error(`Failed to audit record ${record.company}\n
|
|
90
|
+
throw Error(`Failed to audit record ${record.company}\n${auditResponse}`);
|
|
84
91
|
}
|
|
85
92
|
|
|
86
|
-
return
|
|
93
|
+
return recordId;
|
|
87
94
|
};
|
|
88
95
|
|
|
89
96
|
const prepareCompliantRecord = (recordCompany, recordEmail, tabId, requirementId, context) => {
|
|
@@ -102,23 +109,33 @@ const prepareAboutToExpiredRecord = (recordCompany, recordEmail, tabId, requirem
|
|
|
102
109
|
return prepareRecord(recordCompany, recordEmail, complianceStatuses.aboutToExpired, tabId, requirementId, context);
|
|
103
110
|
};
|
|
104
111
|
|
|
112
|
+
const prepareWaivedRecord = async (recordCompany, recordEmail, tabId, requirementId, context) => {
|
|
113
|
+
const recordId = await prepareRecord(recordCompany, recordEmail, complianceStatuses.notCompliant, tabId, requirementId, context);
|
|
114
|
+
|
|
115
|
+
const record = await contractors.services.getContractorById(recordId, context);
|
|
116
|
+
await compliance.services.waive.waiveAll(record, context);
|
|
117
|
+
|
|
118
|
+
return recordId;
|
|
119
|
+
};
|
|
120
|
+
|
|
105
121
|
const prepareAwaitingNewCoiRecord = async (recordCompany, recordEmail, tabId, requirementId, context) => {
|
|
106
|
-
const
|
|
122
|
+
const recordId = await prepareRecord(recordCompany, recordEmail, complianceStatuses.awaitingNewCoi, tabId, requirementId, context);
|
|
107
123
|
|
|
108
|
-
const recordVerificationModel = await contractors.services.getRecordVerificationModel(
|
|
124
|
+
const recordVerificationModel = await contractors.services.getRecordVerificationModel(recordId, context);
|
|
109
125
|
const sendGapsResponse = await contractors.services.sendGaps(recordVerificationModel, context);
|
|
110
126
|
|
|
111
127
|
if (sendGapsResponse.status !== httpResponseStatusCodes.OK) {
|
|
112
|
-
throw Error(`Failed to send gaps to ${recordCompany}\n
|
|
128
|
+
throw Error(`Failed to send gaps to ${recordCompany}\n${sendGapsResponse}`);
|
|
113
129
|
}
|
|
114
130
|
|
|
115
|
-
return
|
|
131
|
+
return recordId;
|
|
116
132
|
};
|
|
117
133
|
|
|
118
134
|
module.exports = {
|
|
119
135
|
prepareCompliantRecord,
|
|
120
136
|
prepareNotCompliantRecord,
|
|
121
137
|
prepareExpiredRecord,
|
|
138
|
+
prepareWaivedRecord,
|
|
122
139
|
prepareAboutToExpiredRecord,
|
|
123
140
|
prepareAwaitingNewCoiRecord
|
|
124
141
|
};
|
package/src/index.js
CHANGED
|
@@ -26,7 +26,7 @@ const getInternalAPI = () => {
|
|
|
26
26
|
|
|
27
27
|
const reports = require('./saas/internal-api/reports');
|
|
28
28
|
const charts = require('./saas/internal-api/homepageCharts');
|
|
29
|
-
const
|
|
29
|
+
const dashboard = require('./saas/internal-api/dashboard');
|
|
30
30
|
|
|
31
31
|
const globalRecord = require('./saas/internal-api/globalRecord');
|
|
32
32
|
const vendorProfile = require('./saas/internal-api/vendorProfile');
|
|
@@ -49,7 +49,7 @@ const getInternalAPI = () => {
|
|
|
49
49
|
reports,
|
|
50
50
|
users,
|
|
51
51
|
charts,
|
|
52
|
-
|
|
52
|
+
dashboard,
|
|
53
53
|
globalRecord,
|
|
54
54
|
vendorProfile,
|
|
55
55
|
serviceArea,
|
|
@@ -63,11 +63,12 @@ const getInternalAPI = () => {
|
|
|
63
63
|
|
|
64
64
|
const getOpenAPI = () => {
|
|
65
65
|
const accounts = require('./saas/openapi/accounts/accounts.service');
|
|
66
|
-
const tabs = require('./saas/openapi/tabs/tabs.service');
|
|
67
|
-
const requests = require('./saas/openapi/requests');
|
|
68
66
|
const projects = require('./saas/openapi/projects/projects.service');
|
|
67
|
+
const tabs = require('./saas/openapi/tabs/tabs.service');
|
|
69
68
|
const requirements = require('./saas/openapi/requirements');
|
|
70
|
-
const
|
|
69
|
+
const requests = require('./saas/openapi/requests');
|
|
70
|
+
const coi = require('./saas/openapi/coi/coi.service');
|
|
71
|
+
const openAPI = { accounts, projects, tabs, requirements, requests, coi };
|
|
71
72
|
return openAPI;
|
|
72
73
|
};
|
|
73
74
|
|
|
@@ -41,7 +41,7 @@ const getOrCreateAccount = async (createAccountModel, context) => {
|
|
|
41
41
|
const response = await accountsAPI.create(createAccountModel, context);
|
|
42
42
|
|
|
43
43
|
if (!response.data) {
|
|
44
|
-
throw new Error(`Account by the name ${createAccountModel.companyName} was not created`);
|
|
44
|
+
throw new Error(`Account by the name ${createAccountModel.companyName} was not created\n${response}`);
|
|
45
45
|
}
|
|
46
46
|
|
|
47
47
|
return response.data;
|
|
@@ -12,8 +12,7 @@ const updateAccountSettings = (updateAccountSettingsModel, context) => {
|
|
|
12
12
|
};
|
|
13
13
|
|
|
14
14
|
const restoreAccountSettings = (accountId, context) => {
|
|
15
|
-
const
|
|
16
|
-
const updateAccountSettingsModel = new UpdateAccountSettingsModel(accountId, isHighPriority, hasAnalyticsDashboard, isExcludedFromNetwork, isOcrEnabled, isCoverageAudit, isAccountRequirementsEnabled);
|
|
15
|
+
const updateAccountSettingsModel = new UpdateAccountSettingsModel(accountId);
|
|
17
16
|
return accountsAPI.updateAccountSettings(updateAccountSettingsModel, context);
|
|
18
17
|
};
|
|
19
18
|
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
class UpdateAccountSettingsModel {
|
|
2
2
|
constructor(
|
|
3
3
|
accountId,
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
4
|
+
{
|
|
5
|
+
isHighPriority = false,
|
|
6
|
+
hasAnalyticsDashboard = false,
|
|
7
|
+
isEmailOnWelcomePageVA = false,
|
|
8
|
+
isExcludedFromNetwork = false,
|
|
9
|
+
isOcrEnabled = false,
|
|
10
|
+
isCoverageAudit = false,
|
|
11
|
+
isAccountRequirementsEnabled = false
|
|
12
|
+
} = {}
|
|
11
13
|
) {
|
|
12
14
|
this.accountId = accountId;
|
|
13
15
|
this.isHighPriority = isHighPriority;
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
const { getEnv, requiredValidation, getSystemUserIdentity, addUserIdentity } = require('../../../../env');
|
|
2
|
+
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
3
|
+
|
|
2
4
|
const { credentials } = getEnv();
|
|
3
5
|
const authApi = require('./auth.api');
|
|
4
6
|
|
|
@@ -11,13 +13,18 @@ const getAuthCookie = async (email, password) => {
|
|
|
11
13
|
|
|
12
14
|
try {
|
|
13
15
|
const response = await authApi.login(email, password);
|
|
16
|
+
|
|
17
|
+
if (response.status !== httpResponseStatusCodes.OK) {
|
|
18
|
+
throw Error(`Error: ${JSON.stringify(response.data)}`);
|
|
19
|
+
}
|
|
20
|
+
|
|
14
21
|
const authCookie = response.headers['set-cookie'].find(item => item.startsWith('JonesToken='));
|
|
15
22
|
|
|
16
23
|
addUserIdentity(email, authCookie, response.data.id);
|
|
17
24
|
|
|
18
25
|
return authCookie;
|
|
19
26
|
} catch (error) {
|
|
20
|
-
throw new Error(`Failed to login
|
|
27
|
+
throw new Error(`Failed to login with email: ${email}\nError: ${error}`);
|
|
21
28
|
}
|
|
22
29
|
};
|
|
23
30
|
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
const env = require('../../../../../env');
|
|
2
2
|
|
|
3
3
|
const waiveApi = require('./waive.api');
|
|
4
|
-
const { WaiveRequestModel, RetractRequestModel } = require('../../models/waive/waive.model');
|
|
4
|
+
const { WaiveRequestModel, RetractRequestModel, WAIVER_REASONS } = require('../../models/waive/waive.model');
|
|
5
5
|
const { validateType } = require('../../../../../common/validations/typeValidations');
|
|
6
6
|
const util = require('../../utils/util');
|
|
7
|
+
const httpResponseStatusCodes = require('../../../../../common/httpResponseStatusCodes.json');
|
|
7
8
|
|
|
8
9
|
const { credentials } = env.getEnv();
|
|
9
10
|
const userTypes = require('../../../../../common/consts/userTypes');
|
|
@@ -91,8 +92,22 @@ const getPolicyAuditIdFromRecord = (record, policyName, attributeName) => {
|
|
|
91
92
|
return attribute.auditId;
|
|
92
93
|
};
|
|
93
94
|
|
|
95
|
+
const waiveAll = async (record, context, { reason = WAIVER_REASONS.BUSINESS_DECISION, note = 'WAIVED AUTOMATICALLY' } = {}) => {
|
|
96
|
+
const allWaivablePolicies = util.getAllWaivablePolicies(record, context);
|
|
97
|
+
|
|
98
|
+
for (const waivable of allWaivablePolicies) {
|
|
99
|
+
const waiveModel = getWaiveModel(record, waivable.policyName, waivable.attributeName, reason, note);
|
|
100
|
+
const waiveResponse = await waive(waiveModel, context);
|
|
101
|
+
|
|
102
|
+
if (waiveResponse.status !== httpResponseStatusCodes.OK) {
|
|
103
|
+
throw Error(`Failed to waive ${waivable.policyName} - ${waivable.attributeName} for ${record.company}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
};
|
|
107
|
+
|
|
94
108
|
module.exports = {
|
|
95
109
|
waive,
|
|
110
|
+
waiveAll,
|
|
96
111
|
retract,
|
|
97
112
|
getWaiveModel,
|
|
98
113
|
getRetractModel,
|
|
@@ -46,6 +46,29 @@ const getAttributeNameByGap = function(record, policyName, gap) {
|
|
|
46
46
|
return attribute.limitname;
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
+
const getAllWaivablePolicies = function(record) {
|
|
50
|
+
const waivable = [];
|
|
51
|
+
|
|
52
|
+
const policies = record.reviewbyAuditor;
|
|
53
|
+
for (const policy of policies) {
|
|
54
|
+
const {
|
|
55
|
+
insuranceName: policyName,
|
|
56
|
+
errorList: errorList
|
|
57
|
+
} = policy;
|
|
58
|
+
|
|
59
|
+
for (const error of errorList) {
|
|
60
|
+
if (error.warningStatus === 'POLICYERROR' && error.errorStatus === 'notIgnored') {
|
|
61
|
+
waivable.push({
|
|
62
|
+
policyName: policyName,
|
|
63
|
+
attributeName: error.limitname
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return waivable;
|
|
70
|
+
};
|
|
71
|
+
|
|
49
72
|
const getPolicyId = (policyName, requirement) => {
|
|
50
73
|
if (!policyName || policyName === 'Certificate of Insurance') {
|
|
51
74
|
return DEFAULT_POLICY_ID;
|
|
@@ -162,7 +185,8 @@ module.exports = {
|
|
|
162
185
|
getAuditorId,
|
|
163
186
|
getAttributeKey,
|
|
164
187
|
getAttributeNameByGap,
|
|
165
|
-
getWaiveReason
|
|
188
|
+
getWaiveReason,
|
|
189
|
+
getAllWaivablePolicies
|
|
166
190
|
};
|
|
167
191
|
|
|
168
192
|
const certificateEndorsmentsList = [
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const requests = require('../../../../common/requests/cookieAuth/requests');
|
|
2
|
+
const { backendUrl } = require('../../../../env').getEnv();
|
|
3
|
+
|
|
4
|
+
const Endpoints = {
|
|
5
|
+
innerPageRecords: `${backendUrl}/saas/analytics/dashboard/requests`,
|
|
6
|
+
policySummary: `${backendUrl}/saas/analytics/dashboard/policies-summary`,
|
|
7
|
+
complianceSummary: `${backendUrl}/saas/user/properties/compliance-summary`,
|
|
8
|
+
expirationPerMonth: `${backendUrl}/saas/analytics/dashboard/expiration-per-month`,
|
|
9
|
+
requireAttention: `${backendUrl}/saas/analytics/dashboard/requireAttention`
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const getSortedRecordsForDashboardInnerPage = (dashboardCriteriaModel, context) => {
|
|
13
|
+
return requests.postRequestHandler(Endpoints.innerPageRecords, dashboardCriteriaModel, context);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const getPolicySummaryCharts = (dashboardCriteriaModel, context) => {
|
|
17
|
+
return requests.postRequestHandler(Endpoints.policySummary, dashboardCriteriaModel, context);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const getComplianceSummaryCharts = (dashboardCriteriaModel, context) => {
|
|
21
|
+
return requests.postRequestHandler(Endpoints.complianceSummary, dashboardCriteriaModel, context);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const getExpirationPerMonth = (dashboardCriteriaModel, context) => {
|
|
25
|
+
return requests.postRequestHandler(Endpoints.expirationPerMonth, dashboardCriteriaModel, context);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getRequireAttention = (dashboardCriteriaModel, context) => {
|
|
29
|
+
return requests.postRequestHandler(Endpoints.requireAttention, dashboardCriteriaModel, context);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
module.exports = {
|
|
33
|
+
getSortedRecordsForDashboardInnerPage,
|
|
34
|
+
getPolicySummaryCharts,
|
|
35
|
+
getComplianceSummaryCharts,
|
|
36
|
+
getExpirationPerMonth,
|
|
37
|
+
getRequireAttention
|
|
38
|
+
};
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const recordListAPI = require('./recordList.api');
|
|
2
|
+
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
3
|
+
|
|
4
|
+
const getSortedRecordsForDashboardInnerPage = async (dashboardCriteriaModel, context) => {
|
|
5
|
+
const innerPageResponse = await recordListAPI.getSortedRecordsForDashboardInnerPage(dashboardCriteriaModel, context);
|
|
6
|
+
|
|
7
|
+
if (innerPageResponse.status !== httpResponseStatusCodes.OK) {
|
|
8
|
+
throw Error(`Get dashboard inner page has fail\n${innerPageResponse}`);
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
return innerPageResponse.data;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const getPolicySummaryCharts = async (dashboardCriteriaModel, context) => {
|
|
15
|
+
const responseChart = await recordListAPI.getPolicySummaryCharts(dashboardCriteriaModel, context);
|
|
16
|
+
|
|
17
|
+
if (responseChart.status !== httpResponseStatusCodes.OK) {
|
|
18
|
+
throw Error(`Get policy summary chart has fail\n${responseChart}`);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
return responseChart.data;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const getComplianceSummaryCharts = async (dashboardCriteriaModel, context) => {
|
|
25
|
+
const responseChart = await recordListAPI.getComplianceSummaryCharts(dashboardCriteriaModel, context);
|
|
26
|
+
|
|
27
|
+
if (responseChart.status !== httpResponseStatusCodes.OK) {
|
|
28
|
+
throw Error(`Get compliance summary chart has fail\n${responseChart}`);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
return responseChart.data;
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const getExpirationPerMonth = async (dashboardCriteriaModel, context) => {
|
|
35
|
+
const responseChart = await recordListAPI.getExpirationPerMonth(dashboardCriteriaModel, context);
|
|
36
|
+
|
|
37
|
+
if (responseChart.status !== httpResponseStatusCodes.OK) {
|
|
38
|
+
throw Error(`Get expiration per chart has fail\n${responseChart}`);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
return responseChart.data;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const getRequireAttentionChart = async (dashboardCriteriaModel, context) => {
|
|
45
|
+
const responseChart = await recordListAPI.getRequireAttention(dashboardCriteriaModel, context);
|
|
46
|
+
|
|
47
|
+
if (responseChart.status !== httpResponseStatusCodes.OK) {
|
|
48
|
+
throw Error(`Get require attention chart has fail\n${responseChart}`);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return responseChart.data;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
module.exports = {
|
|
55
|
+
getSortedRecordsForDashboardInnerPage,
|
|
56
|
+
getPolicySummaryCharts,
|
|
57
|
+
getComplianceSummaryCharts,
|
|
58
|
+
getExpirationPerMonth,
|
|
59
|
+
getRequireAttentionChart
|
|
60
|
+
};
|
|
@@ -99,7 +99,7 @@ const getLastMessage = async (
|
|
|
99
99
|
const response = await getAllMessages(emailModel);
|
|
100
100
|
|
|
101
101
|
if (response.status !== httpResponseStatusCodes.OK) {
|
|
102
|
-
throw new Error(
|
|
102
|
+
throw new Error(`Inbox messages could not be retrieved\n${response}`);
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
await getLatestMessage(response.data);
|
|
@@ -110,7 +110,7 @@ const getLastMessage = async (
|
|
|
110
110
|
const response = await deleteMultipleMessages([newestId]);
|
|
111
111
|
|
|
112
112
|
if (response.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
113
|
-
throw new Error(`Failed to delete email with ID : ${newestId}
|
|
113
|
+
throw new Error(`Failed to delete email with ID : ${newestId}\n${response}`);
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
|
|
@@ -14,7 +14,8 @@ const Endpoints = {
|
|
|
14
14
|
getGlobalRecordByPolicyNumber: policyNumber => `${nodeBackendUrl}/global-record/policyNumber/${policyNumber}`,
|
|
15
15
|
publishGlobalRecord: `${backendUrl}/saas/global-record/publish`,
|
|
16
16
|
getGlobalRecordLinkedRecords: id => `${backendUrl}/saas/global-record/${id}/linked-records`,
|
|
17
|
-
splitToNewGlobalRecord: `${backendUrl}/saas/global-record/split-to-new
|
|
17
|
+
splitToNewGlobalRecord: `${backendUrl}/saas/global-record/split-to-new`,
|
|
18
|
+
getGlobalByRecordId: recordId => `${backendUrl}/saas/global-record/${recordId}`
|
|
18
19
|
};
|
|
19
20
|
|
|
20
21
|
const getGlobalRecord = async (id, nodeBackendSecret) => {
|
|
@@ -61,6 +62,10 @@ const splitToNewGlobalRecord = ({ recordId, glPolicyNumber }, context) => {
|
|
|
61
62
|
return cookieAuthRequests.postRequestHandler(Endpoints.splitToNewGlobalRecord, { recordId, glPolicyNumber }, context);
|
|
62
63
|
};
|
|
63
64
|
|
|
65
|
+
const getGlobalRecordByRecordId = (recordId, context) => {
|
|
66
|
+
return cookieAuthRequests.getRequestHandler(Endpoints.getGlobalByRecordId(recordId), {}, context);
|
|
67
|
+
};
|
|
68
|
+
|
|
64
69
|
module.exports = {
|
|
65
70
|
createGlobalRecord,
|
|
66
71
|
getGlobalRecord,
|
|
@@ -72,5 +77,6 @@ module.exports = {
|
|
|
72
77
|
getGlobalRecordByPolicyNumber,
|
|
73
78
|
publishGlobalRecord,
|
|
74
79
|
getGlobalRecordLinkedRecords,
|
|
75
|
-
splitToNewGlobalRecord
|
|
80
|
+
splitToNewGlobalRecord,
|
|
81
|
+
getGlobalRecordByRecordId
|
|
76
82
|
};
|
|
@@ -2,6 +2,7 @@ const globalRecordAPI = require('./global.record.api');
|
|
|
2
2
|
const { CreateGlobalRecordModel } = require('../models/global.record.model');
|
|
3
3
|
const { validateType } = require('../../../../common/validations/typeValidations');
|
|
4
4
|
const { nodeBackendSecret } = require('../../../../env').getEnv();
|
|
5
|
+
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
5
6
|
|
|
6
7
|
const getGlobalRecordById = async id => {
|
|
7
8
|
return globalRecordAPI.getGlobalRecord(id, nodeBackendSecret);
|
|
@@ -65,6 +66,16 @@ const splitToNewGlobalRecord = async (recordId, glPolicyNumber, context) => {
|
|
|
65
66
|
return globalRecordAPI.splitToNewGlobalRecord(requestData, context);
|
|
66
67
|
};
|
|
67
68
|
|
|
69
|
+
const getGlobalRecordByRecordId = async (recordId, context) => {
|
|
70
|
+
const response = await globalRecordAPI.getGlobalRecordByRecordId(recordId, context);
|
|
71
|
+
|
|
72
|
+
if (response.status !== httpResponseStatusCodes.OK) {
|
|
73
|
+
throw Error(`Failed to get global record by recordId - ${recordId}`, response.data);
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return response.data;
|
|
77
|
+
};
|
|
78
|
+
|
|
68
79
|
module.exports = {
|
|
69
80
|
createGlobalRecord,
|
|
70
81
|
getGlobalRecordById,
|
|
@@ -79,5 +90,6 @@ module.exports = {
|
|
|
79
90
|
getGlobalRecordByPolicyNumber,
|
|
80
91
|
publishGlobalRecord,
|
|
81
92
|
getGlobalRecordLinkedRecords,
|
|
82
|
-
splitToNewGlobalRecord
|
|
93
|
+
splitToNewGlobalRecord,
|
|
94
|
+
getGlobalRecordByRecordId
|
|
83
95
|
};
|
|
@@ -3,6 +3,7 @@ const { backendUrl } = require('../../../../env').getEnv();
|
|
|
3
3
|
|
|
4
4
|
const Endpoints = {
|
|
5
5
|
create: `${backendUrl}/saas/requests/invite`,
|
|
6
|
+
addRequestToRecord: (recordId, tabId) => `${backendUrl}/saas/${tabId}/request/${recordId}`,
|
|
6
7
|
publicLinkInvite: `${backendUrl}/_saas/requests/publicinvite`,
|
|
7
8
|
edit: contractorId => `${backendUrl}/saas/requests/${contractorId}/update`,
|
|
8
9
|
getById: requestId => `${backendUrl}/saas/request/${requestId}`,
|
|
@@ -16,6 +17,10 @@ const createRequest = (createRequestModel, context) => {
|
|
|
16
17
|
return requests.postRequestHandler(Endpoints.create, createRequestModel, context);
|
|
17
18
|
};
|
|
18
19
|
|
|
20
|
+
const addRequestToRecord = (recordId, tabId, context) => {
|
|
21
|
+
return requests.postRequestHandler(Endpoints.addRequestToRecord(recordId, tabId), {}, context);
|
|
22
|
+
};
|
|
23
|
+
|
|
19
24
|
const inviteRequestViaPublicLink = (createRequestModel, context) => {
|
|
20
25
|
return requests.postRequestHandler(Endpoints.publicLinkInvite, createRequestModel, context);
|
|
21
26
|
};
|
|
@@ -45,6 +50,7 @@ const requestsGlobalSearch = (projectId, searchWord, context) => {
|
|
|
45
50
|
|
|
46
51
|
module.exports = {
|
|
47
52
|
createRequest,
|
|
53
|
+
addRequestToRecord,
|
|
48
54
|
inviteRequestViaPublicLink,
|
|
49
55
|
editRequestAndRecordDetails,
|
|
50
56
|
getRequestById,
|
|
@@ -8,6 +8,10 @@ const createRequest = async (createRequestModel, context) => {
|
|
|
8
8
|
return requestsAPI.createRequest(createRequestModel, context);
|
|
9
9
|
};
|
|
10
10
|
|
|
11
|
+
const addRequestToRecord = async (recordId, tabId, context) => {
|
|
12
|
+
return requestsAPI.addRequestToRecord(recordId, tabId, context);
|
|
13
|
+
};
|
|
14
|
+
|
|
11
15
|
const inviteRequestViaPublicLink = async (createRequestModel, context) => {
|
|
12
16
|
validateType(createRequestModel, CreateRequestModel);
|
|
13
17
|
return requestsAPI.inviteRequestViaPublicLink(createRequestModel, context);
|
|
@@ -73,6 +77,7 @@ const requestsGlobalSearch = (projectId, searchWord, context) => {
|
|
|
73
77
|
|
|
74
78
|
module.exports = {
|
|
75
79
|
createRequest,
|
|
80
|
+
addRequestToRecord,
|
|
76
81
|
inviteRequestViaPublicLink,
|
|
77
82
|
editRequestAndRecordDetails,
|
|
78
83
|
getRequestsByTabId,
|
|
@@ -2,6 +2,7 @@ const requirementsAPI = require('./requirements.api');
|
|
|
2
2
|
const { CreateRequirementModel } = require('../models/create.requirement.model');
|
|
3
3
|
const { UpdateRequirementModel } = require('../models/update.requirement.model');
|
|
4
4
|
const requirementUtils = require('../utils/utils');
|
|
5
|
+
const httpResponseStatusCodes = require('../../../../common/httpResponseStatusCodes.json');
|
|
5
6
|
|
|
6
7
|
const { validateType } = require('../../../../common/validations/typeValidations');
|
|
7
8
|
|
|
@@ -79,6 +80,25 @@ const getUpdatedRequirementModel = async (updatedRequirement, tabId, context) =>
|
|
|
79
80
|
return requirementUtils.getUpdateRequirementModel(updatedRequirement);
|
|
80
81
|
};
|
|
81
82
|
|
|
83
|
+
const deleteAllRequirementsInTabs = async (tabIds, context) => {
|
|
84
|
+
const failedToDeleteRequirements = [];
|
|
85
|
+
for (const tabId of tabIds) {
|
|
86
|
+
const { data: existingRequirements } = await getRequirementsByTabId(tabId, context);
|
|
87
|
+
for (const requirement of existingRequirements) {
|
|
88
|
+
const response = await deleteByRequirementId(requirement.id, context);
|
|
89
|
+
|
|
90
|
+
if (response.status !== httpResponseStatusCodes.OK) {
|
|
91
|
+
console.error('Failed to delete requirement: ', requirement.id);
|
|
92
|
+
failedToDeleteRequirements.push(response);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
if (failedToDeleteRequirements.length) {
|
|
98
|
+
throw Error(`Failed to delete ${failedToDeleteRequirements.length} of ${existingRequirements.length} requirements in account. Failed with status: ${ failedToDeleteRequirements[0].status }`);
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
|
|
82
102
|
module.exports = {
|
|
83
103
|
createRequirement,
|
|
84
104
|
getRequirementById,
|
|
@@ -91,5 +111,6 @@ module.exports = {
|
|
|
91
111
|
deleteByRequirementId,
|
|
92
112
|
deleteRequirementByName,
|
|
93
113
|
getCreateRequirementModel,
|
|
94
|
-
getUpdatedRequirementModel
|
|
114
|
+
getUpdatedRequirementModel,
|
|
115
|
+
deleteAllRequirementsInTabs
|
|
95
116
|
};
|
|
@@ -2,7 +2,8 @@ const createModel = require('./models/create.requirement.model');
|
|
|
2
2
|
const updateModel = require('./models/update.requirement.model');
|
|
3
3
|
const policyModel = require('./models/policy.model');
|
|
4
4
|
const services = require('./api/requirements.service');
|
|
5
|
+
const consts = require('./consts/consts');
|
|
5
6
|
|
|
6
7
|
const models = { create: createModel, update: updateModel, policy: policyModel };
|
|
7
8
|
|
|
8
|
-
module.exports = { services, models };
|
|
9
|
+
module.exports = { services, models, consts };
|
|
@@ -18,7 +18,7 @@ const runThreadScheduler = async ({ contractorIds = [], scheduledReportsIds = []
|
|
|
18
18
|
}
|
|
19
19
|
|
|
20
20
|
if (response.status !== httpResponseStatusCodes.OK) {
|
|
21
|
-
throw new Error(
|
|
21
|
+
throw new Error(`Thread scheduler has failed to run\n${response}`);
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
return response;
|
|
@@ -43,7 +43,7 @@ const getOrCreateUser = async (email, role, projectsIds, context, { fullName = r
|
|
|
43
43
|
const inviteResponse = await inviteUser([inviteUserModel], context);
|
|
44
44
|
|
|
45
45
|
if (inviteResponse.status !== httpResponseStatusCodes.NO_CONTENT) {
|
|
46
|
-
throw new Error(`Failed to invite user with email: ${email}
|
|
46
|
+
throw new Error(`Failed to invite user with email: ${email}\n${inviteResponse}`);
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
userResponse = await getUserByEmail(email, context);
|
|
@@ -57,7 +57,7 @@ const getOrCreateUser = async (email, role, projectsIds, context, { fullName = r
|
|
|
57
57
|
const signupResponse = await signupUser(signupUserModel, context);
|
|
58
58
|
|
|
59
59
|
if (signupResponse.status !== httpResponseStatusCodes.OK) {
|
|
60
|
-
throw new Error(`Failed to signup user with email: ${email}
|
|
60
|
+
throw new Error(`Failed to signup user with email: ${email}\n${signupResponse}`);
|
|
61
61
|
}
|
|
62
62
|
|
|
63
63
|
userResponse = await getUserByEmail(email, context);
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
const requests = require('../../../common/requests/apiKeyAuth/requests');
|
|
2
|
+
const { openapiUrl } = require('../../../env').getEnv();
|
|
3
|
+
const { isLocalhost } = require('../../../env');
|
|
4
|
+
|
|
5
|
+
const contractorUrl = isLocalhost() ? 'contractors' : 'records';
|
|
6
|
+
|
|
7
|
+
const Endpoints = {
|
|
8
|
+
uploadCoi: requestId => `${openapiUrl}/${contractorUrl}/${requestId}/coi`,
|
|
9
|
+
downloadCoi: requestId => `${openapiUrl}/${contractorUrl}/${requestId}/coi-link`
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const uploadCoi = (apiKey, requestId, fileData) => {
|
|
13
|
+
return requests.putFileRequestHandler(Endpoints.uploadCoi(requestId), apiKey, fileData);
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const downloadCoi = (apiKey, requestId) => {
|
|
17
|
+
return requests.getRequestHandler(Endpoints.downloadCoi(requestId), apiKey);
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
module.exports = { uploadCoi, downloadCoi };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
const fs = require('fs');
|
|
2
|
+
|
|
3
|
+
const coiApis = require('./coi.api');
|
|
4
|
+
|
|
5
|
+
const uploadCoi = (apiKey, requestId, filePath) => {
|
|
6
|
+
const fileData = fs.createReadStream(filePath);
|
|
7
|
+
return coiApis.uploadCoi(apiKey, requestId, fileData);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
const downloadCoi = (apiKey, requestId) => {
|
|
11
|
+
return coiApis.downloadCoi(apiKey, requestId);
|
|
12
|
+
};
|
|
13
|
+
module.exports = { uploadCoi, downloadCoi };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
const services = require('./requests.service');
|
|
2
2
|
|
|
3
3
|
const InviteRequestModel = require('./models/invite.request.model');
|
|
4
|
-
const
|
|
4
|
+
const UpdateRequestModel = require('./models/update.request.model');
|
|
5
|
+
const models = { InviteRequestModel, UpdateRequestModel };
|
|
5
6
|
|
|
6
7
|
module.exports = { ... services, models };
|
|
@@ -3,17 +3,17 @@ class InviteRequestModel {
|
|
|
3
3
|
email,
|
|
4
4
|
company,
|
|
5
5
|
{
|
|
6
|
-
requirementId,
|
|
7
|
-
firstName,
|
|
8
|
-
lastName,
|
|
9
|
-
dba,
|
|
10
|
-
address,
|
|
11
|
-
city,
|
|
12
|
-
state,
|
|
13
|
-
zipCode,
|
|
14
|
-
phoneNumber,
|
|
15
|
-
startDate,
|
|
16
|
-
endDate
|
|
6
|
+
requirementId = null,
|
|
7
|
+
firstName = null,
|
|
8
|
+
lastName = null,
|
|
9
|
+
dba = null,
|
|
10
|
+
address = null,
|
|
11
|
+
city = null,
|
|
12
|
+
state = null,
|
|
13
|
+
zipCode = null,
|
|
14
|
+
phoneNumber = null,
|
|
15
|
+
startDate = null,
|
|
16
|
+
endDate = null
|
|
17
17
|
} = {}
|
|
18
18
|
) {
|
|
19
19
|
this.email = email;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
class UpdateRequestModel {
|
|
2
|
+
constructor(
|
|
3
|
+
email,
|
|
4
|
+
company,
|
|
5
|
+
{
|
|
6
|
+
firstName = null,
|
|
7
|
+
lastName = null,
|
|
8
|
+
dba = null,
|
|
9
|
+
address = null,
|
|
10
|
+
city = null,
|
|
11
|
+
state = null,
|
|
12
|
+
zipCode = null,
|
|
13
|
+
phoneNumber = null,
|
|
14
|
+
startDate = null,
|
|
15
|
+
endDate = null
|
|
16
|
+
} = {}
|
|
17
|
+
) {
|
|
18
|
+
this.email = email;
|
|
19
|
+
this.company = company;
|
|
20
|
+
this.firstName = firstName;
|
|
21
|
+
this.lastName = lastName;
|
|
22
|
+
this.dba = dba;
|
|
23
|
+
this.address = address;
|
|
24
|
+
this.city = city;
|
|
25
|
+
this.state = state;
|
|
26
|
+
this.zipCode = zipCode;
|
|
27
|
+
this.phoneNumber = phoneNumber;
|
|
28
|
+
this.startDate = startDate;
|
|
29
|
+
this.endDate = endDate;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
module.exports = {
|
|
34
|
+
UpdateRequestModel
|
|
35
|
+
};
|
|
@@ -2,19 +2,75 @@ const requests = require('../../../common/requests/apiKeyAuth/requests');
|
|
|
2
2
|
const { openapiUrl } = require('../../../env').getEnv();
|
|
3
3
|
const { isLocalhost } = require('../../../env');
|
|
4
4
|
|
|
5
|
-
const
|
|
5
|
+
const recordsUrl = isLocalhost() ? 'contractors' : 'records';
|
|
6
6
|
|
|
7
7
|
const Endpoints = {
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
inviteRequest: tabId => `${openapiUrl}/tabs/${tabId}/${recordsUrl}`,
|
|
9
|
+
requestById: requestId => `${openapiUrl}/${recordsUrl}/${requestId}`,
|
|
10
|
+
getAllRequests: `${openapiUrl}/${recordsUrl}/all`,
|
|
11
|
+
getRequestsByEmail: `${openapiUrl}/${recordsUrl}`,
|
|
12
|
+
getModifiedRequests: `${openapiUrl}/${recordsUrl}/modified`,
|
|
13
|
+
getPolicies: requestId => `${openapiUrl}/${recordsUrl}/${requestId}/compliance-report`,
|
|
14
|
+
changeRequirement: (requestId, requirementId) =>
|
|
15
|
+
`${openapiUrl}/${recordsUrl}/${requestId}/requirement/${requirementId}`,
|
|
16
|
+
archive: requestId => `${openapiUrl}/${recordsUrl}/${requestId}/archive`,
|
|
17
|
+
restore: requestId => `${openapiUrl}/${recordsUrl}/${requestId}/restore`
|
|
10
18
|
};
|
|
11
19
|
|
|
12
|
-
const
|
|
13
|
-
return requests.
|
|
20
|
+
const inviteRequest = (apiKey, tabId, params) => {
|
|
21
|
+
return requests.postRequestHandler(Endpoints.inviteRequest(tabId), apiKey, params);
|
|
14
22
|
};
|
|
15
23
|
|
|
16
|
-
const
|
|
17
|
-
return requests.
|
|
24
|
+
const getAllRequests = (apiKey, params) => {
|
|
25
|
+
return requests.getRequestHandler(Endpoints.getAllRequests, apiKey, params);
|
|
18
26
|
};
|
|
19
27
|
|
|
20
|
-
|
|
28
|
+
const getRequestsByEmail = (apiKey, email) => {
|
|
29
|
+
const params = { email };
|
|
30
|
+
return requests.getRequestHandler(Endpoints.getRequestsByEmail, apiKey, params);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const getRequestById = (apiKey, id) => {
|
|
34
|
+
return requests.getRequestHandler(Endpoints.requestById(id), apiKey);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const getRequestsByModifiedDate = (apiKey, timestamp) => {
|
|
38
|
+
const params = { timestamp };
|
|
39
|
+
return requests.getRequestHandler(Endpoints.getModifiedRequests, apiKey, params);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const getRequestPolicies = (apiKey, id) => {
|
|
43
|
+
return requests.getRequestHandler(Endpoints.getPolicies(id), apiKey);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const updateRequest = (apiKey, id, updateRequestModel) => {
|
|
47
|
+
return requests.patchRequestHandler(Endpoints.requestById(id), apiKey, updateRequestModel);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const changeRequirement = (apiKey, requestId, requirementId) => {
|
|
51
|
+
const endpoint = Endpoints.changeRequirement(requestId, requirementId);
|
|
52
|
+
return requests.putRequestHandler(endpoint, apiKey);
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
const archiveRequest = (apiKey, requestId) => {
|
|
56
|
+
const endpoint = Endpoints.archive(requestId);
|
|
57
|
+
return requests.putRequestHandler(endpoint, apiKey);
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
const restoreRequest = (apiKey, requestId) => {
|
|
61
|
+
const endpoint = Endpoints.restore(requestId);
|
|
62
|
+
return requests.putRequestHandler(endpoint, apiKey);
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
module.exports = {
|
|
66
|
+
inviteRequest,
|
|
67
|
+
getAllRequests,
|
|
68
|
+
getRequestById,
|
|
69
|
+
getRequestsByEmail,
|
|
70
|
+
getRequestsByModifiedDate,
|
|
71
|
+
getRequestPolicies,
|
|
72
|
+
updateRequest,
|
|
73
|
+
archiveRequest,
|
|
74
|
+
restoreRequest,
|
|
75
|
+
changeRequirement
|
|
76
|
+
};
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
const requestsApi = require('./requests.api');
|
|
2
2
|
const { InviteRequestModel } = require('./models/invite.request.model');
|
|
3
|
+
const { UpdateRequestModel } = require('./models/update.request.model');
|
|
3
4
|
const { validateType } = require('../../../common/validations/typeValidations');
|
|
5
|
+
const timeUtils = require('../../../common/utils/timeUtils');
|
|
4
6
|
|
|
5
|
-
const
|
|
7
|
+
const inviteRequest = (apiKey, tabId, inviteRequestModel = {}) => {
|
|
8
|
+
validateType(inviteRequestModel, InviteRequestModel);
|
|
9
|
+
return requestsApi.inviteRequest(apiKey, tabId, inviteRequestModel);
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
const getAllAccountRequests = (apiKey, { projectId, type, activationStatuses } = {}) => {
|
|
6
13
|
if (activationStatuses) {
|
|
7
14
|
activationStatuses = activationStatuses.reduce((f, s) => `${f},${s}`);
|
|
8
15
|
}
|
|
@@ -10,9 +17,49 @@ const getAllAccountRequests = async (apiKey, { projectId, type, activationStatus
|
|
|
10
17
|
return requestsApi.getAllRequests(apiKey, { propertyId: projectId, type, activationStatuses });
|
|
11
18
|
};
|
|
12
19
|
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
return requestsApi.inviteRequest(apiKey, tabId, inviteRequestModel);
|
|
20
|
+
const getRequestsByEmail = (apiKey, email) => {
|
|
21
|
+
return requestsApi.getRequestsByEmail(apiKey, email);
|
|
16
22
|
};
|
|
17
23
|
|
|
18
|
-
|
|
24
|
+
const getRequestById = (apiKey, id) => {
|
|
25
|
+
return requestsApi.getRequestById(apiKey, id);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getRequestsByModifiedDate = (apiKey, timestamp) => {
|
|
29
|
+
const timestampAsLong = timeUtils.convertDateToLongInt(timestamp);
|
|
30
|
+
return requestsApi.getRequestsByModifiedDate(apiKey, timestampAsLong);
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
const getRequestPolicies = (apiKey, id) => {
|
|
34
|
+
return requestsApi.getRequestPolicies(apiKey, id);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const updateRequest = (apiKey, id, updateRequestModel = {}) => {
|
|
38
|
+
validateType(updateRequestModel, UpdateRequestModel);
|
|
39
|
+
return requestsApi.updateRequest(apiKey, id, updateRequestModel);
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const changeRequirement = (apiKey, requestId, requirementId) => {
|
|
43
|
+
return requestsApi.changeRequirement(apiKey, requestId, requirementId);
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
const archiveRequest = (apiKey, id) => {
|
|
47
|
+
return requestsApi.archiveRequest(apiKey, id);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const restoreRequest = (apiKey, id) => {
|
|
51
|
+
return requestsApi.restoreRequest(apiKey, id);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
module.exports = {
|
|
55
|
+
inviteRequest,
|
|
56
|
+
getAllAccountRequests,
|
|
57
|
+
getRequestById,
|
|
58
|
+
getRequestsByEmail,
|
|
59
|
+
getRequestsByModifiedDate,
|
|
60
|
+
getRequestPolicies,
|
|
61
|
+
archiveRequest,
|
|
62
|
+
restoreRequest,
|
|
63
|
+
updateRequest,
|
|
64
|
+
changeRequirement
|
|
65
|
+
};
|
|
@@ -2,11 +2,25 @@ const requests = require('../../../common/requests/apiKeyAuth/requests');
|
|
|
2
2
|
const { openapiUrl } = require('../../../env').getEnv();
|
|
3
3
|
|
|
4
4
|
const Endpoints = {
|
|
5
|
-
copyRequirement: sourceRequirementId => `${openapiUrl}/requirement/${sourceRequirementId}/copy
|
|
5
|
+
copyRequirement: sourceRequirementId => `${openapiUrl}/requirement/${sourceRequirementId}/copy`,
|
|
6
|
+
getRequirementsByTabId: tabId => `${openapiUrl}/tabs/${tabId}/requirements`,
|
|
7
|
+
getRequirementsByProjectId: projectId => `${openapiUrl}/properties/${projectId}/requirements`
|
|
6
8
|
};
|
|
7
9
|
|
|
8
|
-
const copyRequirement =
|
|
9
|
-
return requests.postRequestHandler(Endpoints.copyRequirement(sourceRequirementId), apiKey, newRequirementOverrides)
|
|
10
|
+
const copyRequirement = (apiKey, sourceRequirementId, newRequirementOverrides) => {
|
|
11
|
+
return requests.postRequestHandler(Endpoints.copyRequirement(sourceRequirementId), apiKey, newRequirementOverrides);
|
|
10
12
|
};
|
|
11
13
|
|
|
12
|
-
|
|
14
|
+
const getRequirementsByTabId = (apiKey, tabId) => {
|
|
15
|
+
return requests.getRequestHandler(Endpoints.getRequirementsByTabId(tabId), apiKey);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
const getRequirementsByProjectId = (apiKey, projectId, tabType) => {
|
|
19
|
+
return requests.getRequestHandler(Endpoints.getRequirementsByProjectId(projectId), apiKey, { tabType });
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
module.exports = {
|
|
23
|
+
copyRequirement,
|
|
24
|
+
getRequirementsByTabId,
|
|
25
|
+
getRequirementsByProjectId
|
|
26
|
+
};
|
|
@@ -3,7 +3,7 @@ const requirementsApi = require('./requirements.api');
|
|
|
3
3
|
const { validateType } = require('../../../common/validations/typeValidations');
|
|
4
4
|
const CopyRequirementModel = require('./models/copy.requirement.model');
|
|
5
5
|
|
|
6
|
-
const copyRequirement =
|
|
6
|
+
const copyRequirement = (apiKey, copyRequirementModel) => {
|
|
7
7
|
validateType(copyRequirementModel, CopyRequirementModel);
|
|
8
8
|
const {
|
|
9
9
|
sourceRequirementId,
|
|
@@ -17,4 +17,16 @@ const copyRequirement = async (apiKey, copyRequirementModel) => {
|
|
|
17
17
|
return requirementsApi.copyRequirement(apiKey, sourceRequirementId, newRequirementOverrides);
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
const getRequirementsByTabId = (apiKey, tabId) => {
|
|
21
|
+
return requirementsApi.getRequirementsByTabId(apiKey, tabId);
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const getRequirementsByProjectId = (apiKey, projectId, tabType) => {
|
|
25
|
+
return requirementsApi.getRequirementsByProjectId(apiKey, projectId, tabType);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
module.exports = {
|
|
29
|
+
copyRequirement,
|
|
30
|
+
getRequirementsByTabId,
|
|
31
|
+
getRequirementsByProjectId
|
|
32
|
+
};
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
const requests = require('../../../../common/requests/cookieAuth/requests');
|
|
2
|
-
const { backendUrl } = require('../../../../env').getEnv();
|
|
3
|
-
|
|
4
|
-
const Endpoints = {
|
|
5
|
-
innerPageRecordsApi: `${backendUrl}/saas/analytics/dashboard/requests`
|
|
6
|
-
};
|
|
7
|
-
|
|
8
|
-
const getSortedRecordsForDashboardInnerPage = (dashboardCriteriaModel, context) => {
|
|
9
|
-
return requests.postRequestHandler(Endpoints.innerPageRecordsApi, dashboardCriteriaModel, context);
|
|
10
|
-
};
|
|
11
|
-
|
|
12
|
-
module.exports = { getSortedRecordsForDashboardInnerPage };
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
const recordListAPI = require('./recordList.api');
|
|
2
|
-
|
|
3
|
-
const getSortedRecordsForDashboardInnerPage = (dashboardCriteriaModel, context) => {
|
|
4
|
-
return recordListAPI.getSortedRecordsForDashboardInnerPage(dashboardCriteriaModel, context);
|
|
5
|
-
};
|
|
6
|
-
|
|
7
|
-
module.exports = { getSortedRecordsForDashboardInnerPage };
|
|
File without changes
|
|
File without changes
|