From afeea6823b01cb72dbd8a8ea68874441585f8d78 Mon Sep 17 00:00:00 2001 From: Vova Perebykivskiy Date: Fri, 18 Dec 2015 11:05:59 +0200 Subject: [PATCH] Add limits for workers and machines (Mapping, Entity, DAO, Model, DB). Refactoring. Add method for create button of Workers/Machines to check if users not violating with limits. Add i18n. --- .../business/common/daos/ILimitsDAO.java | 1 + .../business/common/daos/LimitsDAO.java | 8 ++++ .../business/resources/daos/IMachineDAO.java | 6 +++ .../business/resources/daos/IWorkerDAO.java | 4 +- .../business/resources/daos/MachineDAO.java | 7 ++++ .../business/resources/daos/WorkerDAO.java | 8 +++- .../business/users/daos/UserDAO.java | 1 + .../libreplan/web/common/ILimitsModel.java | 1 + .../org/libreplan/web/common/LimitsModel.java | 6 +++ .../web/resources/machine/IMachineModel.java | 5 ++- .../machine/MachineCRUDController.java | 32 ++++++++++++++-- .../web/resources/machine/MachineModel.java | 8 ++++ .../web/resources/worker/IWorkerModel.java | 3 ++ .../worker/WorkerCRUDController.java | 37 +++++++++++++++---- .../web/resources/worker/WorkerModel.java | 12 ++++++ .../web/users/UserCRUDController.java | 17 ++++++++- .../src/main/resources/i18n/keys.pot | 12 ++++++ .../resources/machine/_listMachines.zul | 3 +- .../main/webapp/resources/worker/_list.zul | 3 +- .../src/main/webapp/users/_listUsers.zul | 2 +- 20 files changed, 157 insertions(+), 19 deletions(-) diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java index 5eda592a6..72229644c 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/ILimitsDAO.java @@ -17,4 +17,5 @@ public interface ILimitsDAO extends IGenericDAO { Limits getUsersType(); Limits getWorkersType(); + Limits getMachinesType(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java b/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java index d29492a96..79a657017 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/common/daos/LimitsDAO.java @@ -37,4 +37,12 @@ public class LimitsDAO extends GenericDAOHibernate implements ILim return null; } + @Override + public Limits getMachinesType() { + List list = list(Limits.class); + for (Limits item : list) + if (item.getType().equals("machines")) return item; + return null; + } + } diff --git a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IMachineDAO.java b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IMachineDAO.java index 02a74dd4d..c10f03104 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IMachineDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IMachineDAO.java @@ -33,6 +33,7 @@ import org.libreplan.business.resources.entities.Machine; * @author Diego Pino Garcia * @author Javier Moran Rua * @author Fernando Bellas Permuy + * @author Vova Perebykivskiy */ public interface IMachineDAO extends IIntegrationEntityDAO { @@ -82,4 +83,9 @@ public interface IMachineDAO extends IIntegrationEntityDAO { * code as the one passed as parameter */ boolean existsMachineWithCodeInAnotherTransaction(String code); + + /** + * Return a number of rows in database table + */ + Number getRowCount(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IWorkerDAO.java b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IWorkerDAO.java index b75034983..299fe28bc 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IWorkerDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/IWorkerDAO.java @@ -36,7 +36,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Fernando Bellas Permuy * @author Manuel Rego Casasnovas * @author Diego Pino Garcia - * + * @author Vova Perebykivskiy */ public interface IWorkerDAO extends IIntegrationEntityDAO { @@ -127,4 +127,6 @@ public interface IWorkerDAO extends IIntegrationEntityDAO { * Return the list of {@link Worker Workers} bound to any {@link User}. */ List getBound(); + + Number getRowCount(); } diff --git a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/MachineDAO.java b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/MachineDAO.java index 620fc72d3..a32c7d3c0 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/MachineDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/MachineDAO.java @@ -23,6 +23,7 @@ package org.libreplan.business.resources.daos; import java.util.List; +import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.libreplan.business.common.daos.IntegrationEntityDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; @@ -40,6 +41,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Diego Pino Garcia * @author Javier Moran Rua * @author Fernando Bellas Permuy + * @author Vova Perebykivskiy */ @Repository @Scope(BeanDefinition.SCOPE_SINGLETON) @@ -82,6 +84,11 @@ public class MachineDAO extends IntegrationEntityDAO } } + @Override + public Number getRowCount() { + return (Number) getSession().createCriteria(Machine.class).setProjection(Projections.rowCount()).uniqueResult(); + } + @Override @Transactional(readOnly= true, propagation = Propagation.REQUIRES_NEW) public Machine findUniqueByCodeInAnotherTransaction(String code) diff --git a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/WorkerDAO.java b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/WorkerDAO.java index 9c52c4645..ba3f15074 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/resources/daos/WorkerDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/resources/daos/WorkerDAO.java @@ -26,6 +26,7 @@ import java.util.List; import org.hibernate.Criteria; import org.hibernate.Query; +import org.hibernate.criterion.Projections; import org.hibernate.criterion.Restrictions; import org.libreplan.business.common.daos.IntegrationEntityDAO; import org.libreplan.business.common.exceptions.InstanceNotFoundException; @@ -43,7 +44,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Fernando Bellas Permuy * @author Manuel Rego Casasnovas * @author Diego Pino Garcia - * + * @author Vova Perebykivskiy */ @Repository @Scope(BeanDefinition.SCOPE_SINGLETON) @@ -199,4 +200,9 @@ public class WorkerDAO extends IntegrationEntityDAO return criteria.list(); } + @Override + public Number getRowCount() { + return (Number) getSession().createCriteria(Worker.class).setProjection(Projections.rowCount()).uniqueResult(); + } + } \ No newline at end of file diff --git a/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java b/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java index 928d788ca..2f3bab8cf 100644 --- a/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java +++ b/libreplan-business/src/main/java/org/libreplan/business/users/daos/UserDAO.java @@ -45,6 +45,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Fernando Bellas Permuy * @author Jacobo Aragunde Perez * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ @Repository public class UserDAO extends GenericDAOHibernate diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java index c9a4ef4da..b0146b46e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/ILimitsModel.java @@ -16,4 +16,5 @@ public interface ILimitsModel { Limits getUsersType(); Limits getWorkersType(); + Limits getMachinesType(); } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java index b4f3041a2..3338a3936 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/common/LimitsModel.java @@ -42,4 +42,10 @@ public class LimitsModel implements ILimitsModel { public Limits getWorkersType() { return limitsDAO.getWorkersType(); } + + @Override + @Transactional(readOnly = true) + public Limits getMachinesType() { + return limitsDAO.getMachinesType(); + } } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/IMachineModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/IMachineModel.java index 3458b5227..7be640035 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/IMachineModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/IMachineModel.java @@ -34,7 +34,7 @@ import org.libreplan.business.resources.entities.Worker; import org.libreplan.web.common.IIntegrationEntityModel; import org.libreplan.web.resources.search.ResourcePredicate; -/* +/** * This interface contains the operations to create/edit a machine. * * Conversation state: the Machine instance and associated entities. @@ -63,6 +63,7 @@ import org.libreplan.web.resources.search.ResourcePredicate; * * @author Diego Pino Garcia * @author Javier Moran Rua + * @author Vova Perebykivskiy */ public interface IMachineModel extends IIntegrationEntityModel { // Initial conversational steps @@ -108,4 +109,6 @@ public interface IMachineModel extends IIntegrationEntityModel { void removeCalendar(); + Number getRowCount(); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineCRUDController.java index c55db303c..88d255c76 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineCRUDController.java @@ -31,15 +31,13 @@ import java.util.Set; import org.joda.time.LocalDate; import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.calendars.entities.ResourceCalendar; +import org.libreplan.business.common.entities.Limits; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.resources.entities.Machine; import org.libreplan.web.calendars.BaseCalendarEditionController; import org.libreplan.web.calendars.IBaseCalendarModel; -import org.libreplan.web.common.BaseCRUDController; -import org.libreplan.web.common.ConstraintChecker; -import org.libreplan.web.common.Level; -import org.libreplan.web.common.Util; +import org.libreplan.web.common.*; import org.libreplan.web.common.components.bandboxsearch.BandboxMultipleSearch; import org.libreplan.web.common.components.finders.FilterPair; import org.libreplan.web.costcategories.ResourcesCostCategoryAssignmentController; @@ -47,6 +45,7 @@ import org.libreplan.web.resources.search.ResourcePredicate; import org.libreplan.web.resources.worker.CriterionsController; import org.libreplan.web.resources.worker.CriterionsMachineController; import org.libreplan.web.resources.worker.WorkerCRUDController.LimitingResourceEnum; +import org.springframework.beans.factory.annotation.Autowired; import org.zkoss.zk.ui.Component; import org.zkoss.zk.ui.WrongValueException; import org.zkoss.zk.ui.event.CheckEvent; @@ -75,9 +74,14 @@ import org.zkoss.zul.api.Window; * Controller for {@link Machine} resource
* @author Diego Pino Garcia * @author Lorenzo Tilve Álvaro + * @author Vova Perebykivskiy */ public class MachineCRUDController extends BaseCRUDController { + @Autowired + private ILimitsModel limitsModel; + + @Autowired private IMachineModel machineModel; private Component configurationUnits; @@ -611,4 +615,24 @@ public class MachineCRUDController extends BaseCRUDController { return machineModel.getMachine(); } + public boolean isCreateButtonDisabled(){ + Limits machinesTypeLimit = limitsModel.getMachinesType(); + Long machinesCount = (Long) machineModel.getRowCount(); + if ( machinesTypeLimit != null ) + if ( machinesCount >= machinesTypeLimit.getValue() ) + return true; + + return false; + } + + public String getShowCreateFormLabel(){ + Limits machinesTypeLimit = limitsModel.getMachinesType(); + Long machinesCount = (Long) machineModel.getRowCount(); + if ( machinesTypeLimit != null ) + if ( machinesCount >= machinesTypeLimit.getValue() ) + return _("Machines limit reached"); + + return _("Create"); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineModel.java index 3f83b5855..71e2caf6e 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineModel.java @@ -70,6 +70,7 @@ import org.springframework.transaction.annotation.Transactional; /** * @author Diego Pino Garcia * @author Javier Moran Rua + * @author Vova Perebykivskiy */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -403,4 +404,11 @@ public class MachineModel extends IntegrationEntityModel implements machine.setCalendar(null); } + @Override + @Transactional(readOnly = true) + public Number getRowCount() { + return machineDAO.getRowCount(); + } + + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java index fbcceee94..8f657ba27 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/IWorkerModel.java @@ -74,6 +74,7 @@ import org.libreplan.web.resources.search.ResourcePredicate; * @author Óscar González Fernández * @author Fernando Bellas Permuy * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ public interface IWorkerModel extends IIntegrationEntityModel { @@ -147,4 +148,6 @@ public interface IWorkerModel extends IIntegrationEntityModel { User getBoundUserFromDB(Worker worker); + Number getRowCount(); + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java index 0df7794c0..aee8b78b0 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerCRUDController.java @@ -35,6 +35,7 @@ import org.apache.commons.lang.StringUtils; import org.joda.time.LocalDate; import org.libreplan.business.calendars.entities.BaseCalendar; import org.libreplan.business.calendars.entities.ResourceCalendar; +import org.libreplan.business.common.entities.Limits; import org.libreplan.business.common.exceptions.InstanceNotFoundException; import org.libreplan.business.common.exceptions.ValidationException; import org.libreplan.business.resources.entities.ResourceType; @@ -44,13 +45,8 @@ import org.libreplan.business.users.entities.User; import org.libreplan.business.users.entities.UserRole; import org.libreplan.web.calendars.BaseCalendarEditionController; import org.libreplan.web.calendars.IBaseCalendarModel; +import org.libreplan.web.common.*; import org.libreplan.web.common.BaseCRUDController.CRUDControllerState; -import org.libreplan.web.common.ConstraintChecker; -import org.libreplan.web.common.IMessagesForUser; -import org.libreplan.web.common.Level; -import org.libreplan.web.common.MessagesForUser; -import org.libreplan.web.common.OnlyOneVisible; -import org.libreplan.web.common.Util; import org.libreplan.web.common.components.bandboxsearch.BandboxMultipleSearch; import org.libreplan.web.common.components.bandboxsearch.BandboxSearch; import org.libreplan.web.common.components.finders.FilterPair; @@ -98,6 +94,7 @@ import org.zkoss.zul.api.Window; * @author Óscar González Fernández * @author Lorenzo Tilve Álvaro * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ public class WorkerCRUDController extends GenericForwardComposer implements IWorkerCRUDControllerEntryPoints { @@ -105,6 +102,12 @@ public class WorkerCRUDController extends GenericForwardComposer implements @Autowired private IDBPasswordEncoderService dbPasswordEncoderService; + @Autowired + private ILimitsModel limitsModel; + + @Autowired + private IWorkerModel workerModel; + @Resource private IUserCRUDController userCRUD; @@ -112,8 +115,6 @@ public class WorkerCRUDController extends GenericForwardComposer implements private Window editWindow; - private IWorkerModel workerModel; - private IURLHandlerRegistry URLHandlerRegistry; private OnlyOneVisible visibility; @@ -1159,4 +1160,24 @@ public class WorkerCRUDController extends GenericForwardComposer implements return ""; } + public boolean isCreateButtonDisabled(){ + Limits workersTypeLimit = limitsModel.getWorkersType(); + Long workersCount = (Long) workerModel.getRowCount(); + if ( workersTypeLimit != null ) + if ( workersCount >= workersTypeLimit.getValue() ) + return true; + + return false; + } + + public String getShowCreateFormLabel(){ + Limits workersTypeLimit = limitsModel.getWorkersType(); + Long workersCount = (Long) workerModel.getRowCount(); + if ( workersTypeLimit != null ) + if ( workersCount >= workersTypeLimit.getValue() ) + return _("Workers limit reached"); + + return _("Create"); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java index 3ad9a9265..90ca8a30d 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/WorkerModel.java @@ -49,6 +49,8 @@ import org.libreplan.business.planner.daos.IDayAssignmentDAO; import org.libreplan.business.planner.daos.IResourceAllocationDAO; import org.libreplan.business.resources.daos.ICriterionDAO; import org.libreplan.business.resources.daos.IResourceDAO; +import org.libreplan.business.resources.daos.IWorkerDAO; +import org.libreplan.business.resources.daos.WorkerDAO; import org.libreplan.business.resources.entities.Criterion; import org.libreplan.business.resources.entities.CriterionSatisfaction; import org.libreplan.business.resources.entities.CriterionWithItsType; @@ -81,6 +83,7 @@ import org.springframework.transaction.annotation.Transactional; * @author Fernando Bellas Permuy * @author Diego Pino García * @author Manuel Rego Casasnovas + * @author Vova Perebykivskiy */ @Service @Scope(BeanDefinition.SCOPE_PROTOTYPE) @@ -96,6 +99,9 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel @Autowired private IBaseCalendarDAO baseCalendarDAO; + @Autowired + private IWorkerDAO workerDAO; + private final ICriterionType[] laboralRelatedTypes = { PredefinedCriterionTypes.LOCATION, PredefinedCriterionTypes.CATEGORY, PredefinedCriterionTypes.SKILL }; @@ -697,4 +703,10 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel return null; } + @Override + @Transactional(readOnly = true) + public Number getRowCount() { + return workerDAO.getRowCount(); + } + } diff --git a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java index 1f4851106..5e34cd5ea 100644 --- a/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java +++ b/libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java @@ -64,6 +64,8 @@ import org.zkoss.zul.RowRenderer; import org.zkoss.zul.Textbox; import org.zkoss.zul.api.Groupbox; +import static org.libreplan.web.I18nHelper._; + /** * Controller for CRUD actions over a {@link User} * @@ -97,6 +99,8 @@ public class UserCRUDController extends BaseCRUDController implements private Combobox profilesCombo; + private Button showCreateForm; + private IURLHandlerRegistry URLHandlerRegistry; private RowRenderer usersRenderer = new RowRenderer() { @@ -503,7 +507,18 @@ public class UserCRUDController extends BaseCRUDController implements Limits usersTypeLimit = limitsModel.getUsersType(); Long usersCount = (Long) userModel.getRowCount(); if (usersTypeLimit != null) - if ( usersCount >= usersTypeLimit.getValue() ) return true; + if ( usersCount >= usersTypeLimit.getValue() ) + return true; return false; } + + public String getShowCreateFormLabel(){ + Limits usersTypeLimit = limitsModel.getUsersType(); + Long usersCount = (Long) userModel.getRowCount(); + if (usersTypeLimit != null) + if ( usersCount >= usersTypeLimit.getValue() ) + return _("User limit reached"); + + return _("Create"); + } } diff --git a/libreplan-webapp/src/main/resources/i18n/keys.pot b/libreplan-webapp/src/main/resources/i18n/keys.pot index abbce181b..ca28d77ee 100644 --- a/libreplan-webapp/src/main/resources/i18n/keys.pot +++ b/libreplan-webapp/src/main/resources/i18n/keys.pot @@ -9287,3 +9287,15 @@ msgstr "" #: libreplan-webapp/src/main/webapp/dashboard/_pipeline.zul:2 msgid "Show archived column data" msgstr "" + +#: libreplan-webapp/src/main/java/org/libreplan/web/users/UserCRUDController.java:520 +msgid "User limit reached" +msgstr "" + +#: libreplan-webapp/src/main/java/org/libreplan/web/resources/worker/UserCRUDController.java:1178 +msgid "Workers limit reached" +msgstr "" + +#: libreplan-webapp/src/main/java/org/libreplan/web/resources/machine/MachineCRUDController.java:631 +msgid "Machines limit reached" +msgstr "" \ No newline at end of file diff --git a/libreplan-webapp/src/main/webapp/resources/machine/_listMachines.zul b/libreplan-webapp/src/main/webapp/resources/machine/_listMachines.zul index 81b876387..13697807c 100644 --- a/libreplan-webapp/src/main/webapp/resources/machine/_listMachines.zul +++ b/libreplan-webapp/src/main/webapp/resources/machine/_listMachines.zul @@ -40,6 +40,7 @@ diff --git a/libreplan-webapp/src/main/webapp/resources/worker/_list.zul b/libreplan-webapp/src/main/webapp/resources/worker/_list.zul index 66c72cba3..bd1f71b71 100644 --- a/libreplan-webapp/src/main/webapp/resources/worker/_list.zul +++ b/libreplan-webapp/src/main/webapp/resources/worker/_list.zul @@ -42,6 +42,7 @@ diff --git a/libreplan-webapp/src/main/webapp/users/_listUsers.zul b/libreplan-webapp/src/main/webapp/users/_listUsers.zul index c6b887ec0..3de9d2643 100644 --- a/libreplan-webapp/src/main/webapp/users/_listUsers.zul +++ b/libreplan-webapp/src/main/webapp/users/_listUsers.zul @@ -35,7 +35,7 @@