Show incident report (without filtering for now)
This commit is contained in:
@@ -15,7 +15,7 @@ const {
|
||||
csvParserErrors,
|
||||
} = require('../../constants/constants');
|
||||
|
||||
const { fetchAllMembers, findMember } = require('../officeRnD/members');
|
||||
const { fetchAllMembers } = require('../officeRnD/members');
|
||||
const { getMappingsFromDatabase } = require('../officeRnD/resources');
|
||||
|
||||
const extractMappingFromFileName = (fileName) => {
|
||||
@@ -46,6 +46,7 @@ const parseDoorLockDataFile = (file) => {
|
||||
Promise.all(prefetchDataJobs)
|
||||
.then(result => {
|
||||
const mappings = result[0];
|
||||
const allMembers = result[1];
|
||||
|
||||
const mappingFromFileName = extractMappingFromFileName(file.name);
|
||||
const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings);
|
||||
@@ -103,7 +104,7 @@ const parseDoorLockDataFile = (file) => {
|
||||
const secondEntry = results[i+1];
|
||||
|
||||
if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){
|
||||
const memberObject = findMember(firstEntry.name);
|
||||
const memberObject = allMembers.find(member => member.name === firstEntry.name);
|
||||
|
||||
if (!memberObject){
|
||||
//Check if member is already labeled as unknown
|
||||
|
||||
@@ -97,8 +97,8 @@ const createUnlockedIncident = (reservation) => {
|
||||
|
||||
const createUnscheduledUseIncident = (reservation, doorLockEntry) => {
|
||||
return new Promise((resolve, reject) => {
|
||||
const timeResolution = parseInt(process.env.UNSCHEDULED_USE_TIME_RESOLUTION);
|
||||
const chargePrice = parseFloat(process.env.UNSCHEDULED_USE_CHARGE_FEE);
|
||||
const timeResolution = parseInt(process.env.UNSCHEDULED_USE_TIME_RESOLUTION) || 5;
|
||||
const chargePrice = parseFloat(process.env.UNSCHEDULED_USE_CHARGE_FEE) || 5;
|
||||
|
||||
const reservationEndTime = moment(reservation.end);
|
||||
const lockedTime = moment(doorLockEntry.timestamp);
|
||||
@@ -352,8 +352,8 @@ const getIncidentData = (reservation) => {
|
||||
getRelatedDoorLockEntries(reservation.start, doorLockEntriesEndTime, reservation.memberId, reservation.resourceId)
|
||||
.then((lockEntry) => {
|
||||
if (lockEntry){
|
||||
const timeResolution = parseInt(process.env.UNSCHEDULED_USE_TIME_RESOLUTION);
|
||||
const chargePrice = parseFloat(process.env.UNSCHEDULED_USE_CHARGE_FEE);
|
||||
const timeResolution = parseInt(process.env.UNSCHEDULED_USE_TIME_RESOLUTION) || 5
|
||||
const chargePrice = parseFloat(process.env.UNSCHEDULED_USE_CHARGE_FEE) || 5;
|
||||
|
||||
const reservationEndTime = moment(reservation.end);
|
||||
const lockedTime = moment(lockEntry.timestamp);
|
||||
|
||||
112
services/integration/reports.js
Normal file
112
services/integration/reports.js
Normal file
@@ -0,0 +1,112 @@
|
||||
'use strict';
|
||||
|
||||
const moment = require('moment-timezone');
|
||||
|
||||
const db = require('../../models/index');
|
||||
const { incidentType } = require('../../constants/constants');
|
||||
|
||||
const { fetchAllMembers } = require('../officeRnD/members');
|
||||
const { fetchOffices, fetchResources } = require('../officeRnD/resources');
|
||||
|
||||
const getUnlockedIncidents = () => {
|
||||
const attributes = ['id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice'];
|
||||
|
||||
return db.unlockedIncident.findAll({
|
||||
attributes,
|
||||
sort: [
|
||||
['bookingStart', 'ASC']
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
const getUnscheduledIncidents = () => {
|
||||
const attributes = [
|
||||
'id',
|
||||
'memberId',
|
||||
'resourceId',
|
||||
'bookingStart',
|
||||
'bookingEnd',
|
||||
'doorLockEventTimestamp',
|
||||
'doorLockEventType',
|
||||
'timeIntervalsToCharge',
|
||||
'chargePrice',
|
||||
'totalChargeFee'
|
||||
];
|
||||
|
||||
return db.unscheduledIncident.findAll({
|
||||
attributes,
|
||||
sort: [
|
||||
['bookingStart', 'ASC']
|
||||
]
|
||||
});
|
||||
};
|
||||
|
||||
const formatTime = (timestamp) => {
|
||||
const timezone = process.env.UI_TIMEZONE || 'America/Los_Angeles';
|
||||
return moment.tz(timestamp, timezone).format('MM/DD/YYYY hh:mm a');
|
||||
};
|
||||
|
||||
const getAllDoorLockIncidents = () => {
|
||||
return new Promise ((resolve, reject) => {
|
||||
const dataFetchJobs = [fetchAllMembers(), fetchOffices(), fetchResources(), getUnlockedIncidents(), getUnscheduledIncidents()];
|
||||
|
||||
Promise.all(dataFetchJobs)
|
||||
.then((data) => {
|
||||
const members = data[0];
|
||||
const offices = data[1];
|
||||
const resources = data[2];
|
||||
const unlockedIncidents = data[3];
|
||||
const unscheduledIncidents = data[4];
|
||||
|
||||
const membersMap = {};
|
||||
const officesMap = {};
|
||||
const resourcesMap = {};
|
||||
|
||||
members.forEach((member) => membersMap[member.memberId] = member);
|
||||
offices.forEach((office) => officesMap[office.officeId] = office);
|
||||
resources.forEach((resource) => resourcesMap[resource.resourceId] = resource);
|
||||
|
||||
const allIncidents = [];
|
||||
|
||||
unlockedIncidents.forEach((unlockedIncident) => {
|
||||
allIncidents.push({
|
||||
incidentId: unlockedIncident.id,
|
||||
memberId: unlockedIncident.memberId,
|
||||
memberName: membersMap[unlockedIncident.memberId].name,
|
||||
resourceName: resourcesMap[unlockedIncident.resourceId].resourceName,
|
||||
officeName: officesMap[resourcesMap[unlockedIncident.resourceId].officeId].officeName,
|
||||
bookingStart: formatTime(unlockedIncident.bookingStart),
|
||||
bookingEnd: formatTime(unlockedIncident.bookingEnd),
|
||||
incidentType: incidentType.UNLOCKED_INCIDENT,
|
||||
incidentLevel: unlockedIncident.incidentLevel,
|
||||
incidentPrice: unlockedIncident.incidentLevelPrice,
|
||||
});
|
||||
});
|
||||
|
||||
unscheduledIncidents.forEach((unscheduledIncident) => {
|
||||
allIncidents.push({
|
||||
incidentId: unscheduledIncident.id,
|
||||
memberId: unscheduledIncident.memberId,
|
||||
memberName: membersMap[unscheduledIncident.memberId].name,
|
||||
resourceName: resourcesMap[unscheduledIncident.resourceId].resourceName,
|
||||
officeName: officesMap[resourcesMap[unscheduledIncident.resourceId].officeId].officeName,
|
||||
bookingStart: formatTime(unscheduledIncident.bookingStart),
|
||||
bookingEnd: formatTime(unscheduledIncident.bookingEnd),
|
||||
incidentType: incidentType.UNSCHEDULED_INCIDENT,
|
||||
timeIntervalsToCharge: unscheduledIncident.timeIntervalsToCharge,
|
||||
chargePrice: unscheduledIncident.chargePrice,
|
||||
totalChargeFee: unscheduledIncident.totalChargeFee,
|
||||
});
|
||||
});
|
||||
|
||||
resolve(allIncidents);
|
||||
})
|
||||
.catch((error) => reject(error));
|
||||
});
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
getUnlockedIncidents,
|
||||
getUnscheduledIncidents,
|
||||
getAllDoorLockIncidents,
|
||||
};
|
||||
@@ -2,20 +2,19 @@
|
||||
|
||||
const { API } = require('../../helpers/api');
|
||||
|
||||
const membersList = [];
|
||||
|
||||
const fetchAllMembers = () => {
|
||||
return new Promise((resolve, reject) => {
|
||||
API.get('/members')
|
||||
.then((result) => {
|
||||
const cleanedResult = [];
|
||||
const members = result.data || [];
|
||||
members.forEach((member) => {
|
||||
membersList.push({
|
||||
cleanedResult.push({
|
||||
name: member.name,
|
||||
memberId: member['_id'],
|
||||
});
|
||||
});
|
||||
resolve();
|
||||
resolve(cleanedResult);
|
||||
})
|
||||
.catch((error) => {
|
||||
reject(error);
|
||||
@@ -23,11 +22,6 @@ const fetchAllMembers = () => {
|
||||
});
|
||||
};
|
||||
|
||||
const findMember = (memberName) => {
|
||||
return membersList.find((member) => member.name === memberName);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
fetchAllMembers,
|
||||
findMember,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user