Files
old-psihologija/services/integration/reports.js
2019-06-16 11:53:20 +02:00

99 lines
3.3 KiB
JavaScript

'use strict';
const db = require('../../models/index');
const { incidentType } = require('../../constants/constants');
const { fetchAllMembers } = require('../officeRnD/members');
const getUnlockedIncidents = () => {
const attributes = ['id', 'memberId', 'resourceId', 'bookingStart', 'bookingEnd', 'incidentLevel', 'incidentLevelPrice'];
return db.unlockedIncident.findAll({
attributes,
sort: [
['bookingStart', 'ASC']
]
});
};
const getUnscheduledIncidents = () => {
const attributes = [
'id',
'memberId',
'resourceId',
'bookingStart',
'bookingEnd',
'doorLockEventTimestamp',
'doorLockEventType',
'timeIntervalsToCharge',
'chargePrice',
'totalChargeFee'
];
return db.unscheduledIncident.findAll({
attributes,
sort: [
['bookingStart', 'ASC']
]
});
};
const getAllDoorLockIncidents = () => {
return new Promise ((resolve, reject) => {
const dataFetchJobs = [fetchAllMembers(), getUnlockedIncidents(), getUnscheduledIncidents()];
Promise.all(dataFetchJobs)
.then((data) => {
const members = data[0];
const unlockedIncidents = data[1];
const unscheduledIncidents = data[2];
const membersMap = {};
members.forEach((member) => membersMap[member.memberId] = member);
const allIncidents = [];
unlockedIncidents.forEach((unlockedIncident) => {
allIncidents.push({
incidentId: unlockedIncident.id,
memberId: unlockedIncident.memberId,
memberName: membersMap[unlockedIncident.memberId].name,
resourceName: '',
officeName: '',
bookingStart: unlockedIncident.bookingStart,
bookingEnd: unlockedIncident.bookingEnd,
incidentType: incidentType.UNLOCKED_INCIDENT,
incidentLevel: unlockedIncident.incidentLevel,
incidentPrice: unlockedIncident.incidentLevelPrice,
});
});
unscheduledIncidents.forEach((unscheduledIncident) => {
allIncidents.push({
incidentId: unscheduledIncident.id,
memberId: unscheduledIncident.memberId,
memberName: membersMap[unscheduledIncident.memberId].name,
resourceName: '',
officeName: '',
bookingStart: unscheduledIncident.bookingStart,
bookingEnd: unscheduledIncident.bookingEnd,
incidentType: incidentType.UNSCHEDULED_INCIDENT,
timeIntervalsToCharge: unscheduledIncident.timeIntervalsToCharge,
chargePrice: unscheduledIncident.chargePrice,
totalChargeFee: unscheduledIncident.totalChargeFee,
});
});
resolve(allIncidents);
})
.catch((error) => reject(error));
});
};
module.exports = {
getUnlockedIncidents,
getUnscheduledIncidents,
getAllDoorLockIncidents,
};