do not report unknown member multiple times; read dlock timestamps in correct timezone

This commit is contained in:
Bilal Catic
2019-06-23 11:05:27 +02:00
parent 8198f35343
commit 0a95129e98
2 changed files with 22 additions and 8 deletions

View File

@@ -27,7 +27,13 @@ const uploadDoorLockData = (req, res) => {
parserResults.forEach((parserResult) => { parserResults.forEach((parserResult) => {
parsedData.push(...parserResult.parsedData); parsedData.push(...parserResult.parsedData);
parserErrors.push(...parserResult.errors); parserErrors.push(...parserResult.errors);
unknownMembers.push(...parserResult.unknownMembers);
parserResult.unknownMembers.forEach((newUnknownMember) => {
// Check if member is already labeled as unknown in different file
if (!unknownMembers.find((unknownMember) => unknownMember.details === newUnknownMember.details)){
unknownMembers.push(newUnknownMember);
}
});
}); });
const asyncWriteJobs = []; const asyncWriteJobs = [];

View File

@@ -3,10 +3,11 @@
const db = require('../../models'); const db = require('../../models');
const fs = require('fs'); const fs = require('fs');
const csv = require('csv-parser'); const csv = require('csv-parser');
const moment = require('moment/moment'); const moment = require('moment-timezone');
const Op = require('sequelize').Op; const Op = require('sequelize').Op;
const { const {
UI_TIMEZONE,
USER_ENTRY_EVENT, USER_ENTRY_EVENT,
ENABLE_PASSAGE_MODE, ENABLE_PASSAGE_MODE,
DISABLE_PASSAGE_MODE, DISABLE_PASSAGE_MODE,
@@ -38,7 +39,7 @@ const parseDoorLockDataFile = (file) => {
return new Promise ((resolve, reject) => { return new Promise ((resolve, reject) => {
const results = []; const results = [];
const errors = []; const errors = [];
const unknownMembers = []; const unknownMembersToReport = [];
let isValidFile = true; let isValidFile = true;
const prefetchDataJobs = [getMappingsFromDatabase(), fetchAllMembers()]; const prefetchDataJobs = [getMappingsFromDatabase(), fetchAllMembers()];
@@ -48,6 +49,11 @@ const parseDoorLockDataFile = (file) => {
const mappings = result[0]; const mappings = result[0];
const allMembers = result[1]; const allMembers = result[1];
const membersMap = {};
const unknownMembersMap = {};
allMembers.forEach((member) => membersMap[member.name] = member);
const mappingFromFileName = extractMappingFromFileName(file.name); const mappingFromFileName = extractMappingFromFileName(file.name);
const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings); const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings);
if (!mappingObject){ if (!mappingObject){
@@ -104,13 +110,15 @@ const parseDoorLockDataFile = (file) => {
const secondEntry = results[i+1]; const secondEntry = results[i+1];
if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){ if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){
const memberObject = allMembers.find(member => member.name === firstEntry.name); const memberObject = membersMap[firstEntry.name];
if (!memberObject){ if (!memberObject){
//Check if member is already labeled as unknown //Check if member is already labeled as unknown
const unknownMember = unknownMembers.find((member) => member.details === firstEntry.name); const unknownMember = unknownMembersMap[firstEntry.name];
if (!unknownMember){ if (!unknownMember){
unknownMembers.push({ unknownMembersMap[firstEntry.name] = firstEntry.name;
unknownMembersToReport.push({
error: csvParserErrors.UNKNOWN_MEMBER, error: csvParserErrors.UNKNOWN_MEMBER,
details: firstEntry.name, details: firstEntry.name,
file: file.name, file: file.name,
@@ -123,7 +131,7 @@ const parseDoorLockDataFile = (file) => {
doorLockEvents.USER_UNLOCKED : doorLockEvents.USER_LOCKED; doorLockEvents.USER_UNLOCKED : doorLockEvents.USER_LOCKED;
const dateTimeString = `${firstEntry.date} ${firstEntry.time}`; const dateTimeString = `${firstEntry.date} ${firstEntry.time}`;
const timestamp = moment.utc(dateTimeString, 'MM/DD/YY HH:mm:ss A').toISOString(); const timestamp = moment.tz(dateTimeString, 'MM/DD/YY HH:mm:ss A', UI_TIMEZONE).toISOString();
//Verify that member is registered in OfficeRnD system //Verify that member is registered in OfficeRnD system
if (memberObject){ if (memberObject){
@@ -159,7 +167,7 @@ const parseDoorLockDataFile = (file) => {
} }
resolve({ resolve({
parsedData, parsedData,
unknownMembers, unknownMembers: unknownMembersToReport,
errors errors
}); });
}); });