diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
index 40161fa70..70b531228 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/IWorkerModel.java
@@ -144,4 +144,6 @@ public interface IWorkerModel extends IIntegrationEntityModel {
void confirmRemove(Worker worker) throws InstanceNotFoundException;
+ void removeCalendar();
+
}
\ No newline at end of file
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java
index a1b0b53d1..90372a83a 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerCRUDController.java
@@ -506,8 +506,8 @@ public class WorkerCRUDController extends GenericForwardComposer implements
@Override
public void cancel() {
+ workerModel.removeCalendar();
resourceCalendarModel.cancel();
- workerModel.setCalendar(null);
reloadCurrentWindow();
}
diff --git a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
index 660b1445e..4d086baa2 100644
--- a/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
+++ b/navalplanner-webapp/src/main/java/org/navalplanner/web/resources/worker/WorkerModel.java
@@ -33,6 +33,7 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.Validate;
+import org.apache.commons.logging.LogFactory;
import org.joda.time.LocalDate;
import org.navalplanner.business.calendars.daos.IBaseCalendarDAO;
import org.navalplanner.business.calendars.entities.BaseCalendar;
@@ -73,12 +74,16 @@ import org.springframework.transaction.annotation.Transactional;
* Model for worker
* @author Óscar González Fernández
* @author Fernando Bellas Permuy
+ * @author Diego Pino García
*/
@Service
@Scope(BeanDefinition.SCOPE_PROTOTYPE)
@OnConcurrentModification(goToPage = "/resources/worker/worker.zul")
public class WorkerModel extends IntegrationEntityModel implements IWorkerModel {
+ private static final org.apache.commons.logging.Log LOG = LogFactory
+ .getLog(WorkerModel.class);
+
@Autowired
private IResourceDAO resourceDAO;
@@ -88,8 +93,11 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
private final ICriterionType>[] laboralRelatedTypes = {
PredefinedCriterionTypes.LEAVE,
PredefinedCriterionTypes.WORK_RELATIONSHIP };
+
private Worker worker;
+ private ResourceCalendar calendarToRemove = null;
+
private final ICriterionDAO criterionDAO;
private IMultipleCriterionActiveAssigner localizationsAssigner;
@@ -126,6 +134,7 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
@Override
@Transactional
public void save() throws ValidationException {
+ removeCalendarIfNeeded();
resourceDAO.save(worker);
if (worker.getCalendar() != null) {
baseCalendarModel.checkInvalidValuesCalendar(worker.getCalendar());
@@ -137,6 +146,18 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
localizationsAssigner = null;
}
+ private void removeCalendarIfNeeded() {
+ if (calendarToRemove != null) {
+ try {
+ resourceDAO.reattach(worker);
+ baseCalendarDAO.remove(calendarToRemove.getId());
+ calendarToRemove = null;
+ } catch (InstanceNotFoundException e) {
+ LOG.error("Couldn't remove calendar");
+ }
+ }
+ }
+
@Override
@Transactional(readOnly = true)
public List getWorkers() {
@@ -599,4 +620,10 @@ public class WorkerModel extends IntegrationEntityModel implements IWorkerModel
return this.worker;
}
+ @Override
+ public void removeCalendar() {
+ calendarToRemove = worker.getCalendar();
+ worker.setCalendar(null);
+ }
+
}