Skip to content

Commit

Permalink
feat: Added functionality for user to delete measurements of sensors …
Browse files Browse the repository at this point in the history
…of their own boxes

Users can delete measurements - either all, several specific by timestamps defined, or all
measurements between two timestamps. They can do so on account.box.edit.sensors page.

BREAKING CHANGE: Deletion of measurements was not able for users per opensensemap.org before

#85
  • Loading branch information
bkari02 committed Mar 21, 2018
1 parent 2177476 commit bd345b0
Show file tree
Hide file tree
Showing 3 changed files with 307 additions and 11 deletions.
188 changes: 183 additions & 5 deletions app/scripts/controllers/account.box.edit.sensors.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,15 @@
.module('openSenseMapApp')
.controller('EditBoxSensorsController', EditBoxSensorsController);

EditBoxSensorsController.$inject = ['boxData', 'notifications', 'SensorIcons', 'AccountService'];
EditBoxSensorsController.$inject = ['boxData', 'notifications', 'SensorIcons', 'AccountService', 'OpenSenseMapAPI'];

function EditBoxSensorsController (boxData, notifications, SensorIcons, AccountService) {
function EditBoxSensorsController (boxData, notifications, SensorIcons, AccountService, OpenSenseMapAPI) {
var vm = this;
vm.sensors = [];
vm.icons = [];
vm.timestamps = [{ name: '2018-03-19T18:53:18.005Z'}];

This comment has been minimized.

Copy link
@ubergesundheit

ubergesundheit Mar 21, 2018

Member

default?

This comment has been minimized.

Copy link
@bkari02

bkari02 Mar 21, 2018

Author Contributor

Nein, der wird auch gar nicht gelöscht, nur die Timestamps aus dem vm.deleteStamps-Array werden gelöscht. Ist vom Testen ein Überbleibsel, lösche ich 👍

vm.deleteStamps = [];
//vm.sensor.chart.data = [];

vm.addSensor = addSensor;
vm.deleteSensor = deleteSensor;
Expand All @@ -21,9 +24,51 @@
vm.getIcon = getIcon;
vm.setIcon = setIcon;
vm.undo = undo;
vm.editMeasurements = editMeasurements;
vm.deleteMeasurements = deleteMeasurements;
vm.getSensorData = getSensorData;
vm.addTimestamp = addTimestamp;
vm.openCalendar = openCalendar;

vm.save = save;


vm.settings = {
deletePickerStart: {
date: moment().subtract(5, 'm').toDate(),
open: false,
buttonBar: {
show: false
},
timepickerOptions: {
readonlyInput: false,
showMeridian: false,
max: null,
min: null
},
datepickerOptions: {
minDate: null
}
},
deletePickerEnd: {
date: moment().toDate(),
open: false,
buttonBar: {
show: false
},
timepickerOptions: {
readonlyInput: false,
showMeridian: false,
max: null,
min: null
},
datepickerOptions: {
maxDate: null
}
}
};


activate();

////
Expand Down Expand Up @@ -77,12 +122,28 @@
title: undefined,
unit: undefined,
editing: true,
new: true
new: true,
});

setSensorsEditMode();
}



/*function getLatestSensorData (boxId, sensorId) {
return $http.get(getUrl() + '/boxes/' + boxId + '/data/' + sensorId)
.then(success)
.then(function (measurements) {
// attach an id to each measurement
for (var i = 0; i < measurements.length; i++) {
measurements[i].id = i;
}
return measurements;
})
.catch(failed);
}*/

