|
@@ -0,0 +1,79 @@
|
|
|
|
|
+const soap = require('soap');
|
|
|
|
|
+
|
|
|
|
|
+function createClient(config) {
|
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
|
+ soap.createClient(config.whosoff.apiUrl, (err, client) => {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ return reject(err);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return resolve(client);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function getWhosOff(config, client, now) {
|
|
|
|
|
+ return new Promise((resolve, reject) => {
|
|
|
|
|
+ const args = {
|
|
|
|
|
+ APIKEY: config.whosoff.apiKey,
|
|
|
|
|
+ 'Start_Date': now.format('DD/MM/YYYY'),
|
|
|
|
|
+ 'End_Date': now.format('DD/MM/YYYY')
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ // eslint-disable-next-line new-cap
|
|
|
|
|
+ client.WHOSOFF(args, (err, result) => {
|
|
|
|
|
+ if (err) {
|
|
|
|
|
+ return reject(err);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return resolve(result);
|
|
|
|
|
+ });
|
|
|
|
|
+ });
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function processLeave(leavesInPeriod) {
|
|
|
|
|
+ return leavesInPeriod
|
|
|
|
|
+ .filter(leave => !leave.Half_Day_Flag || leave.Half_Day_Flag === 'No')
|
|
|
|
|
+ .map(leave => leave.Staff_Email_Address.toLowerCase());
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+function parseWhosOffResult(resultWrapper) {
|
|
|
|
|
+ let leavesInPeriod = resultWrapper.DATA
|
|
|
|
|
+ ? resultWrapper.DATA.LEAVE
|
|
|
|
|
+ : null;
|
|
|
|
|
+
|
|
|
|
|
+ if (!leavesInPeriod) {
|
|
|
|
|
+ return [];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ if (!Array.isArray(leavesInPeriod)) {
|
|
|
|
|
+ leavesInPeriod = [leavesInPeriod];
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return processLeave(leavesInPeriod);
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+async function getAllUsersOnHoliday(config, now) {
|
|
|
|
|
+ const soapClient = await createClient(config);
|
|
|
|
|
+
|
|
|
|
|
+ const whosOff = await getWhosOff(config, soapClient, now);
|
|
|
|
|
+
|
|
|
|
|
+ const resultWrapper = whosOff.WhosOffByCompanyResult.WHOSOFF;
|
|
|
|
|
+ const status = resultWrapper.RESPONSE;
|
|
|
|
|
+
|
|
|
|
|
+ if (status !== config.whosoff.successStatus) {
|
|
|
|
|
+ const message = resultWrapper.REASON || 'Error contacting WhosOff API';
|
|
|
|
|
+
|
|
|
|
|
+ throw new Error(message);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ const emails = parseWhosOffResult(resultWrapper);
|
|
|
|
|
+
|
|
|
|
|
+ return emails;
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+module.exports = {
|
|
|
|
|
+ getAllUsersOnHoliday
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+
|