fix wrong exit entry detection
This commit is contained in:
@@ -333,7 +333,7 @@ const getLockEntryForReservation = (reservation, nextReservation) => {
|
|||||||
resourceId,
|
resourceId,
|
||||||
};
|
};
|
||||||
|
|
||||||
const order = [['timestamp', 'ASC']];
|
const order = [['timestamp', 'DESC']];
|
||||||
|
|
||||||
db.doorLockEvent.findAll({
|
db.doorLockEvent.findAll({
|
||||||
attributes,
|
attributes,
|
||||||
@@ -341,47 +341,31 @@ const getLockEntryForReservation = (reservation, nextReservation) => {
|
|||||||
order,
|
order,
|
||||||
})
|
})
|
||||||
.then((entries) => {
|
.then((entries) => {
|
||||||
let candidateLockEntry = null;
|
|
||||||
let pairedUnlockEntry = null;
|
|
||||||
let eventFound = false;
|
|
||||||
|
|
||||||
const entriesAfterReservationEnd = entries.filter((entry) => moment.utc(entry.timestamp).isAfter(reservation.end));
|
const entriesBeforeReservationEnd = entries.filter(entry => moment.utc(entry.timestamp).isBefore(reservation.end));
|
||||||
|
|
||||||
entriesAfterReservationEnd.forEach((entry) => {
|
if (entriesBeforeReservationEnd.length > 0){
|
||||||
if (!eventFound) {
|
const lastEntryInReservationTime = entriesBeforeReservationEnd[0];
|
||||||
if (entry.event === doorLockEvents.USER_LOCKED) {
|
if (lastEntryInReservationTime.event === doorLockEvents.USER_LOCKED){
|
||||||
if (pairedUnlockEntry) {
|
resolve(lastEntryInReservationTime);
|
||||||
pairedUnlockEntry = null;
|
return;
|
||||||
candidateLockEntry = null;
|
|
||||||
} else {
|
|
||||||
candidateLockEntry = entry;
|
|
||||||
eventFound = true;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (entry.event === doorLockEvents.USER_UNLOCKED){
|
|
||||||
pairedUnlockEntry = entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
if (eventFound){
|
|
||||||
resolve(candidateLockEntry);
|
|
||||||
} else {
|
|
||||||
candidateLockEntry = null;
|
|
||||||
const numberOfEntriesLeft = entries.length - entriesAfterReservationEnd.length;
|
|
||||||
const entriesBeforeReservationEnd = entries.slice(0, numberOfEntriesLeft);
|
|
||||||
|
|
||||||
entriesBeforeReservationEnd.reverse().forEach((entry) => {
|
|
||||||
if (!eventFound) {
|
|
||||||
if (entry.event === doorLockEvents.USER_LOCKED) {
|
|
||||||
eventFound = true;
|
|
||||||
candidateLockEntry = entry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
resolve(candidateLockEntry);
|
// Phase 2
|
||||||
|
const numberOfEntriesLeft = entries.length - entriesBeforeReservationEnd.length;
|
||||||
|
const entriesAfterReservationEnd = entries.slice(0, numberOfEntriesLeft).reverse();
|
||||||
|
if (entriesAfterReservationEnd.length > 0){
|
||||||
|
const firstEntryAfterReservation = entriesAfterReservationEnd[0];
|
||||||
|
if (firstEntryAfterReservation.event === doorLockEvents.USER_LOCKED){
|
||||||
|
resolve(firstEntryAfterReservation);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(null);
|
||||||
})
|
})
|
||||||
.catch((error) => reject(error));
|
.catch((error) => reject(error));
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user