Show incident report (without filtering for now)

This commit is contained in:
Senad Uka
2019-06-17 13:24:34 +02:00
parent 393e9b8aec
commit 9a8d95dd19
27 changed files with 400 additions and 51 deletions

View File

@@ -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

View File

@@ -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);

View 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,
};

View File

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