瀏覽代碼

Added methods using the WhosOff API to get the users which are currently on holiday for a full day

Fela Maslen 7 年之前
父節點
當前提交
486ca9c478
共有 1 個文件被更改,包括 79 次插入0 次删除
  1. 79 0
      src/server/modules/whosoff.js

+ 79 - 0
src/server/modules/whosoff.js

@@ -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
+};
+
+