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) => {
|
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 = [];
|
||||||
|
|||||||
@@ -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
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user