diff --git a/backend/libs/registration.js b/backend/libs/registration.js index 7a4a3732..6f1cb9d4 100644 --- a/backend/libs/registration.js +++ b/backend/libs/registration.js @@ -26,12 +26,14 @@ exports.createDefaultProject = function(company, user) { if(err) { log.error('Cannot save project!', {error: err}); } else { - log.info('Defaul project is created!'); + log.info('Default project is created!'); if(user) { user.assignments = [{ role: 'Owner', projectName: savedProject.name, - projectId: savedProject._id + projectId: savedProject._id, + assignmentsUser: true, + deleteAssignmentsUser: false }]; user.companyId = company._id; users.save(user, function(err, updatedUser) { diff --git a/backend/project.js b/backend/project.js index 905ad1f5..7d108df9 100644 --- a/backend/project.js +++ b/backend/project.js @@ -125,7 +125,7 @@ exports.restDeleteProject = function(req, res, next) { log.debug('-REST result: Delete project. Project id: %s', projectId.toHexString()); } }); -} +}; //Public API exports.saveInDb = function(project, callback) { @@ -148,7 +148,8 @@ exports.generateDefaultProject = function(company) { defaultValues: company.defaultValues, availablePositions: constants.DEFAULT_AVAILABLE_POSITIONS, companyId: company._id, - active: true + active: true, + assignmentsUser: true }; }; diff --git a/backend/user.js b/backend/user.js index 01d4e54f..d24d4a63 100644 --- a/backend/user.js +++ b/backend/user.js @@ -110,23 +110,12 @@ exports.restReplaceAssignments = function(req, res, next) { var user = req.body; var assignments = user.assignments; - var users = db.userCollection(); - users.update({ _id: user._id }, - { $pull: {assignments: {projectId: projectId} } }, - { multi: true }, - function(err, result) { - if(!err) { - users.update({ _id: user._id }, - { $push: { assignments: { $each: assignments } }}, - function(err, updatedUser){ - res.json({ok: true}); //saved object??? - log.debug('-REST result: Replace assignments. Project id: %s', - projectId.toHexString()); - }); - } else { - next(err); - } - }); + + if (assignments[0]) { + assignmentsUser(req, res, next); + } else { + deleteAssignmentsUser(req, res, next); + } }; exports.restUpdateUserRole = function(req, res, next) { @@ -286,6 +275,95 @@ function findByExample(query, callback) { }); } +function assignmentsUser(req, res, next) { + var projectId = utils.getProjectId(req); + var user = req.body; + var assignments = user.assignments; + var users = db.userCollection(); + var projects = db.projectCollection(); + + users.update({_id: user._id, 'assignments.$.assignmentsUser': true}, + { + $set: { + 'assignments.$.assignmentsUser': true, + "assignments.$.deleteAssignmentsUser": false + } + }, + {multi: true}, + function (err, result) { + if (!err) { + users.update({_id: user._id, 'assignments.projectId': {$ne: assignments[0].projectId}}, + {$push: {assignments: {$each: assignments}}}, + function (err, updatedUser) { + if (!err) { + users.update({_id: user._id, 'assignments.projectId': projectId}, + { + $set: { + 'assignments.$.assignmentsUser': true, + "assignments.$.deleteAssignmentsUser": false + } + }, + {multi: true}, + function (err, result) { + if (!err) { + projects.update({_id: projectId}, + {$set: {assignmentsUser: true}}, + {multi: true}, + function (err, result) { + if (!err) { + log.debug('-REST result: Replace assignments. Project id: %s', + projectId.toHexString()); + res.json(result); + } else { + next(err); + } + }); + } else { + next(err); + } + }); + } else { + next(err); + } + }); + } else { + next(err); + } + }); +} + +function deleteAssignmentsUser(req, res, next) { + var projectId = utils.getProjectId(req); + var user = req.body; + var users = db.userCollection(); + var projects = db.projectCollection(); + + users.update({ + _id: user._id, + 'assignments.projectId': projectId, + "assignments.deleteAssignmentsUser": false + }, + {$set: {"assignments.$.deleteAssignmentsUser": true}}, + {multi: true}, + function (err, result) { + if (!err) { + projects.update({_id: projectId}, + {$set: {assignmentsUser: false}}, + {multi: true}, + function (err, result) { + if (!err) { + res.json(result); + } else { + next(err); + } + }); + + } else { + next(err); + } + }); +} + function updateProjectName(findedUsers, project) { var userDbCollection = db.userCollection(); findedUsers.forEach(function(user) { diff --git a/frontend/components/timeMask/timeMask.html b/frontend/components/timeMask/timeMask.html index 4494a011..169c9671 100644 --- a/frontend/components/timeMask/timeMask.html +++ b/frontend/components/timeMask/timeMask.html @@ -15,5 +15,5 @@ --> \ No newline at end of file diff --git a/frontend/components/timesheetComment/timesheetComment.html b/frontend/components/timesheetComment/timesheetComment.html index 6744b222..f564f777 100644 --- a/frontend/components/timesheetComment/timesheetComment.html +++ b/frontend/components/timesheetComment/timesheetComment.html @@ -14,4 +14,4 @@ limitations under the License. --> - + diff --git a/frontend/projects/projectsController.js b/frontend/projects/projectsController.js index 4cafc9cd..47dfcf1a 100644 --- a/frontend/projects/projectsController.js +++ b/frontend/projects/projectsController.js @@ -311,7 +311,9 @@ angular.module('mifortTimesheet.projects', ['ngRoute', 'constants']) projectName: project.name, role: project.availablePositions[0], userId: userForAssignment._id, - workload: '' + workload: '', + assignmentsUser: true, + deleteAssignmentsUser: false }; userForAssignment.assignments = [newAssignment]; @@ -337,10 +339,10 @@ angular.module('mifortTimesheet.projects', ['ngRoute', 'constants']) if (!$scope.companyEmployees) return []; var employees = []; $scope.companyEmployees.forEach(function (employee) { - if (!_.findWhere(project.assignedEmployers, {_id: employee._id})) { + if (!_.findWhere(project.assignedEmployers, {_id: employee._id}) || + project.assignmentsUser == false || project.assignmentsUser == undefined) { employees.push(employee); - } - }); + }}); return employees; }; diff --git a/frontend/projects/projectsView.html b/frontend/projects/projectsView.html index 7ec54ef0..cf784bf6 100644 --- a/frontend/projects/projectsView.html +++ b/frontend/projects/projectsView.html @@ -74,8 +74,8 @@

- + {{$select.selected.displayName}} diff --git a/frontend/timesheet/timesheetController.js b/frontend/timesheet/timesheetController.js index d97519ce..d7f5d2be 100644 --- a/frontend/timesheet/timesheetController.js +++ b/frontend/timesheet/timesheetController.js @@ -996,13 +996,30 @@ angular.module('mifortTimesheet.timesheet', ['ngRoute', 'constants']) $scope.getDefaultProject = function () { var checked = $scope.getCheckedProjectFilters(); - return checked.length ? checked[0] : $scope.projects[0]; + + for (var i = 0; i < checked.length; i++) { + if (checked.length && checked[i].assignmentsUser) { + return checked[i]; + } + else if ($scope.projects[i].assignmentsUser) { + return $scope.projects[i]; + } + } + + $scope.projects[0].projectName = "Empty"; + return $scope.projects[0]; }; $scope.setDefaultProject = function (log) { var project = $scope.getDefaultProject(); - log.projectId = project._id; - log.projectName = project.name; + if (project && $scope.projects[0].projectName !== "Empty") { + log.projectId = project._id; + log.projectName = project.name; + } + else { + log.projectId = project._id; + log.projectName = ""; + } }; $scope.addLogToArray = function (log, allLogs) { diff --git a/frontend/timesheet/timesheetView.html b/frontend/timesheet/timesheetView.html index 97107d6e..3fbf7283 100644 --- a/frontend/timesheet/timesheetView.html +++ b/frontend/timesheet/timesheetView.html @@ -82,11 +82,11 @@ - {{log.projectName | longTextFilter: 15}} + {{log.projectName != '' ? log.projectName : '' | longTextFilter: 15}}