make difference between door lock charges related to reservations and standalone incidents

This commit is contained in:
Bilal Catic
2019-07-07 00:28:39 +02:00
parent 72bb874d85
commit 5d3653cd65
8 changed files with 162 additions and 84 deletions

View File

@@ -61,8 +61,10 @@ const integrationServiceErrors = {
const incidentType = { const incidentType = {
NOT_AN_INCIDENT: 1, NOT_AN_INCIDENT: 1,
UNLOCKED_INCIDENT: 2, UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION: 2,
UNSCHEDULED_INCIDENT: 3, UNSCHEDULED_INCIDENT_RELATED_WITH_RESERVATION: 3,
UNLOCKED_INCIDENT_STANDALONE: 4,
UNSCHEDULED_INCIDENT_STANDALONE: 5,
}; };
const UI_TIMEZONE = process.env.UI_TIMEZONE || 'America/Los_Angeles'; const UI_TIMEZONE = process.env.UI_TIMEZONE || 'America/Los_Angeles';

View File

@@ -0,0 +1,14 @@
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.addColumn('unlockedIncidents', 'unlockTimestamp', {
type: Sequelize.DATE,
after: 'bookingEnd'
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.removeColumn('unlockedIncidents', 'unlockTimestamp');
}
};

View File

@@ -0,0 +1,27 @@
'use strict';
module.exports = {
up: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.addColumn('unscheduledIncidents', 'unlockTimestamp', {
type: Sequelize.DATE,
after: 'bookingEnd'
}),
queryInterface.addColumn('unscheduledIncidents', 'lockTimestamp', {
type: Sequelize.DATE,
after: 'unlockTimestamp'
})
]);
});
},
down: (queryInterface, Sequelize) => {
return queryInterface.sequelize.transaction((t) => {
return Promise.all([
queryInterface.removeColumn('unscheduledIncidents', 'lockTimestamp'),
queryInterface.removeColumn('unscheduledIncidents', 'unlockTimestamp')
]);
});
}
};

View File

