Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions backend/libs/registration.js
Original file line number Diff line number Diff line change
Expand Up @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

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

Что значит этот флажок?
Если он значит, что этот асаймент был удалён, то его нужно просто назвать deleted.

}];
user.companyId = company._id;
users.save(user, function(err, updatedUser) {
Expand Down
5 changes: 3 additions & 2 deletions backend/project.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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
Copy link
Collaborator

Choose a reason for hiding this comment

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

В чём суть этого флажка? Какую роль он играет, если есть флажок active?

};
};

Expand Down
112 changes: 95 additions & 17 deletions backend/user.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down
2 changes: 1 addition & 1 deletion frontend/components/timeMask/timeMask.html
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,5 @@
-->

<input ng-model-options="{debounce: 400}" class="timesheet-hours form-control time-mask-hours" type="text"
ng-readonly="readonly" ng-class="{'reject':rejectColor, 'approve':approveColor, 'edit':edit, 'blockOneApprove':blockOneApprove}" ng-model="log.time" min="0" max="24"
ng-readonly="readonly || log.projectName == ''" ng-class="{'reject':rejectColor, 'approve':approveColor, 'edit':edit, 'blockOneApprove':blockOneApprove}" ng-model="log.time" min="0" max="24"
placeholder="{{log ? log.timePlaceholder : ''}}" maxlength="6" ng-change="onChangeDayHours()"/>
2 changes: 1 addition & 1 deletion frontend/components/timesheetComment/timesheetComment.html
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@
limitations under the License.
-->

<input ng-model-options="{debounce: 2000}" ng-disabled="!log.projectId" id="step3" class="timesheet-comment form-control" placeholder="{{log.placeholder}}" ng-readonly="readonly" type="text" ng-model="log.comment" ng-change="updateTimelog(log)" maxlength="500" ng-class="{'reject':rejectColor, 'approve':approveColor, 'edit':edit, 'blockOneApprove':blockOneApprove}"/>
<input ng-model-options="{debounce: 2000}" ng-disabled="!log.projectId" id="step3" class="timesheet-comment form-control" placeholder="{{log.placeholder}}" ng-readonly="readonly || log.projectName == ''" type="text" ng-model="log.comment" ng-change="updateTimelog(log)" maxlength="500" ng-class="{'reject':rejectColor, 'approve':approveColor, 'edit':edit, 'blockOneApprove':blockOneApprove}"/>
10 changes: 6 additions & 4 deletions frontend/projects/projectsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand All @@ -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;
};

Expand Down
4 changes: 2 additions & 2 deletions frontend/projects/projectsView.html
Original file line number Diff line number Diff line change
Expand Up @@ -74,8 +74,8 @@ <h2 ng-class="{'timesheet-collapsed': project.isCollapsed, 'project-archived': !
</thead>

<tbody ng-repeat="assignedEmployee in project.assignedEmployers track by $index">
<tr ng-if="currentProjectIndex >= 0"
ng-repeat="assignment in assignedEmployee.assignments track by $index">
<tr ng-repeat="assignment in assignedEmployee.assignments track by $index"
ng-if="currentProjectIndex >= 0" ng-hide="assignment.deleteAssignmentsUser">
<td>
<ui-select ng-model="assignedEmployee" class="blank-dropdown">
<ui-select-match placeholder="Select employee">{{$select.selected.displayName}}
Expand Down
23 changes: 20 additions & 3 deletions frontend/timesheet/timesheetController.js
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
4 changes: 2 additions & 2 deletions frontend/timesheet/timesheetView.html
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@
<td>
<span class="blank-dropdown" uib-dropdown on-toggle="toggled(open)">
<a href id="simple-dropdown" ng-click="showButton()" ng-class="{'arrowHide':arrowHide}" uib-dropdown-toggle>
{{log.projectName | longTextFilter: 15}}
{{log.projectName != '' ? log.projectName : '' | longTextFilter: 15}}
</a>

<ul uib-dropdown-menu aria-labelledby="simple-dropdown" ng-class="{'dropHide':dropHide}">
<li ng-repeat="project in projects">
<li ng-repeat="project in projects" ng-show="project.assignmentsUser">
<a href ng-click="assignProject(project._id, log)">{{project.name}}</a>
</li>
</ul>
Expand Down