Fix deleted booking problem / Compare only first 22 ( configurable ) letters of a name with dlock user
This commit is contained in:
@@ -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
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user