diff --git a/controllers/integration.js b/controllers/integration.js index 7ab7f53..fd2cde0 100644 --- a/controllers/integration.js +++ b/controllers/integration.js @@ -48,6 +48,23 @@ const getAllIncidents = (req, res) => { }); }; +const getMemberIncidents = (req, res) => { + const memberId = req.params.memberId; + const dateRange = { + startDate: req.params.startDate, + endDate: req.params.endDate, + }; + + getAllDoorLockIncidents(dateRange, memberId) + .then((incidents) => { + res.send(incidents); + }) + .catch((error) => { + console.log(error); + res.send([]); + }); +}; + const getUnlockedIncidents = (req, res) => { }; @@ -62,4 +79,5 @@ module.exports = { getAllIncidents, getUnscheduledIncidents, getUnlockedIncidents, + getMemberIncidents, }; diff --git a/controllers/officeRnD.js b/controllers/officeRnD.js new file mode 100644 index 0000000..a2a9a22 --- /dev/null +++ b/controllers/officeRnD.js @@ -0,0 +1,18 @@ +'use strict'; + +const { fetchAllMembers } = require('../services/officeRnD/members'); + +const fetchMembersList = (req, res) => { + fetchAllMembers() + .then((members) => { + res.send(members); + }) + .catch((error) => { + console.log(error); + res.send([]); + }); +}; + +module.exports = { + fetchMembersList, +}; diff --git a/routes/index.js b/routes/index.js index fb0fd72..abe717c 100644 --- a/routes/index.js +++ b/routes/index.js @@ -2,7 +2,9 @@ const { apiStatusCheck } = require('../controllers/apiStatusCheck'); const { uploadDoorLockData } = require('../controllers/doorLock'); -const { getKnownOfficeResourceMappings, addNewMapping, getAllIncidents,getUnscheduledIncidents, getUnlockedIncidents } = require('../controllers/integration'); +const { getKnownOfficeResourceMappings, addNewMapping, getAllIncidents, getMemberIncidents,getUnscheduledIncidents, getUnlockedIncidents } = require('../controllers/integration'); +const { fetchMembersList } = require('../controllers/officeRnD'); + const { calculateDoorLockCharges } = require('../services/integration/doorLockCharges'); const express = require('express'); @@ -14,10 +16,13 @@ router.post('/doorLock/upload', uploadDoorLockData); router.get('/integration/mappings', getKnownOfficeResourceMappings); router.post('/integration/mappings', addNewMapping); +router.get('/integration/report/member/:memberId/:startDate/:endDate', getMemberIncidents); router.get('/integration/report/allIncidents/:startDate/:endDate', getAllIncidents); router.get('/integration/report/unlockedIncidents', getUnlockedIncidents); router.get('/integration/report/unscheduledIncidents', getUnscheduledIncidents); +router.get('/officeRnD/membersList', fetchMembersList); + // temporary route, manually trigger door lock charge calculations router.get('/calculate', (req, res) => { calculateDoorLockCharges(); res.send();}); diff --git a/services/integration/reports.js b/services/integration/reports.js index 1340fdd..eee8f68 100644 --- a/services/integration/reports.js +++ b/services/integration/reports.js @@ -10,17 +10,23 @@ const { incidentType, UI_TIMEZONE, DEFAULT_DATE_FORMAT, integrationServiceErrors const { fetchAllMembers } = require('../officeRnD/members'); const { fetchOffices, fetchResources } = require('../officeRnD/resources'); -const getUnlockedIncidents = (startDate, endDate) => { +const getUnlockedIncidents = (startDate, endDate, memberId) => { const attributes = ['id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice']; - const filters = (startDate && endDate) ? { - bookingStart: { + const filters = {}; + + if (startDate && endDate) { + filters.bookingStart = { [Op.and]: { [Op.gte]: startDate.utc().toISOString(), [Op.lte]: endDate.utc().toISOString(), } - }, - } : null; + } + } + + if (memberId){ + filters.memberId = memberId; + } return db.unlockedIncident.findAll({ attributes, @@ -31,7 +37,7 @@ const getUnlockedIncidents = (startDate, endDate) => { }); }; -const getUnscheduledIncidents = (startDate, endDate) => { +const getUnscheduledIncidents = (startDate, endDate, memberId) => { const attributes = [ 'id', 'memberId', @@ -45,14 +51,20 @@ const getUnscheduledIncidents = (startDate, endDate) => { 'totalChargeFee' ]; - const filters = (startDate && endDate) ? { - bookingStart: { + const filters = {}; + + if (startDate && endDate) { + filters.bookingStart = { [Op.and]: { [Op.gte]: startDate.utc().toISOString(), [Op.lte]: endDate.utc().toISOString(), } - }, - } : null; + } + } + + if (memberId){ + filters.memberId = memberId; + } return db.unscheduledIncident.findAll({ attributes, @@ -67,7 +79,7 @@ const formatTime = (timestamp) => { return moment.tz(timestamp, UI_TIMEZONE).format('MM/DD/YYYY hh:mm a'); }; -const getAllDoorLockIncidents = (dateRange) => { +const getAllDoorLockIncidents = (dateRange, memberId) => { return new Promise ((resolve, reject) => { let startDate, endDate; @@ -81,7 +93,7 @@ const getAllDoorLockIncidents = (dateRange) => { } } - const dataFetchJobs = [fetchAllMembers(), fetchOffices(), fetchResources(), getUnlockedIncidents(startDate, endDate), getUnscheduledIncidents(startDate, endDate)]; + const dataFetchJobs = [fetchAllMembers(), fetchOffices(), fetchResources(), getUnlockedIncidents(startDate, endDate, memberId), getUnscheduledIncidents(startDate, endDate, memberId)]; Promise.all(dataFetchJobs) .then((data) => {