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

@@ -137,6 +137,8 @@ const UNPAID_FEE_STATUS = 'not_paid';
const ALLOW_SENDING_FEES = parseInt(process.env.ALLOW_SENDING_FEES_FOR_CURRENT_AND_FUTURE_MONTHS) ? true : false;
const TRIM_DLOCK_NAMES_LENGTH = parseInt(process.env.TRIM_DLOCK_NAMES_LENGTH) || 22;
module.exports = {
VALID_CSV_HEADERS,
USER_ENTRY_EVENT,
@@ -162,4 +164,5 @@ module.exports = {
UNPAID_FEE_STATUS,
CUSTOM_FEES_PREFIXES,
ALLOW_SENDING_FEES,
TRIM_DLOCK_NAMES_LENGTH
};

View File

@@ -41,6 +41,8 @@ CUSTOM_FEES_PREFIXES=Array of prefixes to recognize manually added fees. Comma-s
ALLOW_SENDING_FEES_FOR_CURRENT_AND_FUTURE_MONTHS=0 - false => Sending fees is disabled for current and future months, 1 - true => Sending fees is never disabled
TRIM_DLOCK_NAMES_LENGTH=Length of names in DLOCK files that will be taken to compare with ORD member names
#More about pool option : http://docs.sequelizejs.com/class/lib/sequelize.js~Sequelize.html
DB_POOL_MAX_CONNECTIONS=Maximum number of connection in pool (ex. 18)
DB_POOL_ACQUIRE=The maximum time, in milliseconds, that pool will try to get connection before throwing error (ex. 120000)

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)