r152 - in trunk: faxtomail-persistence/src/main/xmi faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin faxtomail-ui-web/src/main/webapp/js
Author: echatellier Date: 2014-06-08 22:44:39 +0200 (Sun, 08 Jun 2014) New Revision: 152 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/152 Log: Ajout des chefs de groupes Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties =================================================================== --- trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties 2014-06-08 14:30:45 UTC (rev 151) +++ trunk/faxtomail-persistence/src/main/xmi/faxtomail.properties 2014-06-08 20:44:39 UTC (rev 152) @@ -94,3 +94,6 @@ # FaxToMailUserGroup com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroup.attribute.name.tagvalue.naturalId=true + +# GroupChef +com.franciaflex.faxtomail.persistence.entities.GroupChef.attribute.userGroup.tagvalue.notNull=true Modified: trunk/faxtomail-persistence/src/main/xmi/faxtomail.zargo =================================================================== (Binary files differ) Modified: trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java =================================================================== --- trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java 2014-06-08 14:30:45 UTC (rev 151) +++ trunk/faxtomail-ui-web/src/main/java/com/franciaflex/faxtomail/web/action/admin/ConfigurationAction.java 2014-06-08 20:44:39 UTC (rev 152) @@ -41,6 +41,7 @@ import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; import com.franciaflex.faxtomail.persistence.entities.FaxToMailUserGroup; import com.franciaflex.faxtomail.persistence.entities.FolderAction; +import com.franciaflex.faxtomail.persistence.entities.GroupChef; import com.franciaflex.faxtomail.persistence.entities.MailAction; import com.franciaflex.faxtomail.persistence.entities.MailField; import com.franciaflex.faxtomail.persistence.entities.MailFilter; Modified: trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-08 14:30:45 UTC (rev 151) +++ trunk/faxtomail-ui-web/src/main/webapp/WEB-INF/content/admin/configuration-input.jsp 2014-06-08 20:44:39 UTC (rev 152) @@ -73,6 +73,7 @@ <li><a href="#tabs-filters" data-toggle="tab">Filtres de mail</a></li> <li><a href="#tabs-search" data-toggle="tab">Recherche</a></li> <li><a href="#tabs-mailaccounts" data-toggle="tab">Comptes mail</a></li> + <li><a href="#tabs-chefgroup" data-toggle="tab">Chef de groupe</a></li> </ul> <div class="tab-content active" ng-controller="ConfigurationMiscController"> @@ -145,7 +146,7 @@ </table> </div> - <div class="col-md-7" ng-if="selectedEtatAttente"> + <div class="col-md-8" ng-if="selectedEtatAttente"> <h3>Édition de l'état d'attente {{selectedEtatAttente.label}}</h3> Actions autorisées lorsque la demande est <strong>valide</strong> : <label class="checkbox" ng-repeat="(mailAction,label) in mailActions"> @@ -159,7 +160,7 @@ ng-click="changeEtatAttenteInvalidAction(mailAction)"> {{label}} </label> </div> - <div class="col-md-7" ng-if="!selectedEtatAttente"> + <div class="col-md-8" ng-if="!selectedEtatAttente"> <em>Sélectionnez un état d'attente.</em> </div> </div> @@ -183,7 +184,7 @@ </table> </div> - <div class="col-md-7" ng-if="selectedDemandType"> + <div class="col-md-8" ng-if="selectedDemandType"> <h3>Édition du type de document {{selectedDemandType.label}}</h3> Champs obligatoires pour le type de document : <label class="checkbox" ng-repeat="(mailField,label) in mailFields"> @@ -191,7 +192,7 @@ ng-click="changeDemandTypeField(mailField)"> {{label}} </label> </div> - <div class="col-md-7" ng-if="!selectedDemandType"> + <div class="col-md-8" ng-if="!selectedDemandType"> <em>Sélectionnez un type de document.</em> </div> </div> @@ -805,6 +806,78 @@ </div> </div> </div> + + <div id="tabs-chefgroup" class="tab-pane" ng-controller="ConfigurationChefGroupController"> + + <div class="row"> + <div class="col-md-4"> + <h3>Chef de groupe <input type="button" class="btn btn-success btn-xs pull-right" value="Nouveau" ng-click="newGroupChef()" /></h3> + <table class="table table-hover"> + <tbody> + <tr ng-repeat="groupChef in configuration.chefs" + ng-class="{'info' : groupChef == selectedGroupChef}" + ng-click="editGroupChef(groupChef)"> + <td>{{groupChef.userGroup ? groupChef.userGroup.fullPath : '(aucun groupe)'}} + <a class="btn btn-danger btn-xs pull-right" ng-click="removeGroupChef(groupChef, $index)"> + <span class="glyphicon glyphicon-remove"></span> + </a> + </td> + </tr> + <tr ng-if="!configuration.chefs || configuration.chefs.length == 0"> + <td class="emptyTable">Aucun chef de groupe</td> + </tr> + </tbody> + </table> + </div> + + <div class="col-md-8" ng-show="selectedGroupChef"> + <h3>Édition du chef de groupe</h3> + + <div class="form-inline"> + <div class="form-group"> + <label for="groupChefUserGroupField" class="control-label">Chef du groupe : </label> + <select id="groupChefUserGroupField" class="form-control" ng-model="selectedGroupChef.userGroup" + ng-options="group as group.fullPath for group in groups"></select> + </div> + </div> + + <hr /> + <table class="table table-hover"> + <thead> + <tr> + <th>Groupes gérés par le chef de groupe</th> + </tr> + </thead> + <tbody> + <tr ng-repeat="group in selectedGroupChef.managedGroups"> + <td> + <span class="fa fa-users"></span> + {{group.fullPath}} + <a class="btn btn-danger btn-xs pull-right" ng-click="removeManagedGroup($index)"> + <span class="glyphicon glyphicon-remove"></span> + </a> + </td> + </tr> + <tr ng-if="!selectedGroupChef.managedGroups || selectedGroupChef.managedGroups.length == 0"> + <td class="emptyTable">Aucun groupe gérés</td> + </tr> + </tbody> + </table> + <div class="form-inline"> + <div class="form-group"> + <label for="newManagedGroupField" class="control-label">Nouveau groupe :</label> + <select id="newManagedGroupField" class="form-control" + ng-model="newManagedGroup" ng-options="group as group.fullPath for group in groups"> + </select> + <a class="btn btn-success btn-xs" ng-click="addManagedGroup()" ng-disabled="!newManagedGroup"> + <span class="glyphicon glyphicon-plus"></span> + </a> + </div> + </div> + </div> + </div> + </div> + </div> <nav class="navbar navbar-default navbar-fixed-bottom"> <div class="container"> Modified: trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js =================================================================== --- trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-08 14:30:45 UTC (rev 151) +++ trunk/faxtomail-ui-web/src/main/webapp/js/configuration.js 2014-06-08 20:44:39 UTC (rev 152) @@ -29,6 +29,8 @@ */ ConfigurationModule.controller('ConfigurationController', ['$scope', 'ConfigurationData', function($scope, ConfigurationData) { + //{Object} L'object configuration + $scope.configuration = ConfigurationData.configuration; //{Map} les actions possibles pour les etats d'attentes $scope.mailActions = ConfigurationData.mailActions; //{Map} les champs obligatoires possibles @@ -45,6 +47,10 @@ $scope.mailFoldersUsage = ConfigurationData.mailFoldersUsage; //{Map<MailFolder id, Array<MailFolder>>} liste des $scope.flatMailFolders; + //{Array} All application users + $scope.users = ConfigurationData.users; + // {Array} All application groups + $scope.groups = ConfigurationData.groups; // method privée recursive pour retourner l'ensemble des dossiers en les modifiant pour ajouter // des metadata (full path from root, and root node instance) @@ -96,8 +102,6 @@ */ ConfigurationModule.controller('ConfigurationMiscController', ['$scope', '$window', 'ConfigurationData', function($scope, $window, ConfigurationData) { - //{Object} L'object configuration - $scope.configuration = ConfigurationData.configuration; // Ajout d'une nouvelle ligne vide d'extension $scope.addExtensionRow = function() { @@ -227,10 +231,6 @@ */ ConfigurationModule.controller('ConfigurationTreeController', ['$scope', '$window', 'ConfigurationData', function($scope, $window, ConfigurationData) { - //{Array} All application users - $scope.users = ConfigurationData.users; - // {Array} All application groups - $scope.groups = ConfigurationData.groups; // {Object} selected mail folder $scope.selectedMailFolder; // {String} add new customer responsible form value @@ -575,13 +575,6 @@ $scope.rootFolderMailFilters[rootMailFolder.topiaId].splice(index2, 1); } }; - - // define angular filter used to group mailFilters by rootFolders - /*$scope.subFolderFilter = function(mailFolder) { - return function(item) { - return item.mailFolder == mailFolder || item.mailFolder.$rootFolder == mailFolder; - }; - };*/ }]); @@ -647,3 +640,65 @@ } }); }]); + + +/** + * Chef de groupe controller. + */ +ConfigurationModule.controller('ConfigurationChefGroupController', ['$scope', '$window', 'ConfigurationData', + function($scope, $window, ConfigurationData) { + //{Object} Chef de group en cours d'edition + $scope.selectedGroupChef; + //{Object} Nouveau group selectionné + $scope.newManagedGroup; + + // change instances + if (!$scope.configuration.chefs) { + $scope.configuration.chefs = []; + } + angular.forEach($scope.groups, function(group) { + angular.forEach($scope.configuration.chefs, function(chef) { + if (chef.userGroup.topiaId == group.topiaId) { + chef.userGroup = group; + } + // managedGroups is not necessary to change here + }); + }); + + // ajout d'un nouveau chef de groupe + $scope.newGroupChef = function() { + var groupChef = { + managedGroups : [] + }; + $scope.configuration.chefs.push(groupChef); + $scope.editGroupChef(groupChef); + }; + + // edition d'un chef de groupe + $scope.editGroupChef = function(groupChef) { + $scope.selectedGroupChef = groupChef; + }; + + // suppression d'un chef de groupe + $scope.removeGroupChef = function(groupChef, index) { + if ($window.confirm("Êtes-vous sûr de vouloir supprimer ce chef de groupe ?")) { + $scope.configuration.chefs.splice(index, 1); + if (groupChef == $scope.selectedGroupChef) { + delete $scope.selectedGroupChef; + } + } + }; + + // Ajout d'un nouveau group géré + $scope.addManagedGroup = function() { + $scope.selectedGroupChef.managedGroups.push($scope.newManagedGroup); + delete $scope.newManagedGroup; + }; + + // Suppression d'un group gérés + $scope.removeManagedGroup = function(index) { + if ($window.confirm("Êtes-vous sûr de vouloir supprimer ce groupe gérés ?")) { + $scope.selectedGroupChef.managedGroups.splice(index, 1); + } + }; +}]);
participants (1)
-
echatellier@users.forge.codelutin.com