mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
sync
This commit is contained in:
@ -6,7 +6,7 @@ var mongoose = require('mongoose'),
|
||||
|
||||
var log = require('log4node');
|
||||
|
||||
var frequencies = ["annual","semi","quarterly","sterilizer","tg","ert","rae","medgas","imaging","neptune","anesthesia"];
|
||||
var frequencies = ["Medical Device","Sterilizer - TT","Vaporizer","Ice Maker","Anesthesia","Waste Management System","Imaging","Medical Gas Systems","RAE","ERT","N2O Trace Gas","Sterilizer - F","Quarterly","Semi","Annual","legacy","DLLR"];
|
||||
|
||||
exports.index = function(req, res) {
|
||||
log.info("clients.index");
|
||||
|
@ -4,16 +4,34 @@ var mongoose = require('mongoose'),
|
||||
Workorder = mongoose.model('Workorder');
|
||||
|
||||
exports.index = function(req, res) {
|
||||
var date = moment(req.query.date);
|
||||
var start = date.clone().startOf('day').toDate();
|
||||
var end = date.clone().endOf('day').toDate();
|
||||
|
||||
var start, end;
|
||||
|
||||
|
||||
if (req.query.start && req.query.end) {
|
||||
start = moment(req.query.start).toDate();
|
||||
end = moment(req.query.end).toDate();
|
||||
} else {
|
||||
var date = moment(req.query.date);
|
||||
start = date.clone().startOf('day').toDate();
|
||||
end = date.clone().endOf('day').toDate();
|
||||
}
|
||||
|
||||
var tech = req.query.tech;
|
||||
|
||||
var query = {
|
||||
deleted: false,
|
||||
'scheduling.start': { '$lte': end },
|
||||
'scheduling.end': { '$gte': start }
|
||||
};
|
||||
|
||||
if (tech) {
|
||||
query['techs'] = tech;
|
||||
}
|
||||
|
||||
|
||||
Workorder
|
||||
.find({
|
||||
deleted: false,
|
||||
'scheduling.start': { '$lte': end },
|
||||
'scheduling.end': { '$gte': start }
|
||||
})
|
||||
.find(query)
|
||||
.populate('techs', 'name')
|
||||
.populate('client', 'name identifier address')
|
||||
.select('scheduling techs client')
|
||||
|
@ -1,25 +1,190 @@
|
||||
|
||||
var mongoose = require('mongoose'),
|
||||
async = require('async'),
|
||||
User = mongoose.model('User');
|
||||
|
||||
exports.index = function(req, res) {
|
||||
var criteria = { deleted: false };
|
||||
var log = require('log4node');
|
||||
|
||||
if (req.query.group) {
|
||||
criteria.groups = req.query.group;
|
||||
}
|
||||
module.exports = function(config, directory) {
|
||||
|
||||
if (req.query.perms) {
|
||||
criteria.perms = req.query.perms;
|
||||
}
|
||||
|
||||
var query = User.find(criteria)
|
||||
.select('name groups')
|
||||
.exec(function(err, results) {
|
||||
if (err) {
|
||||
res.json(500, err);
|
||||
} else {
|
||||
res.json(results);
|
||||
function fetch_all_users(callback) {
|
||||
async.parallel({
|
||||
gapps: directory.listUsers,
|
||||
local: function(callback) {
|
||||
User.find({ deleted: false }).select('name email groups perms deleted').exec(callback);
|
||||
}
|
||||
}, callback);
|
||||
}
|
||||
|
||||
function map_local_users(data, results) {
|
||||
return function(callback) {
|
||||
async.each(data, function(item, callback) {
|
||||
var key = item.email.toLowerCase();
|
||||
|
||||
if (blacklist.indexOf(key) == -1)
|
||||
results[key] = item;
|
||||
|
||||
callback();
|
||||
},
|
||||
callback);
|
||||
};
|
||||
}
|
||||
|
||||
function map_gapps_users(data, results) {
|
||||
return function(callback) {
|
||||
async.each(data, function(item, callback) {
|
||||
var key = item.primaryEmail.toLowerCase();
|
||||
|
||||
// Ignore if blacklisted
|
||||
if (blacklist.indexOf(key) != -1) return callback();
|
||||
|
||||
if (!(key in results))
|
||||
results[key] = {
|
||||
email: item.primaryEmail,
|
||||
deleted: false,
|
||||
perms: [ ],
|
||||
groups: [ ],
|
||||
name: {
|
||||
first: item.name.givenName,
|
||||
last: item.name.familyName
|
||||
},
|
||||
};
|
||||
|
||||
callback();
|
||||
},
|
||||
callback);
|
||||
};
|
||||
}
|
||||
|
||||
function reduce_array(data, results) {
|
||||
return function(callback) {
|
||||
for (var item in data) {
|
||||
results.push(data[item]);
|
||||
}
|
||||
|
||||
results.sort(function(a, b) {
|
||||
var result = a.name.first.toLowerCase().localeCompare(b.name.first.toLowerCase());
|
||||
if (result == 0)
|
||||
result = a.name.last.toLowerCase().localeCompare(b.name.last.toLowerCase());
|
||||
|
||||
return result;
|
||||
});
|
||||
|
||||
callback();
|
||||
};
|
||||
}
|
||||
|
||||
function merge_sources(data, callback) {
|
||||
var map = {};
|
||||
var reduce = [];
|
||||
|
||||
async.series([
|
||||
map_local_users(data.local, map),
|
||||
map_gapps_users(data.gapps.users, map),
|
||||
reduce_array(map, reduce),
|
||||
],
|
||||
function(err) {
|
||||
callback(err, reduce);
|
||||
});
|
||||
}
|
||||
|
||||
return {
|
||||
index: function(req, res) {
|
||||
var criteria = { deleted: false };
|
||||
|
||||
if (req.query.group) {
|
||||
criteria.groups = req.query.group;
|
||||
}
|
||||
|
||||
if (req.query.perms) {
|
||||
criteria.perms = req.query.perms;
|
||||
}
|
||||
|
||||
if (req.query.userid) {
|
||||
criteria._id = req.query.userid;
|
||||
}
|
||||
|
||||
var query = User.find(criteria)
|
||||
.select('name groups')
|
||||
.exec(function(err, results) {
|
||||
if (err) {
|
||||
res.json(500, err);
|
||||
} else {
|
||||
res.json(results);
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
details: function(req, res) {
|
||||
|
||||
async.waterfall([
|
||||
fetch_all_users,
|
||||
merge_sources,
|
||||
],
|
||||
function(err, results) {
|
||||
if (err) return res.json(500, err);
|
||||
res.json(results);
|
||||
});
|
||||
},
|
||||
|
||||
create: function(req, res) {
|
||||
log.info("users.create %j", req.body);
|
||||
|
||||
var user = new User({
|
||||
email: req.body.email,
|
||||
name: req.body.name,
|
||||
groups: req.body.groups,
|
||||
perms: req.body.perms,
|
||||
deleted: false
|
||||
});
|
||||
|
||||
return user.save(function(err) {
|
||||
if (err)
|
||||
log.error("Error: %s", err);
|
||||
|
||||
return res.json(user);
|
||||
});
|
||||
},
|
||||
|
||||
update: function(req, res) {
|
||||
var id = req.param('user_id');
|
||||
log.info("users.update %s %j", id, req.body);
|
||||
|
||||
return User.findById(id, function(err, user) {
|
||||
user.email = req.body.email;
|
||||
user.name = req.body.name;
|
||||
user.groups = req.body.groups;
|
||||
user.perms = req.body.perms;
|
||||
|
||||
return user.save(function(err) {
|
||||
if (err)
|
||||
log.err("Error: %s", err);
|
||||
|
||||
return res.json(user);
|
||||
});
|
||||
});
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
var blacklist = [
|
||||
"system@atlanticbiomedical.com",
|
||||
"admin@atlanticbiomedical.com",
|
||||
"amazons3@atlanticbiomedical.com",
|
||||
"api@atlanticbiomedical.com",
|
||||
"biodexservice@atlanticbiomedical.com",
|
||||
"cerberusapp@atlanticbiomedical.com",
|
||||
"chattservice@atlanticbiomedical.com",
|
||||
"dropbox@atlanticbiomedical.com",
|
||||
"inquiries@atlanticbiomedical.com",
|
||||
"office@atlanticbiomedical.com",
|
||||
"parts@atlanticbiomedical.com",
|
||||
"schedule@atlanticbiomedical.com",
|
||||
"webapp@atlanticbiomedical.com",
|
||||
"banfieldservice@atlanticbiomedical.com",
|
||||
"chris.sewell@atlanticbiomedical.com",
|
||||
"devel@atlanticbiomedical.com",
|
||||
"dobie@atlanticbiomedical.com",
|
||||
"akirayasha@gmail.com",
|
||||
"receipts@atlanticbiomedical.com",
|
||||
];
|
||||
|
@ -67,6 +67,7 @@ module.exports = function(config, calendar) {
|
||||
|
||||
var workorder = new Workorder({
|
||||
client: req.body.client,
|
||||
emails: req.body.emails,
|
||||
createdOn: date,
|
||||
createdBy: req.user,
|
||||
reason: req.body.reason,
|
||||
@ -117,7 +118,7 @@ module.exports = function(config, calendar) {
|
||||
location: generateLocation(client),
|
||||
start: workorder.scheduling.start,
|
||||
end: workorder.scheduling.end,
|
||||
attendees: generateAttendees(techs)
|
||||
attendees: generateAttendees(techs, workorder)
|
||||
}, function(err, result) {
|
||||
if (result) {
|
||||
workorder.calendarId = result.id;
|
||||
@ -129,7 +130,7 @@ module.exports = function(config, calendar) {
|
||||
if (!notify)
|
||||
return callback(null);
|
||||
|
||||
var to = generateToLine(techs);
|
||||
var to = generateToLine(techs).concat(req.body.emails);
|
||||
if (!to)
|
||||
return callback(null);
|
||||
|
||||
@ -197,6 +198,7 @@ module.exports = function(config, calendar) {
|
||||
Workorder.findById(id, function(err, result) {
|
||||
workorder = result;
|
||||
|
||||
workorder.emails = req.body.emails;
|
||||
workorder.modifiedBy = req.user;
|
||||
workorder.modifiedOn = modifiedOn;
|
||||
workorder.reason = req.body.reason;
|
||||
@ -253,7 +255,7 @@ module.exports = function(config, calendar) {
|
||||
location: generateLocation(client),
|
||||
start: workorder.scheduling.start,
|
||||
end: workorder.scheduling.end,
|
||||
attendees: generateAttendees(techs),
|
||||
attendees: generateAttendees(techs, workorder),
|
||||
eventId: workorder.calendarId
|
||||
}, function(err, result) {
|
||||
callback(err);
|
||||
@ -335,6 +337,9 @@ function generateDescription(client, workorder, createdBy, modifiedBy) {
|
||||
"Workorder ID:\n" +
|
||||
" %(biomedId)s\n" +
|
||||
"\n" +
|
||||
"Scheduled Time:\n" +
|
||||
" %(scheduleStart)s - %(scheduleEnd)s\n" +
|
||||
"\n" +
|
||||
"Created By:\n" +
|
||||
" %(createdBy)s\n" +
|
||||
"\n" +
|
||||
@ -362,6 +367,11 @@ function generateDescription(client, workorder, createdBy, modifiedBy) {
|
||||
"Remarks:\n" +
|
||||
" %(remarks)s\n";
|
||||
|
||||
var format = "MMMM Do YYYY, h:mm a"
|
||||
|
||||
var scheduleStart = moment(workorder.scheduling.start).format(format);
|
||||
var scheduleEnd = moment(workorder.scheduling.end).format(format);
|
||||
|
||||
var resources = {
|
||||
biomedId: workorder.biomedId || '',
|
||||
name: client.name || '',
|
||||
@ -374,6 +384,8 @@ function generateDescription(client, workorder, createdBy, modifiedBy) {
|
||||
reason: workorder.reason || '',
|
||||
status: workorder.status || '',
|
||||
remarks: workorder.remarks || '',
|
||||
scheduleStart: scheduleStart,
|
||||
scheduleEnd: scheduleEnd,
|
||||
phone: '',
|
||||
contact: '',
|
||||
createdBy: '',
|
||||
@ -396,8 +408,9 @@ function generateDescription(client, workorder, createdBy, modifiedBy) {
|
||||
return sprintf(template, resources);
|
||||
}
|
||||
|
||||
function generateAttendees(techs) {
|
||||
return techs.map(function(t) { return t.email; });
|
||||
function generateAttendees(techs, workorder) {
|
||||
console.log('here');
|
||||
return techs.map(function(t) { return t.email; }).concat(workorder.emails);
|
||||
}
|
||||
|
||||
function generateToLine(techs) {
|
||||
|
@ -5,6 +5,7 @@ var mongoose = require('mongoose')
|
||||
var workorderSchema = new Schema({
|
||||
biomedId: Number,
|
||||
client: { type: ObjectId, ref: 'Client' },
|
||||
emails: [String],
|
||||
createdOn: Date,
|
||||
createdBy: { type: ObjectId, ref: 'User' },
|
||||
modifiedBy: { type: ObjectId, ref: 'User' },
|
||||
|
@ -9,7 +9,7 @@ html(lang="en", ng-app="biomed", ng-controller="biomed.PageCtrl")
|
||||
.navbar-inner
|
||||
a.brand(href='/', target='_self') Atlantic Biomedical
|
||||
progress-panel
|
||||
ul.nav.pull-right(ng-controller='biomed.AccountCtrl')
|
||||
ul.nav.pull-right
|
||||
li
|
||||
a(href='https://docs.google.com/a/atlanticbiomedical.com/forms/d/1i7CyNR2lcrz7bOL7u9ssKiMB2iBmXqOdvVKC0GRzRtY/viewform', target='_blank')
|
||||
i.icon-shopping-cart
|
||||
@ -23,9 +23,9 @@ html(lang="en", ng-app="biomed", ng-controller="biomed.PageCtrl")
|
||||
i.icon-fire
|
||||
| Tickets
|
||||
li
|
||||
a(ng-click="openDialog()")
|
||||
a(ng-click="disabledopenDialog()")
|
||||
i.icon-envelope
|
||||
| Messages
|
||||
| Messages (disabled)
|
||||
li
|
||||
a(href='/logout', target='_self')
|
||||
i.icon-share-alt
|
||||
@ -53,6 +53,11 @@ html(lang="en", ng-app="biomed", ng-controller="biomed.PageCtrl")
|
||||
a(href='/workorders')
|
||||
i.icon-wrench
|
||||
| Workorders
|
||||
|
||||
li(data-match-route='/admin.*', ng-show="accountHasPermission('system.admin')")
|
||||
a(href='/admin')
|
||||
i.icon-wrench
|
||||
| Admin
|
||||
.container-fluid
|
||||
ng-view
|
||||
!{js}
|
||||
|
@ -55,6 +55,10 @@ html(lang="en", ng-app="tags", ng-controller="tags.PageCtrl")
|
||||
dd {{payload.tag.client.name}} ({{payload.tag.client.identifier}})
|
||||
dt Client Device ID
|
||||
dd {{tag.clientDeviceId}}
|
||||
span(ng-repeat='field in fields')
|
||||
dt(ng-show='{{field.value}}') {{field.label}}
|
||||
dt(ng-show='{{field.value}}') {{field.value}}
|
||||
|
||||
dt Device
|
||||
dd {{tag.device}}
|
||||
dt Manufacturer
|
||||
|
Reference in New Issue
Block a user