2015-08-05 06:03:02 -07:00
|
|
|
angular.module('biomed')
|
2015-12-16 09:12:35 -08:00
|
|
|
.controller("DeviceAddCtrl", devicesControllerFactory(false))
|
|
|
|
.controller("DeviceEditCtrl", devicesControllerFactory(true))
|
2015-08-03 05:00:22 -04:00
|
|
|
|
2015-08-05 06:03:02 -07:00
|
|
|
|
|
|
|
function devicesControllerFactory(isEdit) {
|
2015-12-16 09:12:35 -08:00
|
|
|
return function ($scope, Devices, DeviceTypes, $location, $filter, $routeParams) {
|
2015-08-05 06:03:02 -07:00
|
|
|
function buildDeviceTypeFilterQuery(ignore) {
|
|
|
|
var query = {};
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(['category', 'make', 'model'], function (key) {
|
2015-08-05 06:03:02 -07:00
|
|
|
if (key == ignore)
|
|
|
|
return;
|
|
|
|
|
|
|
|
if ($scope.deviceTypes[key].picker) {
|
|
|
|
query[key] = $scope.deviceTypes[key].picker.id;
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
return query;
|
|
|
|
}
|
|
|
|
|
|
|
|
function filterDeviceTypeSelectors() {
|
|
|
|
console.log('Filtering Device Data');
|
|
|
|
|
|
|
|
var data = {};
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(['category', 'make', 'model'], function (key) {
|
2015-08-05 06:03:02 -07:00
|
|
|
var query = buildDeviceTypeFilterQuery(key);
|
|
|
|
var filteredResults = $filter('filter')(deviceTypesList, query);
|
|
|
|
|
|
|
|
data[key] = [];
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(filteredResults, function (entry) {
|
2015-08-05 06:03:02 -07:00
|
|
|
data[key].push(entry[key]);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(['category', 'make', 'model'], function (key) {
|
2015-08-05 06:03:02 -07:00
|
|
|
$scope.deviceTypes[key].data = _.uniq(data[key]);
|
|
|
|
|
|
|
|
if (data[key].length == 1) {
|
|
|
|
var value = data[key][0];
|
2015-12-16 09:12:35 -08:00
|
|
|
$scope.deviceTypes[key].picker = {id: value, text: value};
|
2015-08-05 06:03:02 -07:00
|
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function deviceTypePickerFactory(key, label) {
|
|
|
|
var optsKey = key + 'Opts';
|
|
|
|
|
|
|
|
$scope.deviceTypes[key] = {};
|
|
|
|
$scope.deviceTypes[key].opts = {
|
|
|
|
containerCssClass: 'input-xxlarge',
|
|
|
|
placeholder: 'Choose a ' + label,
|
2015-12-16 09:12:35 -08:00
|
|
|
query: function (query) {
|
2015-08-05 06:03:02 -07:00
|
|
|
var data = $filter('filter')($scope.deviceTypes[key].data, query.term);
|
|
|
|
query.callback({
|
2015-12-16 09:12:35 -08:00
|
|
|
results: _.map(data, function (entry) {
|
|
|
|
return {id: entry, text: entry}
|
2015-08-05 06:03:02 -07:00
|
|
|
})
|
|
|
|
});
|
|
|
|
}
|
|
|
|
};
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
$scope.$watch('deviceTypes.' + key + '.picker', function () {
|
2015-08-05 06:03:02 -07:00
|
|
|
filterDeviceTypeSelectors();
|
|
|
|
updateDeviceTypeSelection();
|
|
|
|
}, true);
|
|
|
|
}
|
|
|
|
|
|
|
|
function clearDeviceTypePickers() {
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(['category', 'make', 'model'], function (key) {
|
2015-08-05 06:03:02 -07:00
|
|
|
$scope.deviceTypes[key].picker = null;
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function updateDeviceTypeSelection() {
|
2015-12-16 09:12:35 -08:00
|
|
|
var query = buildDeviceTypeFilterQuery();
|
|
|
|
var results = $filter('filter')(deviceTypesList, query);
|
2015-08-05 06:03:02 -07:00
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
$scope.model.deviceType = (results.length == 1) ? results[0]._id : null;
|
2015-08-05 06:03:02 -07:00
|
|
|
}
|
|
|
|
|
|
|
|
function generateRandomIdentifier() {
|
|
|
|
$scope.model.biomedId = hashids.encode(Date.now());
|
|
|
|
}
|
|
|
|
|
|
|
|
function toggleFrequency(index) {
|
|
|
|
$scope.model.frequencySchedule[index] = !$scope.model.frequencySchedule[index];
|
|
|
|
|
|
|
|
console.log($scope.model);
|
|
|
|
}
|
|
|
|
|
|
|
|
function create() {
|
2015-12-16 09:12:35 -08:00
|
|
|
Devices.create($scope.model, function (result) {
|
2015-08-10 01:42:48 -04:00
|
|
|
$location.path("/clients/" + result.client);
|
2015-08-05 06:03:02 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function update() {
|
2015-12-16 09:12:35 -08:00
|
|
|
Devices.update({id: $scope.model._id}, $scope.model, function () {
|
2015-08-10 01:42:48 -04:00
|
|
|
$location.path("/clients/" + $scope.model.client);
|
|
|
|
});
|
2015-08-05 06:03:02 -07:00
|
|
|
}
|
|
|
|
|
2015-10-14 02:51:05 -07:00
|
|
|
function destroy() {
|
|
|
|
$scope.model.deleted = true;
|
2015-12-16 09:12:35 -08:00
|
|
|
Devices.update({id: $scope.model._id}, $scope.model, function () {
|
|
|
|
$location.path("/clients/" + $scope.model.client);
|
2015-10-14 02:51:05 -07:00
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function restore() {
|
|
|
|
$scope.model.deleted = false;
|
2015-12-16 09:12:35 -08:00
|
|
|
Devices.update({id: $scope.model._id}, $scope.model, function () {
|
2015-10-14 02:51:05 -07:00
|
|
|
$location.path("/clients/" + $scope.model.client);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2015-08-05 06:03:02 -07:00
|
|
|
var hashids = new Hashids("biomed");
|
|
|
|
var search = $location.search();
|
|
|
|
|
|
|
|
$scope.model = {
|
|
|
|
frequencySchedule: [false, false, false, false, false, false, false, false, false, false, false, false]
|
|
|
|
};
|
|
|
|
|
|
|
|
$scope.toggleFrequency = toggleFrequency;
|
|
|
|
|
|
|
|
$scope.deviceTypes = {};
|
|
|
|
$scope.deviceTypes.reset = clearDeviceTypePickers;
|
|
|
|
|
|
|
|
$scope.biomedId = {};
|
|
|
|
$scope.biomedId.reset = generateRandomIdentifier;
|
|
|
|
|
|
|
|
$scope.create = create;
|
|
|
|
$scope.update = update;
|
2015-10-14 02:51:05 -07:00
|
|
|
$scope.destroy = destroy;
|
|
|
|
$scope.restore = restore;
|
2015-08-05 06:03:02 -07:00
|
|
|
|
|
|
|
deviceTypePickerFactory('category', 'Device Type');
|
|
|
|
deviceTypePickerFactory('make', 'Make');
|
|
|
|
deviceTypePickerFactory('model', 'Model');
|
|
|
|
|
|
|
|
var deviceTypesList = DeviceTypes.index(filterDeviceTypeSelectors)
|
|
|
|
|
|
|
|
console.log((isEdit ? "Edit" : "Create") + " Mode");
|
|
|
|
|
|
|
|
if (isEdit) {
|
2015-12-16 09:12:35 -08:00
|
|
|
$scope.model = Devices.get($routeParams, function () {
|
2015-08-05 06:03:02 -07:00
|
|
|
$scope.loading = false;
|
|
|
|
|
|
|
|
var deviceType = $scope.model.deviceType;
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
_.each(['category', 'make', 'model'], function (key) {
|
|
|
|
$scope.deviceTypes[key].picker = {id: deviceType[key], text: deviceType[key]};
|
2015-08-05 06:03:02 -07:00
|
|
|
});
|
|
|
|
|
|
|
|
$scope.model.client = $scope.model.client._id;
|
|
|
|
$scope.model.deviceType = $scope.model.deviceType._id;
|
|
|
|
|
2015-12-16 09:12:35 -08:00
|
|
|
$scope.testRuns = Devices.testRuns($routeParams, function () {
|
2015-08-05 06:03:02 -07:00
|
|
|
console.log($scope.testRuns);
|
|
|
|
});
|
|
|
|
});
|
|
|
|
} else {
|
|
|
|
if (search.clientId) {
|
|
|
|
$scope.model.client = search.clientId;
|
|
|
|
} else {
|
|
|
|
$location.path("/deviceTypes");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
generateRandomIdentifier();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|