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 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 = { module.exports = {
VALID_CSV_HEADERS, VALID_CSV_HEADERS,
USER_ENTRY_EVENT, USER_ENTRY_EVENT,
@@ -162,4 +164,5 @@ module.exports = {
UNPAID_FEE_STATUS, UNPAID_FEE_STATUS,
CUSTOM_FEES_PREFIXES, CUSTOM_FEES_PREFIXES,
ALLOW_SENDING_FEES, 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 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 #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_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) 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, VALID_CSV_HEADERS,
doorLockEvents, doorLockEvents,
csvParserErrors, csvParserErrors,
TRIM_DLOCK_NAMES_LENGTH
} = require('../../constants/constants'); } = require('../../constants/constants');
const { fetchAllMembers } = require('../officeRnD/members'); const { fetchAllMembers } = require('../officeRnD/members');
@@ -53,7 +54,12 @@ const parseDoorLockDataFile = (file) => {
const membersMap = {}; const membersMap = {};
const unknownMembersMap = {}; 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 mappingFromFileName = extractMappingFromFileName(file.name);
const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings); const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings);
@@ -110,18 +116,20 @@ const parseDoorLockDataFile = (file) => {
const firstEntry = results[i]; const firstEntry = results[i];
const secondEntry = results[i+1]; const secondEntry = results[i+1];
if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){ const trimmedName = firstEntry && firstEntry.name ? firstEntry.name.substring(0, TRIM_DLOCK_NAMES_LENGTH) || undefined : undefined;
const memberObject = membersMap[firstEntry.name];
if (firstEntry && trimmedName && (firstEntry.event === USER_ENTRY_EVENT)){
const memberObject = membersMap[trimmedName];
if (!memberObject){ if (!memberObject){
//Check if member is already labeled as unknown //Check if member is already labeled as unknown
const unknownMember = unknownMembersMap[firstEntry.name]; const unknownMember = unknownMembersMap[trimmedName];
if (!unknownMember){ if (!unknownMember){
unknownMembersMap[firstEntry.name] = firstEntry.name; unknownMembersMap[trimmedName] = trimmedName;
unknownMembersToReport.push({ unknownMembersToReport.push({
error: csvParserErrors.UNKNOWN_MEMBER, error: csvParserErrors.UNKNOWN_MEMBER,
details: firstEntry.name, details: trimmedName,
file: file.name, file: file.name,
}); });
} }
@@ -137,7 +145,7 @@ const parseDoorLockDataFile = (file) => {
//Verify that member is registered in OfficeRnD system //Verify that member is registered in OfficeRnD system
if (memberObject){ if (memberObject){
const entryData = { const entryData = {
memberName: firstEntry.name, memberName: trimmedName,
memberNumber: firstEntry['user no'], memberNumber: firstEntry['user no'],
memberId: memberObject.memberId, memberId: memberObject.memberId,
timestamp, 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 = { module.exports = {
getActiveBookingsForMembersInDateRange, getActiveBookingsForMembersInDateRange,
getAllBookingsForMembersInDateRange, getAllBookingsForMembersInDateRange,
deleteBookingsRemovedFromORD
}; };

View File

@@ -3,6 +3,7 @@
const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings'); const { fetchAllBookings, bulkWriteReservationsWithChangesTracking } = require('../officeRnD/bookings');
const { fetchResources } = require('../officeRnD/resources'); const { fetchResources } = require('../officeRnD/resources');
const { fetchRates } = require('../officeRnD/rates'); const { fetchRates } = require('../officeRnD/rates');
const { deleteBookingsRemovedFromORD } = require('./bookings');
const { officeRnDAPIErrors } = require('../../constants/constants'); const { officeRnDAPIErrors } = require('../../constants/constants');
const { const {
getIncidentsFromChanges, getIncidentsFromChanges,
@@ -34,8 +35,17 @@ const checkBookingChanges = () => {
resourcesMap[resourceId] = resource; resourcesMap[resourceId] = resource;
}); });
bulkWriteReservationsWithChangesTracking(reservations, resourcesMap) const reservationsInORD = [];
.then((changes) => { 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) bulkWriteChanges(changes)
.then(() => { .then(() => {
getIncidentsFromChanges(changes) getIncidentsFromChanges(changes)