@@ -21,6 +21,7 @@ module.exports = (sequelize, DataTypes) => {
] ]
}, },
incidentLevelPrice: DataTypes.FLOAT, incidentLevelPrice: DataTypes.FLOAT,
unlockTimestamp: DataTypes.DATE,
}, {}); }, {});
unlockedIncident.associate = function(models) { unlockedIncident.associate = function(models) {
// associations can be defined here // associations can be defined here

View File

@@ -17,6 +17,8 @@ module.exports = (sequelize, DataTypes) => {
chargePrice: DataTypes.FLOAT, chargePrice: DataTypes.FLOAT,
timeIntervalsToCharge: DataTypes.INTEGER, timeIntervalsToCharge: DataTypes.INTEGER,
totalChargeFee: DataTypes.FLOAT, totalChargeFee: DataTypes.FLOAT,
unlockTimestamp: DataTypes.DATE,
lockTimestamp: DataTypes.DATE,
}, {}); }, {});
unscheduledIncident.associate = function(models) { unscheduledIncident.associate = function(models) {
// associations can be defined here // associations can be defined here

View File

@@ -188,8 +188,6 @@ const getUnlockEntryForReservation = (reservation, previousReservation) => {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const { memberId, resourceId } = reservation; const { memberId, resourceId } = reservation;
const attributes = ['memberName', 'event', 'timestamp', 'resourceId'];
const previousReservationEndMoment = previousReservation && previousReservation.end ? const previousReservationEndMoment = previousReservation && previousReservation.end ?
moment.utc(previousReservation.end) : null; moment.utc(previousReservation.end) : null;
const reservationStartMoment = moment.utc(reservation.start); const reservationStartMoment = moment.utc(reservation.start);
@@ -214,7 +212,6 @@ const getUnlockEntryForReservation = (reservation, previousReservation) => {
const order = [['timestamp', 'DESC']]; const order = [['timestamp', 'DESC']];
db.doorLockEvent.findAll({ db.doorLockEvent.findAll({
attributes,
where: filters, where: filters,
order, order,
}) })

View File

@@ -8,11 +8,11 @@ const { getUnlockEntryForReservation, getLockEntryForReservation, getEntriesBetw
const { getAllFinishedBookings, getFirstPreviousBooking, getFirstNextBooking } = require('../officeRnD/bookings'); const { getAllFinishedBookings, getFirstPreviousBooking, getFirstNextBooking } = require('../officeRnD/bookings');
const getSortedIncidentsForMember = (memberId) => { const getSortedIncidentsForMember = (memberId) => {
const attributes = ['bookingStart', 'incidentLevel', 'incidentLevelPrice']; const attributes = ['bookingStart', 'incidentLevel', 'incidentLevelPrice', 'unlockTimestamp'];
const filters = { const filters = {
memberId memberId
}; };
const order = [['bookingStart', 'DESC']]; const order = [['unlockTimestamp', 'DESC']];
return db.unlockedIncident.findAll({ return db.unlockedIncident.findAll({
attributes, attributes,
@@ -24,9 +24,8 @@ const getSortedIncidentsForMember = (memberId) => {
const insertUnscheduledIncidents = (incidents) => { const insertUnscheduledIncidents = (incidents) => {
const asyncJobs = []; const asyncJobs = [];
incidents.forEach((incident) => { incidents.forEach((incident) => {
const { reservation, lockEntry, chargePrice, timeIntervalsToCharge, totalChargeFee } = incident; const { reservation, unlockTimestamp, lockTimestamp, memberId, resourceId, chargePrice, timeIntervalsToCharge, totalChargeFee } = incident;
const { reservationId, memberId, resourceId, start, end } = reservation; const { reservationId, start, end } = reservation;
const { timestamp, event } = lockEntry;
const incidentForDB = { const incidentForDB = {
reservationId, reservationId,
@@ -34,11 +33,13 @@ const insertUnscheduledIncidents = (incidents) => {
resourceId, resourceId,
bookingStart: start, bookingStart: start,
bookingEnd: end, bookingEnd: end,
doorLockEventTimestamp: timestamp, doorLockEventTimestamp: null,
doorLockEventType: event, doorLockEventType: null,
chargePrice, chargePrice,
timeIntervalsToCharge, timeIntervalsToCharge,
totalChargeFee, totalChargeFee,
unlockTimestamp,
lockTimestamp,
}; };
asyncJobs.push(db.unscheduledIncident.findOrCreate({ asyncJobs.push(db.unscheduledIncident.findOrCreate({
@@ -48,8 +49,8 @@ const insertUnscheduledIncidents = (incidents) => {
resourceId, resourceId,
bookingStart: start, bookingStart: start,
bookingEnd: end, bookingEnd: end,
doorLockEventTimestamp: timestamp, unlockTimestamp,
doorLockEventType: event lockTimestamp,
}, },
defaults: {...incidentForDB}, defaults: {...incidentForDB},
})); }));
@@ -61,36 +62,50 @@ const insertUnscheduledIncidents = (incidents) => {
const insertUnlockedIncidents = (incidents) => { const insertUnlockedIncidents = (incidents) => {
const asyncJobs = []; const asyncJobs = [];
incidents.forEach((incident) => { incidents.forEach((incident) => {
const { reservationId, memberId, resourceId, bookingStart, bookingEnd } = incident; const { reservation, memberId, resourceId, unlockTimestamp, incidentLevel, incidentLevelPrice } = incident;
const { reservationId, start, end} = reservation;
const incidentForDB = {
reservationId,
memberId,
resourceId,
bookingStart: start,
bookingEnd: end,
unlockTimestamp,
incidentLevel,
incidentLevelPrice,
};
asyncJobs.push(db.unlockedIncident.findOrCreate({ asyncJobs.push(db.unlockedIncident.findOrCreate({
where: { where: {
reservationId, reservationId,
memberId, memberId,
resourceId, resourceId,
bookingStart, bookingStart: start,
bookingEnd, bookingEnd: end,
unlockTimestamp,
incidentLevel,
}, },
defaults: {...incident}, defaults: {...incidentForDB},
})); }));
}); });
return Promise.all(asyncJobs); return Promise.all(asyncJobs);
}; };
const setUnlockedIncidentsLevel = (incidentReservations) => { const setUnlockedIncidentsLevel = (incidents) => {
return new Promise ((resolve, reject) => { return new Promise ((resolve, reject) => {
const sortingFunction = (reservationA, reservationB) => { const sortingFunction = (incidentA, incidentB) => {
const sortCondition = moment.utc(reservationA.start).isBefore(moment.utc(reservationB.start)); const sortCondition = moment.utc(incidentA.unlockTimestamp).isBefore(moment.utc(incidentB.unlockTimestamp));
return sortCondition ? -1 : 1; return sortCondition ? -1 : 1;
}; };
incidentReservations.sort(sortingFunction); incidents.sort(sortingFunction);
const membersLastIncident = {}; const membersLastIncident = {};
incidentReservations.forEach((reservation) => { incidents.forEach((incident) => {
membersLastIncident[reservation.memberId] = { membersLastIncident[incident.memberId] = {
incidentLevel: null, incidentLevel: null,
incidentTimestamp: null, incidentTimestamp: null,
}; };
@@ -108,59 +123,58 @@ const setUnlockedIncidentsLevel = (incidentReservations) => {
if (lastIncident) { if (lastIncident) {
membersLastIncident[lastIncident.memberId] = { membersLastIncident[lastIncident.memberId] = {
incidentLevel: lastIncident.incidentLevel, incidentLevel: lastIncident.incidentLevel,
incidentTimestamp: lastIncident.bookingStart, incidentTimestamp: lastIncident.unlockTimestamp,
} }
} }
}); });
const incidentsWithLevel = []; const incidentsWithLevel = [];
incidentReservations.forEach((reservation) => { incidents.forEach((incident) => {
const memberLastIncident = membersLastIncident[reservation.memberId]; const memberLastIncident = membersLastIncident[incident.memberId];
const incident = { const formattedIncident = {
reservationId: reservation.reservationId, reservation: incident.reservation,
memberId: reservation.memberId, memberId: incident.memberId,
resourceId: reservation.resourceId, resourceId: incident.resourceId,
bookingStart: reservation.start,
bookingEnd: reservation.end,
incidentLevel: undefined, incidentLevel: undefined,
incidentLevelPrice: undefined, incidentLevelPrice: undefined,
unlockTimestamp: incident.unlockTimestamp,
}; };
if (!memberLastIncident.incidentLevel) { if (!memberLastIncident.incidentLevel) {
incident.incidentLevel = unlockedIncidentLevelsPrices.UNLOCKED_0.title; formattedIncident.incidentLevel = unlockedIncidentLevelsPrices.UNLOCKED_0.title;
incident.incidentLevelPrice = unlockedIncidentLevelsPrices.UNLOCKED_0.price; formattedIncident.incidentLevelPrice = unlockedIncidentLevelsPrices.UNLOCKED_0.price;
} else { } else {
const lastIncidentTime = moment.utc(memberLastIncident.incidentTimestamp).startOf('month'); const lastIncidentTime = moment.utc(memberLastIncident.incidentTimestamp).startOf('month');
const currentIncidentTime = moment.utc(reservation.start).startOf('month'); const currentIncidentTime = moment.utc(incident.unlockTimestamp).startOf('month');
const timeDiff = Math.abs(lastIncidentTime.diff(currentIncidentTime, 'months')); const timeDiff = Math.abs(lastIncidentTime.diff(currentIncidentTime, 'months'));
if (timeDiff >= (parseInt(process.env.UNLOCK_STREAK_REPAIR_AFTER) || 6)){ if (timeDiff >= (parseInt(process.env.UNLOCK_STREAK_REPAIR_AFTER) || 6)){
incident.incidentLevel = unlockedIncidentLevelsPrices.UNLOCKED_0.title; formattedIncident.incidentLevel = unlockedIncidentLevelsPrices.UNLOCKED_0.title;
incident.incidentLevelPrice = unlockedIncidentLevelsPrices.UNLOCKED_0.price; formattedIncident.incidentLevelPrice = unlockedIncidentLevelsPrices.UNLOCKED_0.price;
} else { } else {
const lastIncidentLevelId = unlockedIncidentLevelsPrices[memberLastIncident.incidentLevel].id; const lastIncidentLevelId = unlockedIncidentLevelsPrices[memberLastIncident.incidentLevel].id;
const maxId = 5; const maxId = 5;
if ((lastIncidentLevelId && (lastIncidentLevelId >= maxId)) || (timeDiff === 0)){ if ((lastIncidentLevelId && (lastIncidentLevelId >= maxId)) || (timeDiff === 0)){
incident.incidentLevel = memberLastIncident.incidentLevel; formattedIncident.incidentLevel = memberLastIncident.incidentLevel;
incident.incidentLevelPrice = unlockedIncidentLevelsPrices[incident.incidentLevel].price; formattedIncident.incidentLevelPrice = unlockedIncidentLevelsPrices[formattedIncident.incidentLevel].price;
} else { } else {
const nextId = lastIncidentLevelId + 1; const nextId = lastIncidentLevelId + 1;
Object.keys(unlockedIncidentLevelsPrices).forEach((key) => { Object.keys(unlockedIncidentLevelsPrices).forEach((key) => {
if (unlockedIncidentLevelsPrices[key].id === nextId){ if (unlockedIncidentLevelsPrices[key].id === nextId){
incident.incidentLevel = unlockedIncidentLevelsPrices[key].title; formattedIncident.incidentLevel = unlockedIncidentLevelsPrices[key].title;
incident.incidentLevelPrice = unlockedIncidentLevelsPrices[key].price formattedIncident.incidentLevelPrice = unlockedIncidentLevelsPrices[key].price
} }
}); });
} }
} }
} }
memberLastIncident.incidentLevel = incident.incidentLevel; memberLastIncident.incidentLevel = formattedIncident.incidentLevel;
memberLastIncident.incidentTimestamp = incident.bookingStart; memberLastIncident.incidentTimestamp = formattedIncident.unlockTimestamp;
incidentsWithLevel.push(incident); incidentsWithLevel.push(formattedIncident);
}); });
resolve(incidentsWithLevel); resolve(incidentsWithLevel);
@@ -318,17 +332,18 @@ const getIncidentData = (reservation) => {
if (!pairUnlockEntry){ if (!pairUnlockEntry){
pairUnlockEntry = entry; pairUnlockEntry = entry;
}else{ }else{
const virtualReservation = { const emptyReservation = {
reservationId: '', reservationId: null,
start: pairUnlockEntry.timestamp, start: null,
end: pairUnlockEntry.timestamp, end: null,
memberId: pairUnlockEntry.memberId,
resourceId,
}; };
incidents.push({ incidents.push({
incidentType: incidentType.UNLOCKED_INCIDENT, incidentType: incidentType.UNLOCKED_INCIDENT_STANDALONE,
reservation: virtualReservation, reservation: emptyReservation,
unlockTimestamp: pairUnlockEntry.timestamp,
memberId: pairUnlockEntry.memberId,
resourceId,
}); });
pairLockEntry = null; pairLockEntry = null;
@@ -338,12 +353,10 @@ const getIncidentData = (reservation) => {
case doorLockEvents.USER_LOCKED: case doorLockEvents.USER_LOCKED:
if (pairUnlockEntry && !pairLockEntry){ if (pairUnlockEntry && !pairLockEntry){
pairLockEntry = entry; pairLockEntry = entry;
const virtualReservation = { const emptyReservation = {
reservationId: '', reservationId: null,
start: pairUnlockEntry.timestamp, start: null,
end: pairLockEntry.timestamp, end: null,
memberId: pairUnlockEntry.memberId,
resourceId,
}; };
const unlockMoment = moment.utc(pairUnlockEntry.timestamp); const unlockMoment = moment.utc(pairUnlockEntry.timestamp);
const lockMoment = moment.utc(pairLockEntry.timestamp); const lockMoment = moment.utc(pairLockEntry.timestamp);
@@ -352,9 +365,12 @@ const getIncidentData = (reservation) => {
const totalChargeFee = timeIntervalsToCharge * UNSCHEDULED_CHARGE_PRICE; const totalChargeFee = timeIntervalsToCharge * UNSCHEDULED_CHARGE_PRICE;
if (timeIntervalsToCharge > 0){ if (timeIntervalsToCharge > 0){
incidents.push({ incidents.push({
incidentType: incidentType.UNSCHEDULED_INCIDENT, incidentType: incidentType.UNSCHEDULED_INCIDENT_STANDALONE,
reservation: virtualReservation, reservation: emptyReservation,
doorLockEntry: pairLockEntry, unlockTimestamp: pairUnlockEntry.timestamp,
lockTimestamp: pairLockEntry.timestamp,
memberId: pairUnlockEntry.memberId,
resourceId,
chargePrice: UNSCHEDULED_CHARGE_PRICE, chargePrice: UNSCHEDULED_CHARGE_PRICE,
timeIntervalsToCharge, timeIntervalsToCharge,
totalChargeFee, totalChargeFee,
@@ -384,9 +400,12 @@ const getIncidentData = (reservation) => {
// 1. Check if member entered before reservation start time // 1. Check if member entered before reservation start time
if (unlockEntry && chargeBefore && !previousReservationIsBackToBack) { if (unlockEntry && chargeBefore && !previousReservationIsBackToBack) {
incidents.push({ incidents.push({
incidentType: incidentType.UNSCHEDULED_INCIDENT, incidentType: incidentType.UNSCHEDULED_INCIDENT_RELATED_WITH_RESERVATION,
reservation, reservation,
doorLockEntry: unlockEntry, unlockTimestamp: unlockEntry.timestamp,
lockTimestamp: null,
memberId: reservation.memberId,
resourceId: reservation.resourceId,
chargePrice: UNSCHEDULED_CHARGE_PRICE, chargePrice: UNSCHEDULED_CHARGE_PRICE,
timeIntervalsToCharge: timeIntervalsToChargeBefore, timeIntervalsToCharge: timeIntervalsToChargeBefore,
totalChargeFee: totalChargeFeeBefore, totalChargeFee: totalChargeFeeBefore,
@@ -396,9 +415,12 @@ const getIncidentData = (reservation) => {
// 2. Check if member left after reservation end time // 2. Check if member left after reservation end time
if (lockEntry && chargeAfter && !nextReservationIsBackToBack) { if (lockEntry && chargeAfter && !nextReservationIsBackToBack) {
incidents.push({ incidents.push({
incidentType: incidentType.UNSCHEDULED_INCIDENT, incidentType: incidentType.UNSCHEDULED_INCIDENT_RELATED_WITH_RESERVATION,
reservation, reservation,
doorLockEntry: lockEntry, unlockTimestamp: null,
lockTimestamp: lockEntry.timestamp,
memberId: reservation.memberId,
resourceId: reservation.resourceId,
chargePrice: UNSCHEDULED_CHARGE_PRICE, chargePrice: UNSCHEDULED_CHARGE_PRICE,
timeIntervalsToCharge: timeIntervalsToChargeAfter, timeIntervalsToCharge: timeIntervalsToChargeAfter,
totalChargeFee: totalChargeFeeAfter, totalChargeFee: totalChargeFeeAfter,
@@ -407,10 +429,20 @@ const getIncidentData = (reservation) => {
// 3. Check if member forgot to lock the door // 3. Check if member forgot to lock the door
if (!lockEntry && !nextReservationIsBackToBack){ if (!lockEntry && !nextReservationIsBackToBack){
const emptyReservation = {
reservationId: null,
start: null,
end: null,
};
if (unlockEntry){ if (unlockEntry){
incidents.push({ incidents.push({
incidentType: incidentType.UNLOCKED_INCIDENT, incidentType: incidentType.UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION,
reservation, unlockTimestamp: unlockEntry.timestamp,
memberId: reservation.memberId,
resourceId: unlockEntry.resourceId,
reservation: reservation && reservation.dataValues ? reservation.dataValues : emptyReservation,
}); });
} else { } else {
// No lock entry, no unlock entry and no reservation after this one // No lock entry, no unlock entry and no reservation after this one
@@ -428,8 +460,11 @@ const getIncidentData = (reservation) => {
.then((lastEntry) => { .then((lastEntry) => {
if (lastEntry && lastEntry.event === doorLockEvents.USER_UNLOCKED){ if (lastEntry && lastEntry.event === doorLockEvents.USER_UNLOCKED){
incidents.push({ incidents.push({
incidentType: incidentType.UNLOCKED_INCIDENT, incidentType: incidentType.UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION,
reservation, unlockTimestamp: lastEntry.timestamp,
memberId: lastEntry.memberId,
resourceId: lastEntry.resourceId,
reservation: reservation && reservation.dataValues ? reservation.dataValues : emptyReservation,
}); });
} }
}) })
@@ -469,18 +504,13 @@ const calculateDoorLockCharges = () => {
console.log('Error checking incident : ', incident.error); console.log('Error checking incident : ', incident.error);
} else if (incident.incidentType) { } else if (incident.incidentType) {
switch (incident.incidentType) { switch (incident.incidentType) {
case incidentType.UNLOCKED_INCIDENT: case incidentType.UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION:
unlockedIncidents.push(incident.reservation); case incidentType.UNLOCKED_INCIDENT_STANDALONE:
unlockedIncidents.push(incident);
break; break;
case incidentType.UNSCHEDULED_INCIDENT: case incidentType.UNSCHEDULED_INCIDENT_RELATED_WITH_RESERVATION:
const {reservation, doorLockEntry, chargePrice, timeIntervalsToCharge, totalChargeFee} = incident; case incidentType.UNSCHEDULED_INCIDENT_STANDALONE:
unscheduledIncidents.push({ unscheduledIncidents.push(incident);
reservation,
lockEntry: doorLockEntry,
chargePrice,
timeIntervalsToCharge,
totalChargeFee,
});
break; break;
} }
} }

View File

@@ -11,7 +11,7 @@ const { fetchAllMembers } = require('../officeRnD/members');
const { fetchOffices, fetchResources } = require('../officeRnD/resources'); const { fetchOffices, fetchResources } = require('../officeRnD/resources');
const getUnlockedIncidents = (startDate, endDate, memberId) => { const getUnlockedIncidents = (startDate, endDate, memberId) => {
const attributes = ['id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice']; const attributes = ['id', 'reservationId', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice'];
const filters = {}; const filters = {};
@@ -40,6 +40,7 @@ const getUnlockedIncidents = (startDate, endDate, memberId) => {
const getUnscheduledIncidents = (startDate, endDate, memberId) => { const getUnscheduledIncidents = (startDate, endDate, memberId) => {
const attributes = [ const attributes = [
'id', 'id',
'reservationId',
'memberId', 'memberId',
'resourceId', 'resourceId',
'bookingStart', 'bookingStart',
@@ -114,6 +115,8 @@ const getAllDoorLockIncidents = (dateRange, memberId) => {
const allIncidents = []; const allIncidents = [];
unlockedIncidents.forEach((unlockedIncident) => { unlockedIncidents.forEach((unlockedIncident) => {
const incidentTypeNumber = unlockedIncident.reservationId.length > 0 ?
incidentType.UNLOCKED_INCIDENT_RELATED_WITH_RESERVATION : incidentType.UNLOCKED_INCIDENT_STANDALONE;
allIncidents.push({ allIncidents.push({
incidentId: unlockedIncident.id, incidentId: unlockedIncident.id,
memberId: unlockedIncident.memberId, memberId: unlockedIncident.memberId,
@@ -122,13 +125,15 @@ const getAllDoorLockIncidents = (dateRange, memberId) => {
officeName: officesMap[resourcesMap[unlockedIncident.resourceId].officeId].officeName, officeName: officesMap[resourcesMap[unlockedIncident.resourceId].officeId].officeName,
bookingStart: formatTime(unlockedIncident.bookingStart), bookingStart: formatTime(unlockedIncident.bookingStart),
bookingEnd: formatTime(unlockedIncident.bookingEnd), bookingEnd: formatTime(unlockedIncident.bookingEnd),
incidentType: incidentType.UNLOCKED_INCIDENT, incidentType: incidentTypeNumber,
incidentLevel: unlockedIncident.incidentLevel, incidentLevel: unlockedIncident.incidentLevel,
incidentPrice: unlockedIncident.incidentLevelPrice, incidentPrice: unlockedIncident.incidentLevelPrice,
}); });
}); });
unscheduledIncidents.forEach((unscheduledIncident) => { unscheduledIncidents.forEach((unscheduledIncident) => {
const incidentTypeNumber = unscheduledIncident.reservationId.length > 0 ?
incidentType.UNSCHEDULED_INCIDENT_RELATED_WITH_RESERVATION : incidentType.UNSCHEDULED_INCIDENT_STANDALONE;
allIncidents.push({ allIncidents.push({
incidentId: unscheduledIncident.id, incidentId: unscheduledIncident.id,
memberId: unscheduledIncident.memberId, memberId: unscheduledIncident.memberId,
@@ -137,7 +142,7 @@ const getAllDoorLockIncidents = (dateRange, memberId) => {
officeName: officesMap[resourcesMap[unscheduledIncident.resourceId].officeId].officeName, officeName: officesMap[resourcesMap[unscheduledIncident.resourceId].officeId].officeName,
bookingStart: formatTime(unscheduledIncident.bookingStart), bookingStart: formatTime(unscheduledIncident.bookingStart),
bookingEnd: formatTime(unscheduledIncident.bookingEnd), bookingEnd: formatTime(unscheduledIncident.bookingEnd),
incidentType: incidentType.UNSCHEDULED_INCIDENT, incidentType: incidentTypeNumber,
timeIntervalsToCharge: unscheduledIncident.timeIntervalsToCharge, timeIntervalsToCharge: unscheduledIncident.timeIntervalsToCharge,
chargePrice: unscheduledIncident.chargePrice, chargePrice: unscheduledIncident.chargePrice,
totalChargeFee: unscheduledIncident.totalChargeFee, totalChargeFee: unscheduledIncident.totalChargeFee,