ItEr40S12RFSoporteRecursosVirtuaisItEr39S12: Added unicity constraint validations
This commit is contained in:
parent
1651ccbc66
commit
117e5b9d51
11 changed files with 132 additions and 9 deletions
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
package org.navalplanner.business.calendars.entities;
|
||||
|
||||
import org.hibernate.validator.AssertTrue;
|
||||
import org.joda.time.LocalDate;
|
||||
import org.navalplanner.business.resources.entities.Resource;
|
||||
|
||||
|
|
@ -65,4 +66,9 @@ public class ResourceCalendar extends BaseCalendar {
|
|||
return super.getWorkableHours(date);
|
||||
}
|
||||
|
||||
@AssertTrue(message = "Capacity must be a positive integer number")
|
||||
public boolean checkCapacityPositiveIntegerNumber() {
|
||||
return (capacity >= 1);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -32,6 +32,7 @@ import org.navalplanner.business.orders.daos.IOrderElementDAO;
|
|||
import org.navalplanner.business.qualityforms.daos.IQualityFormDAO;
|
||||
import org.navalplanner.business.resources.daos.ICriterionTypeDAO;
|
||||
import org.navalplanner.business.resources.daos.IMachineDAO;
|
||||
import org.navalplanner.business.resources.daos.IWorkerDAO;
|
||||
import org.navalplanner.business.users.daos.IProfileDAO;
|
||||
import org.navalplanner.business.users.daos.IUserDAO;
|
||||
import org.navalplanner.business.workreports.daos.IWorkReportTypeDAO;
|
||||
|
|
@ -100,6 +101,9 @@ public class Registry {
|
|||
@Autowired
|
||||
private IOrderElementDAO orderElementDAO;
|
||||
|
||||
@Autowired
|
||||
private IWorkerDAO workerDAO;
|
||||
|
||||
private Registry() {
|
||||
}
|
||||
|
||||
|
|
@ -167,4 +171,8 @@ public class Registry {
|
|||
return getInstance().orderElementDAO;
|
||||
}
|
||||
|
||||
public static IWorkerDAO getWorkerDAO() {
|
||||
return getInstance().workerDAO;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -46,7 +46,7 @@ public interface IWorkerDAO extends IGenericDAO<Worker, Long> {
|
|||
* search worker by name(firstname or surname)/NIF
|
||||
*
|
||||
*/
|
||||
List<Worker> findByNameOrNif(String name);
|
||||
List<Worker> findByNameSubpartOrNifCaseInsensitive(String name);
|
||||
|
||||
/**
|
||||
* Finds a {@link Worker} with the NIF param that should be unique.
|
||||
|
|
@ -74,4 +74,38 @@ public interface IWorkerDAO extends IGenericDAO<Worker, Long> {
|
|||
*/
|
||||
List<HoursWorkedPerWorkerDTO> getWorkingHoursPerWorker(List<Worker> workers, Date startingDate, Date endingDate);
|
||||
|
||||
/**
|
||||
* Return list of workers with a particular firstName
|
||||
* @param name
|
||||
* The string with the name searched
|
||||
* @return The list of {@link Worker} entities found
|
||||
*/
|
||||
List<Worker> findByFirstNameCaseInsensitive(String name);
|
||||
|
||||
/**
|
||||
* Return list of workers with a particular firstName when called from
|
||||
* inside an external transaction
|
||||
* @param name
|
||||
* The string with the name searched
|
||||
* @return The list of {@link Worker} entities found
|
||||
*/
|
||||
List<Worker> findByFirstNameAnotherTransactionCaseInsensitive(String name);
|
||||
|
||||
/**
|
||||
* Return list of workers with a particular set of firstName, surname and
|
||||
* nif values
|
||||
* @param firstname
|
||||
* String value for firstname
|
||||
* @param surname
|
||||
* String value for surname
|
||||
* @param nif
|
||||
* String value for nif
|
||||
* @return The list of {@link Worker} entities found
|
||||
*/
|
||||
List<Worker> findByFirstNameSecondNameAndNif(String firstname,
|
||||
String surname, String nif);
|
||||
|
||||
List<Worker> findByFirstNameSecondNameAndNifAnotherTransaction(
|
||||
String firstname, String surname, String nif);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,6 +33,7 @@ import org.navalplanner.business.resources.entities.Worker;
|
|||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
import org.springframework.context.annotation.Scope;
|
||||
import org.springframework.stereotype.Repository;
|
||||
import org.springframework.transaction.annotation.Propagation;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
/**
|
||||
|
|
@ -69,15 +70,47 @@ public class WorkerDAO extends GenericDAOHibernate<Worker, Long>
|
|||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<Worker> findByNameOrNif(String name) {
|
||||
public List<Worker> findByNameSubpartOrNifCaseInsensitive(String name) {
|
||||
String containsName = "%" + name + "%";
|
||||
return getSession().createCriteria(Worker.class).add(
|
||||
return getSession().createCriteria(Worker.class)
|
||||
.add(
|
||||
Restrictions.or(Restrictions.or(Restrictions.ilike(
|
||||
"firstName", containsName), Restrictions.ilike(
|
||||
"surname", containsName)), Restrictions.like(
|
||||
"nif", containsName))).list();
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<Worker> findByFirstNameCaseInsensitive(String name) {
|
||||
return getSession().createCriteria(Worker.class).add(
|
||||
Restrictions.ilike("firstName", name)).list();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
|
||||
public List<Worker> findByFirstNameAnotherTransactionCaseInsensitive(String name) {
|
||||
return findByFirstNameCaseInsensitive(name);
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
@Override
|
||||
public List<Worker> findByFirstNameSecondNameAndNif(String firstname,
|
||||
String secondname, String nif) {
|
||||
return getSession().createCriteria(Worker.class).add(
|
||||
Restrictions.and(Restrictions.ilike("firstName", firstname),
|
||||
Restrictions.and(Restrictions.ilike("surname",
|
||||
secondname), Restrictions.like("nif", nif))))
|
||||
.list();
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true, propagation = Propagation.REQUIRES_NEW)
|
||||
public List<Worker> findByFirstNameSecondNameAndNifAnotherTransaction(
|
||||
String firstname, String secondname, String nif) {
|
||||
return findByFirstNameSecondNameAndNif(firstname, secondname, nif);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public List<HoursWorkedPerWorkerDTO> getWorkingHoursPerWorker(List<Worker> workers, Date startingDate, Date endingDate) {
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@
|
|||
|
||||
package org.navalplanner.business.resources.entities;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.validator.AssertTrue;
|
||||
import org.navalplanner.business.common.Registry;
|
||||
|
||||
|
||||
/**
|
||||
* This class models a VirtualWorker.
|
||||
|
|
@ -67,4 +72,19 @@ public class VirtualWorker extends Worker {
|
|||
this.observations = observations;
|
||||
}
|
||||
|
||||
|
||||
@AssertTrue(message = "Virtual worker group name must be unique")
|
||||
public boolean checkConstraintUniqueVirtualGroupName() {
|
||||
|
||||
List<Worker> list = Registry.getWorkerDAO()
|
||||
.findByFirstNameAnotherTransactionCaseInsensitive(
|
||||
this.getFirstName());
|
||||
|
||||
if ((isNewObject() && list.isEmpty()) || list.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
return list.get(0).getId().equals(getId());
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,8 +21,12 @@
|
|||
package org.navalplanner.business.resources.entities;
|
||||
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.hibernate.validator.AssertTrue;
|
||||
import org.hibernate.validator.NotEmpty;
|
||||
import org.hibernate.validator.NotNull;
|
||||
import org.navalplanner.business.common.Registry;
|
||||
|
||||
/**
|
||||
* This class models a worker.
|
||||
|
|
@ -111,4 +115,23 @@ public class Worker extends Resource {
|
|||
return !isVirtual();
|
||||
}
|
||||
|
||||
@AssertTrue(message = "Worker with the same firstname, surname and nif previously existed")
|
||||
public boolean checkConstraintUniqueFirstName() {
|
||||
|
||||
if (this instanceof VirtualWorker) {
|
||||
return true;
|
||||
}
|
||||
|
||||
List<Worker> list = Registry.getWorkerDAO()
|
||||
.findByFirstNameSecondNameAndNifAnotherTransaction(firstName,
|
||||
surname, nif);
|
||||
|
||||
if ((isNewObject() && list.isEmpty()) || list.isEmpty()) {
|
||||
return true;
|
||||
} else {
|
||||
return list.get(0).getId().equals(getId());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@
|
|||
|
||||
<joined-subclass name="ResourceCalendar">
|
||||
<key column="BASE_CALENDAR_ID" />
|
||||
<property name="capacity" />
|
||||
<property name="capacity" not-null="true" />
|
||||
</joined-subclass>
|
||||
</class>
|
||||
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ public class ResourceSearchModel implements IResourceSearchModel {
|
|||
if (emptyName) {
|
||||
return new ArrayList<Resource>(resourcesMatchingCriterions);
|
||||
}
|
||||
Set<Resource> result = intersect(workerDAO.findByNameOrNif(name),
|
||||
Set<Resource> result = intersect(workerDAO.findByNameSubpartOrNifCaseInsensitive(name),
|
||||
resourcesMatchingCriterions);
|
||||
result.addAll(intersect(machineDAO.findByNameOrCode(name),
|
||||
resourcesMatchingCriterions));
|
||||
|
|
|
|||
|
|
@ -523,7 +523,6 @@ public class WorkerModel implements IWorkerModel {
|
|||
public void setCapacity(Integer capacity) {
|
||||
if (getCalendar() != null) {
|
||||
getCalendar().setCapacity(capacity);
|
||||
System.out.println("not null" + getCalendar().getCapacity());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@
|
|||
</row>
|
||||
<row visible="@{controller.isVirtualWorker}">
|
||||
<label value="${i18n:_('Capacity')}" />
|
||||
<intbox value="@{controller.virtualWorkerCapacity}" width="100px" constraint="no negative,no zero" />
|
||||
<intbox value="@{controller.virtualWorkerCapacity}" width="100px" constraint="no negative,no zero,no empty" />
|
||||
</row>
|
||||
<row visible="@{controller.isVirtualWorker}">
|
||||
<label value="${i18n:_('Observations')}" />
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ public class WorkerModelTest {
|
|||
workerModel.save();
|
||||
}
|
||||
|
||||
@Test(expected = ValidationException.class)
|
||||
@Test(expected = IllegalStateException.class)
|
||||
public void testWorkerInvalid() throws ValidationException,
|
||||
InstanceNotFoundException {
|
||||
InstanceNotFoundException, IllegalStateException {
|
||||
|
||||
IResourceDAO resourceDAOMock = createMock(IResourceDAO.class);
|
||||
ICriterionDAO criterionServiceMock = createMock(ICriterionDAO.class);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue