02/02: Add and Delete voterList
This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository pollen. See http://git.chorem.org/pollen.git commit c9320592ddb5509e503937f8aa4baa8d1df690ab Author: Adrien Garandel <a.garandel@dralagen.fr> Date: Tue Jun 10 17:49:34 2014 +0200 Add and Delete voterList --- pollen-ui-angular/src/main/webapp/css/style.css | 4 + pollen-ui-angular/src/main/webapp/i18n/en.js | 8 ++ pollen-ui-angular/src/main/webapp/i18n/fr.js | 17 +++- .../src/main/webapp/js/controllers/pollCtrl.js | 113 +++++++++++++++------ pollen-ui-angular/src/main/webapp/js/services.js | 3 +- .../main/webapp/partials/poll-listParticipant.html | 25 +++-- 6 files changed, 123 insertions(+), 47 deletions(-) diff --git a/pollen-ui-angular/src/main/webapp/css/style.css b/pollen-ui-angular/src/main/webapp/css/style.css index ce7e00d..36a52f2 100644 --- a/pollen-ui-angular/src/main/webapp/css/style.css +++ b/pollen-ui-angular/src/main/webapp/css/style.css @@ -247,4 +247,8 @@ i.icon-collapse { padding-left:5px; padding-right:5px; border:1px solid #DDD; +} + +input[type=number] { + width:80px; } \ No newline at end of file diff --git a/pollen-ui-angular/src/main/webapp/i18n/en.js b/pollen-ui-angular/src/main/webapp/i18n/en.js index 39d30a4..17ac768 100644 --- a/pollen-ui-angular/src/main/webapp/i18n/en.js +++ b/pollen-ui-angular/src/main/webapp/i18n/en.js @@ -70,6 +70,14 @@ var translateEN = { 'action.delete' : 'Delete', 'action.vote' : 'Vote', 'action.comment' : 'Comment', +'action.restricted.addVoter' : 'Add Voter', +'action.restricted.deleteVoter' : 'Delete Voter', +'action.restricted.addGroup' : 'Add Group', +'action.restricted.deleteGroup' : 'Delete Group', +'action.restricted.notify' : 'Notify', + +'action.message.confirmDelete' : 'Are you sure to delete it?', + 'dateFormat' : 'MM-dd-yy', diff --git a/pollen-ui-angular/src/main/webapp/i18n/fr.js b/pollen-ui-angular/src/main/webapp/i18n/fr.js index 7dc335c..4978334 100644 --- a/pollen-ui-angular/src/main/webapp/i18n/fr.js +++ b/pollen-ui-angular/src/main/webapp/i18n/fr.js @@ -47,7 +47,7 @@ var translateFR = { 'poll.saved' : 'Sondage sauvegardé', 'poll.restricted.name' : 'Nom du votant', 'poll.restricted.mail' : 'Courriel du votant', -'poll.restricted.weight' : 'Poids du votant', +'poll.restricted.weight' : 'Poids', 'poll.restricted.free' : 'Libre', 'poll.restricted.restricted' : 'Restreint', 'poll.restricted.group' : 'Groupe', @@ -58,17 +58,24 @@ var translateFR = { 'comment' : 'Commentaire', 'comment.added' : 'Commentaire effectué', -'action.logout' : 'Deconnexion', -'action.login' : 'Connexion', +'action.logout' : 'Se Deconnecter', +'action.login' : 'Se Connecter', 'action.register' : 'S\'enregistrer', -'action.recovered' : 'Récupéré', -'action.send' : 'Envoyé', +'action.recovered' : 'Récupérer', +'action.send' : 'Envoyer', 'action.return' : 'Retour', 'action.cancel' : 'Annuler', 'action.save' : 'Sauvegarder', 'action.delete' : 'Supprimer', 'action.vote' : 'Voter', 'action.comment' : 'Commenter', +'action.restricted.addVoter' : 'Ajouter un Votant', +'action.restricted.deleteVoter' : 'Supprimer un Votant', +'action.restricted.addGroup' : 'Ajouter un Groupe de Votant', +'action.restricted.deleteGroup' : 'Supprimer un Groupe de Votant', +'action.restricted.notify' : 'Envoyer un mail', + +'action.message.confirmDelete' : 'Êtes vous sûr de vouloir le supprimer?', 'dateFormat' : 'dd/MM/yyyy', diff --git a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js index e13a381..8ce5be8 100644 --- a/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js +++ b/pollen-ui-angular/src/main/webapp/js/controllers/pollCtrl.js @@ -19,7 +19,8 @@ * #L% */ angular.module('pollControllers', []) -.controller('HomeCtrl', ['$scope', function ($scope) { +.controller('HomeCtrl', ['$scope', 'Poll', function ($scope, Poll) { + Poll.skeletonNew(); }]) .controller('PollCtrl', @@ -357,8 +358,8 @@ angular.module('pollControllers', []) }]) -.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', 'SessionStorage', - function ( $scope, $controller, $routeParams, $location, $timeout, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember, SessionStorage) { +.controller('PollEditCtrl', ['$scope', '$controller', '$routeParams', '$location', '$timeout', '$translate', 'Poll', 'PollChoice', 'PollVote', 'PollVoterList', 'PollVoterListMember', 'SessionStorage', + function ( $scope, $controller, $routeParams, $location, $timeout, $translate, Poll, PollChoice, PollVote, PollVoterList, PollVoterListMember, SessionStorage) { $controller('PollAdminCtrl', {$scope:$scope}); $scope.globalVariables.edit = true; @@ -428,7 +429,9 @@ angular.module('pollControllers', []) $scope.data.voterList = []; angular.forEach(voterList, function (list) { PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: list.id}, function (voterListMember) { - $scope.data.voterList.push({group:list, members:voterListMember}); + var newVoterList = {group:list, members:voterListMember}; + $scope.data.voterList.push(newVoterList); + $scope.addVoter($scope.data.voterList.indexOf(newVoterList)); }) }) } @@ -440,56 +443,102 @@ angular.module('pollControllers', []) $scope.saveVoterList = function (voterList) { if (angular.isDefined(voterList.group.id)) { console.log(voterList); - PollVoterList.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, voterList.group, function (data) { + PollVoterList.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:voterList.group.id}, voterList.group, function (data) { $scope.globalVariables.saved = true; delete voterList.group.restError; }, function (error) { voterList.group.restError = error.data; }); - } else { + } else { // new group // set default name for restricted poll type if ($scope.data.poll.pollType == 'RESTRICTED') { voterList.group.name = 'restricted'; } var vl = {group: voterList.group, members:[]}; - angular.forEach(value.members, function(member, key) { + angular.forEach(voterList.members, function(member, key) { if (member.name != '' || member.email != '') { vl.members.push(member); } }); - PollVoterList.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, vl, function (data) { - $scope.globalVariables.saved = true; - voterList.group.id = data.id; - delete voterList.group.restError; - }, function (error) { - voterList.group.restError = error.data.group; - }); + if (vl.members.length > 0) { + PollVoterList.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission}, vl, function (data) { + $scope.globalVariables.saved = true; + voterList.group.id = data.id; + delete voterList.group.restError; + + // Get member Id + PollVoterListMember.query({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId: data.id}, function (voterListMember) { + voterList.members = voterListMember; + $scope.addVoter($scope.data.voterList.indexOf(voterList)); + }); + }, function (error) { + voterList.group.restError = error.data; + + angular.forEach(voterList.members, function (member, index) { + member.restError = {}; + if (angular.isDefined(error.data['member['+index+'].name'])) { + member.restError.name = error.data['member['+index+'].name']; + } + if (angular.isDefined(error.data['member['+index+'].email'])) { + member.restError.email = error.data['member['+index+'].email']; + } + if (angular.isDefined(error.data['member['+index+'].weight'])) { + member.restError.weight = error.data['member['+index+'].weight']; + } + + if (angular.equals(member.restError, {})) { + // no error on this member + delete member.restError; + } + }); + }); + } } }; - $scope.saveVoterListMember = function (member, vlId) { - var vlMemberPromise; - if (angular.isDefined(vlId)) { - if (angular.isDefined(member.id)) { - console.log({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}); - vlMemberPromise = PollVoterListMember.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; - } else { - vlMemberPromise = PollVoterListMember.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; - } + $scope.saveVoterListMember = function (member, voterList) { + if (member.name != '' && member.email != '') { + var vlId = voterList.group.id; // Id Voter list + var vlMemberPromise; + if (angular.isDefined(vlId)) { + if (angular.isDefined(member.id)) { + vlMemberPromise = PollVoterListMember.update({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; + } else { + vlMemberPromise = PollVoterListMember.add({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:vlId}, member).$promise; + } - vlMemberPromise.then(function (data) { - $scope.globalVariables.saved = true; - member.id = data.id; - delete member.restError; - }, function (error) { - member.restError = error.data; - }) + vlMemberPromise.then(function (data) { + $scope.globalVariables.saved = true; + member.id = data.id; + delete member.restError; + }, function (error) { + member.restError = error.data; + }) + } + else { + // create voter list + $scope.saveVoterList(voterList); + } } - else { + } + $scope.deleteVoterList = function (voterList) { + if (angular.isDefined(voterList) && angular.isDefined(voterList.group.id)) { + var confirmMessage; + $translate('action.message.confirmDelete').then(function (msg) { + confirmMessage = msg; + }).then( function () { + var confirmDelete = confirm(confirmMessage); + if (confirmDelete == true) { + PollVoterList.remove({pollId:$routeParams.pollId, permission:$scope.globalVariables.permission, voterListId:voterList.group.id}, function (data) { + var index = $scope.data.voterList.indexOf(voterList); + $scope.data.voterList.splice(index, 1); + }); + } + }); } - } + }; //////////////////////////////// //// INIT POLL ///// diff --git a/pollen-ui-angular/src/main/webapp/js/services.js b/pollen-ui-angular/src/main/webapp/js/services.js index ab3f2be..1252fad 100644 --- a/pollen-ui-angular/src/main/webapp/js/services.js +++ b/pollen-ui-angular/src/main/webapp/js/services.js @@ -122,7 +122,7 @@ angular.module('pollenServices', ['ngResource']) .factory('PollVoterList', ['$resource', function ($resource) { - return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId', {voterListId:'@id'}, + return $resource(conf.restURL+'/polls/:pollId/voterLists/:voterListId', null, { 'add' : { method : 'POST', @@ -136,7 +136,6 @@ angular.module('pollenServices', ['ngResource']) return 'voterList='+encodeURIComponent(JSON.stringify(data)); } } - }) }]) diff --git a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html index 8462a0a..b0ae0db 100644 --- a/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html +++ b/pollen-ui-angular/src/main/webapp/partials/poll-listParticipant.html @@ -36,27 +36,36 @@ <hr/> <table ng-repeat="voterList in data.voterList" class="voterList" ng-hide="data.poll.pollType == 'FREE'"> - <tr ng-show="data.poll.pollType == 'GROUP'"> - <th colspan="2"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" auto-save="saveVoterList(voterList)"/></th> - <th> <input type="number" ng-model="voterList.group.weight" select-on-click class="form-control" auto-save="saveVoterList(voterList)" /> </th> + + <tr ng-show="data.poll.pollType == 'GROUP'" ng-class="{'has-success':voterList.group.id && !voterList.group.restError}"> + <th colspan="2" ng-class="{'has-error':voterList.group.restError.name}"> <input type="text" name="group" placeholder="name group" ng-model="voterList.group.name" class="form-control" auto-save="saveVoterList(voterList)"/></th> + <th ng-class="{'has-error':voterList.group.restError.weight}"> <input type="number" ng-model="voterList.group.weight" select-on-click class="form-control" auto-save="saveVoterList(voterList)" /> </th> + <th> </th> </tr> <tr> <th> {{ 'poll.restricted.name' | translate }} </th> <th> {{ 'poll.restricted.mail' | translate }} </th> <th> {{ 'poll.restricted.weight' | translate }} </th> + <th> </th> </tr> <tr ng-repeat="member in voterList.members" ng-class="{'has-success':member.id && !member.restError}"> - <td> <div ng-class="{'has-error':member.restError.name}"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)"/></div></td> - <td> <div ng-class="{'has-error':member.restError.email}"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)" /></div></td> - <td> <div ng-class="{'has-error':member.restError.weight}"><input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterListMember(member, voterList.group.id)"/></div></td> + <td> <div ng-class="{'has-error':member.restError.name}"><input type="text" ng-model="member.name" class="form-control" auto-save="saveVoterListMember(member, voterList)"/></div></td> + <td> <div ng-class="{'has-error':member.restError.email}"><input type="text" ng-model="member.email" class="form-control" auto-save="saveVoterListMember(member, voterList)" /></div></td> + <td> <div ng-class="{'has-error':member.restError.weight}"><input type="number" ng-model="member.weight" select-on-click class="form-control" auto-save="saveVoterListMember(member, voterList)"/></div></td> + <th> <div ng-show="member.id"><button class="btn btn-danger" disabled>X</button> </div></th> </tr> <tr> - <th colspan="3"> <a ng-click="addVoter($index);"> Add Voter </a> </th> + <th colspan="4"> + <button class="btn btn-info" ng-click="addVoter($index);"> {{ 'action.restricted.addVoter' | translate }} </button> + <button class="btn btn-danger" ng-click="deleteVoterList(voterList);" ng-show="voterList.group.id"> {{ 'action.restricted.deleteGroup' | translate }} </button> + </th> + </tr> </table> - <button class="btn btn-info" ng-show="data.poll.pollType == 'GROUP'" ng-click="addGroup()">Add group</button> + <button class="btn btn-info" ng-show="data.poll.pollType == 'GROUP'" ng-click="addGroup()">{{ 'action.restricted.addGroup' | translate }}</button> + <button class="btn btn-warning" ng-hide="data.poll.pollType == 'FREE'" disabled>{{ 'action.restricted.notify' | translate }}</button> </div> -- To stop receiving notification emails like this one, please contact chorem.org SCM administrator <admin+scm@chorem.org>.
participants (1)
-
chorem.org scm