Fix deleted booking problem / Compare only first 22 ( configurable ) letters of a name with dlock user

This commit is contained in:
Senad Uka
2019-10-07 15:49:03 +02:00
parent 602067e868
commit 886d4f513e
5 changed files with 49 additions and 9 deletions

View File

@@ -14,6 +14,7 @@ const {
VALID_CSV_HEADERS,
doorLockEvents,
csvParserErrors,
TRIM_DLOCK_NAMES_LENGTH
} = require('../../constants/constants');
const { fetchAllMembers } = require('../officeRnD/members');
@@ -53,7 +54,12 @@ const parseDoorLockDataFile = (file) => {
const membersMap = {};
const unknownMembersMap = {};
allMembers.forEach((member) => membersMap[member.name] = member);
allMembers.forEach((member) => {
const limitedMemberName = member.name ? member.name.substring(0, TRIM_DLOCK_NAMES_LENGTH) || undefined : undefined;
if (limitedMemberName){
membersMap[limitedMemberName] = member;
}
});
const mappingFromFileName = extractMappingFromFileName(file.name);
const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings);
@@ -110,18 +116,20 @@ const parseDoorLockDataFile = (file) => {
const firstEntry = results[i];
const secondEntry = results[i+1];
if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){
const memberObject = membersMap[firstEntry.name];
const trimmedName = firstEntry && firstEntry.name ? firstEntry.name.substring(0, TRIM_DLOCK_NAMES_LENGTH) || undefined : undefined;
if (firstEntry && trimmedName && (firstEntry.event === USER_ENTRY_EVENT)){
const memberObject = membersMap[trimmedName];
if (!memberObject){
//Check if member is already labeled as unknown
const unknownMember = unknownMembersMap[firstEntry.name];
const unknownMember = unknownMembersMap[trimmedName];
if (!unknownMember){
unknownMembersMap[firstEntry.name] = firstEntry.name;
unknownMembersMap[trimmedName] = trimmedName;
unknownMembersToReport.push({
error: csvParserErrors.UNKNOWN_MEMBER,
details: firstEntry.name,
details: trimmedName,
file: file.name,
});
}
@@ -137,7 +145,7 @@ const parseDoorLockDataFile = (file) => {
//Verify that member is registered in OfficeRnD system
if (memberObject){
const entryData = {
memberName: firstEntry.name,
memberName: trimmedName,
memberNumber: firstEntry['user no'],
memberId: memberObject.memberId,
timestamp,

View File

@@ -88,7 +88,24 @@ const getAllBookingsForMembersInDateRange = (dateRange, memberIds) => {
});
};
const deleteBookingsRemovedFromORD = (reservationIds) => {
if (!Array.isArray(reservationIds)){
return 0;
}
const filter = {
reservationId: {
[Op.notIn]: reservationIds
}
};
return db.bookingReservation.destroy({
where: filter
});
};
module.exports = {
getActiveBookingsForMembersInDateRange,
getAllBookingsForMembersInDateRange,
deleteBookingsRemovedFromORD
};

View File

@@ -3,6 +3,7 @@
const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings');
const { fetchResources } = require('../officeRnD/resources');
const { fetchRates } = require('../officeRnD/rates');
const { deleteBookingsRemovedFromORD } = require('./bookings');
const { officeRnDAPIErrors } = require('../../constants/constants');
const {
getIncidentsFromChanges,
@@ -34,8 +35,17 @@ const checkBookingChanges = () => {
resourcesMap[resourceId] = resource;
});
bulkWriteReservationsWithChangesTracking(reservations, resourcesMap)
.then((changes) => {
const reservationsInORD = [];
reservations.forEach(reservation => {
const { reservationId } = reservation;
reservationsInORD.push(reservationId);
});
const asyncActions = [deleteBookingsRemovedFromORD(reservationsInORD), bulkWriteReservationsWithChangesTracking(reservations, resourcesMap)];
Promise.all(asyncActions)
.then((asyncActionResults) => {
const changes = asyncActionResults[1];
bulkWriteChanges(changes)
.then(() => {
getIncidentsFromChanges(changes)