Merge branch 'fix-wrong-unlock-entry-detection' into 'master'

Fix wrong unlock entry detection

See merge request saburly/psihologija!76
This commit was merged in pull request #76.
This commit is contained in:
Bilal Catic
2019-12-12 09:56:33 +00:00

View File

@@ -238,7 +238,25 @@ const getUnlockEntryForReservation = (reservation, previousReservation) => {
const entriesBeforeReservationStart = entries.filter((entry) => moment.utc(entry.timestamp).isBefore(reservation.start));
// if (memberId === '5ce785af422bdd00967fb781') {
// console.log('Start : ', moment.tz(reservation.start, UI_TIMEZONE).format('DD.MM HH:mm'));
// console.log('End : ', moment.tz(reservation.end, UI_TIMEZONE).format('DD.MM HH:mm'));
// console.log('\tPrevious reservation ');
// console.log('\tStart : ', previousReservation ? moment.tz(previousReservation.start, UI_TIMEZONE).format('DD.MM HH:mm') : '-');
// console.log('\tEnd : ', previousReservation ? moment.tz(previousReservation.end, UI_TIMEZONE).format('DD.MM HH:mm') : '-');
// console.log('\t---------------------------');
// console.log('\tSearch for entries : ');
// console.log('\tFrom : ', fromTimestamp ? moment.tz(fromTimestamp, UI_TIMEZONE).format('DD.MM HH:mm') : '-');
// console.log('\tTo : ', toTimestamp ? moment.tz(toTimestamp, UI_TIMEZONE).format('DD.MM HH:mm') : '-');
// console.log('\t---------------------------');
// console.log('\tEntries before reservation start : ');
// }
entriesBeforeReservationStart.forEach((entry) => {
// if (memberId === '5ce785af422bdd00967fb781') {
// console.log('\t', entry.event, '\t', moment.tz(entry.timestamp, UI_TIMEZONE).format('DD.MM HH:mm'));
// }
if (!eventFound) {
if (entry.event === doorLockEvents.USER_UNLOCKED) {
if (pairedLockEntry) {
@@ -256,13 +274,25 @@ const getUnlockEntryForReservation = (reservation, previousReservation) => {
});
if (eventFound){
// if (memberId === '5ce785af422bdd00967fb781') {
// console.log('\t=> FOUND UNLOCK ENTRY - NO NEED TO LOOK AFTER <=');
// }
resolve(candidateUnlockEntry);
} else {
candidateUnlockEntry = null;
const numberOfEntriesLeft = entries.length - entriesBeforeReservationStart.length;
const entriesAfterReservationStart = entries.slice(0, numberOfEntriesLeft);
const invertedEntriesAfterReservationStart = entriesAfterReservationStart.reverse();
// if (memberId === '5ce785af422bdd00967fb781') {
// console.log('\t-----------------------------');
// console.log('\tEntries after reservation start : ');
// }
invertedEntriesAfterReservationStart.forEach((entry) => {
// if (memberId === '5ce785af422bdd00967fb781') {
// console.log('\t', entry.event, '\t', moment.tz(entry.timestamp, UI_TIMEZONE).format('DD.MM HH:mm'));
// }
entriesAfterReservationStart.forEach((entry) => {
if (!eventFound) {
if (entry.event === doorLockEvents.USER_UNLOCKED) {
eventFound = true;
@@ -303,7 +333,7 @@ const getLockEntryForReservation = (reservation, nextReservation) => {
resourceId,
};
const order = [['timestamp', 'ASC']];
const order = [['timestamp', 'DESC']];
db.doorLockEvent.findAll({
attributes,
@@ -311,47 +341,31 @@ const getLockEntryForReservation = (reservation, nextReservation) => {
order,
})
.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 (!eventFound) {
if (entry.event === doorLockEvents.USER_LOCKED) {
if (pairedUnlockEntry) {
pairedUnlockEntry = null;
candidateLockEntry = null;
} else {
candidateLockEntry = entry;
eventFound = true;
}
}
if (entry.event === doorLockEvents.USER_UNLOCKED){
pairedUnlockEntry = entry;
}
if (entriesBeforeReservationEnd.length > 0){
const lastEntryInReservationTime = entriesBeforeReservationEnd[0];
if (lastEntryInReservationTime.event === doorLockEvents.USER_LOCKED){
resolve(lastEntryInReservationTime);
return;
}
});
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));
});