do not report unknown member multiple times; read dlock timestamps in correct timezone
This commit is contained in:
@@ -27,7 +27,13 @@ const uploadDoorLockData = (req, res) => {
|
||||
parserResults.forEach((parserResult) => {
|
||||
parsedData.push(...parserResult.parsedData);
|
||||
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 = [];
|
||||
|
||||
@@ -3,10 +3,11 @@
|
||||
const db = require('../../models');
|
||||
const fs = require('fs');
|
||||
const csv = require('csv-parser');
|
||||
const moment = require('moment/moment');
|
||||
const moment = require('moment-timezone');
|
||||
const Op = require('sequelize').Op;
|
||||
|
||||
const {
|
||||
UI_TIMEZONE,
|
||||
USER_ENTRY_EVENT,
|
||||
ENABLE_PASSAGE_MODE,
|
||||
DISABLE_PASSAGE_MODE,
|
||||
@@ -38,7 +39,7 @@ const parseDoorLockDataFile = (file) => {
|
||||
return new Promise ((resolve, reject) => {
|
||||
const results = [];
|
||||
const errors = [];
|
||||
const unknownMembers = [];
|
||||
const unknownMembersToReport = [];
|
||||
let isValidFile = true;
|
||||
|
||||
const prefetchDataJobs = [getMappingsFromDatabase(), fetchAllMembers()];
|
||||
@@ -48,6 +49,11 @@ const parseDoorLockDataFile = (file) => {
|
||||
const mappings = result[0];
|
||||
const allMembers = result[1];
|
||||
|
||||
const membersMap = {};
|
||||
const unknownMembersMap = {};
|
||||
|
||||
allMembers.forEach((member) => membersMap[member.name] = member);
|
||||
|
||||
const mappingFromFileName = extractMappingFromFileName(file.name);
|
||||
const mappingObject = checkIfMappingExsists(mappingFromFileName, mappings);
|
||||
if (!mappingObject){
|
||||
@@ -104,13 +110,15 @@ const parseDoorLockDataFile = (file) => {
|
||||
const secondEntry = results[i+1];
|
||||
|
||||
if (firstEntry && (firstEntry.event === USER_ENTRY_EVENT)){
|
||||
const memberObject = allMembers.find(member => member.name === firstEntry.name);
|
||||
const memberObject = membersMap[firstEntry.name];
|
||||
|
||||
if (!memberObject){
|
||||
//Check if member is already labeled as unknown
|
||||
const unknownMember = unknownMembers.find((member) => member.details === firstEntry.name);
|
||||
const unknownMember = unknownMembersMap[firstEntry.name];
|
||||
|
||||
if (!unknownMember){
|
||||
unknownMembers.push({
|
||||
unknownMembersMap[firstEntry.name] = firstEntry.name;
|
||||
unknownMembersToReport.push({
|
||||
error: csvParserErrors.UNKNOWN_MEMBER,
|
||||
details: firstEntry.name,
|
||||
file: file.name,
|
||||
@@ -123,7 +131,7 @@ const parseDoorLockDataFile = (file) => {
|
||||
doorLockEvents.USER_UNLOCKED : doorLockEvents.USER_LOCKED;
|
||||
|
||||
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
|
||||
if (memberObject){
|
||||
@@ -159,7 +167,7 @@ const parseDoorLockDataFile = (file) => {
|
||||
}
|
||||
resolve({
|
||||
parsedData,
|
||||
unknownMembers,
|
||||
unknownMembers: unknownMembersToReport,
|
||||
errors
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user