function deleteSensor (sensor) {
if(sensor.new){
var index = vm.sensors.indexOf(sensor);
Expand Down Expand Up @@ -129,6 +190,7 @@
delete sensor.incomplete;
delete sensor.editing;
delete sensor.restore;
delete sensor.measurementsediting;
}

setSensorsEditMode();
Expand All @@ -137,18 +199,19 @@
function editSensor (sensor) {
sensor.restore = angular.copy(sensor);
sensor.editing = true;

console.log(sensor);
setSensorsEditMode();
}

function setSensorsEditMode () {
for (var i = vm.sensors.length - 1; i >= 0; i--) {
if (vm.sensors[i].editing) {
if (vm.sensors[i].editing || vm.sensors[i].measurementsediting) {
vm.sensorsEditMode = true;
return;
}
}
vm.sensorsEditMode = false;
// sensorEditMode = ??? was ist das wo wird benutzt
}

function getIcon (sensor) {
Expand Down Expand Up @@ -178,5 +241,120 @@
function undo (sensor) {
delete sensor.deleted;
}

function editMeasurements (sensor) {
sensor.restore = angular.copy(sensor);
sensor.measurementsediting = true;
console.log(sensor);
getSensorData(sensor, {});
//sensor.editing = true;


/*return getLatestSensorData(boxData._id, sensor._id)
.then(function (response) {
angular.copy(response.data, sensor.chart.data);
angular.copy(sensor.chart.data, vm.sensor.chart.data);
notifications.addAlert('info', 'NOTIFICATION_BOX_UPDATE_SUCCESS');
})
.catch(function (error) {
console.log('ERROR RESPONSE');
console.log(error);
notifications.addAlert('danger', 'NOTIFICATION_BOX_UPDATE_FAILED');
});*/

setSensorsEditMode();
}

function deleteMeasurements (sensor){
console.log(vm.deleteOptions);
if(vm.deleteOptions === 'deleteAll'){
console.log('I am Delete All');
return AccountService.deleteMeasurement(boxData._id, sensor._id,
{
deleteAllMeasurements: true
});
}

if(vm.deleteOptions === 'timestamps'){
console.log('I am timestamps');
var timestampsArr = vm.deleteStamps;
return AccountService.deleteMeasurement(boxData._id, sensor._id,
{
timestamps: timestampsArr
});
}
if(vm.deleteOptions === 'fromToDate'){
console.log('I am fromToDate');
var fromDate = vm.settings.deletePickerStart.date;
var toDate = vm.settings.deletePickerEnd.date;
return AccountService.deleteMeasurement(boxData._id, sensor._id,
{
'from-date': fromDate,
'to-date': toDate
});
}

setSensorsEditMode();
}

function getSensorData (sensor, data) {
return OpenSenseMapAPI.getSensorData(boxData._id, sensor._id, data)
.then(function (response) {
sensor.chart = [];
sensor.chart.data = [];
for (var j = 0; j < response.length; j++) {
sensor.chart.data.push({
id: response[j].id,
value: parseFloat(response[j].value),
date: new Date(response[j].createdAt),
unit: sensor.unit,
});
}
sensor.chart.done = true;
return response;
})
.then(function (measurements) {
return measurements;
})
.catch(function (error) {
sensor.chart.error = true;
});
}



function addTimestamp () {
console.log('hello');
if (vm.timestampName) {
vm.timestamps.push({ name: vm.timestampName });
vm.deleteStamps.push(vm.timestampName);
console.log(vm.deleteStamps);
vm.timestampName = '';
}
}

function openCalendar (e, picker) {
e.preventDefault();
e.stopPropagation();
switch(picker) {
case 'deletePickerStart':
vm.settings.deletePickerStart.open = true;
break;
case 'deletePickerEnd':
vm.settings.deletePickerEnd.open = true;
vm.settings.deletePickerEnd.datepickerOptions.maxDate = moment().toDate();
vm.settings.deletePickerEnd.datepickerOptions.minDate = vm.settings.deletePickerStart.date;
vm.settings.deletePickerEnd.timepickerOptions.max = moment().toDate();
vm.settings.deletePickerEnd.timepickerOptions.min = vm.settings.deletePickerStart.timepickerOptions.max;
/*$timeout(function () {
//TODO check jqLite
// angular.element('#deletePickerEnd').parent()[0].children[1].style.right = "0px";
// angular.element('#deletePickerEnd').parent()[0].children[1].style.left = "auto";
});*/
break;
}
}


}
})();
16 changes: 16 additions & 0 deletions app/scripts/services/account.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
updateBox: updateBox,
confirmEmail: confirmEmail,
deleteBox: deleteBox,
deleteMeasurement: deleteMeasurement,
postNewBox: postNewBox,
deleteAccount: deleteAccount
};
Expand Down Expand Up @@ -192,6 +193,21 @@
.catch(failed);
}

function deleteMeasurement (boxId, sensorId, data) {
return $http.delete(app.API_URL + '/boxes/' + boxId + '/' + sensorId + '/measurements',
{
data: data,
auth: true,
headers: {
'Content-type': 'application/json; charset=utf-8'
}
})
.then(function (response) {
return response.data;
})
.catch(failed);
}

function postNewBox (data) {
return $http.post(app.API_URL + '/boxes', data, {auth: true})
.then(function (response) {
Expand Down
Loading

1 comment on commit bd345b0

@bkari02
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ist noch nicht final, aber Grundfunktionen müssten schon laufen.

Please sign in to comment.